Примеры из учебника "Технологии параллельного программирования MPI и OpenMP"

Все примеры одним архивом.

Глава 1 Технология параллельного программирования MPI

1.1. Введение

1.2. Основные понятия

1.3. Общие процедуры MPI

Пример 1a. Простейшая программа на языке Си
Пример 1b. Простейшая программа на языке Фортран
Пример 2a. Определение числа процессов и номера процесса на языке Си
Пример 2b. Определение числа процессов и номера процесса на языке Фортран
Пример 3a. Распараллеливание на языке Си
Пример 3b. Распараллеливание на языке Фортран
Пример 4a. Определение характеристик системного таймера на языке Си
Пример 4b. Определение характеристик системного таймера на языке Фортран

1.4. Передача и прием сообщений между отдельными процессами

1.4.1. Операции типа точка-точка

1.4.2. Передача и прием сообщений с блокировкой

Пример 5a. Обмен сообщениями двух процессов на языке Си
Пример 5b. Обмен сообщениями двух процессов на языке Фортран
Пример 6a. Обмен сообщениями четных и нечетных процессов на языке Си
Пример 6b. Обмен сообщениями четных и нечетных процессов на языке Фортран
Пример 7a. Пересылка несуществующему процессу на языке Си
Пример 7b. Пересылка несуществующему процессу на языке Фортран
Пример 8a. Буферизованная посылка данных на языке Си
Пример 8b. Буферизованная посылка данных на языке Фортран
Пример 9a. Получение информации об атрибутах сообщения на языке Си
Пример 9b. Получение информации об атрибутах сообщения на языке Фортран
Пример 10a. Определение латентности и пропускной способности на языке Си
Пример 10b. Определение латентности и пропускной способности на языке Фортран

1.4.3. Передача и прием сообщений без блокировки

Пример 11a. Обмен по кольцевой топологии при помощи неблокирующих операций на языке Си
Пример 11b. Обмен по кольцевой топологии при помощи неблокирующих операций на языке Фортран
Пример 12a. Коммуникационная схема «мастер – рабочие» на языке Си
Пример 12b. Коммуникационная схема «мастер – рабочие» на языке Фортран
Пример 13a. Транспонирование матрицы на языке Си
Пример 13b. Транспонирование матрицы на языке Фортран

1.4.4. Отложенные запросы на взаимодействие

Пример 14a. Схема итерационного метода с обменом по кольцевой топологии при помощи отложенных запросов на языке Си
Пример 14b. Схема итерационного метода с обменом по кольцевой топологии при помощи отложенных запросов на языке Фортран

1.4.5. Тупиковые ситуации (deadlock)

Пример 15a. Обмен по кольцевой топологии при помощи процедуры MPI_Sendrecv на языке Си
Пример 15b. Обмен по кольцевой топологии при помощи процедуры MPI_SENDRECV на языке Фортран

1.5. Коллективные взаимодействия процессов

1.5.1. Общие положения

1.5.2. Барьер

Пример 16a. Моделирование барьерной синхронизации на языке Си
Пример 16b. Моделирование барьерной синхронизации на языке Фортран

1.5.3. Коллективные операции пересылки данных

1.5.4. Глобальные операции

Пример 17a. Моделирование глобального суммирования при помощи схемы сдваивания и коллективной операции MPI_Reduce на языке Си
Пример 17b. Моделирование глобального суммирования при помощи схемы сдваивания и коллективной операции MPI_Reduce на языке Фортран

1.5.5. Пользовательские глобальные операции

Пример 18a. Пользовательская глобальная функция на языке Си
Пример 18b. Пользовательская глобальная функция на языке Фортран

1.6. Группы и коммуникаторы

1.6.1. Общие положения

1.6.2. Операции с группами процессов

Пример 19a. Работа с группами на языке Си
Пример 19b. Работа с группами на языке Фортран

1.6.3. Операции с коммуникаторами

Пример 20a. Разбиение коммуникатора на языке Си
Пример 20b. Разбиение коммуникатора на языке Фортран
Пример 21a. Перенумерация процессов на языке Си
Пример 21b. Перенумерация процессов на языке Фортран

1.6.4. Интеркоммуникаторы

Пример 22a. Cхема «мастер – рабочие» с использованием интеркоммуникатора на языке Си
Пример 22b. Схема «мастер – рабочие» с использованием интеркоммуникатора на языке Фортран

1.6.5. Атрибуты

1.7. Виртуальные топологии

1.7.1. Общие положения

1.7.2. Декартова топология

1.7.3. Топология графа

Пример 23a. Cхема «мастер – рабочие» с использованием графовой топологии на языке Си
Пример 23b. Схема «мастер – рабочие» с использованием графовой топологии на языке Фортран

