我有以下程序:OpenMP并行与浮点范围
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
构造应用于基于整数的循环。但是我的循环的内部真的取决于它是浮点。
有没有办法说服OpenMP来做到这一点?有推荐的替代方法吗?
不,由于与给出的答案相同的原因[这里](http://stackoverflow.com/a/13403626/463827);即使它在某些情况下可能会起作用,但编译器并不是非常难以以分解循环的方式推断浮点数。 (甚至这个循环的纯序列优化/矢量化也会因为相同的原因而受到影响)。做一个等价的整数循环并计算你的浮点数; 'for(int i = 0; i <100; i ++){double x = 0.1 * i; sum + = x * x; }' –
@JonathanDursi,如果你把它写成答案,我会接受它。 – Richard
好的,谢谢,我已经在下面做了。 –