gpt4 book ai didi

python - 多处理与 NumPy 不兼容

转载 作者:IT老高 更新时间:2023-10-28 21:14:19 24 4
gpt4 key购买 nike

我正在尝试使用多处理运行一个简单的测试。在我导入 numpy 之前,测试运行良好(即使程序中没有使用它)。代码如下:

from multiprocessing import Pool
import time
import numpy as np #this is the problematic line


def CostlyFunc(N):
""""""
tstart = time.time()
x = 0
for i in xrange(N):
for j in xrange(N):
if i % 2: x += 2
else: x -= 2
print "CostlyFunc : elapsed time %f s" % (time.time() - tstart)
return x

#serial application
ResultList0 = []
StartTime = time.time()
for i in xrange(3):
ResultList0.append(CostlyFunc(5000))
print "Elapsed time (serial) : ", time.time() - StartTime


#multiprocessing application
StartTime = time.time()
pool = Pool()
asyncResult = pool.map_async(CostlyFunc, [5000, 5000, 5000])
ResultList1 = asyncResult.get()
print "Elapsed time (multiporcessing) : ", time.time() - StartTime

如果我不导入 numpy,结果是:

CostlyFunc : elapsed time 2.866265 s
CostlyFunc : elapsed time 2.793213 s
CostlyFunc : elapsed time 2.794936 s
Elapsed time (serial) : 8.45455098152
CostlyFunc : elapsed time 2.889815 s
CostlyFunc : elapsed time 2.891556 s
CostlyFunc : elapsed time 2.898898 s
Elapsed time (multiporcessing) : 2.91595196724

总耗时与1个进程所需的时间相似,这意味着计算已经并行化。如果我确实 import numpy,结果将变为:

CostlyFunc : elapsed time 2.877116 s
CostlyFunc : elapsed time 2.866778 s
CostlyFunc : elapsed time 2.860894 s
Elapsed time (serial) : 8.60492110252
CostlyFunc : elapsed time 8.450145 s
CostlyFunc : elapsed time 8.473006 s
CostlyFunc : elapsed time 8.506402 s
Elapsed time (multiporcessing) : 8.55398178101

串行和多处理方法所用的总时间相同,因为只使用一个内核。很明显,问题来自 numpy.我的多处理和 NumPy 版本之间是否可能不兼容?

我目前在 linux 上使用 Python2.7、NumPy 1.6.2 和 multiprocessing 0.70a1

最佳答案

(第一次发帖,如果表述不当或对齐不当,请见谅)

您可以通过将 MKL_NUM_THREADS 设置为 1 来停止 Numpy 使用多线程

我用的debian下:

export MKL_NUM_THREADS=1

来自相关的stackoverflow帖子:Python: How do you stop numpy from multithreading?

结果:

user@pc:~/tmp$ python multi.py
CostlyFunc : elapsed time 3.847009 s
CostlyFunc : elapsed time 3.253226 s
CostlyFunc : elapsed time 3.415734 s
Elapsed time (serial) : 10.5163660049
CostlyFunc : elapsed time 4.218424 s
CostlyFunc : elapsed time 5.252429 s
CostlyFunc : elapsed time 4.862513 s
Elapsed time (multiporcessing) : 9.11713695526

user@pc:~/tmp$ export MKL_NUM_THREADS=1

user@pc:~/tmp$ python multi.py
CostlyFunc : elapsed time 3.014677 s
CostlyFunc : elapsed time 3.102548 s
CostlyFunc : elapsed time 3.060915 s
Elapsed time (serial) : 9.17840886116
CostlyFunc : elapsed time 3.720322 s
CostlyFunc : elapsed time 3.950583 s
CostlyFunc : elapsed time 3.656165 s
Elapsed time (multiporcessing) : 7.399310112

我不确定这是否有帮助,因为我猜你最终希望 numpy 并行运行,也许可以尝试将 numpy 的线程数调整到你的机器上。

关于python - 多处理与 NumPy 不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18105726/

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