所以我在同一个python虚拟环境中,在两台不同的机器上部署了相同的代码,操作系统/内核完全相同,硬盘型号也一样。这两台机器之间唯一的主要区别是CPU。机器1有2个Xeon E5-2690(16核@2.90 ghz),机器2有1个Xeon W3690(6核,3.47 ghz)。在
现在,当我运行不使用多处理池的代码版本时,机器1的运行速度会更快。但是,当使用多处理池时,计算机2的运行速度将显著加快(大于6x)。事实上,无论我创建多少线程,machine1的运行速度都不会比单线程版本快得多。在
所讨论的进程只是读取HDF5文件并对数据执行一些基本的数学运算。在
有人建议我运行strace-c,结果显示在1号机上花在futex上的时间要多一些。不过,由于我只运行了一次,所以没有真正的统计确定性。在
我很确定这个问题与多处理所产生的开销有关,但是这是一个相当大的差别。我也发现很难相信.57GHz也会造成如此大的差异。有什么想法吗?在
谢谢!在
编辑:
所以我在不需要处理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:
^{pr2}$
目前没有回答
相关问题 更多 >
编程相关推荐