1.8. Пересылка разнотипных данных

1.8.1. Общие положения

1.8.2. Производные типы данных

Пример 24a. Перестановка столбцов матрицы в обратном порядке на языке Си
Пример 24b. Перестановка столбцов матрицы в обратном порядке на языке Фортран

1.8.3. Упаковка данных

Пример 25a. Пересылка упакованных данных на языке Си
Пример 25b. Пересылка упакованных данных на языке Фортран

1.9. Объект info

1.9.1. Общие положения

1.9.2. Работа с объектом info

1.10. Динамическое управление процессами

1.10.1. Общие положения

1.10.2.Порождение процессов

master.c
slave.c
Пример 26a. Схема «мастер – рабочие» с использованием порождения процессов на языке Си
master.f
slave.f
Пример 26b. Схема «мастер – рабочие» с использованием порождения процессов на языке Фортран

1.10.3. Клиент-серверная связь

server.c
client.c
Пример 27a. Обмен данными между сервером и клиентом посредством публичного имени на языке Си
server.f
client.f
Пример 27b. Обмен данными между сервером и клиентом посредством публичного имени на языке Фортран

1.10.4. Удаление связи процессов

1.10.5. Связь через сокеты

1.11. Односторонние коммуникации

1.11.1. Общие положения

1.11.2. Работа с окном

1.11.3. Передача данных

1.11.4. Синхронизация

Пример 28a. Обмен по кольцевой топологии при помощи односторонних коммуникаций на языке Си
Пример 28b. Обмен по кольцевой топологии при помощи односторонних коммуникаций на языке Фортран
Пример 29a. Обмен по кольцевой топологии при помощи односторонних коммуникаций на языке Си
Пример 29b. Обмен по кольцевой топологии при помощи односторонних коммуникаций на языке Фортран
Пример 30a. Обмен по кольцевой топологии при помощи односторонних коммуникаций на языке Си
Пример 30b. Обмен по кольцевой топологии при помощи односторонних коммуникаций на языке Фортран

1.12. Внешние интерфейсы

1.12.1. Обобщенные запросы

1.12.2. Информация из статуса

1.12.3. Нити

1.13. Параллельный ввод/вывод

1.13.1. Определения

1.13.2. Работа с файлами

1.13.3. Доступ к данным

Пример 31a. Буферизованное чтение из файла на языке Си
Пример 31b. Буферизованное чтение из файла на языке Фортран
Пример 32a. Коллективное чтение из файла на языке Си
Пример 32b. Коллективное чтение из файла на языке Фортран

1.14. Обработка ошибок

1.14.1. Общие положения

1.14.2. Обработчики ошибок, связанные с коммуникаторами

1.14.3. Обработчики ошибок, связанные с окнами

1.14.4. Обработчики ошибок, связанные с файлами

1.14.5. Дополнительные процедуры

1.14.6. Коды и классы ошибок

1.14.7. Вызов обработчиков ошибок

Пример 33a. Обработка ошибок на языке Си
Пример 33b. Обработка ошибок на языке Фортран

 

Глава 2 Технология параллельного программирования OpenMP

2.1. Введение

2.2. Основные понятия

2.2.1. Компиляция программы

Пример 34a. Условная компиляция на языке Си
Пример 34b. Условная компиляция на языке Фортран
Пример 34c. Условная компиляция на языке Фортран

2.2.2. Модель параллельной программы

2.2.3. Директивы и процедуры

2.2.4. Выполнение программы

2.2.5. Замер времени

Пример 35a. Работа с системными таймерами на языке Си
Пример 35b. Работа с системными таймерами на языке Фортран

2.3. Параллельные и последовательные области

2.3.1. Директива parallel

Пример 36a. Параллельная область на языке Си
Пример 36b. Параллельная область на языке Фортран
Пример 37a. Опция reduction на языке Си
Пример 37b. Опция reduction на языке Фортран

2.3.2. Сокращенная запись

2.3.3. Переменные среды и вспомогательные процедуры

Пример 38a. Процедура omp_set_num_threads и опция num_threads на языке Си
Пример 38b. Процедура omp_set_num_threads и опция num_threads на языке Фортран
Пример 39a. Процедуры omp_set_dynamic и omp_get_dynamic на языке Си
Пример 39b. Процедуры omp_set_dynamic и omp_get_dynamic на языке Фортран
Пример 40a. Вложенные параллельные области на языке Си
Пример 40b. Вложенные параллельные области на языке Фортран
Пример 41a. Функция omp_in_parallel на языке Си
Пример 41b. Функция omp_in_parallel на языке Фортран

2.3.4. Директива single

