Лабораторные работы

Для выполнения лабораторных работ используется WMPI-1.3 – полная реализация стандарта Message Passing Interface для платформы Microsoft Win32, разработанная в университете Coimbra (Португалия). Это единственная бесплатная реализация, позволяющая реализовать работу коллектива персональных компьютеров начиная с Windows’98. Библиотека откомпилирована для использования с Microsoft Visual C++ 6 и Digital Visual Fortran 6.0. Необходимые файлы:

wmpi_daemon.exe Загрузчик параллельных программ, необходим для удаленного запуска WMPI-приложений
cwmpi.dll Динамическая библиотека функций WMPI.
bcwmpi.lib, cvwmpi.lib, cdvlibf.lib Переходные библиотеки для компоновки с Borland C++ (Builder), Microsoft Visual C++ и Visual Fortran соотвественно.
mpi.h Заголовочные файлы.
program.pg Файл, описывающий коллектив компьютеров, на которых будет организована работа параллельного приложения.
program.c Исходный текст программы

Для компиляции программ, использующих WMPI, с помощью Borland C++, необходимо: написать консольное приложение (например, program.c), скопировать в рабочую папку файлы «mpi.h» и «bcwmpi.lib», и в командной строке набрать: bcc32 program.c bcwmpi.lib.

Для компиляции программ, использующих WMPI, с помощью Visual Fortran, необходимо: создать проект консольного приложения, присоединить к нему библиотеки «cvwmpi.lib» и «cdvlibf.lib», установить: Project Settings  Fortran  Libraries: Multithreaded DLL.

Для компиляции программ, использующих WMPI, с помощью Visual С++, необходимо создать проект консольного приложения, присоединить к нему библиотеку «cvwmpi.lib», установить: Project Settings  C  Libraries: Multithreaded DLL.

Для запуска программ, использующих WMPI, необходимо описать в файле «program.pg» рабочую группу компьютеров, например:

local 0 
Lab40-2 1 c:\wmpi\myname\program.exe
Lab40-3 1 c:\wmpi\myname\program.exe
Lab40-4 1 c:\wmpi\myname\program.exe

Предполагается, что пользователь работает на машине Lab40-1. На машинах Lab40-2, Lab40-3, Lab40-4 должен быть запущен сервис wmpi_daemon.exe. К папкам «c:\wmpi\myname» на этих машинах должен быть открыт пользователю полный лоступ. В эти папки должны быть помещены копии исходной программы, созданной на машине пользователя L40-1. Можно объединить компиляцию и рассылку программы в одном bat-файле:

bcc32 program.c bcwmpi.lib
copy program.exe Lab40-2\\c:\wmpi\myname\program.exe
copy program.exe Lab40-3\\c:\wmpi\myname\program.exe
copy program.exe Lab40-4\\c:\wmpi\myname\program.exe

После выполнения подготовительных действий, достаточно на машине пользователя запустить программу «program.exe». В случае «зависания» программы необходимо принудительно завершить работу параллельного приложения на всех машинах коллектива.

Задание лабораторных работ

  1. Написание минимального параллельного приложения с помощью «обрамляющих» функций MPI: MPI_Init, MPI_Comm_size, MPI_Comm_rank, MPI_Finalize. Отработка процесса компиляции и запуска параллельного приложения. Как результат, программа должна выводить на печать номер процесса в группе и размер группы.
  2. Передача сообщений типа точка-точка. Программа должна реализовать передачу данных по кругу, пока когда каждый процесс не получит назад свои данные. Используемые функции: MPI_Send, MPI_Recv, MPI_Sendrecv.
  3. Коллективные операции. Коллектив машин вычисляет значение определенного одномерного интеграла от какой-либо функции. Машина с номером 0 принимает с консоли исходные данные (отрезок интегрирования и др.), распространяет их среди членов коллектива, затем все вместе вычисляют интеграл (разбив отрезок на равные части), после чего результат собирается на машине с номером 0 (путем коллективного вычисления) и выводится на печать. Используемые функции: MPI_Bcast, MPI_Reduce.
  4. Коллективные операции. Работа имитирует реальный поиск в параллельной базе данных. Некоторое множество записей (ключ, данные) распределено по машинам коллектива. Пользователь за головной машиной (№0) вводит некоторый ключ. Головная машина рсапространяет этот ключ в коллективе, после чего все машины ищут у себя записи с таким ключом. Все машины уведомляют головную о количестве найденных ими записей. Головная машина выделяет буфер нужной длины, собирает ото всех машин результаты поиска и выводит на печать. Используемые функции: MPI_Gather, MPI_Gatherv.
  5. Области связи. Множество процессов делится на две части – четные и нечетные процессы – каждая со своим коммуникатором. Как результат, программа должна выводить на печать номер процесса в новом коммуникаторе и размер новой группы.
  6. Коллективные операции. Головная машина построчно загружает с консоли квадратную матрицу. Пусть для простоты размерность матрицы кратна числу машин. Головная машина раздает матрицу всем машинам в коллективе (каждой – свое подмножество строк). Реализовать транспонирование уже распределенной матрицы. Используемые функции: MPI_Send, MPI_Recv, MPI_Alltoall, MPI_Alltoallv.
  7. Пользовательские типы данных. Создать производный тип данных для структуры. Создать производный тип данных для вектора из четных элементов массива. Использовать созданные типы для обмена четных процессов с нечетными соседями.
  8. Виртуальная топология. Предполагается, что количество процессов в группе равно 4. Головная машина построчно загружает с консоли квадратную матрицу. На множестве процессов вводится декартова топология. Матрица распределяется между процессами в шахматном порядке (например, левый верхний квадрат – процессу (0,0) в декартовой топологии).