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

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

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


person makhlaghi    schedule 25.07.2013    source источник
comment
См. Также scicomp.stackexchange.com/questions/8052/   -  person High Performance Mark    schedule 25.07.2013


Ответы (4)


BLAS - это набор низкоуровневых матричных и векторных арифметических операций («умножить вектор на скаляр», «умножить две матрицы и добавить к третьей матрице» и т. Д.).

LAPACK - это набор операций линейной алгебры более высокого уровня. Такие вещи, как факторизации матриц (LU, LLt, QR, SVD, Schur и т. Д.), Которые используются для таких вещей, как «найти собственные значения матрицы», или «найти сингулярные значения матрицы», или «решить линейную систему. ». LAPACK построен на основе BLAS; многие пользователи LAPACK только используют интерфейсы LAPACK, и им вообще не нужно знать о BLAS. LAPACK обычно компилируется отдельно от BLAS и может использовать любую имеющуюся у вас высокооптимизированную реализацию BLAS.

ATLAS - это достаточно хорошая переносимая реализация интерфейсов BLAS, которая также реализует несколько наиболее часто используемых операций LAPACK.

То, что «вам следует использовать», в некоторой степени зависит от деталей того, что вы пытаетесь сделать, и от того, какую платформу вы используете. Однако вы не ошибетесь, говоря «используйте ATLAS + LAPACK».

person Stephen Canon    schedule 25.07.2013
comment
Спасибо за объяснения. Знаете ли вы примеры, КАК использовать ATLAS + LAPACK? Мне нужно увидеть несколько примеров, чтобы понять, как их использовать! Я понимаю, для чего они нужны, и теорию того, что они делают, но я с трудом могу найти на C примеры того, как реализовать на практике. - person makhlaghi; 25.07.2013
comment
@astroboy: можешь дать мне немного информации о том, что ты на самом деле пытаешься сделать? В особенности LAPACK - это огромная библиотека. - person Stephen Canon; 25.07.2013
comment
Для простоты предположим, что у меня есть матрица, и я хочу умножить ее на определенное значение. Как я могу сделать это, объединив ATLAS и (LAPACK или BLAS) в C? Я просто хочу посмотреть, как реализовать любую из этих функций. В netlib.org/lapack/lapacke.html есть несколько примеров, но там нет упоминание об АТЛАСе! - person makhlaghi; 25.07.2013
comment
BLAS - это интерфейс? Мол, все реализации BLAS должны соответствовать одной спецификации BLAS, чтобы их можно было использовать взаимозаменяемо? Из того, что я читал, официального интерфейса BLAS нет, просто реализации имитируют друг друга. - person Minh Nghĩa; 09.11.2019
comment
@ MinhNghĩa: существует стандартный netlib.org/blas/blast-forum , но (а) нет принудительного исполнения - стандарт без набора тестов на самом деле не является стандартом - и (б) я не думаю, что кто-то реализует полный набор интерфейсов, описанных в этом документе. Это, мм, амбициозно. - person Stephen Canon; 10.11.2019
comment
скажем, у меня есть libnvblas.so, связанный в R через ld_preload. Нужно ли мне беспокоиться об использовании с ним стандартного лэпака? Например. Я читал, что CULA (устаревшая из-за магмы) имеет лапак, который работает с nvidia. У Epyc есть libflame. Хотя я не могу заставить libflame работать с R. Но нужно ли мне беспокоиться? Похоже (из того, что вы говорите). LApack будет использовать любую библиотеку BLAS, которая есть у меня под капотом. Так почему даже оба с разными лапаками? - person thistleknot; 15.10.2020

Некоторое время назад, когда я начал заниматься линейной алгеброй в C, я был удивлен, увидев так мало руководств по BLAS, LAPACK и другим фундаментальным API, несмотря на то, что они каким-то образом являются краеугольными камнями многих других библиотек. По этой причине я начал собирать все примеры / руководства, которые смог найти в Интернете для BLAS, CBLAS, LAPACK, CLAPACK, LAPACKE, ATLAS, OpenBLAS ... в это репозиторий Github.

Что ж, я должен вас предупредить, что как инженер-механик у меня мало опыта в управлении таким репозиторием git или GitHub. Сначала это покажется вам полным беспорядком, ребята. Однако, если вам удастся преодолеть запутанную структуру, вы найдете всевозможные примеры и инструкции, которые могут помочь. Я перепробовал большинство из них, чтобы убедиться, что они компилируются. А те, которые не компилируются, я уже упоминал. Я модифицировал многие из них, чтобы их можно было компилировать с GNU compilers (gcc, g++ и gfortran). Я сделал MakeFiles, которые вы можете прочитать, чтобы узнать, как можно вызывать отдельные Fortran/FORTRAN подпрограммы в C или C++ программах. Я также поместил несколько инструкций по установке для Mac и Linux (извините, ребята, Windows!). Я также сделал несколько bash .sh файлов для автоматической компиляции некоторых из этих библиотек.

