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