我有以下程序: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
好的,謝謝,我已經在下面做了。 –