Если я создаю кучу задач 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.
Завершение задачи в OpenMP неявное, а не явное (1.2.5 Терминология задач)
завершение задачи Завершение задачи происходит, когда конец структурированный блок связано с сооружать что породило задача достигнуто
Существует неявный барьер в конце single
конструктивная конструкция. Как вы упомянули, барьеры ждут явных задач. Поэтому все задачи будут выполнены на single
блок.
Других решений пока нет …