Технология MPI


Задача 1: "Простая программа на MPI"

Входные данные: нет

Выходные данные: выводятся на экран

Создайте параллельную параллельную программу с помощью MPI, в которой каждый процесс выводит на экран свой номер. Кроме того, процесс с номером 0 должен вывести общее количество процессов.

Указания:

  1. Создайте проект в MS Visual Studio согласно инструкции.
  2. Чтобы узнать количество процессов в приложении воспользуйтесь функцией MPI_Comm_size.
  3. Чтобы узнать номер (ранг) процесса в приложении воспользуйтесь функцией MPI_Comm_rank.

Входные данные

нет

Выходные данные

От каждого процесса - строка "I'm process <номер_процесса>". От нулевого процесса - дополнительно строка "Number of processes <количество_процессов>".

Примеры входных и выходных данных

Входные данные Выходные данные для 3 процессов
- I'm process 0
I'm process 1
I'm process 2
Number of processes 3

Задача 2: "Пинг-Понг"

Входные данные: нет

Выходные данные: выводятся на экран

Напишите параллельную программу, в которой два процесса обмениваются между собой сообщениями следующим образом:

  1. Первый процесс отправляет второму сообщение. После этого выодит на экран "I'm process <номер_процесса>. Sent message to <номер_процесса_получателя>".
  2. Второй процесс принимает сообщение от первого процесса и только после этого отправляет свое сообщение первому процессу. При этом выводит на экран "I'm process <номер_процесса>. Received message from <номер_процесса_отправителя>" и "I'm process <номер_процесса>. Sent message to <номер_процесса_получателя>" после наступления соответствующих событий.
  3. Первый процесс принимает сообщение от второго проццесса. После выводит на экран "I'm process <номер_процесса>. Received message from <номер_процесса_отправителя>"

Указания:

  1. Для обмена сообщениями воспользуйтесь блокирующей функцией MPI_Send.

Входные данные

нет

Выходные данные

От каждого процесса - строки "I'm process <номер_процесса>. Sent message to <номер_процесса_получателя>" и "I'm process <номер_процесса>. Received message from <номер_процесса_отправителя>".

Примеры входных и выходных данных

Входные данные Выходные данные
- I'm process 0. Sent message to 1
I'm process 1. Received message from 0
I'm process 1. Sent message to 0
I'm process 0. Received message from 1

Задача 3: "Эстафетная палочка"

Входные данные: -

Выходные данные: выводятся на экран

Напишите параллельную программу, в которой N-процессов передают друг другу сообщение по принципу эстафетной палочки: 0-й отправляет 1-му, 1-й отправляет 2-му, ..., N-1-й отправляет N-му, N-й отправляет 0-му.

Указания:

  1. Для обмена сообщениями воспользуйтесь блокирующей функцией MPI_Send или MPI_Sendrecv.