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, LAPACKe 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 MakeFileche puoi leggere per sapere come chiamare singole Fortran/FORTRANroutine in un Co 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: BLASe non LAPACKsono piuttosto APIspecifici 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 BLASe LAPACK. Quindi se vedi molte cose strane quando usi questi messaggi APIè perché in realtà chiamavi FORTRANroutine Cpiuttosto che Clibrerie e funzioni. ATLASe OpenBLASsono alcune delle migliori implementazioni di BLASe LACPACKper 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 APIche 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 BLASe LAPACKin Cè di imparare FORTRAN-Cprima 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!