В то время назад, когда я начал делать некоторую линейную алгебру в 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-веткой репозитория . Это кажется немного менее беспорядочным!