Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лабы по ВС 1-09 -2011г.doc
Скачиваний:
7
Добавлен:
14.11.2019
Размер:
1.29 Mб
Скачать
  1. Лабораторная работа №8. Написание программ с использованием библиотеки mpi

Цель работы – изучение структуры MPI-программ и практическая реализация программ.

Теоретическая часть

Основная схема программы MPI подчиняется следующим общим шагам:

  1. Инициализация для коммуникаций

  2. Коммуникации распределения данных по процессам

  3. Выход "чистым" способом из системы передачи сообщений по завершении коммуникаций

MPI имеет свыше 125 функций. Тем не менее, начинающий программист обычно может иметь дело только с шестью функциями, которые перечислены ниже:

  • Инициализация для коммуникаций

MPI_Init инициализирует окружение MPI

MPI_Comm_size возвращает число процессов

MPI_Comm_rank возвращает номер текущего процесса (ранг = номер по-порядку)

  • Коммуникации распределения данных по процессами

MPI_Send отправляет сообщение

MPI_Recv получает сообщение

  • Выход из системы передачи сообщений

MPI_Finalize

Сообщения MPI состоят из двух основных частей: отправляемые/получаемые данные, и сопроводительная информация (записи на конверте /оболочке/), которая помогает отправить данные по определенному маршруту. Обычно существуют три вызываемых параметра в вызовах передачи сообщений MPI, которые описывают данные и три других параметра, которые определяют маршрут:

Сообщение = данные (3 параметра) + оболочка (3 параметра)

Данные определяют информацию, которая будет отослана или получена. Оболочка (конверт) используется в маршрутизации сообщения к получателю и связывает вызовы отправки с вызовами получения.

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

Для C, общий формат фактических вызовов, используемых MPI, имеет вид

rc = MPI_Xxxxx(parameter, ... )

Заметим, что регистр здесь важен. Например, MPI должно быть заглавным, так же как и первая буква после подчеркивания. Все последующие символы должны быть в нижнем регистре. Переменная rc --- есть некий код возврата, имеющий целый тип. В случае успеха, он устанавливается в MPI_SUCCESS.

Программа на C должна включать файл "mpi.h". Он содержит определения для констант и функций MPI. В приложении 8.5 приводятся тексты программ на языке Си с использованием библиотеки MPI. Получите у преподавателя номер образца задачи, которую Вам надо выполнить на кластере и выполнить требуемое задание.

Вопросы для самопроверки

  1. Какую структуру имеет простая MPI-программа?

  2. Какие основные функции реализует библотека MPI?

  3. Как организовать передачу сообщений между процессами?

  4. Для чего используются коммуникаторы?

Задание на лабораторную работу

  1. Необходимо разработать MPI-программы в соответствии с таблицей вариантов заданий (Таблица 8.1):

  • Передачи сообщений с буферизацией;

  • С использованием таймера;

  • С определением структуры проходящего сообщения;

  • С анализом тупиковых ситуаций при обмене;

  • Определяющую базовые характеристики коммуникационной сети: латентность;

  • Определяющую базовые характеристики коммуникационной сети: максимально достижимую пропускную способность и длину сообщений, на которой она достигается;

  • Приёма-передачи сообщений без блокировки;

  • Реализацию отложенных запросов на взаимодействие;

  • Или другую на свой выбор, использующую функциональные возможности библиотеки MPI.

Таблица 8.1

варианта

примеров, необходимых к реализации

варианта

примеров, необходимых к реализации

1

2

3

4

5

6

7

8

13, 18

1, 20

2, 16

3, 11

12

14

19

4,17

9

10

11

12

13

14

15

16

15

9

7

4, 6

5, 17

6, 11

1, 8

2, 10

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

  2. Оформить отчет о проделанной работе.

Содержание отчета

  1. Цель работы.

  2. Ответы на вопросы для самопроверки.

  3. Схемы алгоритмов и их описание.

  4. Распечатки файлов вывода, полученных в результате работы программы.

  5. Анализ полученных результатов.

Приложение. Список вариантов образцов решаемых задач.

Пример простейшей МРI-программы на языке Cи выглядит следующим образом:

Пример 1:

#include <stdio.h>

#include "mpi.h"

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

{

int ierr;

printf("Before MPI_Init ...\n");

ierr=MPI_Init(&argc,&argv) ;

printf("Parallel section\n");

ierr=MPI_Finalize ();

printf("After MPI_Finalize\n") ; }

В зависимости от реализации MPI строчки «Before Mpi_Init» и «After Mpi_Finalize» может печатать либо один выделенный процесс, либо все запущенные процессы приложения. Строчку «Parallel section» должны напечатать все процессы. Порядок вывода строк с разных процессов может быть произвольным.

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

Пример 2:

#include <stdio.h>

#include "mpi.h"

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

{

int ierr,size,rank;

MPI_Init(&argc,&argv);

ierr=MPI_Comm_size(MPI_COMM_WORLD, &size);

ierr=MPI_Comm_rank(MPI_COMM_WORLD, &rank);

printf("Process %i size %i\n",rank,size);

ierr=MPI_Finalize();

}

Cтрока, соответствующая вызову процедуры printf, будет выведена столько раз, сколько процессов было порождено при запуске программы. Порядок появления строк заранее не определен и может быть, вообще говоря, любым. Гарантируется только то, что содержимое отдельных строк не будет перемешано друг с другом.