3

所以我在同一个python虚拟环境中的两台不同的机器上部署了相同的代码,操作系统/内核完全相同,硬盘型号相同。两台机器之间唯一的主要区别是 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 花费了更多时间。但是由于我只运行了一次,因此没有真正的统计确定性。

我很确定这个问题与多处理产生的开销有关,但这是一个很大的差异。我也很难相信 0.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
4

0 回答 0