1

我“双启动”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 中,我使用 MKL 构建了 Numpy(来自 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

我认为上面是一个不好的例子,我搜索了许多可用比较中的一个,即第一个谷歌点击: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 出于某种原因有最好的结果。
有谁知道可能是什么问题?

4

2 回答 2

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/

于 2012-08-03T00:48:11.823 回答
0

我还在我的台式机英特尔酷睿 i3 第 4 代 2.3 GHz、4GB 内存上使用了 numpy 和 mkl。我已经测试了两个 4096x4096 矩阵的点积。我已经在 python 3.5 64 位(迄今为止不支持 mkl)、不带 mkl 的 python 2.7 64 位和带 mkl 的 python 2.7 64 位的 anaconda 发行版上对它们进行了测试,结果几乎相似。他们都花了大约 73 秒(+- 0.5 秒)来计算这个(对于整数数据类型的情况),对于 float64 数据类型,他们都花了 260 毫秒(+- 5 毫秒),对于复杂数据类型,他们都花了大约 1 秒(+- 100 毫秒)秒。

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

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

我需要更快地乘以矩阵

于 2015-12-05T04:55:24.417 回答