【发布时间】:2021-03-13 13:51:05
【问题描述】:
我只是写了一个在 Numba 上处理列表和并行的示例,如下所示 Parallel 和 No Parallel:
平行
@njit(parallel=True)
def evaluate():
n = 1000000
a = [0]*n
sum = 0
for i in prange(n):
a[i] = i*i
for i in prange(n):
sum += a[i]
return sum
没有并行
def evaluate2():
n = 1000000
a = [0]*n
sum = 0
for i in range(n):
a[i] = i*i
for i in range(n):
sum += a[i]
return sum
并比较评估时间
t.tic()
print(evaluate())
t.toc()
结果:333332833333500000 经过的时间是 0.233338 秒。
t.tic()
print(evaluate2())
t.toc()
结果:333332833333500000 经过的时间是 0.195136 秒。
【问题讨论】:
-
我以前从未使用过 numba,但我读到它最适合用于使用 numpy 数组的代码。您的示例使用了一个列表,该列表可以是一个数组
numpy.zeros(n, dtype = int)。 nopython 模式上的 numba 文档建议它将列表转换为有效的非 Python 对象并返回(反射),这可能会占用时间。此外,a列表是否必要?看起来你可以在没有它的情况下计算总和,只需sum += i*i代替 -
您正在测量编译和运行时。只需测量第二次调用即可获取运行时。
标签: python numba parallels numba-pro