Python多处理池在两台不同的机器上的性能差异

时间:2014-09-22 09:30:27

标签: python intel python-multiprocessing

所以我在同一个python虚拟环境中的两台不同的机器上部署了相同的代码,OS /内核完全相同,硬盘驱动器型号是相同的。两台机器之间唯一的主要区别是CPU。机器1有2x Xeon E5-2690(16核@ 2.90 ghz),机器2有1x Xeon W3690(6核3.47 ghz)。

现在,当我运行不使用多处理池的代码版本时,机器1将运行得更快。但是,使用多处理池时,机器2的运行速度会明显加快(大于6倍)。事实上,无论我创建了多少线程,机器1的运行速度都不会比单线程版本快得多。

有问题的过程只是读取HDF5文件并对数据执行一些基本的数学运算。

有人建议我运行strace -c,我的结果显示在机器1上花费了更多的时间用于futex。但是因为我只运行了一次,所以那里没有真正的统计确定性。

我非常确定这个问题与多处理所产生的开销有关,但这是一个相当大的差异。我也很难相信.57 ghz也会造成很大的差异。有任何想法吗?

谢谢!

编辑:

所以这是我在没有处理IO的情况下进行的测试:

机器1:

In [1]: import numpy as np

In [2]: import multiprocessing

In [3]: def gen_rand(x):
        return np.random.random(x)
   ...: 

In [4]: pool = multiprocessing.Pool(6)

In [5]: proc_arg = 100*[100000]

In [6]: %timeit -n30 pool.map(gen_rand, proc_arg)
30 loops, best of 3: 254 ms per loop

机器2:

In [1]: import numpy as np

In [2]: import multiprocessing

In [3]: def gen_rand(x):
        return np.random.random(x)
   ...: 

In [4]: pool = multiprocessing.Pool(6)

In [5]: proc_arg = 100*[100000]

In [6]: %timeit -n30 pool.map(gen_rand, proc_arg)
30 loops, best of 3: 133 ms per loop

0 个答案:

没有答案
相关问题