|
|||
Пример 1. Пример 2. ⇐ ПредыдущаяСтр 2 из 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.
|
|||
|