我正在研究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;
}

最佳答案

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

关于c++ - 一个简单的for循环的openMP错误:无效的控制谓词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33640933/

10-14 18:45
查看更多