使用-fopenmp编译时"无效控制谓词"错误

Ani*_*udh 7 c openmp

void random(int M,int a,int c,int *seq,int start,int size)
{
 int i = start;
 seq[0] = 1;
 seq[i] = (a * seq[i - size] + c) % M;
 i += size;
}

for(int iter = 0;iter < ceil((double)(n/size));iter++)
{      
  random(M,a,c,seq,1,1);    
}
Run Code Online (Sandbox Code Playgroud)

循环编译-fopenmpgcc给出"无效控制谓词"错误.怎么解决?

Hri*_*iev 5

显示的代码中没有OpenMP构造,因此无论有无编译-fopenmp都不会影响它。但是,如果存在[parallel] for构造,则它将因为ceil()is 的类型而失败,double并且OpenMP仅允许循环中使用整数类型。

您必须将结果强制为ceil()整数:

#pragma omp parallel for
for(int iter = 0; iter < (int)ceil((double)n/size); iter++)
{      
   random(M,a,c,seq,1,1);
}
Run Code Online (Sandbox Code Playgroud)