标题取通俗一点,其实是BLAS运算速度的测试,BLAS是Basic Linear Algebra Subprograms的缩写。数学软件中矩阵运算的功能,包括R, Matlab, Octave等,都是通过BLAS以及基于它的LAPACK完成的。不同版本的BLAS对运算速度影响很大。
常见的BLAS版本包括ATLAS, Intel MKL和GotoBLAS等等,我这里比较的就这三个。Ubuntu默认的是ATLAS,GPL开源的。同时Ubuntu中有Revolution捐献的Intel MKL,这个是Intel收了钱的。另外神人後藤和茂写的GotoBLAS最近用BSD协议开源了,我自己编译了一份。
我的操作系统是Ubuntu 10.04,硬件是Intel Core i7-740QM + 2*DDR3-1333-4GB(显摆中^O^)。用rnorm随机生成了10个2000x2000的矩阵后,进行crossproduct, qr, svd, eigen四种运算。下面结果中的数字表示在这10个矩阵上完成运算的时间(秒数):
ATLAS 3.6.0
Crossproduct: 12.133
QR Decomposition: 69.038
Singular Value Decomposition: 78.556
Spectral Decomposition: 176.861
Intel MKL 10.2
Crossproduct: 7.362
QR Decomposition: 45.631
Singular Value Decomposition: 78.608
Spectral Decomposition: 165.773
GotoBLAS2 1.13
Crossproduct: 3.861
QR Decomposition: 72.792
Singular Value Decomposition: 82.627
Spectral Decomposition: 205.98
我的CPU是四核八线程的。观察发现三种BLAS在进行QR分解的时候都没有用到多核,而且ATLAS在Crossproduct(矩阵乘法)也没有用到多核。其它都有四核四线程在同时运行。
我的结果与别人报告的结果(http://cran.r-project.org/web/packages/gcbd/vignettes/gcbd.pdf )并不一致,GotoBLAS并没有传说中的那么好。可能是因为我的矩阵规模还不够大的缘故。
由于我最近主要用svd和eigen算diffusion map,矩阵规模也就在几千,决定还是选用Intel MKL作为我机器上的BLAS。