そういうループを並列化したい。各「calc_block」は、前の反復で取得したデータを使用することに注意してください。
for (i=0 ; i<MAX_ITER; i++){
norma1 = calc_block1();
norma2 = calc_block2();
norma3 = calc_block3();
norma4 = calc_block4();
norma = norma1+norma2+norma3+norma4;
...some calc...
if(norma<eps)break;
}
私はこれを試しましたが、スピードアップはかなり小さいです ~1.2
for (i=0 ; i<MAX_ITER; i++){
#pragma omp parallel sections{
#pragma omp section
norma1 = calc_block1();
#pragma omp section
norma2 = calc_block2();
#pragma omp section
norma3 = calc_block3();
#pragma omp section
norma4 = calc_block4();
}
norma = norma1+norma2+norma3+norma4;
...some calc...
if(norma<eps)break;
}
ループ内でセクションを使用するオーバーヘッドが原因で発生したと思います。しかし、私はそれを修正する方法を知りません...前もって感謝します!