- •1.Вычислительные процессы. Формальная модель. Свойства процесса.
- •2.Система процессов. Независимые процессы. Взаимодействие процессов.
- •3. Классы параллельных вс.
- •4.Отображение системы процессов. Синхронизация.
- •5.Показатели параллельных вс и вычислений.
- •6.Модель вычислений в виде графа "операции-операнды".
- •7.Схема параллельного выполнения алгоритма.
- •8.Определение времени выполнения параллельного алгоритма.
- •9.Теоретические оценки времени выполнения параллельных алгоритмов.
- •10.Показатели эффективности параллельного алгоритма.
- •11.Оценка максимально достижимого параллелизма. Анализ масштабируемости параллельных вычислений.
- •12.Процессы и потоки.
- •13. Закон Амдала.
- •14.Mpi: Стандарт mpi. Общие понятия. Области связи и коммуникаторы.
- •15.Общие процедуры mpi: Инициализация, Завершение.
- •16.Общие процедуры mpi: Определение общего числа параллельных процессов в группе. Определение номера процесса в группе.
- •17.Mpi: Прием/передача сообщений между отдельными процессами.
- •18.Mpi: Групповые (коллективные) взаимодействия. Рассылка целого сообщения процессам. Сборка данных от процессов.
- •19.Mpi: Групповые (коллективные) взаимодействия: Рассылка частей сообщения процессам. Сборка частей сообщения с процессов.
- •20.Mpi: Функции поддержки распределенных операций: Выполнение глобальных операций с возвратом результатов в главный процесс. Выполнение глобальных операций с возвратом результатов во все процессы.
- •21.Mpi: Синхронизация процессов.
- •22.OpenMp: Общие понятия. Область применения.
- •23.Директивы OpenMp: Директивы для определения параллельной области.
- •24.OpenMp: Директивы для распределения вычислений внутри параллельной области: Директива for.
- •25.OpenMp: Директивы для распределения вычислений внутри параллельной области: Директива sections.
- •26.OpenMp: Директивы для распределения вычислений внутри параллельной области: Объединение директив parallel и for (sections).
- •27.Классическая задача об обедающих философах.
- •28.Задача «читатели и писатели».
- •29.Язык параллельного программирования Okkam: основные конструкции и приемы программирования.
- •30.Язык параллельного программирования Linda: основные конструкции и приемы программирования.
- •31.Язык параллельного программирования Ada: основные конструкции и приемы программирования.
19.Mpi: Групповые (коллективные) взаимодействия: Рассылка частей сообщения процессам. Сборка частей сообщения с процессов.
Рассылка частей сообщения процессам
int MPI_Scatter ( void *sbuf, int scount, MPI_Datatype stype, void *rbuf, int rcount, MPI_Datatype rtype, int root, MPI_Comm comm )
Аргументы функции:
sbuf – адрес начала буфера передачи
scount – число элементов в посылаемом сообщении
stype – тип элементов отсылаемого сообщения
OUT rbuf – адрес начала буфера сборки данных
rcount – число элементов в принимаемом сообщении
rtype – тип элементов принимаемого сообщения
root – номер процесса, который рассылает данные
comm – идентификатор группы
Процедура MPI_Scatter по своему действию является обратной к MPI_Gather. Она осуществляет рассылку по scount элементов данных типа stype из буфера sbuf процесса root в буферы rbuf всех процессов коммуникатора comm, включая сам процесс root. Можно считать, что массив sbuf делится на равные части по числу процессов, каждая из которых состоит из scount элементов типа stype, после чего I-я часть посылается (I-1)-му процессу (процессы нумеруются с 0).
int MPI_Allgather ( void *sbuf, int scount, MPI_Datatype stype, void *rbuf, int rcount, MPI_Datatype rtype, MPI_Comm comm )
Аргументы функции:
sbuf – адрес начала буфера передачи
scount – число элементов в посылаемом сообщении
stype – тип элементов отсылаемого сообщения
OUT rbuf – адрес начала буфера сборки данных
rcount – число элементов в принимаемом сообщении
rtype – тип элементов принимаемого сообщения
comm – идентификатор группы
Сборка данных из массивов sbuf со всех процессов коммуникатора comm в буфере rbuf каждого процесса. Данные сохраняются в порядке возрастания номеров процессов. Блок данных, посланный процессом I-1, размещается в I-ом блоке буфера rbuf принимающего процесса. Операцию можно рассматривать как MPI_Gather, при которой результат получается на всех процессах коммуникатора comm.
20.Mpi: Функции поддержки распределенных операций: Выполнение глобальных операций с возвратом результатов в главный процесс. Выполнение глобальных операций с возвратом результатов во все процессы.
Выполнение глобальных операций с возвратом результатов в главный процесс
int MPI_Reduce ( void *sbuf, void *rbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm )
Аргументы функции:
sbuf – адрес начала буфера для аргументов
OUT rbuf – адрес начала буфера для результата
count – число аргументов у каждого процесса
datatype – тип аргументов
op – идентификатор глобальной операции
root – процесс-получатель результата
comm – идентификатор группы
Выполнение count глобальных операций op с возвратом count результатов в в буфер rbuf главного процесса root. Операция выполняется независимо над соответствующими аргументами всех процессов. Значения параметров count и datatype у всех процессов должны быть одинаковыми. Из соображений эффективности реализации предполагается, что операция op обладает свойствами ассоциативности и коммутативности.
Идентификаторы глобальных операций:
MPI_MAX – поэлементный максимум;
MPI_MIN – поэлементный минимум;
MPI_SUM – поэлементная сумма;
MPI_PROD – поэлементное произведение;
MPI_LAND, MPI_BAND – логическая и двоичная операции И;
MPI_LOR, MPI_BOR – логическая и двоичная операции ИЛИ;
MPI_LXOR, MPI_BXOR – логическая и двоичная операции исключающее ИЛИ;
MPI_MAXLOC, MPI_MINLOC – поиск индексированного минимума/максимума.
Выполнение глобальных операций с возвратом результатов во все процессы.
int MPI_Allreduce ( void *sbuf, void *rbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm )
Аргументы функции:
sbuf – адрес начала буфера для аргументов
OUT rbuf – адрес начала буфера для результата
count – число аргументов у каждого процесса
datatype – тип аргументов
op – идентификатор глобальной операции
comm – идентификатор группы
Функция аналогична предыдущей, но результат будет записан в буферы rbuf всех процессов.
