Jakiś czas temu, kiedy zacząłem robić trochę algebry liniowej w C
, przyszedł do mnie zaskoczeniem, aby zobaczyć tak mało tutoriale do BLAS
, LAPACK
i inne podstawowe API
s, pomimo faktu, że są one w jakiś sposób podwaliny wielu innych bibliotekach. Z tego powodu zacząłem zbieranie wszystkich przykładów / samouczki udało mi się znaleźć w całym internecie BLAS
, CBLAS
, LAPACK
, CLAPACK
, LAPACKE
, ATLAS
, OpenBLAS
... w tym GitHub repo .
Cóż, powinienem cię ostrzec, że jako inżynier mechanik mam niewielkie doświadczenie w zarządzaniu takim repozytorium git czy GitHub. Na początku będzie to dla was kompletny bałagan. Jeśli jednak uda Ci się pokonać bałaganiarską strukturę, znajdziesz wiele przykładów i instrukcji, które mogą być pomocne. Wypróbowałem większość z nich, aby mieć pewność, że się kompilują. A te, które się nie kompilują, wspomniałem. I zostały zmodyfikowane wielu z nich będzie compilable z GNU compilers
( gcc
, g++
i gfortran
). Zrobiłem te, MakeFile
które możesz przeczytać, aby dowiedzieć się, jak wywoływać poszczególne Fortran/FORTRAN
procedury w programie C
lub C++
. Umieściłem również instrukcje instalacji dla Maca i Linuksa (przepraszam, chłopaki od Windows!) Zrobiłem też trochębash
.sh
pliki do automatycznej kompilacji niektórych z tych bibliotek.
Ale przechodząc do drugiego pytania: BLAS
i LAPACK
raczej API
nie są to konkretne pytania SDK
. To tylko lista specyfikacji lub rozszerzeń językowych, a nie implementacje lub biblioteki. Mając to na uwadze , istnieją oryginalne implementacje Netlib w programie FORTRAN 77
, do których większość ludzi odnosi się ( myląco !), Gdy mówi o BLAS
i LAPACK
. Więc jeśli widzisz wiele dziwnych rzeczy podczas korzystania z tych funkcji, API
jest to spowodowane tym, że w rzeczywistości wywoływałeś FORTRAN
procedury, C
a nie C
biblioteki i funkcje. ATLAS
i OpenBLAS
są jednymi z najlepszych wdrożeń BLAS
i LACPACK
o ile wiem. Są zgodne z oryginałem API
, mimo że, o ile wiem, zostały zaimplementowaneC/C++
od zera (nie jestem pewien!). Istnieją implementacje GPGPU API
wykorzystujące OpenCL
: CLBlast , clBLAS , clMAGMA , ArrayFire i ViennaCL, aby wymienić tylko niektóre. Istnieją również implementacje specyficzne dla dostawców, zoptymalizowane pod kątem konkretnego sprzętu lub platformy, których zdecydowanie odradzam.
Polecam każdemu, kto chce się uczyć używając BLAS
i LAPACK
in, najpierw C
nauczyć się FORTRAN-C
programowania mieszanego. Pierwszy rozdział wspomnianego repozytorium jest poświęcony tej sprawie i tam zebrałem wiele różnych przykładów.
PS Od czasu do czasu pracowałem nad wersją deweloperską repozytorium . Wydaje się nieco mniej niechlujny!