使用 np.power() 时如何在 numba 中设置 `parallel=True`?
How can I set `parallel=True` in numba while I use np.power()?
我将使用 numba 增强我的代码。但是,并联模式下的 power 函数不能很好地工作,即对于以下函数:
import numpy as np
import numba
@numba.njit(parallel=True, fastmath = True)
def decay_rate(mV, mp):
drate=(np.power(mp,-3))
return drate
它说:
The keyword argument 'parallel=True' was specified but no transformation for parallel execution was possible.
该函数比上面演示的更复杂(numba 开销值得!)。另外,我之前试过 **
的功率,但结果是一样的。
我该如何解决?
该消息只是指出您指定了 parallel
,但没有发现要并行化的内容。那是因为 np.power
(这同样适用于数组幂运算符 **
)是在其他地方定义的函数 - 您无法并行化正在调用的函数。但是,您可以并行化正在编写的函数或并行调用函数。
如果您想并行计算功率,可以使用 numba.prange
(另请参阅 Explicit Parallel Loops (numba documentation)):
import numba as nb
import numpy as np
@nb.njit(parallel=True, fastmath=True)
def decay_rate(mp):
drate = np.empty(mp.size)
for idx in nb.prange(mp.size):
drate[idx] = np.power(mp[idx], -3)
return drate
prange
明确告诉 numba 并行化循环。
我将使用 numba 增强我的代码。但是,并联模式下的 power 函数不能很好地工作,即对于以下函数:
import numpy as np
import numba
@numba.njit(parallel=True, fastmath = True)
def decay_rate(mV, mp):
drate=(np.power(mp,-3))
return drate
它说:
The keyword argument 'parallel=True' was specified but no transformation for parallel execution was possible.
该函数比上面演示的更复杂(numba 开销值得!)。另外,我之前试过 **
的功率,但结果是一样的。
我该如何解决?
该消息只是指出您指定了 parallel
,但没有发现要并行化的内容。那是因为 np.power
(这同样适用于数组幂运算符 **
)是在其他地方定义的函数 - 您无法并行化正在调用的函数。但是,您可以并行化正在编写的函数或并行调用函数。
如果您想并行计算功率,可以使用 numba.prange
(另请参阅 Explicit Parallel Loops (numba documentation)):
import numba as nb
import numpy as np
@nb.njit(parallel=True, fastmath=True)
def decay_rate(mp):
drate = np.empty(mp.size)
for idx in nb.prange(mp.size):
drate[idx] = np.power(mp[idx], -3)
return drate
prange
明确告诉 numba 并行化循环。