gpt4 book ai didi

python - 当我尝试通过multiprocess.Pool在python中加速程序时,为什么多进程比单进程慢?

转载 作者:行者123 更新时间:2023-12-03 13:10:42 24 4
gpt4 key购买 nike

我知道很多人都问过类似的问题。但是我找不到任何可以解释这种现象的东西。这是我的代码。

import time
from multiprocessing import Pool
import numpy as np

def _foo(x):
np.linalg.inv(x)

if __name__ == '__main__':
t = time.time()
r = np.random.rand(1000, 1000)
p = Pool(2)
p.map(_foo, [r.copy() for i in range(8)])
print 'Finished in', time.time() - t, 'sec'

当我使用其他耗时的操作来测试我的代码而不是 np.linalg.inv时。它工作正常。随着 Pool的增加,我确实获得了性能改进。但是,当我在函数 np.linalg.inv中使用 _foo时, Pool(2)Pool(1)慢得多。 Pool(1)完成于0.77,而 Pool(2)为9.84。该代码在具有6个物理核心的计算机上进行了测试。

我可以推断的唯一解释是 inv方法共享一些资源。但是我已经为每个进程复制了 r。似乎没有必要这样做。

最佳答案

我终于明白了。它是在Ubuntu上用openBLAS构建的numpy的“错误”。从Unbuntu 12.04开始,openBLAS成为多线程。因此,当我开始两个处理以加快计算速度时,实际上有6个物理内核上运行着24个线程。这是一个典型的开销问题。

我要解决的方法是设置环境变量OPENBLAS_NUM_THREADS = 1。这迫使openBLAS以单线程模式运行。

关于python - 当我尝试通过multiprocess.Pool在python中加速程序时,为什么多进程比单进程慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34216621/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com