0
3 개의 코드가 OpenMP와 동시에 실행되도록하려면 어떻게해야합니까? 다음 장난감 문제에서 AB 섹션은 일부 데이터를 생성하고 C 섹션은 데이터를 폴링하고 이에 대한 조치를 취합니다.3 병렬 영역
int main(int argc, char* argv[])
{
int G = -1,S = -1;
#pragma omp parallel sections default(none) shared(G,S,cout)
{
// Section A
#pragma omp section
{
for(;;)
{
G = G_Generator();
if(G == 0) break;
}
}
// Section B
#pragma omp section
{
for(;;)
{
S = S_Generator();
if(S == 0) break;
}
}
// Section C
#pragma omp section
{
for(;;)
{
if(G == 1 || S == 1) Do_1();
if(G == 2 || S == 2) Do_2();
if(G == 0 || S == 0) break;
}
}
}
return 0;
}
이것은 작동하지 않으며 디버깅 할 수 없습니다. 폴링 섹션 C가 G
또는 S
값이 1 또는 2 인 "miss"가 가능합니까? 코드가 원하는 결과를 얻지 못하는 것 같습니다. OpenMP에서 코드를 작성하는 올바른 방법입니까? 전에 루프 만 병렬 처리했습니다.
'#pragma omp flush'가 누락되었다고 생각합니다. – Jacob
최근 토론 내용을보실 수도 있습니다 : http://stackoverflow.com/questions/5110816/pragma-omp-flush-to-make-exchange- data-among-threads flush를 사용하는 것은 그렇게 쉬운 일은 아닙니다. – ejd