Table Of ContentМИНСК
БГУ
2002
Настоящее пособие предназначено для практического обучения
параллельному программированию в стандарте MPI (The Message
Passing Interface). В пособии содержатся: общие сведения по парал-
лельным системам и их программированию; полные справочные дан-
ные по библиотеке функций MPI; примеры программирования при-
ложений (матричные задачи, решение ДУЧП, СЛАУ, криптоанализ);
сведения по организации вычислений в различных исполнительных
средах. Имеется большой объем приложений, включающий справоч-
ные материалы и примеры MPI программ.
Издание предназначено студентам естественнонаучных направле-
ний, специалистам и научным работникам, заинтересованным в реше-
нии прикладных задач с большим объемом вычислений.
2
ОГЛАВЛЕНИЕ
ПРЕДИСЛОВИЕ ................................................................................................. 7
Р а з д е л 1. ВВЕДЕНИЕ..................................................................................... 9
Глава 1. Организация вычислений в многопроцессорных системах .... 9
1.1. Классификация многопроцессорных систем ................................. 9
1.2. Сетевой закон Амдала ...................................................................... 12
1.3. Техническая реализация многопроцессорных систем .................. 14
1.4. Программирование для систем с разделяемой памятью .............. 15
1.5. Программирование для систем с передачей сообщений ............. 21
Контрольные вопросы и задания к главе 1 .................................... 27
Глава 2. Реализации интерфейса программирования MPI .................... 28
2.1. MPICH – основная реализация MPI ............................................... 28
2.2. Способы запуска приложений в MPICH ........................................ 32
2.2.1. Запуск с помощью MPIRun.exe ................................................. 32
2.2.2. Процедура MPIConfig.exe ......................................................... 34
2.2.3. Процедура MPIRegister.exe ....................................................... 35
2.3. Библиотека MPE и логфайлы .......................................................... 35
2.4. Средства просмотра логфайлов ....................................................... 42
Контрольные вопросы и задания к главе 2 .................................... 43
Р а з д е л 2. БИБЛИОТЕКА ФУНКЦИЙ MPI .............................................. 44
Глава 3. Парные межпроцессные обмены .................................................. 44
3.1. Введение ............................................................................................ 44
3.2. Операции блокирующей передачи и блокирующего приема ...... 45
3.2.1. Блокирующая передача ............................................................. 45
3.2.2. Данные в сообщении .................................................................. 46
3.2.3. Атрибуты сообщения ............................................................... 47
3.2.4. Блокирующий прием .................................................................. 47
3.2.5. Возвращаемая статусная информация .................................. 49
3.3. Соответствие типов данных и преобразование данных ............... 50
3.3.1. Правила соответствия типов данных .................................. 50
3.3.2. Преобразование данных ............................................................ 52
3.4. Коммуникационные режимы ........................................................... 53
3.5. Семантика парного обмена между процессами ............................. 56
3.6. Распределение и использование буферов ...................................... 61
3.7. Неблокирующий обмен .................................................................... 62
3.7.1. Коммуникационные объекты ................................................... 63
3.7.2. Инициация обмена ..................................................................... 63
3.7.3. Завершение обмена .................................................................... 66
3.7.4. Семантика неблокирующих коммуникаций ........................... 68
3.7.5. Множественные завершения ................................................... 69
3.8. Проба и отмена ................................................................................. 76
3.9. Совмещенные прием и передача сообщений ................................. 80
3.10. Производные типы данных .............................................................. 82
3.10.1. Конструкторы типа данных ................................................. 83
3.10.2. Адресные функции и функции экстентов ............................. 86
3
3.10.3. Маркеры нижней и верхней границ ....................................... 87
3.10.4. Объявление и удаление объектов типа данных ................... 88
3.10.5. Использование универсальных типов данных ...................... 90
3.10.6. Примеры ................................................................................... 91
3.11. Упаковка и распаковка ..................................................................... 94
Контрольные вопросы и задания к главе 3 .................................... 99
Глава 4. Коллективные взаимодействия процессов ................................. 105
4.1. Введение ............................................................................................ 105
4.2. Коллективные операции .................................................................. 107
4.2.1. Барьерная синхронизация ......................................................... 107
4.2.2. Широковещательный обмен .................................................... 108
4.2.3. Сбор данных ............................................................................... 108
4.2.4. Рассылка ..................................................................................... 118
4.2.5. Сбор для всех процессов ............................................................ 123
4.2.6. Функция all-to-all Scatter/Gather .............................................. 125
4.3. Глобальные операции редукции ..................................................... 127
4.3.1. Функция Reduce .......................................................................... 127
4.3.2. Предопределенные операции редукции .................................... 128
4.3.3. MINLOС и MAXLOС .................................................................. 130
4.3.4. Функция All-Reduce .................................................................... 132
4.3.5. Функция Reduce-Scatter ............................................................. 133
4.3.6. Функция Scan .............................................................................. 134
4.4. Корректность ..................................................................................... 135
Контрольные вопросы и задания к главе 4 .................................... 137
Глава 5. Группы и коммуникаторы ............................................................. 142
5.1. Введение ............................................................................................ 142
5.2. Базовые концепции ........................................................................... 143
5.3. Управление группой ......................................................................... 144
5.3.1. Средства доступа в группу ...................................................... 144
5.3.2. Конструкторы групп ................................................................ 146
5.3.3. Деструкторы групп ................................................................... 149
5.4. Управление коммуникаторами ........................................................ 149
5.4.1. Доступ к коммуникаторам ...................................................... 149
5.4.2. Конструкторы коммуникаторов ............................................ 150
5.4.3. Деструкторы коммуникаторов ............................................... 152
5.5. Примеры ............................................................................................ 152
Контрольные вопросы и задания к главе 5 .................................... 154
Глава 6. Топологии процессов ....................................................................... 157
6.1. Виртуальная топология .................................................................... 157
6.2. Топологические конструкторы ........................................................ 159
6.2.1. Конструктор декартовой топологии ..................................... 159
6.2.2. Декартова функция MPI_DIMS_CREATE ............................... 160
6.2.3. Конструктор универсальной (графовой) топологии ............. 161
6.2.4. Топологические функции запроса ............................................. 162
6.2.5. Сдвиг в декартовых координатах .......................................... 166
4
6.2.6. Декомпозиция декартовых структур .................................... 168
Контрольные вопросы к главе 6 ...................................................... 170
Р а з д е л 3. ПРОГРАММИРОВАНИЕ ПРИЛОЖЕНИЙ ........................... 172
Глава 7. Матричные задачи ........................................................................... 172
7.1. Самопланирующий алгоритм умножения матриц ........................ 172
7.2. Клеточный алгоритм умножения матриц ....................................... 178
7.2.1. Клеточный алгоритм ................................................................. 178
7.2.2. Способы создания коммуникаторов ........................................ 179
7.2.3. Параллельная программа для клеточного алгоритма ............ 183
Контрольные вопросы и задания к главе 7 .................................... 185
Глава 8. Решение дифференциальных уравнений в частных
производных .................................................................................... 186
8.1. Задача Пуассона ................................................................................ 186
8.2. Параллельные алгоритмы для метода итераций Якоби ............... 187
8.2.1. Параллельный алгоритм для 1D композиции ......................... 187
8.2.2. Параллельный алгоритм для 2D композиции ......................... 191
8.2.3. Способы межпроцессного обмена ........................................... 194
Контрольные вопросы и задания к главе 8 .................................... 198
Глава 9. Параллелизм в решении задач криптоанализа ....................... 199
9.1. Криптология и криптоанализ .......................................................... 199
9.2. Криптосистема DES .......................................................................... 202
9.3. Параллельная реализация DES алгоритма ..................................... 206
Контрольные вопросы к главе 9 ..................................................... 211
Глава 10. Системы линейных алгебраических уравнений ...................... 212
10.1. Методы решения СЛАУ ................................................................... 212
10.2. Параллельные алгоритмы решения СЛАУ ................................... 214
10.2.1. Последовательный алгоритм метода простой итерации . 214
10.2.2. Параллельный алгоритм метода простой итерации ........ 216
10.2.3. Параллельный алгоритм метода Гаусса-Зейделя .............. 221
Контрольные вопросы и задания к главе 10 .................................. 223
Р а з д е л 4. ОРГАНИЗАЦИЯ ПАРАЛЛЕЛЬНЫХ ВЫЧИСЛЕНИЙ ....... 224
Глава 11. Обработка исключений и отладка ............................................. 224
11.1. Обработка исключений .................................................................... 224
11.2. Отладка параллельных приложений ............................................... 228
11.2.1. Трассировка ............................................................................. 229
11.2.2. Использование последовательных отладчиков .................... 230
11.2.3. Псевдопараллельный отладчик .............................................. 231
11.2.4. Отладка программ MPI с помощью TotalView .................... 233
Контрольные вопросы к главе 11 ................................................... 234
Глава 12. Эффективность параллельных вычислений ............................ 235
12.1. Аналитическая оценка эффективности вычислений ..................... 235
12.2. Способы измерения эффективности вычислений ......................... 239
12.3. Интерфейс профилирования ............................................................ 240
Контрольные вопросы к главе 12 .................................................... 243
Глава 13. Параллельные библиотеки .......................................................... 244
5
13.1. Библиотека ScaLAPACK .................................................................. 244
13.2. Библиотека PETSc ............................................................................ 250
13.3. Примеры ............................................................................................ 257
Контрольные вопросы к главе 13 ................................................... 267
ПРИЛОЖЕНИЯ .................................................................................................. 269
Приложение 1. Константы для языков С и Fortran ........................................ 269
Приложение 2. Перечень функций MPI-1.1 ................................................... 272
Приложение 3. Организации параллельных вычислений в сети
под управлением Windows NT ......................................... 277
Приложение 4. Характеристики коммуникационных сетей для
кластеров ................................................................................. 282
Приложение 5. Варианты решения заданий для самостоятельной
работы ...................................................................................... 284
ИСТОЧНИКИ ИНФОРМАЦИИ ...................................................................... 318
ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ ......................................................................... 320
УКАЗАТЕЛЬ ФУНКЦИЙ .................................................................................. 322
6
ПРЕДИСЛОВИЕ
Настоящее пособие предназначено для практического обучения
параллельному программированию в стандарте MPI (The Message
Passing Interface). В пособии содержатся: общие сведения по парал-
лельным системам и их программированию; полные справочные дан-
ные по библиотеке функций MPI; примеры программирования при-
ложений, важных для многих областей науки и техники; сведения по
организации вычислений в различных исполнительных средах.
MPI является библиотекой функций обмена данными между про-
цессами, реализованная для языков С и Fortran. Головной организа-
цией проекта MPI является Аргоннская национальная лаборатория
США [1]. После появления первой версии стандарта MPI в мае 1994
года MPI получил широкое распространение. В настоящее время
стандарт MPI адаптирован для большинства суперЭВМ и кластеров, в
том числе и в России [2]. Благодаря простоте технической реализации
кластеров на базе локальных сетей сотни университетов используют
MPI для учебных и научных целей.
Стандарт MPI-1 использует статическое размещение процессов и
данных по процессорам, а стандарт MPI-2 предназначен для динами-
ческого распределения работ. В настоящее время стандарт MPI-2 пол-
ностью не реализован и в основном используется стандарт MPI-1. На-
стоящее пособие построено на версии стандарта MPI-1.2 с до-
бавлением привязок для языка С++. Все ошибки предыдущих версий
исключены.
При создании пособия использовались следующие источники ин-
формации:
• Материалы сайта Аргоннской национальной лаборатории [1], где
размещены: различные версии стандартов MPI-1 и MPI-2, доку-
ментация и дистрибутивы для различных версий MPICH, парал-
лельные библиотеки и много других материалов справочного и
учебного характера.
• Материалы сайта Научно-исследовательского вычислительного
центра МГУ [3].
• Книги и руководства, авторами которых являются основные разра-
ботчики библиотеки интерфейса MPI и его реализаций [4,5,6,7,8].
• Переводы, выполненные в 2001 году, в рамках программы Союзно-
го государства СКИФ по разработке кластерных систем [9,10,11].
7
Все разделы пособия сопровождаются большим количеством при-
меров, контрольными вопросами, заданиями для самостоятельной ра-
боты. Поскольку MPI используется для программирования на языках
С и Fortran, то и примеры даются попеременно на обоих языках. Для
большинства заданий в приложении приведены готовые и протести-
рованные программы-ответы на языке С. В приложении содержится
только часть программ-ответов, это вызвано ограниченным объемом
книги. Остальные ответы и многие другие материалы (дистрибутивы
MPICH, параллельных библиотек, руководства по инсталляции и мно-
го другой документации) содержатся на сайте Белорусского госу-
дарственного университета [12] или могут быть получены по элек-
тронной почте, адрес которой указан ниже.
Предполагается, что на начальном уровне обучение будет прово-
дится на сетях персональных ЭВМ под управлением операционной
системы Windows NT с использованием языка С, поэтому в приложе-
нии рассмотрены вопросы создания и настройки локальной сети на
базе Windows NT (настройка сети, MPICH, среды языка С) для на-
писания приложений.
Настоящее пособие увидело свет благодаря помощи многих лю-
дей. Постоянную поддержку в издании пособия оказывали А. Н. Кур-
бацкий и С. Г. Мулярчик, много советов по содержанию книги дал
М. К. Буза. Практическая проверка некоторых примеров выполнена
студентами А. Е. Верхотуровым, А. Н. Гришановичем и А. В. Орло-
вым. Глава 10 написана с участием Г. Ф. Астапенко. В обсуждении
работы принимали участие А. С. Липницкий, В. Ф. Ранчинский, Г. К.
Афанасьев и многие другие сотрудники кафедры информатики.
Авторы будут признательны всем, кто поделится своими сообра-
жениями по совершенствованию данного пособия. Русскоязычная тер-
минология по MPI еще не устоялась, поэтому некоторые термины, ис-
пользованные в пособии, могут оказаться не совсем удачными. Воз-
можные предложения и замечания по этим и другим вопросам просим
присылать по адресу:
Республика Беларусь
220050, Минск, проспект Франциска Скорины, 4
Белорусский государственный университет
Факультет радиофизики и электроники, кафедра информатики
E-mail: [email protected], [email protected]
8
Р А З Д Е Л 1. ВВЕДЕНИЕ
Глава 1. ОРГАНИЗАЦИЯ ВЫЧИСЛЕНИЙ
В МНОГОПРОЦЕССОРНЫХ СИСТЕМАХ
В главе 1 приведен обзор методов организации вычислений в со-
временных многопроцессорных системах, получивших в последние
годы широкое распространение, рассматривается классификация сис-
тем, эффективность параллельных вычислений, техническая реализа-
ция многопроцессорных систем и систем передачи данных, методы
программирования и, наконец, делается переход к основному объекту
настоящего издания – системе программирования в стандарте MPI.
1.1. КЛАССИФИКАЦИЯ МНОГОПРОЦЕССОРНЫХ СИСТЕМ
Наиболее известная классификация параллельных ЭВМ предло-
жена Флинном [13] и отражает форму реализуемого ЭВМ паралле-
лизма. Основными понятиями классификации являются "поток ко-
манд" и "поток данных". Под потоком команд упрощенно понимают
−
последовательность команд одной программы. Поток данных это
последовательность данных, обрабатываемых одной программой.
Согласно этой классификации имеется четыре больших класса ЭВМ:
1) ОКОД (одиночный поток команд − одиночный поток данных) или
−
SISD (Single Instruction Single Data). Это последовательные ЭВМ,
в которых выполняется единственная программа, т. е. имеется
только один счетчик команд.
2) ОКМД (одиночный поток команд − множественный поток данных)
или SIMD (Single Instruction – Multiple Data). В таких ЭВМ выпол-
няется единственная программа, но каждая команда обрабатывает
массив данных. Это соответствует векторной форме параллелизма.
3) МКОД (множественный поток команд− одиночный поток данных)
−
или MISD (Multiple Instruction Single Data). Подразумевается, что
в данном классе несколько команд одновременно работает с одним
элементом данных, однако эта позиция классификации Флинна на
практике не нашла применения.
4) МКМД (множественный поток команд − множественный поток
−
данных) или MIMD (Multiple Instruction Multiple Data). В таких
ЭВМ одновременно и независимо друг от друга выполняется не-
сколько программных ветвей, в определенные промежутки време-
ни обменивающихся данными. Такие системы обычно называют
9
многопроцессорными. Далее будут рассматриваться только много-
процессорные системы.
Классы многопроцессорных систем. В основе МКМД-ЭВМ ле-
жит традиционная последовательная организация программы, расши-
ренная добавлением специальных средств для указания независимых
фрагментов, которые можно выполнять параллельно. Параллельно-
последовательная программа привычна для пользователя и позволяет
относительно просто собирать параллельную программу из обычных
последовательных программ.
МКМД-ЭВМ имеет две разновидности: ЭВМ с разделяемой (об-
щей) и распределенной (индивидуальной) памятью. Структура этих
ЭВМ представлена на рис. 1.1.
П
П П П П П
Коммутатор ИП ИП ИП
Разделяемая память Коммутатор
а б
Рис. 1.1. Структура ЭВМ с разделяемой (а)
и индивидуальной (б) памятью.
Здесь: П – процессор, ИП − индивидуальная память.
Главное различие между МКМД-ЭВМ с общей и индивидуальной
памятью состоит в характере адресной системы. В машинах с разде-
ляемой памятью адресное пространство всех процессоров является
единым, следовательно, если в программах нескольких процессоров
встречается одна и та же переменная Х, то эти процессоры будут об-
ращаться в одну и ту же физическую ячейку общей памяти. Это вызы-
вает как положительные, так и отрицательные последствия.
Наличие общей памяти не требует физического перемещения дан-
ных между взаимодействующими программами, которые параллельно
выполняются в разных процессорах. Это упрощает программирование
и исключает затраты времени на межпроцессорный обмен.
Однако одновременное обращение нескольких процессоров к об-
щим данным может привести к получению неверных результатов.
Рассмотрим следующий пример. Пусть имеется система с разделяе
10