Parallel processing 如何在c语言中实现并行前缀和算法?
这是我的密码Parallel processing 如何在c语言中实现并行前缀和算法?,parallel-processing,openmp,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 =
#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;
}
#包括
#包括
#包括
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并行
对于(i=1;i
但我得到了错误的答案,我发现我得到了错误的答案,因为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]
对于我在书中添加了上述算法的所有Pi,请先发布一个工作程序i
和j
都需要保密。其次,循环之间存在相互依赖关系<代码>一个[i-(int)pow(2,j)]
可以由一个线程在与当前线程不同的i
迭代中进行编辑,从而导致竞争条件。你必须从根本上改变你的算法;这不是一个并行算法。我在我的书中添加了上述算法。你可以先发布一个工作程序吗?i
和j
都需要保密。其次,循环之间存在相互依赖关系<代码>一个[i-(int)pow(2,j)]可以由一个线程在与当前线程不同的i
迭代中进行编辑,从而导致竞争条件。你必须从根本上改变你的算法;这不是一个并行算法。