OpenMP错误无效控制谓词

时间:2015-11-03 07:04:43

标签: c++ c openmp

我编写了以下代码并尝试使用openmp并行化它。但我编译程序并且最终错误无效控制谓词错误

#pragma omp parallel for schedule(dynamic, 1)
for( ; i+o<N*C && i < C*n; i++ )
       buf[i] = (a[i]-b[i])*(a[i]-b[i]);

1 个答案:

答案 0 :(得分:8)

像这样重写循环,它应该可以工作:

int maxII = min( N*C-o, C*n);
#pragma omp parallel for schedule(dynamic, 1)
for ( int ii=i; ii<maxII; ii++ )
   buf[ii] = (a[ii]-b[ii])*(a[ii]-b[ii]);

OpenMP for循环必须遵循&#34; Canonical Loop Form&#34;如standard chapter 2.6

中所述

编辑:&#34;您能解释一下我的代码出了什么问题吗?&#34;

嗯,您使用的循环形式不符合OpenMP&#34; Canonical Loop Form&#34;基本上(我过于简单,对不起)问:

  • 循环索引是明确定义的;
  • 循环的下限在初始化部分给出;
  • 该测试是以下运算符之一:<<=>>=;和
  • 增量很明显。

我只是重写了你的循环以遵守这些简单的规则。这很容易,就像在大多数情况下一样。