Il y a longtemps, quand j'ai commencé à faire de l'algèbre linéaire en C
j'ai été surpris de constater qu'il y avait si peu de tutoriels pour BLAS
, LAPACK
et d'autres éléments fondamentaux API
malgré le fait qu'ils sont en quelque sorte les pierres angulaires de nombreuses autres bibliothèques. C'est pour cette raison que j'ai commencé à collecter tous les exemples/tutoriels que je pouvais trouver partout sur internet pour BLAS
, CBLAS
, LAPACK
, CLAPACK
, LAPACKE
, ATLAS
, OpenBLAS
... en ce dépôt Github .
Je dois vous prévenir qu'en tant qu'ingénieur en mécanique, j'ai peu d'expérience dans la gestion d'un tel dépôt git ou GitHub. Cela vous paraîtra d'abord comme un désordre complet. Cependant, si vous parvenez à surmonter cette structure désordonnée, vous trouverez toutes sortes d'exemples et d'instructions qui pourraient vous ê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 qu'ils soient compilables avec GNU compilers
( gcc
, g++
y gfortran
). J'ai fait MakeFile
que vous pouvez lire afin d'apprendre comment vous pouvez appeler des Fortran/FORTRAN
routines dans un C
o C++
programme. J'ai aussi mis des instructions d'installation pour mac et linux (désolé les gars de Windows !). J'ai aussi fait quelques bash
.sh
pour la compilation automatique de certaines de ces bibliothèques.
Mais pour en revenir à votre autre question : BLAS
y LAPACK
sont plutôt API
s non spécifique SDK
s. Ils 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 par Netlib en FORTRAN 77
à laquelle la plupart des gens se réfèrent (de manière confuse !) lorsqu'ils parlent de l'UE. BLAS
y LAPACK
. Donc, si vous voyez beaucoup de choses étranges lorsque vous utilisez ces API
c'est parce que vous appeliez en fait FORTRAN
routines dans C
plutôt que C
les bibliothèques et les fonctions. ATLAS
y OpenBLAS
sont parmi les meilleures mises en œuvre de BLAS
y LACPACK
pour autant que je sache. Ils sont conformes à l'original API
même si, à ma connaissance, ils sont implémentés sur C/C++
à partir de zéro (je ne suis pas sûr !). Il existe des implémentations GPGPU de la fonction API
s en utilisant OpenCL
: CLBlast , clBLAS , clMAGMA , ArrayFire y VienneCL pour en citer quelques-uns. Il existe également des implémentations spécifiques aux fournisseurs, optimisées pour un matériel ou une plate-forme spécifique, et je déconseille fortement à quiconque de les utiliser.
Je recommande à tous ceux qui veulent apprendre à utiliser BLAS
y LAPACK
en C
est d'apprendre FORTRAN-C
la programmation mixte d'abord. Le premier chapitre du repo mentionné est consacré à cette question et j'y ai rassemblé de nombreux exemples différents.
P.S. J'ai travaillé sur la branche dev du référentiel de temps en temps. C'est un peu moins salissant !