Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
методичка для MPI.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
506.88 Кб
Скачать

4. Листинг программы

// программа выводит Hello world от всех процессов

#include <stdio.h>

#include “mpi.h”

int main(int argc, char * argv[])

{

int rank, size, resultlen;

char name[MPI_MAX_PROCESSOR_NAME];

MPI_Init( &argc, &argv );

MPI_Comm_size( MPI_COMM_WORLD, &size );

MPI_Comm_rank( MPI_COMM_WORLD, &rank );

MPI_Get_processor_name(name, &resultlen);

printf( "Hello world from process %d of %d at %s\n", rank, size, name);

MPI_Finalize();

return 0;

};

5. Примечания

При выполнении программы можно заметить, что порядок процессов соблюдается не всегда. Он может быть произволен. Это нормально для простых случаев, но если вашему алгоритму будет важен порядок получения результатов – нужно будет использовать схему master/slave.

Для получения результата от всех процессов нужно, при вызове функций MPI, использовать тег MPI_COMM_WORLD при указании аргументов функциями.

Полный справочник функций вы можете изучить в приложении к данному методическому пособию.

Лабораторная работа № 2 Использование функции групповой рассылки данных

  1. Подготовка к работе

Необходимо иметь работающий кластер на базе MPICH, умение компилировать программы в MS Visual C++, знание языка C.

  1. Контрольные вопросы

  1. Почему для выполнения параллельной программы требуется знать пароль для доступа на все компьютеры?

  2. Почему для выпоолнения параллельной программы она должна находиться на общедоступном для всего кластера ресурсе?

  3. Чем отличается синхронная передача, от асинхронной?

  4. Чем отличается групповая рассылка данных – от точечной?

  5. Почему требуется очищать файловый буфер при использовании printf()?

  6. Для чего служит функция MPI_Barrier()?

  7. Можно ли передать строку так же как и цифру, используя MPI_Bcast()?

3. Задание

Н еобходимо реализовать программу, процессы которой обмениваются данными, введенными пользователем.

4. Методические указания

В данной программе необходимо обеспечить обмен данными между нулевым процессом и всеми остальными. Это делается с помощью MPI функции MPI_Bcast.

Нулевой процесс запрашивает символ от пользователя, после получения которого, рассылает его всем процессам. После этого каждый процесс должен распечатать полученное сообщение с указанием своего номера и имени. Процесс ввода может продолжаться до получения пустой строки.

Программа должна соответствовать данной блок схеме:

Пример выполнения программы

Пример результата выполнения данной программы:

%PROGRAMFILES%\MPICH\mpd\bin>mpirun -np 2 -logon \\12izlab2\mpi\lab3.exe

Mpd needs an account to launch processes with:

account (domain\user): admin

password:

Enter a digit (0 or less to exit):456

Process 0 (12izlab2.) got 456

Process 1 (11izlab2.) got 456

Enter a digit (0 or less to exit):598

Process 0 (12izlab2.) got 598

Process 1 (11izlab2.) got 598

Enter a digit (0 or less to exit):666

Process 0 (12izlab2.) got 666

Process 1 (11izlab2.) got 666

Enter a digit (0 or less to exit):-100

Process 0 (12izlab2.) got -100

Process 1 (11izlab2.) got -100

%PROGRAMFILES%\MPICH\mpd\bin>