Опубликован: 28.07.2007 | Доступ: свободный | Студентов: 2030 / 506 | Оценка: 4.53 / 4.26 | Длительность: 25:10:00
ISBN: 978-5-9556-0096-3
Специальности: Программист
Лекция 5:

Параллельное программирование на основе MPI

5.9. Краткий обзор лекции

Данная лекция посвящена рассмотрению методов параллельного программирования для вычислительных систем с распределенной памятью с использованием MPI.

В самом начале лекции отмечается, что MPIинтерфейс передачи сообщений ( message passing interface ) – является в настоящий момент одним из основных подходов к разработке параллельных программ для вычислительных систем с распределенной памятью. Использование MPI позволяет распределить вычислительную нагрузку и организовать информационное взаимодействие ( передачу данных ) между процессорами. Сам термин MPI означает, с одной стороны, стандарт, которому должны удовлетворять средства организации передачи сообщений, а с другой стороны, обозначает программные библиотеки, которые обеспечивают возможность передачи сообщений и при этом соответствуют всем требованиям стандарта MPI.

В подразделе 5.1 рассматривается ряд понятий и определений, являющихся основополагающими для стандарта MPI. Так, дается представление о параллельной программе > как множестве одновременно выполняемых процессов. При этом процессы могут выполняться на разных процессорах, но на одном процессоре могут располагаться и несколько процессов (в этом случае их исполнение осуществляется в режиме разделения времени). Далее приводится краткая характеристика понятий для операций передачи сообщений, типов данных, коммуникаторов и виртуальных топологий.

В подразделе 5.2 проводится быстрое и простое введение в разработку параллельных программ с использованием MPI. Излагаемого в подразделе материала достаточно для начала разработки параллельных программ разного уровня сложности.

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

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

В подразделе 5.5 излагается материал, связанный с использованием в MPI производных типов данных. В подразделе представлены все основные способы конструирования производных типов – непрерывный, векторный, индексный и структурный. Обсуждается также возможность явного формирования сложных сообщений при помощи упаковки и распаковки данных.

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

В подразделе 5.7 рассматриваются возможности MPI по использованию виртуальных топологий. В подразделе представлены топологии, поддерживаемые MPI, – прямоугольная решетка произвольной размерности ( декартова топология ) и топология графа любого необходимого вида.

В подразделе 5.8 приводятся дополнительные сведения о MPI. В их числе обсуждаются вопросы разработки параллельных программ с использованием MPI на алгоритмическом языке Fortran, дается краткая характеристика сред выполнения MPI -программ и приводится обзор дополнительных возможностей стандарта MPI -2.

5.10. Обзор литературы

Имеется ряд источников, в которых может быть получена информация о MPI. Прежде всего, это информационный ресурс Интернет с описанием стандарта MPI: http://www.mpiforum.org. Одна из наиболее распространенных реализаций MPI – библиотека MPICH – представлена на http://www-unix.mcs.anl.gov/mpi/mpich (библиотека MPICH2 с реализацией стандарта MPI -2 содержится на http://www-unix.mcs.anl.gov/mpi/mpich2). Русскоязычные материалы о MPI имеются на сайте http://www.parallel.ru.

Среди опубликованных изданий могут быть рекомендованы работы [ [ 4 ] , [ 40 ] [ 42 ] , [ 57 ] ]. Описание стандарта MPI -2 может быть получено в [ [ 42 ] ]. Среди русскоязычных изданий могут быть рекомендованы работы [ [ 2 ] , [ 4 ] , [ 12 ] ].

Следует отметить также работу [ [ 63 ] ], в которой изучение MPI проводится на примере ряда типовых задач параллельного программирования – матричных вычислений, сортировки, обработки графов и др.

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

  1. Какой минимальный набор средств является достаточным для организации параллельных вычислений в системах с распределенной памятью?
  2. В чем состоит важность стандартизации средств передачи сообщений?
  3. Что следует понимать под параллельной программой?
  4. В чем различие понятий процесса и процессора?
  5. Какой минимальный набор функций MPI позволяет начать разработку параллельных программ?
  6. Как описываются передаваемые сообщения?
  7. Как можно организовать прием сообщений от конкретных процессов?
  8. Как определить время выполнения MPI -программы?
  9. В чем различие парных и коллективных операций передачи данных?
  10. Какая функция MPI обеспечивает передачу данных от одного процесса всем процессам?
  11. Что понимается под операцией редукции?
  12. В каких ситуациях следует применять барьерную синхронизацию?
  13. Какие режимы передачи данных поддерживаются в MPI?
  14. Как организуется неблокирующий обмен данными в MPI?
  15. В чем состоит понятие тупика? Когда функция одновременного выполнения передачи и приема гарантирует отсутствие тупиковых ситуаций?
  16. Какие коллективные операции передачи данных предусмотрены в MPI?
  17. Что понимается под производным типом данных в MPI?
  18. Какие способы конструирования типов имеются в MPI?
  19. В каких ситуациях может быть полезна упаковка и распаковка данных?
  20. Что понимается в MPI под коммуникатором?
  21. Для чего может потребоваться создание новых коммуникаторов?
  22. Что понимается в MPI под виртуальной топологией?
  23. Какие виды топологий предусмотрены в MPI?
  24. Для чего может оказаться полезным использование виртуальных топологий?
  25. В чем состоят особенности разработки параллельных программ с использованием MPI на алгоритмическом языке Fortran?
  26. Какие основные дополнительные возможности предусмотрены в стандарте MPI -2?

5.12. Задачи и упражнения

Подраздел 5.2.

1. Разработайте программу для нахождения минимального (максимального) значения среди элементов вектора.

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

3. Разработайте программу, в которой два процесса многократно обмениваются сообщениями длиной n байт. Выполните эксперименты и оцените зависимость времени выполнения операции передачи данных от длины сообщения. Сравните с теоретическими оценками, построенными по модели Хокни.

Подраздел 5.3.

4. Подготовьте варианты ранее разработанных программ с разными режимами выполнения операций передачи данных. Сравните время выполнения операций передачи данных при разных режимах работы.

5. Подготовьте варианты ранее разработанных программ с использованием неблокирующего способа выполнения операций передачи данных. Оцените количество вычислительных операций, необходимое для того, чтобы полностью совместить передачу данных и вычисления. Разработайте программу, в которой бы полностью отсутствовали задержки вычислений из-за ожидания передаваемых данных.

6. Выполните задание 3 с использованием операции одновременного выполнения передачи и приема данных. Сравните результаты вычислительных экспериментов.

Подраздел 5.4.

7. Разработайте программу-пример для каждой имеющейся в MPI коллективной операции.

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

9. Разработайте программу, выполните эксперименты и сравните результаты для разных алгоритмов реализации операции сбора, обработки и рассылки данных всех процессам (функция MPI_Allreduce ).

Подраздел 5.5.

10. Разработайте программу-пример для каждого имеющегося в MPI способа конструирования производных типов данных.

11. Разработайте программу-пример с использованием функций упаковки и распаковки данных. Выполните эксперименты и сравните с результатами при использовании производных типов данных.

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

13. Разработайте программу-пример для каждой из рассмотренных функций для управления процессами и коммуникаторами.

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

15. Изучите самостоятельно и разработайте программы-примеры для передачи данных между процессами разных коммуникаторов.

Подраздел 5.7.

16. Разработайте программу-пример для декартовой топологии.

17. Разработайте программу-пример для топологии графа.

18. Разработайте подпрограммы для создания некоторого набора дополнительных виртуальных топологий (звезда, дерево и др.).