Предисловие | 12 |
|
Глава 1. Технология параллельного программирования MPI | 14 |
|
Алфавитный указатель по функциям MPI | 14 |
1.1. Введение | 18 |
1.2. Основные понятия | 19 |
1.3. Общие процедуры MPI | 21 |
Вопросы и задания | 30 |
1.4. Передача и приём сообщений между отдельными процессами | 30 |
1.4.1. Операции типа точка-точка | 30 |
1.4.2. Передача и приём сообщений с блокировкой | 31 |
1.4.3. Передача и приём сообщений без блокировки | 49 |
1.4.4. Отложенные запросы на взаимодействие | 63 |
1.4.5. Тупиковые ситуации (deadlock) | 67 |
Вопросы и задания | 70 |
1.5. Коллективные взаимодействия процессов | 72 |
1.5.1. Общие положения | 72 |
1.5.2. Барьер | 73 |
1.5.3. Коллективные операции пересылки данных | 76 |
1.5.4. Глобальные операции | 85 |
1.5.5. Пользовательские глобальные операции | 94 |
Вопросы и задания | 96 |
1.6. Группы и коммуникаторы | 97 |
1.6.1. Общие положения | 97 |
1.6.2. Операции с группами процессов | 98 |
1.6.3. Операции с коммуникаторами | 105 |
1.6.4. Интеркоммуникаторы | 111 |
1.6.5. Атрибуты | 115 |
Вопросы и задания | 124 |
1.7. Виртуальные топологии | 126 |
1.7.1. Общие положения | 126 |
1.7.2. Декартова топология | 127 |
1.7.3. Топология графа | 133 |
Вопросы и задания | 142 |
1.8. Пересылка разнотипных данных | 143 |
1.8.1. Общие положения | 143 |
1.8.2. Производные типы данных | 143 |
1.8.3. Упаковка данных | 155 |
Вопросы и задания | 159 |
1.9. Объект info | 160 |
1.9.1. Общие положения | 160 |
1.9.2. Работа с объектом info | 160 |
Вопросы и задания | 163 |
1.10. Динамическое управление процессами | 163 |
1.10.1. Общие положения | 163 |
1.10.2. Порождение процессов | 164 |
1.10.3. Клиент-серверная связь | 168 |
1.10.4. Удаление связи процессов | 172 |
1.10.5. Связь через сокеты | 172 |
Вопросы и задания | 173 |
1.11. Односторонние коммуникации | 173 |
1.11.1. Общие положения | 173 |
1.11.2. Работа с окном | 174 |
1.11.3. Передача данных | 175 |
1.11.4. Синхронизация | 177 |
Вопросы и задания | 186 |
1.12. Внешние интерфейсы | 186 |
1.12.1. Обобщённые запросы | 186 |
1.12.2. Информация из статуса | 188 |
1.12.3. Нити | 189 |
Вопросы и задания | 191 |
1.13. Параллельный ввод/вывод | 192 |
1.13.1. Определения | 192 |
1.13.2. Работа с файлами | 194 |
1.13.3. Доступ к данным | 204 |
Вопросы и задания | 222 |
1.14. Обработка ошибок | 223 |
1.14.1. Общие положения | 223 |
1.14.2. Обработчики ошибок, связанные с коммуникаторами | 224 |
1.14.3. Обработчики ошибок, связанные с окнами | 225 |
1.14.4. Обработчики ошибок, связанные с файлами | 226 |
1.14.5. Дополнительные процедуры | 227 |
1.14.6. Коды и классы ошибок | 228 |
1.14.7. Вызов обработчиков ошибок | 231 |
Вопросы и задания | 233 |
|
Глава 2. Технология параллельного программирования OpenMP | 234 |
|
Алфавитный указатель по директивам, процедурам, опциям и переменным окружения OpenMP | 234 |
Директивы | 234 |
Опции | 234 |
Процедуры | 235 |
Переменные окружения | 235 |
2.1. Введение | 236 |
2.2. Основные понятия | 238 |
2.2.1. Компиляция программы | 238 |
2.2.2. Модель параллельной программы | 239 |
2.2.3. Директивы и процедуры | 240 |
2.2.4. Выполнение программы | 241 |
2.2.5. Замер времени | 242 |
Вопросы и задания | 243 |
2.3. Параллельные и последовательные области | 244 |
2.3.1. Директива parallel | 244 |
2.3.2. Сокращённая запись | 247 |
2.3.3. Переменные среды и вспомогательные процедуры | 247 |
2.3.4. Директива single | 255 |
2.3.5. Директива master | 258 |
Вопросы и задания | 260 |
2.4. Модель данных | 260 |
Вопросы и задания | 268 |
2.5. Распределение работы | 268 |
2.5.1. Низкоуровневое распараллеливание | 268 |
2.5.2. Параллельные циклы | 270 |
2.5.3. Параллельные секции | 281 |
2.5.4. Директива workshare | 285 |
2.5.5. Задачи (tasks) | 286 |
Вопросы и задания | 290 |
2.6. Синхронизация | 291 |
2.6.1. Барьер | 291 |
2.6.2. Директива ordered | 292 |
2.6.3. Критические секции | 293 |
2.6.4. Директива atomic | 295 |
2.6.5. Замки | 297 |
2.6.6. Директива flush | 302 |
Вопросы и задания | 304 |
2.7. Дополнительные переменные среды и процедуры | 304 |
2.8. Использование OpenMP | 307 |
|
Глава 3. Реализация параллельных алгоритмов | 310 |
|
3.1. Введение | 310 |
3.2. Простейшая вычислительная программа | 310 |
3.2.1. Реализация на OpenMP | 310 |
3.2.2. Реализация на MPI | 312 |
3.3. Параллельная реализация вычислительно сложных задач на примере решения задачи перемножения плотных матриц | 314 |
3.3.1. Постановка задачи | 314 |
3.3.2. Последовательная реализация | 315 |
3.3.3. Параллельная реализация | 317 |
3.3.4. Реализация на OpenMP | 318 |
3.3.5. Реализация на MPI | 321 |
|
Литература | 333 |