- •Конвейерная и параллельная обработка данных.
- •Ярусно- параллельная форма представления программы.
- •Крупно блочное распараллеливание. Примеры блочного распределения итераций цикла.
- •Пространство итераций. Метод гиперплоскостей.
- •Как определяется время выполнения параллельного алгоритма?
- •Как определяется расписание для распределения вычислений между процессорами?
- •Как определяются понятия ускорения и эффективности?
- •В чем различие показателей ускорения и эффективности для рассматриваемых вариантов каскадной схемы суммирования?
- •Параллельный алгоритм сортировки методом пузырька.
- •Прием и передача данных между отдельными процессами. Прием и передача с блокировкой.
- •Прием и передача данных между отдельными процессами. Прием и передача без блокировки.
- •Понятие латентности.
- •Прием и передача данных между отдельными процессами. Объединение запросов на взаимодействие.
- •Коллективное взаимодействие процессов. Рассылка сообщений.
- •Коллективное взаимодействие процессов. Сбор сообщений.
- •Синхронизация процессов.
- •Методы распараллеливания и модели программ, поддерживаемые OpenMp.
- •OpenMp -Параллельные и последовательные области программы. Директива parallel
- •OpenMp- Директива single
- •OpenMp- Директива sections
- •OpenMp- директива barrier
- •OpenMp- директива critical
- •OpenMp- Распараллеливание циклов.
Синхронизация процессов.
int MPI_Barrier( MPI_Comm comm)
comm - идентификатор группы
Блокирует работу процессов, вызвавших данную процедуру, до тех пор, пока все оставшиеся процессы группы comm также не выполнят эту процедуру.
Open MP
Методы распараллеливания и модели программ, поддерживаемые OpenMp.
OpenMP (Open Multi-Processing) — открытый стандарт для распараллеливания программ на языках Си, Си++ и Фортран. Описывает совокупность директив компилятора, библиотечных процедур и переменных окружения, которые предназначены для программирования многопоточных приложений на многопроцессорных системах с общей памятью.
OpenMP реализует параллельные вычисления с помощью многопоточности, в которой «главный» (master) поток создает набор подчиненных (slave) потоков и задача распределяется между ними. Предполагается, что потоки выполняются параллельно на машине с несколькими процессорами (количество процессоров не обязательно должно быть больше или равно количеству потоков).
OpenMp -Параллельные и последовательные области программы. Директива parallel
#pragma omp parallel [другие директивы]
структурированный блок
Директива parallel указывает, что структурный блок кода должен быть выполнен параллельно в несколько потоков. Каждый из созданных потоков выполнит одинаковый код содержащийся в блоке, но не одинаковый набор команд. В разных потоках могут выполняться различные ветви или обрабатываться различные данные, что зависит от таких операторов как if-else или использования директив распределения работы.
OpenMp- Директива single
Директива OpenMP single используется для выделения участков программы в области параллельных структурных блоков, выполняющихся только в одном из параллельных потоков. Во всех остальных параллельных потоках выделенный директивой single участок программы не выполняется, однако параллельные процессы, выполняющиеся в остальных потоках, ждут завершения выполнения выделенного участка программы, т. е. неявно реализуется процедура синхронизации.
OpenMp- Директива sections
Директива OpenMP sections используется для выделения участков программы в области параллельных структурных блоков, выполняющихся в отдельных параллельных потоках.
OpenMp- директива barrier
Самый распространенный способ синхронизации в OpenMP – барьер. Он оформляется с помощью директивы barrier. Директива barrier дает всем потокам указание ожидать друг друга перед тем, как они продолжат выполнение за барьером.
#pragma omp barrier
Нити, выполняющие текущую параллельную область, дойдя до этой директивы, останавливаются и ждут, пока все нити не дойдут до этой точки программы, после чего разблокируются и продолжают работать дальше. Кроме того, для разблокировки необходимо, чтобы все синхронизируемые нити завершили все порождённые ими задачи (task)
OpenMp- директива critical
С помощью директив critical оформляется критическая секция программы. Критическая секция запрещает одновременное исполнение структурированного блока более чем одним потоком.
#pragma omp critical имя[()]структурированный
блок
В каждый момент времени в критической секции может находиться не более одной нити. Если критическая секция уже выполняется какой-либо нитью, то все другие нити, выполнившие директиву для секции с данным именем, будут заблокированы, пока вошедшая нить не закончит выполнение данной критической секции. Как только работавшая нить выйдет из критической секции, одна из заблокированных на входе нитей войдет в неё. Если на входе в критическую секцию стояло несколько нитей, то случайным образом выбирается одна из них, а остальные заблокированные нити продолжают ожидание.
