Ric*_*ard 3 floating-point parallel-processing openmp parallel-for
我有以下程序:
int main(){
double sum=0;
#pragma omp parallel for reduction(+:sum)
for(double x=0;x<10;x+=0.1)
sum+=x*x;
}
Run Code Online (Sandbox Code Playgroud)
当我编译它时,我得到错误invalid type for iteration variable ‘x’.
我认为这意味着我只能将parallel for构造应用于基于整数的循环.但是我的循环的内部确实依赖于它是浮点数.
有没有办法说服OpenMP这样做?有推荐的替代方法吗?
来自评论:
不,OpenMP不会为你做这个,原因与给出关于带整数运算的OpenMP循环的问题的答案相同; 编译器推理浮点数是非常困难的 - 特别是编译器在进入循环之前需要知道循环的tripcount,并且循环中的浮点运算一般来说非常困难,即使有一些简单的情况那可以(比如,循环0.5到10.0).
出于同样的原因,即使是这种形式的循环的纯粹的串行优化/矢量化也会受到影响.最好的方法是创建一个等效的整数循环,并根据整数索引计算你的浮点数;
for (int i=0; i<100; i++) {
double x=0.1*i;
sum += x*x;
}
Run Code Online (Sandbox Code Playgroud)