Какова связь между BLAS, LAPACK и ATLAS
Я не понимаю, как BLAS, LAPACK и ATLAS связаны и как я должен использовать их вместе! Я просматривал все их руководства и у меня есть общее представление о BLAS и LAPACK и о том, как использовать их с очень немногими примерами, которые я нахожу, но я не могу найти реальных примеров использования ATLAS, чтобы увидеть, как они связаны с эти двое.
Я пытаюсь выполнить низкоуровневую работу над матрицами, и мой основной язык - C. Сначала я хотел использовать GSL, но он говорит, что если вы хотите наилучшую производительность, вы должны использовать BLAS и ATLAS. Есть ли хорошая веб-страница, дающая хорошие примеры того, как использовать их (в C) вместе? Другими словами, я ищу учебник по использованию этих трех (или любого их подмножества!). Короче я в замешательстве!
Ответы
Ответ 1
Я осмотрелся и мог найти только эти два веб-страницы с помощью простых примеров. Я хочу, чтобы больше людей добавляли примеры кодов для использования этих библиотек.
http://www.seehuhn.de/pages/linear
http://www.lindonslog.com/programming/atlas-blas-lapack-linear-algebra-libraries/
Ответ 2
BLAS представляет собой набор низкоуровневых матричных и векторных арифметических операций ( "умножьте вектор на скаляр", "умножьте две матрицы и добавьте в третью матрицу" и т.д.).
LAPACK - это набор операций линейной алгебры более высокого уровня. Такие вещи, как матричные факторизации (LU, LLt, QR, SVD, Schur и т.д.), Которые используются для таких вещей, как "найти собственные значения матрицы" или "найти сингулярные значения матрицы" или "решить линейную систему". LAPACK построен поверх BLAS; многие пользователи LAPACK используют только интерфейсы LAPACK и вообще не должны знать о BLAS. LAPACK обычно компилируется отдельно от BLAS и может использовать любую высоко оптимизированную реализацию BLAS, доступную вам.
ATLAS - это портативная разумная реализация интерфейсов BLAS, которая также реализует несколько наиболее часто используемых операций LAPACK.
То, что вы должны использовать, в некоторой степени зависит от того, что вы пытаетесь сделать и какую платформу используете вы. Однако вы не ошибетесь в использовании "ATLAS + LAPACK".
Ответ 3
Когда назад, когда я начал делать некоторую линейную алгебру в C
, меня удивило то, что так мало учебных пособий по BLAS
, LAPACK
и другим фундаментальным API
, несмотря на то, что они являются краеугольными камнями многих других библиотек., По этой причине я начал собирать все примеры/учебные пособия, которые я мог найти по всему Интернету для BLAS
, CBLAS
, LAPACK
, CLAPACK
, LAPACKE
, ATLAS
, OpenBLAS
... в этом OpenBLAS
Github.
Что ж, я должен предупредить вас, что как инженер-механик у меня мало опыта в управлении таким git-репозиторием или GitHub. Сначала вам это покажется полным беспорядком. Однако, если вам удастся преодолеть грязную структуру, вы найдете все виды примеров и инструкций, которые могут помочь. Я попробовал большинство из них, чтобы убедиться, что они компилируются. А те, которые не компилируются, я упоминал. Я изменил многие из них, чтобы их можно было компилировать с GNU compilers
(gcc
, g++
и gfortran
). Я сделал MakeFile
который вы можете прочитать, чтобы узнать, как вы можете вызывать отдельные подпрограммы Fortran/FORTRAN
программе на C
или C++
. Я также поместил некоторые инструкции по установке для Mac и Linux (извините, ребята, Windows!). Я также сделал несколько файлов bash
.sh
для автоматической компиляции некоторых из этих библиотек.
Но перейдем к другому вопросу: BLAS
и LAPACK
- это скорее API
а не специфические SDK
. Это просто список спецификаций или расширений языка, а не реализации или библиотеки. С учетом сказанного, есть оригинальные реализации Netlib в FORTRAN 77
, на которые большинство людей ссылаются (смущенно!), Говоря о BLAS
и LAPACK
. Поэтому, если вы видите много странных вещей при использовании этих API
это потому, что вы фактически FORTRAN
подпрограммы FORTRAN
в C
а не в библиотеках и функциях C
Насколько мне известно, ATLAS
и OpenBLAS
являются одними из лучших реализаций BLAS
и LACPACK
. Они соответствуют исходному API
, хотя, насколько мне известно, они реализованы на C/C++
с нуля (не уверен!). Существуют реализации API
GPGPU с использованием OpenCL
: CLBlast, clBLAS, clMAGMA, ArrayFire и ViennaCL, чтобы упомянуть некоторые. Существуют также реализации для конкретных поставщиков, оптимизированные для конкретного оборудования или платформы, поэтому я настоятельно рекомендую всем их использовать.
Я рекомендую всем, кто хочет научиться использовать BLAS
и LAPACK
в C
сначала изучить смешанное программирование на FORTRAN-C
. Первая глава упомянутого репо посвящена этому вопросу, и там я собрал много разных примеров.
PS Время от времени я работал над веткой разработчика репозитория. Это кажется немного менее грязным!
Ответ 4
ATLAS уже устарел. Он был разработан в то время, когда считалось, что оптимизация BLAS для различных платформ была невозможна для людей, и в результате автогенерация и автонастройка были подходящим способом.
В начале 2000-х годов появился Казушиге Гото, который показал, как высокоэффективные реализации можно кодировать вручную. Вам может понравиться интересная статья в New York Times: https://www.nytimes.com/2005/11/28/technology/writing-the-fastest-code-by-hand-for-fun-a-human- computer-keep.html.
Казушиге, с одной стороны, лучше понимал теорию высокопроизводительных реализаций матрично-матричного умножения, а с другой стороны, разработал их лучше. Его подход, который на современных процессорах, как правило, имеет самые высокие показатели, заключается не в том пространстве поиска, которое настраивает ATLAS. Следовательно, ATLAS по своей природе уступает. Казушиге внедрение BLAS стало известно как GotoBLAS. Он был разветвлен как OpenBLAS, когда он присоединился к индустрии.
Идеи, лежащие в основе GotoBLAS, были реорганизованы в новую реализацию - инфраструктуру BLIS-подобной библиотеки для создания библиотек (BLIS) (https://github.com/flame/blis), которая реализует те же алгоритмы, но структурирует код так, чтобы меньше Должен быть специально реализован для новой архитектуры. BLIS кодируется в C.
Это обсуждение показывает, что существует множество реализаций BLAS. Сами BLAS являются стандартом де-факто для интерфейса. ATLAS был когда-то современным. Это больше не
Ответ 5
Мой googling для отношения между BLAS, ATLAS, LAPACK привел меня на эту страницу. В то время как вопрос уже старый, и ответ Стивена Канона был очень полезен для первоначального понимания, я хотел бы направить других с тем же вопросом на Википедия в BLAS. Страница и ссылки внутри были очень полезны для меня.
Ответ 6
Насколько мне известно, и после работы с репозиторием ATLAS, похоже, что он включает повторную реализацию BLAS на C. Там бит больше, чем это, но я надеюсь, что он отвечает на вопрос.