2017-02-13 7 views
1

OpenMP 작업을 많이 만들고 taskwait을 사용하지 않으면 프로그램에서 해당 작업이 완료 될 때까지 기다리지 않습니까? 다음의 예를 생각해암시 적 장벽에서 OpenMP 태스크 완료를 기다리고 있습니까?

#pragma omp parallel 
{ 
    #pragma omp single 
    { 
     for (int i = 0; i < 1000; i++) { 
     #pragma omp task 
     ... // e.g., call some independent function 
     } 
     // no taskwait here 
    } 
    // all the tasks completed now? 
} 

이 프로그램이 single 블록의 끝에서 암시 적 장벽에 작업 완료 기다려야합니까? 그렇긴하지만 OpenMP 사양에서이 문제에 대한 정보를 찾을 수 없습니다.

편집

OpenMP의 사양에 barrier 설명에서 :

장벽 지역과 결합 된 모든 명시 적 작업의 완전한 실행을 실행해야합니다 바인딩 병렬 영역을 실행하는 팀의 모든 스레드 이 병렬 영역에 도달하기 전에 어느 누구도 장벽을 넘어서 실행을 계속할 수 없습니다.

그러나 이것은 작업 완료를 담당하는지 또는 OpenMP 런타임이 나를위한 것인지를 말하지 않습니다. OpenMP와의

답변

1

작업 완료 명시하지 암시 적 (1.2.5 태스킹 용어)

작업 완료와 연관된 구성 블록의 끝를 구성 할 때 완료 발생 작업 작업에 도달했습니다.

single 작업 공유 구성의 끝에 암시 적 장벽이 있습니다. 앞서 언급 한 것처럼 장벽은 명백한 작업을 기다립니다. 따라서 모든 작업은 single 블록에서 완료됩니다.

+0

감사합니다. 나는 Spec의 Glossary 섹션에서 이것이 정의 될 것이라고 생각하지는 않았다. –