我正在尝试使用numba执行并行计算,但是,我遇到了一个问题:使用以下代码,如果我打开parallel = True而不是关闭它,则速度明显慢得多。
import numpy as np
from numba import njit, prange
from numba.typed import List
import time
n = 1000
@njit(parallel = True)
def lamb(now):
timez = List()
k1 = List()
k = 0
for i in range(n):
timez.append(np.arange(i+1))
k1.append( len(timez[i][timez[i]<=now]) )
for i in prange(n):
k += k1[i]
return k
lamb(21)
start = time.time()
lamb(21)
end = time.time()
print("Elapsed (after compilation) = %s" % (end - start))
如果为parallel = True
,则经过时间为Elapsed (after compilation) = 0.012674093246459961
。相比之下,如果为parallel = False
,则经过时间为Elapsed (after compilation) = 0.007932901382446289
。
有人知道为什么会这样吗?
答案 0 :(得分:0)
不同流程之间的协调会增加性能成本。这就是您看到的性能损失,如果真正值得进行并行化工作,那么假定工作量足够大,您将获得净收益。