Mentre fa, quando ho iniziato a fare un po 'di algebra lineare C
, mi è sembrato una sorpresa vedere che ci sono così pochi tutorial per BLAS
, LAPACK
e altri fondamentali API
, nonostante siano in qualche modo i cardini di molte altre biblioteche. Per questo motivo ho iniziato a raccogliere tutti gli esempi / tutorial che ho trovato tutti su Internet per BLAS
, CBLAS
, LAPACK
, CLAPACK
, LAPACKE
, ATLAS
, OpenBLAS
... in questo repo GitHub .
Bene, dovrei avvertirti che come ingegnere meccanico ho poca esperienza nella gestione di un repository git o GitHub. Per prima cosa sembrerà un casino completo per voi ragazzi. Tuttavia, se riesci a superare la struttura disordinata, troverai tutti i tipi di esempi e istruzioni che potrebbero essere di aiuto. Ho provato la maggior parte di loro, per essere sicuro che si compilino. E quelli che non compilano ho citato. Ho modificato molti di loro per essere compilabili con GNU compilers
( gcc
, g++
e gfortran
). Ho creato messaggi MakeFile
che puoi leggere per sapere come chiamare singole Fortran/FORTRAN
routine in un C
o C++
programma. Ho anche messo alcune istruzioni di installazione per Mac e Linux (scusate ragazzi di Windows!). Ne ho anche fatti alcunibash
.sh
file per la compilazione automatica di alcune di queste librerie.
Ma vai alla tua altra domanda: BLAS
e non LAPACK
sono piuttosto API
specifici SDK
. Sono solo un elenco di specifiche o estensioni di linguaggio piuttosto che implementazioni o librerie. Detto questo, ci sono implementazioni originali di Netlib in FORTRAN 77
, che la maggior parte delle persone si riferiscono a (confusamente!) Quando si parla di BLAS
e LAPACK
. Quindi se vedi molte cose strane quando usi questi messaggi API
è perché in realtà chiamavi FORTRAN
routine C
piuttosto che C
librerie e funzioni. ATLAS
e OpenBLAS
sono alcune delle migliori implementazioni di BLAS
e LACPACK
per quanto ne so. Sono conformi all'originaleAPI
, anche se, per quanto ne so, sono implementatiC/C++
da zero (non sono sicuro!). Ci sono implementazioni GPGPU degli utenti API
che usano OpenCL
: CLBlast , clBLAS , clMAGMA , ArrayFire e ViennaCL per citarne alcuni. Esistono anche implementazioni specifiche del fornitore ottimizzate per hardware o piattaforma specifici, che scoraggio fortemente chiunque a usarle.
La mia raccomandazione a chiunque voglia imparare usando BLAS
e LAPACK
in C
è di imparare FORTRAN-C
prima la programmazione mista. Il primo capitolo del repository menzionato è dedicato a questo argomento e lì ho raccolto molti esempi diversi.
PS Ho lavorato sul ramo dev del repository di volta in volta. Sembra leggermente meno disordinato!