BLAS的全稱是Basic Linear Algebra Subprograms,中文可以叫做基礎線性代數(shù)子程序。它定義了一組應用程序接口(API)標準,如向量之間的乘法、矩陣之間的乘法等,是數(shù)值計算軟件必須具備的核心庫之一。BLAS也可以被稱為高性能計算、仿真、數(shù)據(jù)處理、人工智能的基石(當之無愧的根技術),它的效率直接關系著計算的成本。
在科學計算領域,為了論述開源和閉源的各自優(yōu)勢,將以對比Intel的MKL庫和OpenBLAS開源庫為例。順便提一句,包含BLAS庫還有acml,acl,EIGEN,Atlas等等。
* Intel的MKL庫,針對自家特定的CPU平臺進行針對性的優(yōu)化加速的數(shù)學核心庫,其中包括了BLAS計算庫,其他還有LAPACK、DFTs、VML、VSL等。
* OpenBLAS庫,是一個基于GotoBLAS2 1.13 BSD許可(開源)發(fā)行的優(yōu)化BLAS計算庫,由張先軼于2011年7月20日發(fā)起,并獲得2016CCF科學技術獎。
一、Intel?MKL的小算盤,免費但不開源
Intel MKL對于自家的每一代處理器都預先做了深度優(yōu)化,還順便和OpenBLAS對比跑個分(實際通常是搶跑)。既然是x86指令集,AMD、海光處理器都可以拿去作為其芯片SDK的基礎軟件,許多軟件也集成MKL庫。但問題來了:
Intel MKL庫運行在自家的芯片上性能確實不錯,但在別家芯片上就不一定了(例如AMD)。這和即使同樣是x86指令集的處理器,但處理器架構設計各有差異化有關,MKL不會傻到幫敵人去針對性優(yōu)化。有個陰謀論是:MKL“幫助”其他芯片負優(yōu)化,作者沒有考證,懂的同學給說一下哈。
Intel MKL庫只能運行在x86體系上。尤其是在當下,因為異構計算的興起,如果你的軟件或算法希望可以在ARM、RISC-V,GPU,DSA架構上運行,靠MKL就沒戲了。MKL要是源代碼公開,適配其他芯片平臺難度就低許多了,不好意思,MKL庫不開源。所以NVIDIA有了自己的cuBLAS,當然同樣的道理,cuBLAS也是不開源的,你家的GPU怎么辦呢?
Intel?MKL庫不開源,如果你想針對性優(yōu)化你的軟件和硬件的適配,這將非常困難。這個問題非常普遍,無論是深度學習算法、數(shù)據(jù)庫、數(shù)值計算軟件等,如果你還對性能和穩(wěn)定性有些追求,就一定會遇到。
二、OpenBLAS的優(yōu)勢,開源且性能還不錯
開源的優(yōu)勢。用戶可以自行使用、裁剪和針對自己的算法針對性優(yōu)化。
可以編譯后運行在各種操作系統(tǒng),并支持幾乎市面所有主流處理器芯片。OpenBLAS可以在Windows,Android,iOS,Linux 和Mac OS等平臺上運行,與各類硬件進行了優(yōu)化適配x86_64, PowerPC, ARMV7, ARMV8, MIPS32, RISC-V,龍芯3A等硬件平臺。還支持為GPU、NPU定制OpenBLAS。
如果你需要獲得支持,可以通過社區(qū)交流,也可以直接聯(lián)系到張先軼博士。OpenBLAS應該也非常希望中國的開發(fā)者加入進去,這種基礎軟件的迭代依然永無止境。
三、向西還是向東?
MATLAB默認的底層數(shù)學庫就是MKL,MATLAB的開源競爭對手octave,采用的是OpenBLAS。
Intel視MKL為其核心基礎軟件,NVIDIA視其CUDA為其核心競爭力(包含cuBLAS,cuFFT,cuDNN, cuSPARSE等)。而我國卻鮮有人知,原因是什么呢?
結束語
我聽說上一篇文章《嘴癢,說一下“首款國產科學計算軟件研發(fā)成功”》引發(fā)了一些討論,但討論的標的卻一度偏離了,如你所愿,本文將繼續(xù)附帶上該文。