这个问题最初是在 stackoverflow 上提出的,但后来发现与主题无关,下面的文本已从最初的帖子更新为新的详细信息。
我最近买了一台配备 i7 处理器的新电脑。我在上面安装了 Fedora 24,以及 Python 和一些科学编程所需的库,例如 Numpy 和 Scipy(Numpy 版本 1.11.0)。
安装完所有需要的软件后,我运行了一些测试代码(从这里)来评估系统的速度,特别是:
test_numpy.py 包含:
#!/usr/bin/env
python
import numpy
import sys
import timeit
try:
import numpy.core._dotblas
print 'FAST BLAS'
except ImportError:
print 'slow blas'
print "version:", numpy.__version__
print "maxint:", sys.maxint
print
x = numpy.random.random((1000,1000))
setup = "import numpy; x = numpy.random.random((1000,1000))"
count = 5
t = timeit.Timer("numpy.dot(x, x.T)", setup=setup)
print "dot:", t.timeit(count)/count, "sec"
运行此代码后,我获得:
slow blas
version: 1.11.0
maxint: 9223372036854775807
dot: 0.0981109619141 sec
我的问题是,在更老的电脑上,“dot”的执行时间要短得多。特别是对于配备 i7 处理器的旧款 (2012) Windows PC,我得到:
FAST BLAS
version: 1.9.1
maxint: 2147483647
dot: 0.0459410942418 sec
使用运行 Linux Mint 18 的旧款 (2013) i7 PC,我得到:
slow blas
version: 1.11.0
maxint: 9223372036854775807
dot: 0.0240209579468 sec
如您所见,旧款电脑,尤其是运行 Linux Mint 18 的电脑,速度大约快 4 倍……
所有这些电脑都是我自己安装的。特别是,对于最新的 Fedora,我使用了带有 numpy 包的 python 2.x 和 3.x:(1) 在 dnf 上和 (2) 通过从源代码编译它(如所述这里)。我还要补充一点,上面提到的所有时间都是在没有任何其他运行进程的情况下多次执行代码后获得的值。
我相信我在这里遗漏了一些东西。我不知道该怎么做才能让我的新电脑获得不错的性能……
(在最近安装 Fedora 23 和 Mint 18 的其他 PC 上也发现了完全相同的问题。)
更新:
我在上面提到的最新 PC 上安装了 Ubuntu 16.04,而不是 Fedora 24。Numpy dot 的计算时间除以 10,其他测试的计算时间明显更低:
$ python test_numpy.py
slow blas
version: 1.11.0
maxint: 9223372036854775807
dot: 0.00876359939575 sec
$ python test_scipy.py
cholesky: 0.00768299102783 sec
svd: 0.304620409012 sec
我在网上找到的唯一信息是旧帖但我很难相信这种类型的错误可以持续这么长时间。