gpt4 book ai didi

floating-point - 具有浮点范围的 OpenMP 并行

转载 作者:行者123 更新时间:2023-12-01 10:57:25 25 4
gpt4 key购买 nike

我有以下程序:

int main(){
double sum=0;
#pragma omp parallel for reduction(+:sum)
for(double x=0;x<10;x+=0.1)
sum+=x*x;
}

当我编译它时,我得到错误invalid type for iteration variable ‘x’

我认为这意味着我只能将 parallel for 构造应用于基于整数的循环。但我的循环的内部结构确实取决于它是 float 。

有没有办法说服 OpenMP 这样做?有推荐的替代方法吗?

最佳答案

来自评论:

不,出于与 this answer 中相同的原因,OpenMP 不会为您执行此操作。给出了有关使用整数运算的 OpenMP 循环的问题;编译器很难推断出 float ——特别是,编译器在进入循环之前需要知道循环的 tripcount,而循环中的浮点运算通常使这变得非常困难,即使有一些简单的情况也是如此没关系(比如,循环 0.5 到 10.0)。

出于同样的原因,即使是这种形式的循环的纯串行优化/矢量化也会受到影响。最好的方法是制作一个等效的整数循环并根据整数索引计算您的 float ;

for (int i=0; i<100; i++) { 
double x=0.1*i;
sum += x*x;
}

关于floating-point - 具有浮点范围的 OpenMP 并行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14418908/

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