Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VOPROSY_Kolesnikov.docx
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
613.39 Кб
Скачать
  1. Передача даних на всі процеси даного комунікатора у mpi програмах?

Основу MPI составляют операции передачи сообщений. Среди предусмотренных в составе MPI функций различаются парные (point­to­point) операции между двумя процессами и коллективные (collective) коммуникационные действия для одновременного взаимодействия нескольких процессов. Процессы параллельной программы объединяются в группы. Другим важным понятием MPI, описывающим набор процессов, является понятие коммуникатора. Под коммуникатором в MPI понимается специально создаваемый служебный объект, который объединяет в своем составе группу процессов и ряд дополнительных параметров (контекст), используемых при выполнении операций передачи данных. Парные операции передачи данных выполняются только для процессов, принадлежащих одному и тому же коммуникатору. Коллективные операции применяются одновременно для всех процессов одного коммуникатора. Как результат, указание используемого коммуникатора является обязательным для операций передачи данных в MPI. В ходе вычислений могут создаваться новые и удаляться существующие группы процессов и коммуникаторы. Один и тот же процесс может принадлежать разным группам и коммуникаторам. Все имеющиеся в параллельной программе процессы входят в состав конструируемого по умолчанию коммуникатора с идентификатором MPI_COMM_WORLD.

  1. Паралельні та розподілені обчислення

Под параллельными вычислениями (parallel or concurrent computations) можно понимать процессы решения задач, в которых в один и тот же момент времени могут выполняться одновременно несколько вычислительных операций.

При этом:

- Параллельные вычисления не сводятся к использованию только к многопроцессорных вычислительных систем

(существуют ли последовательные компьютеры !?).

- Одновременные выполняемые операции должны быть направлены на решение общей задачи.

- Параллельные вычисления следует отличать от многозадачных (многопрограммных) режимов работы последовательных ЭВМ.

Распределённые вычисления — способ решения трудоёмких вычислительных задач с использованием нескольких компьютеров, чаще всего объединённых в параллельную вычислительную систему. Выполнение последовательных вычислений в распределенных системах имеет смысл в рамках решения многих задач одновременно, например в распределенных системах управления. Особенностью распределенных многопроцессорных вычислительных систем, в отличие от локальных суперкомпьютеров, является возможность неограниченного наращивания производительности за счет масштабирования.Слабосвязанные, гетерогенные вычислительные системы с высокой степенью распределения выделяют в отдельный класс распределенных систем — Grid.

  1. Збирання даних зі всіх процесів даного комунікатора у mpi програмах?

Операция обобщенной передачи данных от всех процессов одному процессу (сбор данных) является двойственной к процедуре распределения данных. Для выполнения этой операции в MPI предназначена функция:

int MPI_Gather(void *sbuf, int scount, MPI_Datatype

stype,

void *rbuf, int rcount, MPI_Datatype rtype,

int root, MPI_Comm comm),

где

• sbuf, scount, stype — параметры передаваемого сообщения;

• rbuf, rcount, rtype — параметры принимаемого сообщения;

• root — ранг процесса, выполняющего сбор данных;

• comm — коммуникатор, в рамках которого выполняется передача

данных.

Рис.1. Общая схема операции обобщенной передачи данных от всех процессов одному процессу

При выполнении функции MPI_Gather каждый процесс в коммуникаторе передает данные из буфера sbuf на процесс с рангом root. Процесс с рангом root собирает все получаемые данные в буфере rbuf (размещение данных в буфере осуществляется в соответствии с рангами процессов – отправителей сообщений). Для того чтобы разместить все поступающие данные, размер буфера rbuf должен быть равен scount * p элементов, где p есть количество процессов в коммуникаторе comm.

Функция MPI_Gather также определяет коллективную операцию, и ее вызов при выполнении сбора данных должен быть обеспечен в каждом процессе коммуникатора.

Следует отметить, что при использовании функции MPI_Gather сборка данных осуществляется только на одном процессе. Для получения всех собираемых данных на каждом из процессов коммуникатора необходимо применять функцию сбора и рассылки:

int MPI_Allgather(void *sbuf, int scount, MPI_Datatype

stype,

void *rbuf, int rcount, MPI_Datatype rtype, MPI_Comm

comm),

где

• sbuf, scount, stype — параметры передаваемого сообщения;

• rbuf, rcount, rtype — параметры принимаемого сообщения;

• comm — коммуникатор, в рамках которого выполняется передача

данных.

Выполнение общего варианта операции сбора данных, когда размеры передаваемых процессами сообщений могут быть различны, обеспечивается при помощи функций MPI_Gatherv и MPI_Allgatherv. Пример использования функции MPI_Gather рассматривается при разработке параллельных программ умножения матрицы на вектор.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]