求和运算的局部并行计算

2021-10-17 14:09:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经开始玩弄并行编程和cython/openmp,我有一个简单的程序,它使用prange对数组求和:

import numpy as np
from cython.parallel import prange
from cython import boundscheck, wraparound

@boundscheck(False)
@wraparound(False)

def parallel_summation(double[:] vec):

    cdef int n = vec.shape[0]
    cdef double total
    cdef int i

    for i in prange(n, nogil=True):
        total += vec[i]

    return total

它似乎可以与一个设置.py文件。不过,我想知道是否有可能调整这个功能,并有一点更多的控制处理器在做什么。你知道吗

假设我有4个处理器:我想把向量分解成4个部分,然后让每个处理器局部地添加其中的元素。最后,我可以合并每个处理器的结果,得到总的和。从cython文档中,我无法收集这样的东西是否可行(文档有点稀疏)。你知道吗

如果有人能解释一下是否/如何使用cython/openmp实现这样的功能,或者帮助查找一些相关的示例(在网上很难找到简单的示例),我将不胜感激。你知道吗