1.
Приведите примеры локальных и глобальных коммуникационных функций MPI.
2.
Напишите программу на Фортране или Си, включив в нее обрамляющие функции
MPI (MPI_Init, MPI_Finalize) (стартовый шаблон для написания всех последующих
параллельных программ).
3.
Напишите программу для определения общего числа процессоров (MPI_Comm_Size),
индивидуального номера процесса (MPI_Comm_Rank).
4.
Напишите программу для вывода имен узлов кластера (MPI_Get_Processor_Name).
5.
Создайте и выполните на разном числе процессоров программу, которая
выводит на экран сообщение ”my_id=k”,
где k - ранг процесса.
6.
Приведите пример блокирующих операций передачи сообщений типа
”точка-точка”, который приводит параллельный алгоритм в тупиковую ситуацию.
7.
В чем отличие блокирующих и неблокирующих функций?
8.
Какого типа и какое значение возвращает функция MPI_Wtime ?
9.
Создайте и выполните на разном числе процессоров программу, используя
блокирующие коммуникационные функции (MPI_Send, MPI_Recv), реализующую следующий
алгоритм: на нулевом процессоре инициализируется переменная (Real a); нулевой
процессор рассылает переменную а всем процессорам, включая самого себя; после
получения переменной а, все процессора прибавляют к ней свой индивидуальный
номер и передают на нулевой процессор; нулевой процессор получает от всех
процессоров данные и формирует массив, который выводится в файл результатов
(формат файла результатов – номер процессора, пересланное им значение переменной
а).
10.
Напишите программу, используя блокирующие коммуникационные функции (MPI_Send,
MPI_Recv), реализующую алгоритм передачи массива от одного процессора на другой.
Определите максимально допустимую длину передаваемого сообщения.
11.
Напишите программу, используя блокирующие коммуникационные функции (MPI_Send,
MPI_Recv), реализующую алгоритм передачи данных по кольцу: очередной процессор
дожидается сообщения от предыдущего и потом посылает следующему процессору.
12.
Создайте программу, используя блокирующие коммуникационные функции (MPI_Send,
MPI_Recv), реализующую алгоритм передачи данных по кольцу: все процессора
одновременно посылают и принимают сообщения.
13.
Напишите программу, используя блокирующие коммуникационные функции (MPI_Send,
MPI_Recv), реализующую алгоритм передачи данных по двум кольцам: нечетные
процессора образуют 1 кольцо, четные – второе.
14.
Создайте программу, используя блокирующие коммуникационные функции (MPI_Send,
MPI_Recv), реализующую алгоритм передачи данных от каждого процессора каждому.
15.
Создайте и выполните программу, используя коммуникационные функции (MPI_Ssend,
MPI_Bsend, MPI_Rsend, MPI_Isend, MPI_Irecv), передающие одномерные и двумерные
массивы (вектора и матрицы) между двумя процессорами. Проведите сравнение по
скорости передачи данных в зависимости от применяемых функций и размера
передаваемых данных.
16.
Создайте и выполните программу, используя коммуникационную функцию (MPI_Sendrecv),
реализующую алгоритм передачи данных по кольцу. Получите графики пересылок
данных между процессорами с помощью утилиты Jumphot.
17.
Создайте и выполните программу, используя коммуникационную функцию (MPI_Sendrecv),
реализующую алгоритм передачи данных по двум кольцам: нечетные процессора
образуют первое кольцо, четные – второе. Получите графики пересылок данных между
процессорами с помощью утилиты Jumphot.
18.
В чем отличие функций MPI_Sendrecv и MPI_Sendrecv_replace?
19.
С какой целью используется функция MPI_Get_count ?
20.
С какой целью используется функция MPI_Probe ?
21.
Создайте программу, используя коммуникационную функцию (MPI_Bcast),
реализующую алгоритм передачи данных от 0 процесса всем остальным.
22.
Создайте программу, используя коммуникационную функцию (MPI_Gather),
реализующую алгоритм передачи частей массива от всех процессоров на нулевой
процессор.
23.
Создайте программу, используя коммуникационную функцию (MPI_Allgather),
реализующую алгоритм передачи частей массива от всех процессоров на все
процессора.
24.
Создайте программу, используя коммуникационную функцию (MPI_Scatter),
реализующую алгоритм передачи частей массива от нулевого процессора на все
процессора.
25.
Используя функции для создания коммуникаторов, реализуйте следующий
алгоритм: на нулевом процессоре задана переменная а, на первом процессоре – b; с
помощью коммуникационной функции (MPI_Bcast) передайте переменную a – четным
процессорам, переменную b – нечетным.
26.
Для какой передачи данных используется функция MPI_Alltoall ?
27.
Используя упаковку данных (функция MPI_Pack) и распаковку данных (функция
MPI_Unpack), напишите программу, реализующую алгоритм передачи четных элементов
последовательности с одного процессора на другой. Проведите сравнение по
скорости передачи данных с помощью производных типов данных, с помощью упаковки
данных и простой передачей данных. Получите графики пересылок данных между
процессорами с помощью утилиты Jumphot.
28.
Используя один из конструкторов (MPI_TYPE_...),
напишите программу, реализующую алгоритм передачи четных элементов
последовательности с одного процессора на другой. Проведите сравнение по
скорости передачи данных с помощью производных типов данных и без него. Получите
графики пересылок данных между процессорами с помощью утилиты Jumphot.