Н., Пескова Е. Е., Шаманаев П. А. Основы параллельного программирования с использованием технологий mpi и openmp учебное пособие саранск издательство свмо 2013 2



Pdf көрінісі
бет46/53
Дата07.06.2023
өлшемі6.58 Mb.
#474796
1   ...   42   43   44   45   46   47   48   49   ...   53
ParProg MPI OpenMP

3.5 Синхронизация 
Проблема синхронизации параллельных потоков важна не только 
для параллельного программирования с использованием OpenMP, но и 
для всего параллельного программирования в целом. Проблема состоит в 
том, что любой структурный параллельный блок по определению имеет 
одну точку выхода, за которой обычно находится последовательный 
структурный блок. Вычисления в последовательном блоке, как правило, 
могут быть продолжены, если завершены все процессы в параллельном 
структурном 
блоке 
и 
их 
результаты 
корректно 
переданы 
в 
последовательный блок. Именно для обеспечения такой корректной 
передачи данных и необходима процедура синхронизации параллельных 
потоков. 
Механизм работы синхронизации можно описать следующим 
образом. При инициализации набора параллельных процессов в 
программе устанавливается контрольная точка (аналогичная контрольной 
точке в отладчике), в которой программа ожидает завершения всех 
порожденных параллельных процессов. Отметим, что пока все 
параллельные процессы свою работу не завершили, программа не может 
продолжить работу за точкой синхронизации. А поскольку все 
современные 
высокопроизводительные 
процессоры 
являются 
процессорами конвейерного типа, становится понятной и высокая 
трудоемкость процедуры синхронизации. В самом деле, пока не 
завершены все параллельные процессы, программа не может начать 
подготовку загрузки конвейеров процессоров. Вот это и ведет к большим 
потерям при синхронизации процессов, аналогичных потерям при работе 
условных операторов в обычной последовательной программе [7,9]. 
3.5.1 Директивы barrier и ordered 
Самый распространенный способ синхронизации в OpenMP – 
барьер. Он оформляется с помощью директивы barrier. Директива barrier 
дает всем потокам указание ожидать друг друга перед тем, как они 
продолжат выполнение за барьером. 


68 
#pragma omp barrier 
Нити, выполняющие текущую параллельную область, дойдя до этой 
директивы, останавливаются и ждут, пока все нити не дойдут до этой 
точки программы, после чего разблокируются и продолжают работать 
дальше. Кроме того, для разблокировки необходимо, чтобы все 
синхронизируемые нити завершили все порождённые ими задачи (task). 


Достарыңызбен бөлісу:
1   ...   42   43   44   45   46   47   48   49   ...   53




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет