56
остальных потоках, ждут завершения выполнения
выделенного участка
программы, т. е. неявно реализуется процедура синхронизации. Какая
именно нить будет выполнять выделенный участок программы, не
специфицируется. Одна нить будет выполнять данный фрагмент, а
все
остальные нити будут ожидать завершения её работы (при отсутствии
опции
nowait).
#pragma omp single [опция [[,] опция]...]
Рассмотрим возможные опции данной директивы.
private(список) – задает список переменных, для которых порождается
локальная
копия в каждой нити; начальное значение локальных копий
переменных из списка не определено.
firstprivate(список) – задаёт список переменных, для которых порождается
локальная копия в каждой нити; локальные копии переменных
инициализируются значениями этих переменных в нити-мастере.
copyprivate(список) –
после выполнения нити, содержащей конструкцию
single, новые значения переменных списка будут доступны всем
одноименным частным переменным (
private и firstprivate), описанным в
начале параллельной области и используемым всеми её нитями; опция не
может использоваться совместно с опцией
nowait;
переменные списка не
должны быть перечислены в опциях
private и firstprivate данной
директивы
single;
nowait – после выполнения выделенного участка происходит неявная
барьерная синхронизация параллельно работающих нитей: их дальнейшее
выполнение
происходит только тогда, когда все они достигнут данной
точки; если в подобной задержке нет необходимости, опция
nowait
позволяет нитям, уже дошедшим до конца участка,
продолжить
выполнение без синхронизации с остальными [3].
Достарыңызбен бөлісу: