Jakiś czas temu, kiedy zacząłem robić trochę algebry liniowej w C, przyszedł do mnie zaskoczeniem, aby zobaczyć tak mało tutoriale do BLAS, LAPACKi inne podstawowe APIs, 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, MakeFilektóre możesz przeczytać, aby dowiedzieć się, jak wywoływać poszczególne Fortran/FORTRANprocedury w programie Club 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: BLASi LAPACKraczej APInie 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 BLASi LAPACK. Więc jeśli widzisz wiele dziwnych rzeczy podczas korzystania z tych funkcji, APIjest to spowodowane tym, że w rzeczywistości wywoływałeś FORTRANprocedury, Ca nie Cbiblioteki i funkcje. ATLASi OpenBLASsą jednymi z najlepszych wdrożeń BLASi LACPACKo 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 APIwykorzystują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 BLASi LAPACKin, najpierw Cnauczyć się FORTRAN-Cprogramowania 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!