Вычислительный центр им. А.А. Дородницына РАН    

Раздел виртуального курса
Параллельное программирование в интерфейсе MPI


Лабораторная работа № 7:
Производные типы данных MPI


Содержание


Что такое производные типы данных MPI?

Производные типы данных – это типы данных, которые строятся из базовых типов данных MPI. Они дают переносимый и элегантный способ передачи в сообщении данных несмежных или смешанных типов. Производные типы данных должны также предоставлять эффективный метод отправки данных, поскольку данные могут перемещаться из их местоположения в памяти одного процесса в некое положение в пямяти другого процесса без какой-либо промежуточной буферизации. Производные типы данных предоставляют шаблон данных, которые будут отправлены. Все данные в типе данных идентифицируются их смещением от базового адреса. Базовый адрес – это адрес, который передают в функцию MPI, используя полученный тип данных. Это позволяет использовать тот же самый тип данных MPI для любого числа переменных той же самой формы.

MPI предоставляет ряд различных функций для создания производных типов данных, каждый нацеленный на определенные типы данных, то есть, смежные (непрерывно расположенные) данные, несмежные данные (данные, состоящие из нескольких несмежных участков) и смешанные несмежные данные.


Цели и предварительные требования

Эта работа следует за теорией, изложенной в модуле Производные типы данных MPI . Требуется вначале завершить работу по модулю Основы программирования в MPI , включая упражнения, прежде чем начинать данную лабораторную работу.

Для получения справки по синтаксису вызовов MPI можно обратиться к переводу стандарта Message Passing Interface.


Упражнение 1: Выбор производного типа данных

Файл на C для лабораторной работы: choose.c

Название файла на C для записи решения: chosen.c

Программируя с матрицей, Вам часто хочется послать только часть ее, или подматрицу. Один способ сделать это – кратный вызов команд MPI по отправке и получению с каждым элементом матрицы, которую Вы хотите передать. Это упражнение позволит Вам набить руку в выборе производного типа данных, который упростит этот процесс и сделает его более эффективным.

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

Здесь приведены этапы выполнения, которым вы должны следовать:

  1. Прочтите всю программу и сделайте обзор вызовов MPI.

  2. Чтобы заменить циклы с командами отправки и получения на единственную отправку и получение, Вы должны создать новый производный тип данных MPI, представляющий подматрицу, а затем передать его командам отправки и получения. При этом кое-что надо учесть: каково размещение матрицы в памяти? Имеет ли значение для MPI, что C сохраняет матрицы в порядке главных строк, в то время как ФОРТРАН сохраняет их по столбцам?

  3. Не забудьте передать системе созданные вами типы данных.

  4. Откомпилируйте модифицированную вами программу. Запустите программу, определив два процесса.

  5. Сравните ваш выбор полученного типа данных с тем, что содержится в файлах решения лабораторной работы. В MPI часто есть больше одного способ для осуществления тех же действий. Рассмотрите альтернативные производные типы данных, которые Вы могли бы использовать. Вам следует подумать по крайней мере о двух из них.

  6. Упражнение, оставленное читателю:
    Измените программу так, чтобы она отправляла подблок оригинальной матрицы. Можете ли Вы сделать это, не добавляя циклы?

Упражнение 2: Ввод в действие производного типа данных

Файл на C для лабораторной работы: to.complete.c

Название файла на C для записи решения: completed.c

Это упражнение иллюстрирует использование структуры производного типа данных.

  1. Прочитайте программу "to.complete", обращая особое внимание на определенную в C struct. Представьте ясную картину того, как эти типы данных расположены в памяти. Ваша цель состоит в том, чтобы создать соответствующий тип данных MPI и переправить его, как сообщение.
  2. Решите какие собственные значения для параметров запроса MPI_Type_struct вы выберите. Каковы длины блоков, смещения и типы? Должны ли Вы сделать что - нибудь специальное, чтобы удостовериться, что Вы имеете надлежащее смещение?
  3. Заполните параметры запроса MPI_Type_struct в их надлежащем порядке. В случае необходимости обращайтесь к документации MPI, касающейся этого запроса.
  4. Запустите программу на двух процессорах.

Домашнее задание лабораторной работы № 7

Выполните указанное преподавателем индивидуальное домашнее задание и отправьте решение преподавателю по электронной почте.


Очистка

После завершения работы программ и сдачи вашего решения преподавателю не забудьте очистить ваш рабочий каталог на кластерном компьютере ВЦ РАН. Исходные тексты программ можно хранить на сервере Fastcenter в вашем каталоге.


Источник идей

Writing Message-Passing Parallel Programs with MPI: A two-day course by Neil MacDonald, Elspeth Minty, Tim Harding, and Simon Brown.
Edinburgh Parallel Computing Centre
The University of Edinburgh
08/25/95


© 2003 Вычислительный центр им. А.А.Дородницына Все права защищены.
Прочтите наше Copyright руководство.