OpenMP 错误无效控制谓词
OpenMP error invalid controlling predicate
我编写了以下代码并尝试使用 openmp 对其进行并行化。但我无法编译程序并以错误结束 invalid controlling predicate error
#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]);
像这样重写循环,它应该可以工作:
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 循环必须遵循 "Canonical Loop Form",如 standard chapter 2.6
中所述
编辑:"Could you please explain me what was wrong with my code?"
嗯,您使用的循环形式不符合 OpenMP 的 "Canonical Loop Form",基本上(我在这里过于简单,抱歉)要求:
- 循环索引定义明确;
- 初始化部分给出了循环的下界;
- 测试是以下运算符之一:
<
、<=
、>
或>=
;和
- 增量一目了然
我只是重写了您的循环以遵守这些简单的规则。这很容易,就像在大多数情况下一样。
我编写了以下代码并尝试使用 openmp 对其进行并行化。但我无法编译程序并以错误结束 invalid controlling predicate error
#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]);
像这样重写循环,它应该可以工作:
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 循环必须遵循 "Canonical Loop Form",如 standard chapter 2.6
中所述编辑:"Could you please explain me what was wrong with my code?"
嗯,您使用的循环形式不符合 OpenMP 的 "Canonical Loop Form",基本上(我在这里过于简单,抱歉)要求:
- 循环索引定义明确;
- 初始化部分给出了循环的下界;
- 测试是以下运算符之一:
<
、<=
、>
或>=
;和 - 增量一目了然
我只是重写了您的循环以遵守这些简单的规则。这很容易,就像在大多数情况下一样。