2013-07-25 5 views
93

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

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

+1

См. Также http://scicomp.stackexchange.com/questions/8052/what-is-the-relationship-of-blas-lapack-and-other-linear-algebra-libraries –

ответ

8

Я осмотрелся и мог найти только эти два веб-страницы с некоторыми простыми примерами. Я хочу, чтобы больше людей добавляли примеры кодов для использования этих библиотек.

http://www.seehuhn.de/pages/linear

http://www.lindonslog.com/programming/atlas-blas-lapack-linear-algebra-libraries/

+2

, пожалуйста, взгляните на это репо: https://github.com/Foadsf/Cmathtuts здесь я собрал много примеров. почти все, что я мог найти в Интернете, в том числе те, которые вы упомянули в этих сообщениях. – Foad

112

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

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

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

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

+0

Спасибо за объяснения. Знаете ли вы какие-либо примеры того, как использовать ATLAS + LAPACK? Мне нужно увидеть несколько примеров, чтобы понять, как их использовать! Я понимаю, для чего они нужны, и теория того, что они делают, но я вряд ли смогу найти примеры на C о том, как реализовать на практике. – makhlaghi

+1

@astroboy: можете ли вы дать мне некоторую информацию о том, что вы на самом деле пытаетесь сделать? LAPACK - это огромная библиотека. –

+0

Для простоты, скажем, у меня есть матрица, и я хочу умножить ее на определенное значение. Как я могу это сделать, комбинируя ATLAS и (LAPACK или BLAS) в C? Я просто хочу посмотреть, как реализовать любую из этих функций. Есть несколько примеров в http://www.netlib.org/lapack/lapacke.html, но нет упоминания об ATLAS! – makhlaghi

2

Мои прибегая к помощи соотношения между BLAS, ATLAS, LAPACK привел меня к этой странице. Хотя вопрос уже старый, и ответ Стивена Канон был очень полезен для первоначального понимания, я хотел бы направить других с тем же вопросом на вопрос Wikipedia entry on BLAS. Страница и ссылки внутри были очень полезны для меня.

+0

Ссылка на вики представляет собой простую ссылку, но в ней внимание сосредоточено на блазах и атласе. – javadba

21

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

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

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

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

+5

Я никогда не понимал враждебности некоторых пользователей SO. Я провел недели, собирая эти примеры, которые действительно могли бы помочь некоторым людям, и, наконец, у меня достаточно очков, чтобы ответить на эти вопросы, некоторые люди приходят и опускают меня. Я не понимаю. Если я допустил ошибки в этом ответе, вы можете просто прокомментировать и сообщить мне, чтобы я мог редактировать и улучшать. или вы можете предлагать изменения, и я могу рассмотреть и применить его. – Foad

+2

Foad это старый комментарий, но я ценю ваши усилия и ваши разочарования. Я тоже не понимаю враждебности.Я думаю, что некоторые люди используют SO в качестве маршрута для работы и так ревниво решают его нисходящим голосованием любого, кто работает на том, что они видят в качестве своего дерна. – cdcdcd

+1

@cdcdcd Приношу свои извинения за поздний ответ и спасибо за ваши добрые слова. Я полностью согласен с тобой. Конечно, как новичок SO-пользователь, у меня может быть много проблем для работы, но downvoting мне, не давая мне рекомендации по улучшению, довольно разрушительно. Я смотрю вперед на день, когда мы становимся более терпимыми и терпеливыми друг к другу. – Foad

0

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