如何在c中实现并行前缀和算法?

时间:2016-02-15 15:17:11

标签: parallel-processing openmp

这是我的代码,

#include <stdio.h>
#include <omp.h>
#include <math.h>
int main(int argc, char const *argv[])
{
    int i,s=0,j,c=8;
    int a[]={3,1,0,4,2,1,2,3};
    int l=ceil(log10(c)/log10(2));
    #pragma omp parallel for
     for (i = 1; i < c-1; ++i)
    {   
        for (j = 0; j <l ; j++)
        {
            if(i-pow(2,j)>=0){
            a[i]+=a[(i-(int)pow(2,j))];//printf("%i %i %i %i\n", i,j,a[i],a[(i-(int)pow(2,j))]);
        }
        }   
    }
   for (i = 0; i < c; ++i)
    {
        printf("%i\n",a[i]);
    }
    return 0;
}

但是我得到了错误的答案,我发现我得到了错误的答案,因为pragma循环正在按顺序工作,数组a在所有迭代完成之前得到更新。 我用这个算法

for all Pi where 1<=i<=n-1
    for j = 1 to ceil(log n) -1 
        if(i- pow(2,j)>=0)
            a[i ] = a[i] + a[i - 2j]

0 个答案:

没有答案