为什么炒作英特尔MKL Numpy比我的PC上的ATLAS构建速度慢?

时间:2012-04-29 11:41:18

标签: numpy intel-mkl atlas

我“双启动”Ubuntu 11.04,Ubuntu 12.04和Windows XP SP3都更新到目前为止。 PC是相当旧的Intel Celeron D CPU 3.06GHz,带2GB RAM

在Ubuntu 11.04中我使用ATLAS编译了Numpy(ATLAS从源代码编译)
在Ubuntu 12.04中,我使用最新的MKL,icc,ifort为Numpy构建 在Windows XP中我有Numpy和MKL(来自Christoph Gohlke亲切提供的Python包) 更多详情:http://pastebin.com/raw.php?i=wxuFbyVg

我试过很简单:
%timeit np.dot(np.ones((1000,1000)), np.ones((1000,1000)))

得到了这个结果:

Ubuntu ATLAS: 1 loops, best of 3: 457 ms per loop
Windows MKL:  1 loops, best of 3: 680 ms per loop
Ubuntu MKL:   1 loops, best of 3: 1.04 s per loop

我认为上面是一个不好的例子,我搜索了许多比较中的一个,即第一个Google点击:http://dpinte.wordpress.com/2010/01/15/numpy-performance-improvement-with-the-mkl/

我测试了相同的功能:

%timeit test_eigenvalue()
Ubuntu Atlas: 1 loops, best of 3: 6.38 s per loop
Windows MKL:  1 loops, best of 3: 2.22 s per loop
Ubuntu MKL:   1 loops, best of 3: 3.58 s per loop

%timeit test_svd()
Ubuntu Atlas: 1 loops, best of 3: 2.13 s per loop
Windows MKL:  1 loops, best of 3: 2.06 s per loop
Ubuntu MKL:   1 loops, best of 3: 3.09 s per loop

%timeit test_inv()
Ubuntu Atlas: 1 loops, best of 3: 964 ms per loop
Windows MKL:  1 loops, best of 3: 1.02 s per loop
Ubuntu MKL:   1 loops, best of 3: 1.59 s per loop

%timeit test_det()
Ubuntu Atlas: 1 loops, best of 3: 308 ms per loop
Windows MKL:  1 loops, best of 3: 322 ms per loop
Ubuntu MKL:   1 loops, best of 3: 491 ms per loop

%timeit test_dot()
Ubuntu Atlas: 1 loops, best of 3: 1.5 s per loop        
Windows MKL:  1 loops, best of 3: 1.77 s per loop
Ubuntu MKL:   1 loops, best of 3: 2.77 s per loop

所以ATLAS编译Numpy由于某种原因有最好的结果 有谁知道可能是什么问题?

2 个答案:

答案 0 :(得分:4)

英特尔®MKL主要针对服务器和高性能台式机和移动处理器而设计和优化。 Celeron D是一款性能相对较低的处理器,因此MKL从未针对它进行过优化。例如,如果您检查最近的英特尔酷睿i7桌面上的SVD性能,启用MKL的NumPy可以比启用ATLAS的NumPy快80%。见这里:http://software.intel.com/en-us/articles/numpy-scipy-with-mkl/

顺便说一句,要更快地回复MKL相关问题,请加入英特尔MKL论坛:http://software.intel.com/en-us/forums/intel-math-kernel-library/

答案 1 :(得分:0)

我还在我的桌面intel core i3第4代2.3 GHz,4GB ram上使用numpy和mkl。 我测试了两个4096x4096矩阵的点积。我已经测试了他们在anaconda发行版的python 3.5 64位(没有mkl支持直到日期),python 2.7 64位没有mkl和python 2.7 64位与mkl和结果几乎相似。它们都需要~73秒(+ - 0.5秒)来计算(对于整数数据类型的情况),对于float64数据类型,它们都需要260毫秒(+ - 5毫秒),对于复杂数据类型~1秒(+ - 100毫秒)所有人都是第二名。

我还发现即使对于复杂的矩阵乘法,numpy点也是最好的。他们已经实施了高斯改进。

我已经使用blas测试了cython,使用了python中的blas,使用python测试了einsum但是dot是最好的。

我需要乘以矩阵fasster