为什么在我的电脑上大肆宣传的英特尔MKL Numpy版本比ATLAS版本慢?

为什么在我的电脑上大肆宣传的英特尔MKL Numpy版本比ATLAS版本慢?,numpy,intel-mkl,atlas,Numpy,Intel Mkl,Atlas,我的“双启动”Ubuntu 11.04、Ubuntu 12.04和Windows XP SP3都更新到了最新版本。 PC是相当旧的Intel Celeron D CPU,3.06GHz,2GB内存 在Ubuntu11.04中,我使用ATLAS编译了Numpy(ATLAS从源代码编译) 在Ubuntu12.04中,我使用了最新可用的MKL、icc、ifort的Numpy版本 在Windows XP中,我使用了带有MKL的Numpy(来自Christoph Gohlke提供的Python软件包) 详

我的“双启动”Ubuntu 11.04、Ubuntu 12.04和Windows XP SP3都更新到了最新版本。 PC是相当旧的Intel Celeron D CPU,3.06GHz,2GB内存

在Ubuntu11.04中,我使用ATLAS编译了Numpy(ATLAS从源代码编译)
在Ubuntu12.04中,我使用了最新可用的MKL、icc、ifort的Numpy版本
在Windows XP中,我使用了带有MKL的Numpy(来自Christoph Gohlke提供的Python软件包)
详情如下:

我试过简单:
%timeit np.dot(np.one((10001000)),np.one((10001000))

得到了这样的结果:

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
我认为上面是一个坏例子,我搜索了许多可用的比较之一,即第一次谷歌点击:

我测试了相同的功能:

%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由于某些原因具有最佳结果。

有人知道问题出在哪里吗?

英特尔MKL主要针对服务器、高性能桌面和移动处理器进行设计和优化。赛扬D是一款性能相对较低的处理器,因此MKL从未为此进行过优化。例如,如果您在最近的Intel Core i7桌面上检查SVD性能,则启用MKL的NumPy的运行速度比启用ATLAS的NumPy快80%。请看这里:


顺便说一下,要更快地回答与MKL相关的问题,请加入英特尔MKL论坛:

英特尔MKL主要针对服务器、高性能桌面和移动处理器进行设计和优化。赛扬D是一款性能相对较低的处理器,因此MKL从未为此进行过优化。例如,如果您在最近的Intel Core i7桌面上检查SVD性能,则启用MKL的NumPy的运行速度比启用ATLAS的NumPy快80%。请看这里:


顺便说一句,要更快地回答与MKL相关的问题,请加入英特尔MKL论坛:

我也在我的桌面上使用了numpy with MKL英特尔core i3第四代2.3 GHz、4GB ram。 我测试了两个4096x4096矩阵的点积。我已经在anaconda发行版上对它们进行了测试,该发行版包括Python3.5 64位(到目前为止还不支持mkl)、Python2.7 64位(不支持mkl)和Python2.7 64位(支持mkl),结果几乎相似。它们都需要73秒(+-0.5秒)来计算(对于整型数据类型),对于浮点64数据类型,它们都需要260毫秒(+-5毫秒),对于复杂数据类型,它们都需要1秒(+-100毫秒)

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

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


我需要乘法矩阵fasster

我也在我的桌面上使用了带mkl的numpy英特尔core i3第四代2.3 GHz 4GB ram。 我测试了两个4096x4096矩阵的点积。我已经在anaconda发行版上对它们进行了测试,该发行版包括Python3.5 64位(到目前为止还不支持mkl)、Python2.7 64位(不支持mkl)和Python2.7 64位(支持mkl),结果几乎相似。它们都需要73秒(+-0.5秒)来计算(对于整型数据类型),对于浮点64数据类型,它们都需要260毫秒(+-5毫秒),对于复杂数据类型,它们都需要1秒(+-100毫秒)

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

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


我需要乘法矩阵fasster

可能MKL的最新版本针对现代Intel CPU进行了优化,而从源代码编译的atlas将始终针对您的特定系统进行自我调整。可能是的。我知道UbuntuMKL版本比较慢,因为我遵循了英特尔numpy页面的指令,而不是至少针对单CPU进行调整。但是,我会在Ubuntu 12.04 numpy版本上使用ATLAS,而不是无缘无故地使整个系统复杂化,我会注意以后不要盲目地遵循我所读到的一切可能MKL的最新版本是为现代Intel CPU优化的,而从源代码编译的ATLAS将始终针对您的特定系统进行自我调整。是的,可能。我知道UbuntuMKL版本比较慢,因为我遵循了英特尔numpy页面的指令,而不是至少针对单CPU进行调整。但是,我会在Ubuntu 12.04 numpy版本上使用ATLAS,而不是无缘无故地使整个系统复杂化,我会密切关注未来,不要盲目跟随我读到的所有内容