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.
![]()