ATLAS - это бесплатная замена BLAS / LAPACK, которая настраивается на машину при компиляции. MKL - коммерческая библиотека, поставляемая Intel. Сравнимы ли эти две библиотеки с точки зрения производительности или MKL имеет преимущество в некоторых задачах? Если да, то какие?
linear-algebra
libraries
performance
intel-mkl
Стефано Борини
источник
источник
Ответы:
MKL (от Intel) оптимизирован для процессоров Intel и, вероятно, во многих случаях имеет преимущество. Но он также «знаменит» тем, что выбирает «худшие» пути кода для процессоров AMD, как описано здесь .
источник
BLAS не монолитный. BLAS1 и BLAS2 имеют ограниченную пропускную способность памяти, и вы ничего не можете сделать, чтобы ускорить их за пределами очевидного (развертывание цикла, блокировка кэша для уровня 2). BLAS3 более интересен, и в качестве прототипа здесь используется умножение матрицы на матрицу. Насколько мне известно, GOTOBlas всегда был явным победителем, посмотрите, например, это сравнение или это и это обоснование .
Прошло много лет, и у нас есть проект BLIS . Это лучшая бесплатная альтернатива MKL.
источник
Профиль, не спекулируйте! (также работает как «Тест, не спекулируйте!» )
Нет ничего общего, что можно сказать, это во многом зависит от задач, которые вы хотите выполнить (например, BLAS 1/2/3) и от аппаратного обеспечения, на котором вы работаете (очевидно, Intel MKL не работает на процессорах ARM, для пример, но даже среди процессоров Intel, вы можете ожидать различия в производительности).
Стоит отметить, что AMD также предлагает математические библиотеки, настроенные на их процессоры, AMD Core Math Library . Он не такой многофункциональный, как Intel MKL, но включает BLAS.
источник
Предыдущие ответы на этот вопрос охватывали большинство существенных моментов, но я хочу добавить один комментарий по этому поводу:
Команда MKL имеет уникальную возможность узнать о будущих наборах команд Intel и их реализации в конкретных процессорах. Кроме того, они имеют доступ к проприетарным имитаторам процессоров и опытному оборудованию, которое никто за пределами Intel не может использовать. Таким образом, MKL имеет преимущество в отношении степени знаний о будущих продуктах и когда они получают эти знания. Таким образом, не должно быть слишком удивительно, если они производят лучшие реализации BLAS, чем кто-либо еще, по крайней мере на ранних этапах жизненного цикла продукта с новыми функциями.
С другой стороны, Intel довольно открыто рассказала о наборе инструкций AVX-512 и предоставила эмулятор разработки программного обеспечения Intel® (SDE), который позволяет разработчикам эмулировать инструкции AVX-512 для процессоров, которые не поддерживают их изначально. По этой причине неудивительно, что высококачественные реализации BLAS с открытым исходным кодом доступны для процессоров Intel, которые поддерживают AVX-512 на ранних этапах существования этих продуктов.
Конечно, то, насколько важно иметь детальную информацию о конкретном процессоре по сравнению с основами алгоритмов плотной линейной алгебры, не полностью решено. Следующая цитата решает эту проблему лучше, чем я:
Полное раскрытие: я работаю на Intel.
источник
Я думаю, что основным отличием между библиотеками BLAS вендора и библиотеками BLAS с открытым исходным кодом является время, необходимое для того, чтобы open source поддерживал новейшие аппаратные функции.
Поскольку BLAS широко используется, вендор заинтересован в поддержке новейших аппаратных функций. Например, рассмотрим векторные расширения Intel AVX, которые были представлены с процессором «sandy-bridge» в январе 2011 года. У MKL была поддержка AVX еще до того, как процессор был доступен, но только недавно ATLAS (конец 2011 года) начала развертывать поддержку AVX. ,
Кроме того, если вашему приложению действительно нужна производительность, и перед тем, как вы начнете сравнивать различные библиотеки BLAS или начнете заниматься оптимизацией чего-либо: профилируйте свое приложение. Распространено, что человеческая интуиция не является очень эффективным предиктором профилировщика, по крайней мере, я знаю, что моя нет! Поэтому вместо того, чтобы тратить время на случайную оптимизацию, профилируйте свое приложение и систематически подходите к каждому узкому месту.
источник