为了账号安全,请及时绑定邮箱和手机立即绑定

与numba的prange平行并沿元组传递

与numba的prange平行并沿元组传递

肥皂起泡泡 2021-04-28 22:13:44
我尝试遵循以下已记录的示例进行并行化,如下所示:@numba.jit(nopython=True)def foo(uIdx, grids):    return uIdx@numba.jit(nopython=True, parallel=True)def bar(grid, grids):    LIdxGrid = np.zeros(len(grid))    for uIdx in numba.prange(len(grid)):            LIdxGrid[uIdx] = foo(uIdx, grids)    return LIdxGridif __name__ == '__main__':    import numpy as np    grid = np.arange(12)    grids = (grid, grid)    bar(grid, grids)但这似乎行不通。这个问题似乎源于传递grids(甚至没有在最终foo函数中使用它)。如果我在foo和中删除该引用bar,它将起作用:bar(grid, 0)Out[47]: array([ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10., 11.])如何解决/解决此问题?
查看完整描述

1 回答

?
缥缈止盈

TA贡献2041条经验 获得超4个赞

对引用计数项(如np.ndarrays)的支持是非常新的(自numba 0.39起),我不确定是否使用tupleref的s。计数项目已经有效。Afaik的参考书tuple。尚不支持计数的项目。因此,为确保您的代码正常运行,您必须将替换tuple为list:


if __name__ == '__main__':

    import numpy as np

    grid = np.arange(12)

    grids = [grid, grid]

    bar(grid, grids)

并确保您已安装numba版本0.39!否则,它将无法正常工作。

当然,列表不是元组,因此这只是一种解决方法。但是,只要引用元组,就没有其他方法可以解决此问题。不完全支持计数的项目。


查看完整回答
反对 回复 2021-05-11
  • 1 回答
  • 0 关注
  • 247 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信