简单的for循环的openMP错误:无效的控制谓词

时间:2015-11-10 22:33:21

标签: c++ for-loop openmp

我正在使用OMP tutorial on youtube编写并行代码来计算pi的近似值。

我在for循环线上获得了无效的控制谓词错误。通常(这里有人问过这个问题)这是因为OMP对循环很挑剔,它只接受一个基本结构。

我不认为我的代码违反了OMP规则,而且它与链接中的代码非常相似(他有一个拼写错误,在顶部,num + staps应该是num_steps )。

有谁知道发生了什么?

注意:要编译,必须添加-fopenmp标志。

#include <iostream>
#include "omp.h"
using namespace std;

/* omp parallel for loop solution for computing pi as 
pi = int_[0,1] 4/(1+x^2) dx */

int main()
{

int reqThreads = 2;
double panels = 10000000;
double pi = 3.141592653589793238462643;


double clockstart = omp_get_wtime();

double hx = 1.0/panels;
double sum = 0.0;
int i = 0;

#pragma omp parallel
{
double xThread = 0.0;
#pragma omp for reduction(+:sum)
for (i = 0; i < panels; i++)
{
    xThread = (i+0.5)*hx;
    sum += 4/(1 + xThread*xThread);
}
}

double clockstop = omp_get_wtime();
cout << "parallel code" << endl;
cout << "pi error " << pi - hx*sum << endl;
cout << "time elapsed: " << clockstop-clockstart << endl;

return 0;
}

1 个答案:

答案 0 :(得分:1)

在for声明中,我是一个int,面板是一个double。 OMP不喜欢隐式转换。 static_cast解决了这个问题。