0
我想用C實現一個簡單的累計總和++代碼如下:的OpenMP:循環結轉依賴
x[0] = 0;
for (k=1;k<100; k++)
x[k] = x[k-1] + x[k];
在此site,實現被記錄下來,以消除過度依賴環路矣。該代碼應該是這樣的兩個線程:
x[0] = 0;
x[49] = 74; //pre calculated
//the outer loop is parallelized (two instances)
#pragma omp parallel for private(m,k)
for(m=0;m<2;m++) {
for (k=m*49+1; k<m*50+50; k++) {
x[k] = x[k-1] + x[k];
}
}
問題是,我仍然可以看到這裏的循環進位的依賴性(並行運行兩個線程,但一個來自另一個需要數據)。
有人可以在這裏添加一些解釋嗎?消除這種依賴的最好方法是什麼?
在問題中查看SO和有關*並行前綴和*的答案。 –