gpt4 book ai didi

python - Numba 的 prange 给出了错误的结果

转载 作者:行者123 更新时间:2023-12-01 07:43:57 42 4
gpt4 key购买 nike

使用 prange 与 range 进行比较时,更新 prange 循环中的列表会给出错误的结果。

from numba import jit, prange
import numpy as np
@jit(parallel=True)
def prange_test(A):
s = [0,0,0,0]
b = 0.
for i in prange(A.shape[0]):
s[i%4] += A[i]
b += A[i]
return s,b

def range_test(A):
s = [0,0,0,0]
b = 0.
for i in range(A.shape[0]):
s[i%4] += A[i]
b += A[i]
return s,b

A = np.random.random(100000)

print(prange_test(A))
print(range_test(A))

和b是相同的,但s中的部分和是错误的:

(array([7013.98962611, 6550.90312863, 7232.49698366, 7246.53627734]), 49955.32870429267)
([12444.683249345742, 12432.449908902432, 12596.461028432543, 12481.734517611982], 49955.32870429247)

最佳答案

虽然文档中有点不清楚,但当您从 prange 并行循环的不同迭代写入相同的数据元素时,您无法安全地累积到类似数组的对象中。这个github issue ,我实际上在今年早些时候提交的文件询问了这个具体问题。

这个问题再次被提出的事实提醒我,我想向 numba 文档提交 PR 来澄清这一点。

关于python - Numba 的 prange 给出了错误的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56556416/

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