Если я создам кучу задач OpenMP и не использую taskwait
, где программа будет ждать завершения этих задач? Рассмотрим следующий пример:
#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.
ИЗМЕНИТЬ
Из barrier
описания в OpenMP Spec.:
Все потоки команды, выполняющие связывающую параллельную область, должны выполнить барьерную область и завершить выполнение всех явных задач, привязанных к этой параллельной области, прежде чем им будет разрешено продолжить выполнение за пределами барьера.
Это, однако, не говорит о том, отвечаю ли я за выполнение задачи или среда выполнения OpenMP делает это за меня.