Использование 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 просто:
- определите макрос
EIGEN_USE_MKL_ALLперед включением любого заголовка Eigen - свяжите свою программу с библиотеками MKL (см. руководство по связыванию MKL)
- в 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