2015-11-03 89 views
1

我写了下面的代码,并尝试使用openmp对其进行并行化。但我unbale编译程序和错误无效控制断言错误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

检查出http://stackoverflow.com/questions/13312679/why-is-the-operator-not-allowed-with-openmp –

回答

7

最终改写这样的循环,它应该工作:

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


编辑描述:“你能PL轻松解释我的代码出了什么问题?“

嘛,你使用的循环形式是不符合的OpenMP的“规范环表”基本上(我过简单的在这里,抱歉)问的是:

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

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

+0

感谢@Gilles,它的工作。你能解释我的代码有什么问题吗? –

+0

完成编辑 – Gilles