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

openMP error for a simple for loop: invalid controlling predicate

我正在研究 OMP tutorial on youtube 您将在其中编写并行代码来计算 pi 的近似值。

我在 for 循环行收到一个无效的控制谓词错误。通常(其他时候这里会问这个问题)这是由于 OMP 对 for 循环很挑剔,它只接受基本结构。

我不认为我的代码违反了 OMP 规则,它与 link 中的代码非常相似(他有一个错字,在顶部,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;
}

在for声明中,i是一个int,panel是一个double。 OMP 不喜欢隐式转换。 static_cast 修复了问题。