Директивы master и single Директива master


Download 467.65 Kb.
Sana24.04.2023
Hajmi467.65 Kb.
#1393879
Bog'liq
8-тема (2)

Директивы master и single

Директива 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) без использования copyprivate

Результат

Пример (private-copyprivate) c использованием copyprivate

Результат

Пример (firstprivate-copyprivate) без использования copyprivate

Результат

Пример (firstprivate-copyprivate) c использованием copyprivate

Результат

Спасибо за внимание!


Download 467.65 Kb.

Do'stlaringiz bilan baham:




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling