
- •Федеральное агенство связи Поволжская государственная академия телекоммуникаций и информатики
- •Введение
- •Реализация и настройка кластера интерфейса mpi в среде ms Windows 9x/nt/xp
- •Рекомендуемая литература
- •Лабораторная работа № 1 Компиляция программ, использующих интерфейс mpi
- •Подготовка к работе
- •Контрольные вопросы
- •3. Задание
- •4. Методические указания
- •4. Листинг программы
- •5. Примечания
- •Лабораторная работа № 2 Использование функции групповой рассылки данных
- •Подготовка к работе
- •Контрольные вопросы
- •3. Задание
- •4. Методические указания
- •5. Примечания
- •Лабораторная работа № 3 Вычисление числа π
- •Подготовка к работе
- •Контрольные вопросы
- •Задание
- •4. Методические указания
- •5. Пример выполнения
- •6. Примечания
- •Лабораторная работа № 4 Передача данных отдельным процессам
- •Задание
- •Методические указания
- •Алгоритм
- •Пример выполнения
- •Лабораторная работа № 5 Матричные вычисления
- •Контрольные вопросы
- •Приложение а
- •Приложение в Краткий справочник функций mpi
- •Сообщения «точка-точка»
- •Групповые сообщения
- •Типы пересылаемых данных
- •Аргументы
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 Использование функции групповой рассылки данных
Подготовка к работе
Необходимо иметь работающий кластер на базе MPICH, умение компилировать программы в MS Visual C++, знание языка C.
Контрольные вопросы
Почему для выполнения параллельной программы требуется знать пароль для доступа на все компьютеры?
Почему для выпоолнения параллельной программы она должна находиться на общедоступном для всего кластера ресурсе?
Чем отличается синхронная передача, от асинхронной?
Чем отличается групповая рассылка данных – от точечной?
Почему требуется очищать файловый буфер при использовании printf()?
Для чего служит функция MPI_Barrier()?
Можно ли передать строку так же как и цифру, используя 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>