Некоторое время назад, когда я начал заниматься линейной алгеброй в C
, я был удивлен, увидев так мало руководств по BLAS
, LAPACK
и другим фундаментальным API
, несмотря на то, что они каким-то образом являются краеугольными камнями многих других библиотек. По этой причине я начал собирать все примеры / руководства, которые смог найти в Интернете для 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
, а не конкретные SDK
. Это просто список спецификаций или языковых расширений, а не реализации или библиотеки. С учетом сказанного, существуют оригинальные реализации Netlib в FORTRAN 77
, на которые большинство людей ссылается (что сбивает с толку! ) если говорить о BLAS
и LAPACK
. Итак, если вы видите много странных вещей при использовании этих API
, это потому, что вы на самом деле вызывали FORTRAN
подпрограммы в C
, а не C
библиотеки и функции. Насколько мне известно, ATLAS
и OpenBLAS
- одни из лучших реализаций BLAS
и LACPACK
. Они соответствуют оригиналу API
, хотя, насколько мне известно, они реализованы на C/C++
с нуля (не уверен!). Существуют реализации GPGPU для API
s с использованием OpenCL
: CLBlast, clBLAS, clMAGMA, ArrayFire и ViennaCL и некоторые другие. Существуют также реализации конкретных производителей, оптимизированные для конкретного оборудования или платформы, и я настоятельно не рекомендую их использовать.
Я рекомендую всем, кто хочет научиться использовать BLAS
и LAPACK
в C
, - сначала изучить FORTRAN-C
смешанное программирование. Этому вопросу посвящена первая глава упомянутого репо, в которой я собрал много разных примеров.
PS Я работал над веткой dev репозитория время от времени. Это кажется немного менее беспорядочным!
person
Foad
schedule
13.02.2017