156
4.
Для какой цели в примере 5.2 приведен цикл, в котором MPI_Reduce повторя-
ется много раз?
5. По какой схеме осуществляется обмен данными в примере 5.2?
Задания для самостоятельной работы
5.1. Организуйте передачу данных внутри коммуникатора, который создан
на основании группы, созданной из произвольного числа процессов, заданных
пользователем. Например, если 10 процессов в MPI_COMM_WORLD, то создайте
группу из 2,3,6,8,9 процессов.
5.2. Постройте ввод-вывод по принципу master/slave. Главный процесс дол-
жен принимать сообщения от подчиненных и печатать их в порядке нумерации
(сначала 0, затем 1 и так далее). Подчиненные должны посылать каждый по 2 со-
общения мастеру. Например, сообщения:
Hello from slave 3
Goodbye from slave 3
(с соответствующими сообщениями для каждого подчиненного процесса). Для
решения разделите процессы из MPI_COMM_WORLD на два коммуникатора:
один процесс в качестве главного и остальные процессы – подчиненные. Исполь-
зуйте новый коммуникатор для подчиненных процессов для того, чтобы полу-
чить номер подчиненного процесса в его коммуникаторе. Подчиненные процессы
могут также выполнять любые вычисления.
5.3. Выполните задание 5.2, изменив код мастера, чтобы он позволял прини-
мать три типа сообщений от подчиненных процессов: упорядоченный вывод (та-
кой же, как и в примере 1); неупорядоченный вывод (как если бы каждый подчи-
ненный процесс печатал непосредственно); сообщение о выходе. Мастер продол-
жает получать сообщения до тех пор, пока он не получит сообщения о выходе от
всех подчиненных процессов. Для простоты программирования пусть каждый
подчиненный процесс посылает сообщения:
Hello from slave 3
Goodbye from slave 3 в упорядоченном выходном режиме и
I'm exiting (3) в неупорядоченном режиме.
5.4. Напишите программу вычисления числа π методом Монте-Карло. Суть
метода в следующем. Если радиус круга равен 1, тогда площадь круга равна
π, а
площадь квадрата вокруг круга равна 4. Следовательно, отношение площади кру-
га к площади квадрата равно
π/4. Если теперь случайным образом генерировать
точки в пределах контура квадрата, то отношение числа точек, попавших в круг, к
общему количеству сгенерированных точек даст величину
π/4. Сгенерированная
точка находится в круге, если ее координаты соответствуют выражению x
2
+ y
2
<1.
Для генерации случайных чисел создайте отдельный процесс, который будет рас-
сылать эти числа другим процессам. Поскольку другие процессы должны будут
выполнить коллективные операции, в которых не участвует этот процесс, необхо-
димо определить коммуникатор, чья группа не включает генерацию случайных
чисел.