그런 종류의 루프를 병렬 처리하려고합니다. 각 "calc_block"은 이전 반복에서 얻은 데이터를 사용합니다. OpenMP 병렬 루프
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;
}
나는이 tryed하지만, 속도 향상은 ~ 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;
}
내가 때문에 루프의 내부 섹션을 사용하는 오버 헤드의 일이 생각 매우 작다. 하지만 난 그걸 고치려면 어떻게 해야할지 모르겠어 ... 미리 감사드립니다!
'MAX_ITER'의 값은 무엇입니까? 전체 코드와 각 블록의 절대 시간 비용은 각각 얼마입니까? – kangshiyin