Alors qu'il ya, quand je commencé à faire l' algèbre linéaire C
, il est venu à moi comme une surprise de voir qu'il ya si peu de tutoriels pour BLAS
, LAPACK
et d' autres fondamentaux API
s, en dépit du fait qu'ils sont en quelque sorte la pierre angulaire de nombreuses autres bibliothèques. Pour cette raison , j'ai commencé à recueillir tous les exemples / tutoriels que je pourrais trouver tout sur Internet pour BLAS
, CBLAS
, LAPACK
, CLAPACK
, LAPACKE
, ATLAS
, OpenBLAS
... dans ce repo Github .
Eh bien, je dois vous avertir qu'en tant qu'ingénieur en mécanique, j'ai peu d'expérience dans la gestion d'un tel référentiel git ou GitHub. Cela vous semblera d'abord un gâchis complet. Cependant, si vous parvenez à surmonter la structure désordonnée, vous trouverez toutes sortes d'exemples et d'instructions qui pourraient être utiles. J'ai essayé la plupart d'entre eux, pour être sûr qu'ils compilent. Et ceux qui ne compilent pas, je les ai mentionnés. J'ai modifié beaucoup d'entre eux pour être compilables avec GNU compilers
( gcc
, g++
et gfortran
). J'ai créé des MakeFile
s que vous pouvez lire pour savoir comment appeler des Fortran/FORTRAN
routines individuelles dans un programme C
or C++
. J'ai également mis quelques instructions d'installation pour Mac et Linux (désolé les gars de Windows!). J'en ai aussi faitbash
.sh
fichiers pour la compilation automatique de certaines de ces bibliothèques.
Mais pour revenir à votre autre question: BLAS
et ne LAPACK
sont API
pas des SDK
articles spécifiques . Ce ne sont qu'une liste de spécifications ou d'extensions de langage plutôt que des implémentations ou des bibliothèques. Cela dit, il existe des implémentations originales de Netlib dans FORTRAN 77
, auxquelles la plupart des gens se réfèrent (de manière déroutante!) Lorsqu'ils parlent de BLAS
et LAPACK
. Donc, si vous voyez beaucoup de choses étranges lorsque vous utilisez ces API
s, c'est que vous FORTRAN
appeliez en fait des routines C
plutôt que des C
bibliothèques et des fonctions. ATLAS
et OpenBLAS
sont quelques-unes des meilleures implémentations de BLAS
et LACPACK
pour autant que je sache. Ils sont conformes à l'original API
, même si, à ma connaissance, ils sont mis en œuvre surC/C++
à partir de zéro (pas sûr!). Il existe des implémentations GPGPU des API
s utilisant OpenCL
: CLBlast , clBLAS , clMAGMA , ArrayFire et ViennaCL pour n'en citer que quelques-unes. Il existe également des implémentations spécifiques aux fournisseurs optimisées pour un matériel ou une plate-forme spécifique, que je déconseille fortement à quiconque de les utiliser.
Ma recommandation à tous ceux qui veulent apprendre à utiliser BLAS
et LAPACK
en C
est d'apprendre d' FORTRAN-C
abord la programmation mixte. Le premier chapitre du repo mentionné est consacré à cette question et j'y ai rassemblé de nombreux exemples différents.
PS J'ai travaillé de temps en temps sur la branche dev du référentiel . Cela semble un peu moins salissant!