Хелпикс

Главная

Контакты

Случайная статья





Пример 1. Пример 2.



Пример 1

Рассмотрим применение прагмы omp sections на примере параллельного выполнения трех коротких фрагментов.

Пусть в программе задаются значения целочисленных переменных a=33 и b=55. В первом фрагменте вычисляем с=a*10-b, во втором – d=b*2+a, в третьем – f=(a+b)/2.

Каждый фрагмент выделяем прагмой omp section, а всю совокупность трех фрагментов – прагмой omp sections.

Применяем совместно прагмы parallel и sections в одной строке. Переменные a и b объявляем firstprivate, переменные c, d, f – общие (shared) по умолчанию.

В каждом фрагменте печатаем номер нити, его выполняющей и результат счета.

После закрытия параллельной области мастер-нить печатает входные данные (a и b) и результаты (c, d, f), чтобы убедиться в правильности расчета и корректности передачи данных из параллельной области в нить-мастер.

Ниже приведен скриншот скриншот запуска кода, реализующего вышеописанные действия, и скриншот самого кода.

Видно, что при запуске с количеством нитей 6 (значение по умолчанию) в расчете задействованы три нити с номерами 0, 1, 2.

 

Пример 2.

Рассмотрим применение lastprivate-переменных в sections-областях. Такие переменные ведут себя в параллельной области как локальные. При этом после завершения действия прагмы sections им присваиваются значения, полученные в последней секции.

Конкретно, переменной х, имеющей значение 0 перед открытием параллельной области. в каждой из трех параллельных секций присваивается значение, на 1 большее номера нити, выполняющей эту секцию.

После закрытия sections-области во всех нитях х=3, что соответствует значению х, полученному в последней (третьей) секции, выполненной нитью 2.

После закрытия параллельной области значение х=3 сохраняется в мастер-нити.

 

Задание

 

1. Изучить раздел 2.4 учебного пособия по OpenMP.

2. Воспроизвести на кластере Hybrilit вышеприведенные примеры по работе c прагмой omp sections.

3. Написать OpenMP-программу, выполняющую следующее:

Задаются целые переменные а=1, b=10, с=1000. Организуется параллельная область с количеством нитей 3.

В параллельной области организуется sections-область, состоящая из пяти фрагментов: в первом фрагменте вычисляется х=a+b+c; во втором – у= (a+b)*c; в третьем – z= c/a-b; в четвертом – v=a*10+b*3; в пятом – w=a-b-c.

В каждом фрагменте напечатать номер нити, которая его выполняет, и результат расчета. После завершения параллельного блока напечатать значения x,y,z,v,w.



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.