Spec-Zone.ru › Eigen3

Использование Intel® MKL из Eigen

Начиная с версии Eigen 3.1 и выше, пользователи могут воспользоваться встроенными оптимизациями Intel® Math Kernel Library (MKL) при установленной копии Intel MKL 10.3 (или более поздней версии).

Intel MKL предоставляет высокооптимизированные многопотоковые математические функции для архитектур x86. Intel MKL доступен в Linux, Mac и Windows для архитектур Intel64 и IA32.

Примечание
Intel® MKL — это проприетарное программное обеспечение, и пользователи несут ответственность за приобретение или регистрацию лицензий Intel MKL для своих продуктов, в том числе сообщества (бесплатные) лицензии. Кроме того, лицензия на продукт пользователя должна разрешать связывание с проприетарным программным обеспечением, что исключает любые немодифицированные версии GPL.

Использование Intel MKL через Eigen просто:

  1. определите макрос EIGEN_USE_MKL_ALL перед включением любого заголовка Eigen
  2. свяжите свою программу с библиотеками MKL (см. руководство по связыванию MKL)
  3. в 64-битной системе необходимо использовать интерфейс LP64 (а не ILP64)

При этом ряд алгоритмов Eigen будет незаметно заменён вызовами процедур Intel MKL. Эти замены применяются только для динамических или достаточно больших объектов с одним из следующих четырёх стандартных скалярных типов: float, double, complex<float>, и complex<double>. Операции с другими скалярными типами или смешивание вещественных и комплексных чисел будут продолжать использовать встроенные алгоритмы.

Кроме того, вы можете выбрать, какие части будут заменены, определив один или несколько следующих макросов:

EIGEN_USE_BLAS Включает использование внешних процедур BLAS уровня 2 и 3
EIGEN_USE_LAPACKE Включает использование внешних процедур Lapack через C-интерфейс Lapacke к Lapack
EIGEN_USE_LAPACKE_STRICT То же, что и EIGEN_USE_LAPACKE, но алгоритмы с меньшей надёжностью отключены.
В настоящее время это касается только JacobiSVD, которое в противном случае было бы заменено на gesvd, что менее надёжно, чем вращения Якоби.
EIGEN_USE_MKL_VML Включает использование Intel VML (векторные операции)
EIGEN_USE_MKL_ALL Определяет EIGEN_USE_BLAS, EIGEN_USE_LAPACKE, и EIGEN_USE_MKL_VML

Макросы EIGEN_USE_BLAS и EIGEN_USE_LAPACKE* можно комбинировать с EIGEN_USE_MKL, чтобы явно указать Eigen, что основой BLAS/Lapack является Intel MKL. Основной эффект заключается в активации функции прямого вызова MKL (MKL_DIRECT_CALL). Это может помочь увеличить производительность некоторых процедур MKL BLAS (?GEMM, ?GEMV, ?TRSM, ?AXPY и ?DOT) и LAPACK (LU, Холецкого и QR) для очень маленьких матриц. Прямой вызов MKL можно отключить, определив EIGEN_MKL_NO_DIRECT_CALL.

Обратите внимание, что бэкенды BLAS и LAPACKE могут быть включены для любых совместимых с F77 библиотек BLAS и LAPACK. Подробности см. на этой странице.

Наконец, решатель разреженных систем PARDISO, поставляемый с Intel MKL, может использоваться через классы PardisoLU, PardisoLLT и PardisoLDLT модуля PardisoSupport.

В следующей таблице подведён итог функций, охватываемых EIGEN_USE_MKL_VML:

Пример кода Процедуры MKL
v2=v1.array().sin();
v2=v1.array().asin();
v2=v1.array().cos();
v2=v1.array().acos();
v2=v1.array().tan();
v2=v1.array().exp();
v2=v1.array().log();
v2=v1.array().sqrt();
v2=v1.array().square();
v2=v1.array().pow(1.5);
v?Sin
v?Asin
v?Cos
v?Acos
v?Tan
v?Exp
v?Ln
v?Sqrt
v?Sqr
v?Powx

В примерах v1 и v2 — плотные векторы.

Ссылки

  • Intel MKL можно приобрести и загрузить здесь.
  • Intel MKL также входит в состав Intel Composer XE.

© Eigen.
Licensed under the MPL2 License.
https://eigen.tuxfamily.org/dox/TopicUsingIntelMKL.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API