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

2024-04-19 18:53:16 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Tags: 代码inimport版本机器nprandomproc