BLAS的全称是Basic Linear Algebra Subprograms,中文可以叫做基础线性代数子程序。它定义了一组应用程序接口(API)标准,如向量之间的乘法、矩阵之间的乘法等,是数值计算软件必须具备的核心库之一。BLAS也可以被称为高性能计算、仿真、数据处理、人工智能的基石(当之无愧的根技术),它的效率直接关系着计算的成本。
在科学计算领域,为了论述开源和闭源的各自优势,将以对比Intel的MKL库和OpenBLAS开源库为例。顺便提一句,包含BLAS库还有acml,acl,EIGEN,Atlas等等。
* Intel的MKL库,针对自家特定的CPU平台进行针对性的优化加速的数学核心库,其中包括了BLAS计算库,其他还有LAPACK、DFTs、VML、VSL等。
* OpenBLAS库,是一个基于GotoBLAS2 1.13 BSD许可(开源)发行的优化BLAS计算库,由张先轶于2011年7月20日发起,并获得2016CCF科学技术奖。
一、Intel MKL的小算盘,免费但不开源
Intel MKL对于自家的每一代处理器都预先做了深度优化,还顺便和OpenBLAS对比跑个分(实际通常是抢跑)。既然是x86指令集,AMD、海光处理器都可以拿去作为其芯片SDK的基础软件,许多软件也集成MKL库。但问题来了:
Intel MKL库运行在自家的芯片上性能确实不错,但在别家芯片上就不一定了(例如AMD)。这和即使同样是x86指令集的处理器,但处理器架构设计各有差异化有关,MKL不会傻到帮敌人去针对性优化。有个阴谋论是:MKL“帮助”其他芯片负优化,作者没有考证,懂的同学给说一下哈。
Intel MKL库只能运行在x86体系上。尤其是在当下,因为异构计算的兴起,如果你的软件或算法希望可以在ARM、RISC-V,GPU,DSA架构上运行,靠MKL就没戏了。MKL要是源代码公开,适配其他芯片平台难度就低许多了,不好意思,MKL库不开源。所以NVIDIA有了自己的cuBLAS,当然同样的道理,cuBLAS也是不开源的,你家的GPU怎么办呢?
Intel MKL库不开源,如果你想针对性优化你的软件和硬件的适配,这将非常困难。这个问题非常普遍,无论是深度学习算法、数据库、数值计算软件等,如果你还对性能和稳定性有些追求,就一定会遇到。
二、OpenBLAS的优势,开源且性能还不错
开源的优势。用户可以自行使用、裁剪和针对自己的算法针对性优化。
可以编译后运行在各种操作系统,并支持几乎市面所有主流处理器芯片。OpenBLAS可以在Windows,Android,iOS,Linux 和Mac OS等平台上运行,与各类硬件进行了优化适配x86_64, PowerPC, ARMV7, ARMV8, MIPS32, RISC-V,龙芯3A等硬件平台。还支持为GPU、NPU定制OpenBLAS。
如果你需要获得支持,可以通过社区交流,也可以直接联系到张先轶博士。OpenBLAS应该也非常希望中国的开发者加入进去,这种基础软件的迭代依然永无止境。
三、向西还是向东?
MATLAB默认的底层数学库就是MKL,MATLAB的开源竞争对手octave,采用的是OpenBLAS。
Intel视MKL为其核心基础软件,NVIDIA视其CUDA为其核心竞争力(包含cuBLAS,cuFFT,cuDNN, cuSPARSE等)。而我国却鲜有人知,原因是什么呢?
结束语
我听说上一篇文章《嘴痒,说一下“首款国产科学计算软件研发成功”》引发了一些讨论,但讨论的标的却一度偏离了,如你所愿,本文将继续附带上该文。