无法使用numba自动并行化循环

时间:2018-04-17 07:42:21

标签: python parallel-processing numba

我正在尝试在多个核心上运行以下内容以加快使用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)
    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))

1 个答案:

答案 0 :(得分:0)

显式并行化

我总是建议明确地并行化代码。 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