简单 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 修复了问题。
我正在研究 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 修复了问题。