【问题标题】:How can I set `parallel=True` in numba while I use np.power()?使用 np.power() 时如何在 numba 中设置 `parallel=True`?
【发布时间】:2020-01-16 00:26:17
【问题描述】:

我将使用 numba 来增强我的代码。但是,并行模式下的幂函数不能很好地工作,即对于以下函数:

import numpy as np
import numba

@numba.njit(parallel=True, fastmath = True)
def decay_rate(mV, mp):
    drate=(np.power(mp,-3))
    return drate

上面写着:

指定了关键字参数“parallel=True”,但无法进行并行执行转换。

这个函数比上面演示的更复杂(值得的开销!)。另外,我之前尝试过**的电源,但结果是一样的。

我该如何解决?

【问题讨论】:

  • 只是一个问题:你的mp 是一个数组吗?您能否在问题中添加示例调用,例如decay_rate(..., np.array([2.0,3,4,5,6]).

标签: python parallel-processing jit numba


【解决方案1】:

该消息仅表明您指定了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 并行化循环。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-23
    • 2016-05-22
    • 1970-01-01
    • 2020-11-23
    • 2012-04-10
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多