无法使用 numba 自动并行化 for 循环
Not able to automatically parallelize for loop with numba
我正尝试 运行 在多核上执行以下操作以加快使用 numba 的速度。不幸的是,当我测试它时,该功能似乎 运行 只在一个核心上。有人可以向我解释为什么以及是否有可能在多核上获得它 运行ning?
最小工作示例:
import numpy as np
import numba
a = np.random.rand(100000)
@numba.jit(nopython=True, parallel=True)
def func(x):
result = np.zeros_like(x)
for delta in range(1,len(x)):
thisresult = 0
for i in range(delta,len(x)):
thisresult += (x[i] - x[i-delta])**2
result[delta] = thisresult / (len(x) - delta)
return result
print(func(a))
显式并行化
我总是建议明确地并行化代码。 Numba 尝试序列化一些并行代码部分,但这并不总是有效或导致最佳性能。
import numpy as np
import numba
a = np.random.rand(100000)
@numba.jit(nopython=True, parallel=True)
def func(x):
result = np.zeros_like(x,dtype=x.dtype)
for delta in numba.prange(1,len(x)):
thisresult = 0
for i in range(delta,len(x)):
thisresult += (x[i] - x[i-delta])**2
result[delta] = thisresult / (len(x) - delta)
return result
print(func(a))
有关详细信息,请查看 documentation。
我正尝试 运行 在多核上执行以下操作以加快使用 numba 的速度。不幸的是,当我测试它时,该功能似乎 运行 只在一个核心上。有人可以向我解释为什么以及是否有可能在多核上获得它 运行ning?
最小工作示例:
import numpy as np
import numba
a = np.random.rand(100000)
@numba.jit(nopython=True, parallel=True)
def func(x):
result = np.zeros_like(x)
for delta in range(1,len(x)):
thisresult = 0
for i in range(delta,len(x)):
thisresult += (x[i] - x[i-delta])**2
result[delta] = thisresult / (len(x) - delta)
return result
print(func(a))
显式并行化
我总是建议明确地并行化代码。 Numba 尝试序列化一些并行代码部分,但这并不总是有效或导致最佳性能。
import numpy as np
import numba
a = np.random.rand(100000)
@numba.jit(nopython=True, parallel=True)
def func(x):
result = np.zeros_like(x,dtype=x.dtype)
for delta in numba.prange(1,len(x)):
thisresult = 0
for i in range(delta,len(x)):
thisresult += (x[i] - x[i-delta])**2
result[delta] = thisresult / (len(x) - delta)
return result
print(func(a))
有关详细信息,请查看 documentation。