- •Лекция 1. Введение
- •Принципы параллельных вычислений
- •Лекция 2.
- •Лекция 3.
- •Эффективность параллельных вычислений (закон Амдала)
- •Закон Мура и его перспективы.
- •Каждые 2 года количество транзисторов на кристалле удваивается
- •Лекция 4. Основные этапы развития параллельной обработки
- •Лекция 5. Мелкозернистый параллелизм
- •Принципы распараллеливания и планирования базовых блоков.
- •Лекция 6. Алгоритм автоматического распараллеливания арифметических
- •Лекция 7.
- •Лекция 8.
- •Лекция 9.
- •Лекция 10.
- •Лекция 11. Крупнозернистый параллелизм
- •Классификация Флинна
- •Арифметические конвейеры
- •Лекция 12. Многопроцессорные системы с общей памятью или
- •Лекция 13. Многопроцессорные системы с индивидуальной памятью или Массивно-параллельные системы (mpp)
- •Средства параллельного программирования Параллельные алгоритмы
- •Лекция 14. Стандарт mpi
- •Mpi программа для вычисления числа π на языке с.
- •Программа умножения матрицы на вектор
- •Лекция 15.
- •Лекция 16.
- •Вычислительные кластеры.
- •Лекция 17.
- •Лекция 18. Параллельные вычисления в грид Некоторые этапы развития it технологий
- •Лекция 19. Грид
- •Облачные вычисления
- •Лекция 20. Пакет Globus Toolkit.
- •Параллельные вычислени в грид. Пакет g2.
Лекция 14. Стандарт mpi
Наиболее распространенной библиотекой параллельного программирования в модели передачи сообщений является MPI (Message Passing Interface). Рекомендуемой бесплатной реализацией MPI является пакет MPICH, разработанный в Аргоннской национальной лаборатории.
MPI является библиотекой функций межпроцессорного обмена сообще-
ниями и содержит около 300 функций, которые делятся на следующие классы:
операции точка-точка, операции коллективного обмена, топологические опера-
ции, системные и вспомогательные операции. Поскольку MPI является стан-
дартизованной библиотекой функций, то написанная с применением MPI про-
грамма без переделок выполняется на различных параллельных ЭВМ. Принци-
пиально для написания подавляющего большинства программ достаточно не-
скольких функций, которые приведены ниже.
Функция MPI_Send является операцией точка-точка и используется для посылки данных в конкретный процесс.
Функция MPI_Recv также является точечной операцией и используется для приема данных от конкретного процесса.
Для рассылки одинаковых данных всем другим процессам используется коллективная операция MPI_BCAST, которую выполняют все процессы, как посылающий, так и принимающие.
Функция коллективного обмена MPI_REDUCE объединяет элементы входного буфера каждого процесса в группе, используя операцию op, и возвращает объединенное значение в выходной буфер процесса с номером root.
MPI_Send(address, сount, datatype, destination, tag, comm),
аddress – адрес посылаемых данных в буфере отправителя
сount – длина сообщения
datatype – тип посылаемых данных
destination – имя процесса-получателя
tag – для вспомогательной информации
comm – имя коммуникатора
MPI_Recv(address, count, datatype, source, tag, comm, status)
address – адрес получаемых данных в буфере получателя
count– длина сообщения
datatype– тип получаемых данных
source – имя посылающего процесса процесса
tag - для вспомогательной информации
comm– имя коммуникатора
status - для вспомогательной информации
MPI_BCAST (address, сount, datatype, root, comm)
root – номер рассылающего (корневого)процесса
MPI_REDUCE(sendbuf, recvbuf, count, datatype, op, root, comm)
sendbuf - адрес посылающего буфера
recvbuf - адрес принимающего буфера
count - количество элементов в посылающем буфере
datatype – тип данных
op - операция редукции
root - номер главного процесса
Кроме этого, используется несколько организующих функций.
MPI_INIT ()
MPI_COMM_SIZE (MPI_COMM_WORLD, numprocs)
MPI_COMM_RANK (MPI_COMM_WORLD, myid)
MPI_FINALIZE ()
Обращение к MPI_INIT присутствует в каждой MPI программе и должно
быть первым MPI – обращением. При этом в каждом выполнении программы
может выполняться только один вызов После выполнения этого оператора все
процессы параллельной программы выполняются параллельно. MPI_INIT.
MPI_COMM_WORLD является начальным (и в большинстве случаев единственным) коммуникатором и определяет коммуникационный контекст и связанную группу процессов.
Обращение MPI_COMM_SIZE возвращает число процессов numprocs, запущенных в этой программе пользователем.
Вызывая MPI_COMM_RANK, каждый процесс определяет свой номер в группе процессов с некоторым именем.
Строка MPI_FINALIZE () должно быть выполнена каждым процессом программы. Вследствие этого никакие MPI – операторы больше выполняться не будут. Перемсенная COM_WORLD определяет перечень процессов, назначенных для выполнения программы.