104
2.
Укажите разницу при использовании параметра count в разных функциях:
MPI_Recv (…, count, …) и MPI_Unpack (…,count,…) .
3. Можно ли распаковывать результат как один упакованный объект, если пе-
ред посылкой происходила упаковка двух объектов?
4. Предложите вариант посылки данных в примере 3.26 без использования
MPI_Pack.
5. Почему в примере 3.27 не нужно вызывать функцию MPI_Unpack после
приема результата?
6. Почему в пример 3.28 используется две функции MPI_Unpack при приеме,
если при посылке использовали одну функцию MPI_Pack?
Задания для самостоятельной работы
3.1. Напишите программу, в которой каждый процесс MPI печатает “Hello
Word from process i for n”, где i – номер процесса в MPI_COMM_WORLD, а n –
размер MPI_COMM_WORLD.
3.2. Напишите программу, в которой определено только два процесса. В од-
ном из них осуществляется генерация случайных чисел, количество которых за-
дает пользователь. Второй процесс получает эти числа, складывает их, посылает
результат в первый процесс. Результат выводится на экран.
3.3. Напишите программу, которая рассылает данные от процесса с номером 0
всем другим процессам по конвейеру. Этот означает, что процесс i должен при-
нять данные от i-1 и послать их процессу i + 1, и так до тех пор, пока не будет
достигнут последний процесс. Процесс с номером 0 читает данные (целые) от
пользователя, пока не будет введено отрицательное целое число.
3.4. Выполните задание 3.3, замкнув вычисления по кругу, т.е. последний про-
цесс передает данные нулевому, который выводит их на экран.
3.5. Выполните задание 3.3, используя обмен MPI_Sendrecv.
3.6. Напишите программу, которая проверяет, в каком порядке осуществляет-
ся передача сообщений. Для этого можно допустить, что все процессы за исклю-
чением процесса 0 посылают 100 сообщений процессу 0. Пусть процесс 0 распе-
чатывает сообщения в порядке их приема, используя MPI_ANY_SOURCE и
MPI_ANY_TAG в MPI_Recv.
3.7. Выполните задание 3.6, используя неблокируемый прием MPI_IRecv.
3.8. Напишите программу для измерения времени передачи вещественных
данных двойной точности от одного процесса другому. Для усреднения наклад-
ных расходов следует: повторить достаточное количество операций пересылок
для получения времени в пределах долей секунды (образцовое решение делает
100000/size итераций для целых size), повторить тестирование несколько раз (на-
пример, 10) и усреднить результаты.
3.9. Выполните задание 3.8, используя MPI_SSend. Сравните характеристики
с теми, которые получаются при иcпользовании MPI_Send.
3.10. Выполните задание 3.8, используя MPI_BSend. Сравните характеристики
с теми, которые получаются при иcпользовании MPI_Send.
3.11. Выполните задание 3.8, используя MPI_RSend. Сравните характеристики
с теми, которые получаются при иcпользовании MPI_Send .
3.12. Выполните задание 3.8, используя MPI_ISend, MPI_IRecv, MPI_Wait.
Сравните характеристики с теми, которые получаются при иcпользовании