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와의
감사합니다. 나는 Spec의 Glossary 섹션에서 이것이 정의 될 것이라고 생각하지는 않았다. –