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

Python 无法使用numba自动并行化for循环,python,parallel-processing,numba,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

我正在尝试在多个内核上运行以下程序,以便使用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))
显式并行化 我总是重新命名以明确地并行化代码。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)) 

有关更多详细信息,请查看。

我想我也可以更改
numba.prange
的第二个
范围
?这实际上会稍微慢一点。但是可以重写外部for循环以获得一些性能(计算时间随着增量的增加而减少)。