所以我在同一个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