Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_ТП.doc
Скачиваний:
36
Добавлен:
29.03.2015
Размер:
1.63 Mб
Скачать
    1. Синхронизация процессов

Параллельная программа - это множество параллельных процессов, синхронизирующих свою работу и обменивающихся данными посредством передачи сообщений. Средства языка mpC позволяют программисту специфицировать требуемое для параллельного решения задачи число процессов и распределить вычисления между этими процессами. Этих же средств, в принципе, достаточно для описания синхронизации работы процессов при выполнении параллельной программы.

Основным механизмом синхронизации параллельных процессов, взаимодействующих с помощью передачи сообщений, является барьер. Барьер - это точка параллельной программы, в которой процесс ждёт все остальные процессы, с которыми он синхронизирует свою работу. Лишь только после того, как все процессы, синхронизирующие свою работу, достигли барьера, они продолжают дальнейшие вычисления. Если по какой-то причине хотя бы один из этих процессов не достигает барьера, то остальные процессы "зависают" в этой точке программы, а программа в целом уже никогда не сможет завершиться нормально.

Предположим, что нам нужно построить программу таким образом, чтобы сообщения от виртуальных процессоров с нечётными координатами выводились на терминал пользователя только после того, как будут выведены сообщения от всех виртуальных процессоров с чётными координатами. Язык mpC предоставляет для решения этой задачи библиотечную функцию MPC_Global_barrier(void), которая синхронизирует работу всех процессов параллельной программы. Её описание находится в заголовке mpc.h и выглядит следующим образом:

int [*]MPC_Global_barrier(void);

Рассматриваемая далее программа демонстрирует использование этой функции для разделения барьером двух параллельных операторов. Заметим, что в этой программе, на барьере ждут не только процессы, реализующие сеть mynet, но и свободные процессы. Это, естественно, приводит к большему числу сообщений, пересылаемых при выполнении барьера, и, следовательно, к определённому замедлению программы.

#include <mpc.h>

#define N 5

int [*]main()

{

net SimpleNet(N) mynet;

int [mynet]my_coordinate;

my_coordinate = I coordof mynet;

if(my_coordinate%2==0)

[mynet]MPC_Printf("Hello, even world!\n");

MPC_Global_barrier();

if(my_coordinate%2==1)

[mynet]MPC_Printf("Hello, odd world!\n");

}

Литература

1. Вендров А.М. CASE - технологии. Современные методы и средства

проектирования информационных систем. - http://www.citforum.ru

2. Липаев В.В. Качество программного обеспечения. - М.: Финансы и

статистика, 2005. - 263 с.

3. Кнут Дональд Э. Искусство программирования. Т. 3. Сортировка и

поиск: Уч. пос. - М.: Издательский дом «Вильямс», 2005.-832 с.

4. Шилдт Г. Самоучитель С++ - СПб:BHV-Санкт-Петербург, 1998. - 512 с.

5. Ластовецкий А.Л. Программирование параллельных вычислений на

неоднородных сетях компьютеров на языке mpC. - http://parallel.ru

116