Какова связь между BLAS, LAPACK и ATLAS

Я не понимаю, как BLAS, LAPACK и ATLAS связаны и как я должен использовать их вместе! Я просматривал все их руководства и у меня есть общее представление о BLAS и LAPACK и о том, как использовать их с очень немногими примерами, которые я нахожу, но я не могу найти реальных примеров использования ATLAS, чтобы увидеть, как они связаны с эти двое.

Я пытаюсь выполнить низкоуровневую работу над матрицами, и мой основной язык - C. Сначала я хотел использовать GSL, но он говорит, что если вы хотите наилучшую производительность, вы должны использовать BLAS и ATLAS. Есть ли хорошая веб-страница, дающая хорошие примеры того, как использовать их (в C) вместе? Другими словами, я ищу учебник по использованию этих трех (или любого их подмножества!). Короче я в замешательстве!

Ответ 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. Там бит больше, чем это, но я надеюсь, что он отвечает на вопрос.