Пример 42a. Директива single и опция nowait на языке Си
Пример 42b. Директива single и опция nowait на языке Фортран
Пример 43a. Опция copyprivate на языке Си
Пример 43b. Опция copyprivate на языке Фортран

2.3.5. Директива master

Пример 44a. Директива master на языке Си
Пример 44b. Директива master на языке Фортран

2.4. Модель данных

Пример 45a. Опция private на языке Си
Пример 45b. Опция private на языке Фортран
Пример 46a. Опция shared на языке Си
Пример 46b. Опция shared на языке Фортран
Пример 47a. Опция firstprivate на языке Си
Пример 47b. Опция firstprivate на языке Фортран
Пример 48a. Директива threadprivate на языке Си
Пример 48b. Директива threadprivate на языке Фортран
Пример 49a. Опция copyin на языке Си
Пример 49b. Опция copyin на языке Фортран

2.5. Распределение работы

2.5.1. Низкоуровневое распараллеливание

Пример 50a. Процедуры omp_get_num_threads и omp_get_thread_num на языке Си
Пример 50b. Процедуры omp_get_num_threads и omp_get_thread_num на языке Фортран

2.5.2. Параллельные циклы

Пример 51a. Директива for на языке Си
Пример 51b. Директива do на языке Фортран
Пример 52a. Опция schedule на языке Си
Пример 52b. Опция schedule на языке Фортран
Пример 53a. Опция schedule на языке Си
Пример 53b. Опция schedule на языке Фортран

2.5.3. Параллельные секции

Пример 54a. Директива sections на языке Си
Пример 54b. Директива sections на языке Фортран
Пример 55a. Опция lastprivate на языке Си
Пример 55b. Опция lastprivate на языке Фортран

2.5.4. Директива workshare

Пример 56. Директива workshare

2.5.5. Задачи (tasks)

Пример 57a. Директива taskyield на языке Си
Пример 57b. Директива taskyield на языке Фортран

2.6. Синхронизация

2.6.1. Барьер

Пример 58a. Директива barrier на языке Си
Пример 58b. Директива barrier на языке Фортран

2.6.2. Директива ordered

Пример 59a. Директива ordered и опция ordered на языке Си
Пример 59b. Директива ordered и опция ordered на языке Фортран

2.6.3. Критические секции

Пример 60a. Директива critical на языке Си
Пример 60b. Директива critical на языке Фортран

2.6.4. Директива atomic

Пример 61a. Директива atomic на языке Си
Пример 61b. Директива atomic на языке Фортран

2.6.5. Замки́̀

Пример 62a. Использование замков на языке Си
Пример 62b. Использование замков на языке Фортран
Пример 63a. Функция omp_test_lock на языке Си
Пример 63b. Функция omp_test_lock на языке Фортран

2.6.6. Директива flush

2.7. Дополнительные переменные среды и процедуры

2.8. Использование OpenMP

 

Глава 3 Реализация параллельных алгоритмов

3.1. Введение

3.2. Простейшая вычислительная программа

3.2.1. Реализация на OpenMP

Пример 64a. Вычисление числа Пи на языке Си с использованием технологии OpenMP
Пример 64b. Вычисление числа Пи на языке Фортран с использованием технологии OpenMP

3.2.2. Реализация на MPI

Пример 65a. Вычисление числа Пи на языке Си с использованием технологии MPI
Пример 65b. Вычисление числа Пи на языке Фортран с использованием технологии MPI

3.3. Параллельная реализация вычислительно сложных задач на примере решения задачи перемножения плотных матриц

3.3.1. Постановка задачи

3.3.2. Последовательная реализация

Пример 66a. Последовательный вариант перемножения матриц на языке Си
Пример 66b. Последовательный вариант перемножения матриц на языке Фортран

3.3.3. Параллельная реализация

3.3.4. Реализация на OpenMP

Пример 67a. Перемножение матриц на языке Си с использованием технологии OpenMP
Пример 67b. Перемножение матриц на языке Фортран с использованием технологии OpenMP

3.3.5. Реализация на MPI

3.3.5.1. Распределение на одномерную решетку процессов (строчное или столбцовое)
Пример 68a. Перемножение матриц на языке Си с использованием технологии MPI (одномерная решетка процессов)
Пример 68b. Перемножение матриц на языке Фортран с использованием технологии MPI (одномерная решетка процессов)
3.3.5.2. Распределение на двумерную решетку процессов (строчно-столбцовое)
Пример 69a. Перемножение матриц на языке Си с использованием технологии MPI (двумерная решетка процессов)
Пример 69b. Перемножение матриц на языке Фортран с использованием технологии MPI (двумерная решетка процессов)