您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

使用Numba时如何并行化此Python for循环

使用Numba时如何并行化此Python for循环

Numba已更新, (我正在回答自己的问题。)

日期为2017年12月12日的此博客文章讨论了Numba并行计算功能的改进。这是该博客的相关摘要

很久以前(超过20个发行版!),Numba曾经支持惯用语来编写称为的并行for循环prange()。在2014年对代码库进行了重大重构之后,必须删除功能,但自那以来,它一直是Numba最常请求的功能之一。英特尔开发人员将数组表达式并行化之后,他们意识到带回prange是很容易的

使用Numba版本0.36.1,我可以for使用以下简单代码并行化尴尬的parallel -loop:

@numba.jit(nopython=True, parallel=True)
def csrMult_parallel(x,Adata,Aindices,Aindptr,Ashape):

    numRowsA = Ashape[0]    
    Ax = np.zeros(numRowsA)

    for i in numba.prange(numRowsA):
        Ax_i = 0.0        
        for dataIdx in range(Aindptr[i],Aindptr[i+1]):

            j = Aindices[dataIdx]
            Ax_i += Adata[dataIdx]*x[j]

        Ax[i] = Ax_i

    return Ax

在我的实验中,并行化for-loop使该函数的执行速度比我在问题开头发布的版本快了八倍,该版本已经在使用Numba了,但尚未并行化。此外,在我的实验中,并行版本比Ax = A.dot(x)使用scipy的稀疏矩阵矢量乘法函数的命令快大约5倍。 ,我终于有了一个python稀疏的矩阵向量乘法例程,它的 。

python 2022/1/1 18:29:04 有540人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