Россия, г. Саранск |
Параллельное программирование на основе MPI
6.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.
Среди опубликованных изданий могут быть рекомендованы работы Group, et al. (1994), Pacheco (1996), Snir, et al. (1996), Group, et al. (1999a). Описание стандарта MPI-2 может быть получено в Group, et al. (1999b). Среди русскоязычных изданий могут быть рекомендованы работы Воеводин В.В. и Воеводин Вл.В. (2002), Немнюгина и Стесик (2002), Корнеева (2003).
Следует отметить также работу Quinn (2003), в которой изучение MPI проводится на примере ряда типовых задач параллельного программирования - матричных вычислений, сортировки, обработки графов и др.
6.11. Контрольные вопросы
- Какой минимальный набор средств является достаточным для организации параллельных вычислений в системах с распределенной памятью?
- В чем состоит важность стандартизации средств передачи сообщений?
- Что следует понимать под параллельной программой?
- В чем различие понятий процесса и процессора?
- Какой минимальный набор функций MPI позволяет начать разработку параллельных программ?
- Как описываются передаваемые сообщения?
- Как можно организовать прием сообщений от конкретных процессов?
- Как определить время выполнения MPI программы?
- В чем различие парных и коллективных операций передачи данных?
- Какая функция MPI обеспечивает передачу данных от одного процесса всем процессам?
- Что понимается под операцией редукции?
- В каких ситуациях следует применять барьерную синхронизацию?
- Какие режимы передачи данных поддерживаются в MPI?
- Как организуется неблокирующий обмен данными в MPI?
- В чем состоит понятие тупика? В каких ситуациях функция одновременного выполнения передачи и приема гарантирует отсутствие тупиковых ситуаций?
- Какие коллективные операции передачи данных предусмотрены в MPI?
- Что понимается под производным типом данных в MPI?
- Какие способы конструирования типов имеются в MPI?
- В каких ситуациях может быть полезна упаковка и распаковка данных?
- Что понимается в MPI под коммуникатором?
- Для чего может потребоваться создание новых коммуникаторов?
- Что понимается в MPI под виртуальной топологией?
- Какие виды топологий предусмотрены в MPI?
- Для чего может оказаться полезным использование виртуальных топологий?
- В чем состоят особенности разработки параллельных программ с использованием MPI на алгоритмическом языке Fortran?
- Какие основные дополнительные возможности предусмотрены в стандарте MPI-2?
6.12. Задачи и упражнения
Подраздел 6.2.
- Разработайте программу для нахождения минимального (максимального) значения среди элементов вектора.
- Разработайте программу для вычисления скалярного произведения двух векторов.
- Разработайте программу, в которой два процесса многократно обмениваются сообщениями длиной n байт. Выполните эксперименты и оцените зависимость времени выполнения операции данных от длины сообщения. Сравните с теоретическими оценками, построенными по модели Хокни.
Подраздел 6.3.
- Подготовьте варианты ранее разработанных программ с разными режимами выполнения операций передачи данных. Сравните времена выполнения операций передачи данных при разных режимах работы.
- Подготовьте варианты ранее разработанных программ с использованием неблокирующего способа выполнения операций передачи данных. Оцените необходимое количество вычислительных операций, для того чтобы полностью совместить передачу данных и вычисления. Разработайте программу, в которой бы полностью отсутствовали задержки вычислений из-за ожидания передаваемых данных.
- Выполните задание 3 с использованием операции одновременного выполнения передачи и приема данных. Сравните результаты вычислительных экспериментов.
Подраздел 6.4.
- Разработайте программу-пример для каждой имеющейся в MPI коллективной операции.
- Разработайте реализации коллективных операций при помощи парных обменов между процессами. Выполните вычислительные эксперименты и сравните времена выполнения разработанных программ и функций MPI для коллективных операций.
- Разработайте программу, выполните эксперименты и сравните результаты для разных алгоритмов реализации операции сбора, обработки и рассылки данных всех процессам (функция MPI_Allreduce).
Подраздел 6.5.
- Разработайте программу-пример для каждого имеющегося в MPI способа конструирования производных типов данных.
- Разработайте программу-пример с использованием функций упаковки и распаковки данных. Выполните эксперименты и сравните с результатами при использовании производных типов данных.
- Разработайте производные типы данных для строк, столбцов, диагоналей матриц.
- Разработайте программу-пример для каждой из рассмотренных функций для управления процессами и коммуникаторами.
- Разработайте программу для представления множества процессов в виде прямоугольной решетки. Создайте коммуникаторы для каждой строки и столбца процессов. Выполните коллективную операцию для всех процессов и для одного из созданных коммуникаторов. Сравните время выполнения операции.
- Изучите самостоятельно и разработайте программы-примеры для передачи данных между процессами разных коммуникаторов.
Подраздел 6.7.
- Разработайте программу-пример для декартовой топологии.
- Разработайте программу-пример для топологии графа.
- Разработайте подпрограммы для создания некоторого набора дополнительных виртуальных топологий (звезда, дерево и др.).