BLAS
BLAS的全稱是Basic Linear Algebra Subprograms,中文可以叫做基礎線性代數子程式。它定義了一組應用程式接口(API)标準,是一系列初級操作的規範,如向量之間的乘法、矩陣之間的乘法等。許多數值計算軟體庫都實作了這一核心。
BALS是用Fortran語言開發的,Netlib實作了BLAS的這些API接口,得到的庫也叫做BLAS。Netlib隻是一般性地實作了基本功能,并沒有對運算做過多的優化。
LAPACK
LAPACK (linear algebra package),是著名的線性代數庫,也是Netlib用fortran語言編寫的。其底層是BLAS,在此基礎上定義了很多矩陣和向量進階運算的函數,如矩陣分解、求逆和求奇異值等。該庫的運作效率比BLAS庫高。
從某個角度講,LAPACK也可以稱作是一組科學計算(矩陣運算)的接口規範。Netlib實作了這一組規範的功能,得到的這個庫叫做LAPACK庫。
Linear Algebra Package,線性代數包,底層使用BLAS,使用Fortran語言編寫。在BLAS的基礎上定義很多矩陣和向量進階運算的函數,如矩陣分解、求逆和求奇異值等。該庫的運作效率比BLAS庫高。為了進行C語言的開發,開發了CBLAS和CLAPACK。
CBALS & CLAPACK
前面BLAS和LAPACK的實作均是用的Fortran語言。為了友善c程式的調用,Netlib開發了CBLAS和CLAPACK。其本質是在BLAS和LAPACK的基礎上,增加了c的調用方式。
ATLAS
上面提到,可以将BLAS和LAPACK看做是接口規範,那麼其他的組織、個人和公司,就可以根據此規範,實作自己的科學計算庫。
開源社群實作的科學計算(矩陣計算)庫中,比較著名的兩個就是atlas和openblas。它們都實作了BLAS的全部功能,以及LAPACK的部分功能,并且他們都對計算過程進行了優化。
Atlas (Automatically Tuned Linear Algebra Software)能根據硬體,在運作時,自動調整運作參數。
Automatically Tuned Linear Algebra Software,自動化調節線性代數軟體。可以根據硬體,在運作時,自動調整運作參數。
OpenBLAS
Openblas在編譯時根據目标硬體進行優化,生成運作效率很高的程式或者庫。Openblas的優化是在編譯時進行的,是以其運作效率一般比atlas要高。但這也決定了openblas對硬體依賴性高,換了機器,可能就要重新編譯了。(例如A和B兩台機器cpu架構、指令集不一樣,作業系統一樣,在A下編譯的openblas庫,在B下無法運作,會出現“非法指令”這樣的錯誤)
Intel MKL
英特爾數學核心函數庫,Intel Math Kernel Library
Intel的MKL和AMD的ACML都是在BLAS的基礎上,針對自己特定的CPU平台進行針對性的優化加速。以及NVIDIA針對GPU開發的cuBLAS。
商業公司對BLAS和LAPACK的實作,有Intel的MKL和AMD的ACML。他們對自己的cpu架構,進行了相關計算過程的優化,實作算法效率也很高。
NVIDIA針對其GPU,也推出了cuBLAS,用以在GPU上做矩陣運作。
