OpenMP 사양 문서에 "스레드가 작업 구성을 만났을 때
작업을 즉시 실행하도록 선택하거나 실행을 지연 할 때까지 스레드가 실행을 지연합니다. 나중에 시간 ". 그러나이 명세는이 선택이 어떻게 이루어 졌는지를 말하지 않는다.OpenMP - 스레드가 작업 연기시기와 즉시 실행시기를 결정하는 방법
스레드가 작업을 즉시 실행할시기와 실행을 연기 할시기를 어떻게 결정합니까? 구현에 따라 다르면 gcc 같은 컴파일러가 어떻게 이것을 해결합니까?
OpenMP 사양 문서에 "스레드가 작업 구성을 만났을 때
작업을 즉시 실행하도록 선택하거나 실행을 지연 할 때까지 스레드가 실행을 지연합니다. 나중에 시간 ". 그러나이 명세는이 선택이 어떻게 이루어 졌는지를 말하지 않는다.OpenMP - 스레드가 작업 연기시기와 즉시 실행시기를 결정하는 방법
스레드가 작업을 즉시 실행할시기와 실행을 연기 할시기를 어떻게 결정합니까? 구현에 따라 다르면 gcc 같은 컴파일러가 어떻게 이것을 해결합니까?
표준에서 오는 두 가지 조건이 있습니다
if
조항이 존재하고 false
평가, 새로운 작업이 현재의 thread에 의해 현재 실행되는 undeferred 작업있다가 (이전 작업은 입니다.).
final
절은 새 작업을하고 모두가 최종 이을 포함 자식 작업을합니다. 작업이 포함 된은 이 미확인이고 스레드가 발생하여 즉시 실행됩니다..
위 느슨하게 또한 활성 스레드 팀이 없다 (GOMP_TASK_UNDEFERRED
)
GCC에서 복사 작업이 병렬 영역 외부에서 생성되고 있습니다.
다음을 참조하십시오. task.c, GOMP_task
을 찾으십시오.
LLVM OpenMP 런타임은 최대 크기를 갖는 작업 대기열을 사용하고이 양도 큐가 가득 차면 작업을 즉시 실행합니다. 기본 크기는 256 (1 << 8
)이지만 두 배가되는 조건이있는 것 같습니다. 팀 내에서 작업 대기열이 얼마나 정확하게 구성되었는지는 확실하지 않습니다.
다음을 참조하십시오. kmp_tasking.cpp
, TASK_NOT_PUSHED
을 찾습니다.