0
第一種方法(並行內環):OpenMP的並行用於構建性能
for(j=0; j<LATTICE_VW; ++j) {
x = j*DX + LATTICE_W;
#pragma omp parallel for ordered private(y, prob)
for(i=0; i<LATTICE_VH; ++i) {
y = i*DY + LATTICE_S;
prob = psi[i][j].norm();
#pragma omp ordered
out << x << " " << y << " " << prob << endl;
}
}
第二方法(並行外環):
#pragma omp parallel for ordered private(x, y, prob)
for(j=0; j<LATTICE_VW; ++j) {
x = j*DX + LATTICE_W;
for(i=0; i<LATTICE_VH; ++i) {
y = i*DY + LATTICE_S;
prob = psi[i][j].norm();
#pragma omp ordered
out << x << " " << y << " " << prob << endl;
}
}
第三方法(並行摺疊環路)
#pragma omp parallel for collapse(2) ordered private(x, y, prob)
for(j=0; j<LATTICE_VW; ++j) {
for(i=0; i<LATTICE_VH; ++i) {
x = j*DX + LATTICE_W;
y = i*DY + LATTICE_S;
prob = psi[i][j].norm();
#pragma omp ordered
out << x << " " << y << " " << prob << endl;
}
}
如果我要猜測我會說方法3應該是最快的。
然而,方法1是最快的,而第二和第三方都需要大約相同的時間量,就好像沒有並行化一樣。爲什麼發生這種情況?
您是否從方法2獲得了正確的輸出?變量'y'和'prob'也應該是私人的。 – Novelocrat
對不起,他們在那裏是私人的。剛剛編輯它 – lexsintra
內外環的行程數是多少? –