OpenMP很多for循环问题

时间:2013-11-06 04:20:33

标签: openmp

我想并行外部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++;
            }
        }
    }

谢谢!

1 个答案:

答案 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会是什么。