我想并行外部for循环,但我尝试了下面的说明,结果证明是错误的。我希望你能帮忙解决这个问题。
#pragma omp parallel for private(i,ii,j) reduction(+:Number1)
for(ii=1;ii<numbers_of_sieve;ii++)
{
for(j=0;j<area;j++)
flags[j]=1;
int a=sqrt((double)(1+ii))*1024;
for(int k=0;k<Number;k++)
{
if(sieve[k]<=a)
{
__int64 x=(sieve[k]+(-(ii*area))%sieve[k])%sieve[k];
for(__int64 m=ii*area+x;m<(1+ii)*area;m+=sieve[k])
flags[m-ii*area]=0;
}
}
for(i=0;i<(1<<20);i++)
{
if(flags[i]==1)
{
//fprintf(fp,"%I64d\t",i+ii*area);
Number1++;
}
}
}
谢谢!
答案 0 :(得分:0)
我不知道你的意思是什么,结果证明是错的。但是flags(array?)必须声明为private,或者必须在循环内声明。
P.S。
在尝试以并行模式运行之前,请检查您的程序是否在串行模式下正常工作。比较,例如,两行:
for(j=0;j<area;j++)
和
for(i=0;i<(1<<20);i++)
考虑一下 - area != (1<<20)
或size of flags != area
会是什么。