Директива master - Директива master выделяет участок кода, который будет выполнен только нитью-мастером.
- Остальные нити пропускают данный участок и продолжают работу с оператора, расположенного далее. Неявной синхронизации данная директива не предполагает.
- #pragma omp master
- Директива master не поддерживает предложения.
Пример Результат Директива single - Директива single определяет конструкцию, указывающую, что связанный структурированный блок выполняется только одним потоком в команде (не обязательно главным потоком). Синтаксис single директивы выглядит следующим образом:
- #pragma omp single [опция[[,] опция] ...]
- Предложение является одним из следующих вариантов:
- private(список)
- firstprivate(список)
- copyprivate(список)
- nowait
- После конструкции существует неявный барьер single , если nowait не указано предложение.
- Ограничения директивы single приведены ниже.
- В директиве single может отображаться только одно nowait предложение.
- Предложение copyprivate не должно использоваться с предложением nowait .
Пример Результат Опция nowait - nowait–после выполнения выделенного участка происходит неявная барьерная синхронизация параллельно работающих нитей: их дальнейшее выполнение происходит только тогда, когда все они достигнут данной точки; если в подобной задержке нет необходимости, опция nowait позволяет нитям, уже дошедшим до конца участка, продолжить выполнение без синхронизации с остальными.
Пример Результат Опция private Пример Результат Опция firstprivate - firstprivate(список) –задаёт список переменных, для которых порождается локальная копия в каждой нити; локальные копии переменных инициализируются значениями этих переменных в нити-мастере;
Пример Результат Опция copyprivate - copyprivate(список) –после выполнения нити, содержащей конструкцию single, новые значения переменных списка будут доступны всем одноименным частным переменным (privateи firstprivate), описанным в начале параллельной области и используемым всеми её нитями;
- опция не может использоваться совместно с опцией nowait;
- переменные списка не должны быть перечислены в опциях private и firstprivate данной директивы single;
Результат Пример (private-copyprivate) c использованием copyprivate Результат Пример (firstprivate-copyprivate) без использования copyprivate Результат Пример (firstprivate-copyprivate) c использованием copyprivate Результат Спасибо за внимание!
Do'stlaringiz bilan baham: |