Но перейдем к вашему другому вопросу: BLAS и LAPACK скорее API, а не конкретные SDK. Это просто список спецификаций или языковых расширений, а не реализации или библиотеки. С учетом сказанного, существуют оригинальные реализации Netlib в FORTRAN 77, на которые большинство людей ссылается (что сбивает с толку! ) если говорить о BLAS и LAPACK. Итак, если вы видите много странных вещей при использовании этих API, это потому, что вы на самом деле вызывали FORTRAN подпрограммы в C, а не C библиотеки и функции. Насколько мне известно, ATLAS и OpenBLAS - одни из лучших реализаций BLAS и LACPACK. Они соответствуют оригиналу API, хотя, насколько мне известно, они реализованы на C/C++ с нуля (не уверен!). Существуют реализации GPGPU для APIs с использованием OpenCL: CLBlast, clBLAS, clMAGMA, ArrayFire и ViennaCL и некоторые другие. Существуют также реализации конкретных производителей, оптимизированные для конкретного оборудования или платформы, и я настоятельно не рекомендую их использовать.

Я рекомендую всем, кто хочет научиться использовать BLAS и LAPACK в C, - сначала изучить FORTRAN-C смешанное программирование. Этому вопросу посвящена первая глава упомянутого репо, в которой я собрал много разных примеров.

PS Я работал над веткой dev репозитория время от времени. Это кажется немного менее беспорядочным!

person Foad    schedule 13.02.2017
comment
Страница LAPACK в Википедии начинается с LAPACK (Linear Algebra Package) - стандартной библиотеки программного обеспечения. Вы говорите, что это неверно, поскольку это спецификация API, а не реализация? - person Noah_S; 17.08.2017
comment
После некоторого исследования кажется, что LAPACK и BLAS на самом деле являются реализациями. Из часто задаваемых вопросов NetLib по BLAS: BLAS (подпрограммы базовой линейной алгебры) - это процедуры, которые предоставляют стандартные строительные блоки для выполнения основных векторных и матричных операций. Со страницы LAPACK на GitHub: LAPACK - это библиотека подпрограмм Fortran. Исходя из этого, а также после прочтения проекта LAPACK GitHub, у меня сложилось впечатление, что BLAS и LAPACK на самом деле являются реализациями - LAPACK основывается на BLAS для обеспечения более сложных функций. - person Noah_S; 17.08.2017
comment
@Noah_S Я бы не стал использовать Википедию в качестве справочника, но, насколько мне известно, существует несколько реализаций LAPACK. Я думаю, что теперь называть это API точнее. но, пожалуйста, поправьте меня, если я ошибаюсь. - person Foad; 17.08.2017
comment
Я думаю, что часть путаницы заключается в том, что BLAS - это API / спецификация, но существует также эталонная реализация BLAS (от Netlib), которая также называется просто библиотекой BLAS. Обычно, когда люди говорят BLAS, они имеют в виду API, потому что эталонная реализация не оптимизирована, поэтому на практике / в отрасли она мало используется. ATLAS обеспечивает оптимизированную реализацию нескольких подпрограмм LAPACK, а затем при желании извлекает остальные из самого LAPACK для создания полной реализации LAPACK во встроенных файлах библиотеки ATLAS. - person Andrew Janke; 24.01.2019
comment
@Noah_S Нет никакого противоречия, каждая библиотека имеет API, который позволяет повторно реализовать фактическую функциональность, оставаясь совместимым с API, и именно это произошло с LAPACK. - person Andrey; 04.05.2020

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, были преобразованы в новую реализацию, платформу BLAS-подобного программного обеспечения для создания библиотек (BLIS) (https://github.com/flame/blis), который реализует те же алгоритмы, но структурирует код так, что для новой архитектуры нужно меньше настраивать. BLIS кодируется на C.

Это обсуждение показывает, что существует множество реализаций BLAS. Сами BLAS являются стандартом де-факто для интерфейса. ATLAS когда-то был самым современным оборудованием. Это уже не так.

person Robert van de Geijn    schedule 03.09.2018

Насколько мне известно, и после работы с репозиторием ATLAS, кажется, что он включает повторную реализацию BLAS на C. Это немного больше, чем это, но я надеюсь, что это ответит на вопрос.

person cdcdcd    schedule 09.03.2017