This question already has answers here:
Why is the != operator not allowed with OpenMP?
(5 个回答)
5年前关闭。
我编写了以下代码并尝试使用 openmp 对其进行并行化。但我无法编译程序并最终出现错误 无效控制谓词错误
OpenMP for 循环必须遵循 standard chapter 2.6 中所述的“规范循环形式”
编辑: “你能解释一下我的代码有什么问题吗?”
好吧,您使用的循环形式不符合 OpenMP 的“规范循环形式”,它基本上(我在这里过于简单,抱歉)要求:
循环索引明确定义; 循环的下界在初始化部分给出; 测试是以下运算符之一: 增量是明确的。
我只是重写了你的循环来遵守这些简单的规则。这很容易,因为在大多数情况下都是如此。
(5 个回答)
5年前关闭。
我编写了以下代码并尝试使用 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]);
最佳答案
像这样重写循环,它应该可以工作:
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 循环必须遵循 standard chapter 2.6 中所述的“规范循环形式”
编辑: “你能解释一下我的代码有什么问题吗?”
好吧,您使用的循环形式不符合 OpenMP 的“规范循环形式”,它基本上(我在这里过于简单,抱歉)要求:
<
、 <=
、 >
或 >=
;和 我只是重写了你的循环来遵守这些简单的规则。这很容易,因为在大多数情况下都是如此。
关于c++ - OpenMP 错误无效控制谓词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33493215/