gpt4 book ai didi

c++ - 简单 for 循环 : invalid controlling predicate 的 openMP 错误

转载 作者:行者123 更新时间:2023-11-30 03:47:35 31 4
gpt4 key购买 nike

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

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

我不认为我的代码违反了 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声明中,i是一个int,panel是一个double。 OMP 不喜欢隐式转换。 static_cast 解决了这个问题。

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

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com