2017-11-09 3 views
0

OpenMP를 사용하여 멀티 스레드에 대해 배우려면 프로그래밍 중입니다. 어떤 스레드가 for 루프의 무언가에 대해 계속 작업하는 동안이 스레드의 11 번째 스레드 인 모든 스레드가 끝에 return 문에 도달 할 수 있습니까? 또는 13 번 줄 이후에 다시 하나의 마스터 스레드가됩니까?OpenMP 멀티 스레드가 하나의 스레드가 됨

int np, iam; 
#pragma omp parallel private(np, iam) num_threads(11) 
{ 
    np = omp_get_num_threads(); 
    iam = omp_get_thread_num(); 

    #pragma omp for 
    for (int i = 2; i < 100; i++) { 
     std::cout << i; 
     doStuff(i); 
     } 
    } 
}  // line 13 
// synchronize necessary? 
return 0; 
+0

AFAIK 라인 13 이후 스레드가 완료되고 단일 실행 스레드로 돌아 왔습니다. OpenMP 뒤에있는 전체 개념은 단일 스레드 코드를 작성하는 동안 병렬 처리 가능한 것이 무엇인지에 대한 pragma를 사용하여 힌트를 삭제하고 OpenMP가 수행 할 작업을 남겨 두는 것입니다. – bazza

답변

2

parallel 구조체의 단부 AR 암시 배리어있다, 그래서 동기화가 필요하지 않다. 모든 추가 코드는 마스터 스레드 (병렬 영역 내에 thread_num == 0이있는 스레드)에 의해서만 실행되고 모든 스레드가 병렬 영역의 끝에 도달 한 후에 만 ​​실행됩니다.