Параллельное программирование на основе 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. Контрольные вопросы
- Какой минимальный набор средств является достаточным для организации параллельных вычислений в системах с распределенной памятью?
- В чем состоит важность стандартизации средств передачи сообщений?
- Что следует понимать под параллельной программой?
- В чем различие понятий процесса и процессора?
- Какой минимальный набор функций MPI позволяет начать разработку параллельных программ?
- Как описываются передаваемые сообщения?
- Как можно организовать прием сообщений от конкретных процессов?
- Как определить время выполнения MPI -программы?
- В чем различие парных и коллективных операций передачи данных?
- Какая функция MPI обеспечивает передачу данных от одного процесса всем процессам?
- Что понимается под операцией редукции?
- В каких ситуациях следует применять барьерную синхронизацию?
- Какие режимы передачи данных поддерживаются в MPI?
- Как организуется неблокирующий обмен данными в MPI?
- В чем состоит понятие тупика? Когда функция одновременного выполнения передачи и приема гарантирует отсутствие тупиковых ситуаций?
- Какие коллективные операции передачи данных предусмотрены в MPI?
- Что понимается под производным типом данных в MPI?
- Какие способы конструирования типов имеются в MPI?
- В каких ситуациях может быть полезна упаковка и распаковка данных?
- Что понимается в MPI под коммуникатором?
- Для чего может потребоваться создание новых коммуникаторов?
- Что понимается в MPI под виртуальной топологией?
- Какие виды топологий предусмотрены в MPI?
- Для чего может оказаться полезным использование виртуальных топологий?
- В чем состоят особенности разработки параллельных программ с использованием MPI на алгоритмическом языке Fortran?
- Какие основные дополнительные возможности предусмотрены в стандарте 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. Разработайте подпрограммы для создания некоторого набора дополнительных виртуальных топологий (звезда, дерево и др.).