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, LAPACKet d' autres fondamentaux APIs, 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 MakeFiles que vous pouvez lire pour savoir comment appeler des Fortran/FORTRANroutines individuelles dans un programme Cor 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: BLASet ne LAPACKsont APIpas des SDKarticles 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 BLASet LAPACK. Donc, si vous voyez beaucoup de choses étranges lorsque vous utilisez ces APIs, c'est que vous FORTRANappeliez en fait des routines Cplutôt que des Cbibliothèques et des fonctions. ATLASet OpenBLASsont quelques-unes des meilleures implémentations de BLASet LACPACKpour 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 APIs 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 BLASet LAPACKen Cest d'apprendre d' FORTRAN-Cabord 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!