MPI Bcast: обмен сообщениями в MPI стандарте
Функция MPI_Bcast в библиотеке MPI используется для широковещательной передачи данных из одного процесса во всех остальные процессы в коммуникаторе. Это означает, что один процесс (называемый корневым процессом) отправляет данные всем остальным процессам в коммуникаторе.
Синтаксис функции MPI_Bcast выглядит следующим образом:
MPI_Bcast(
void* data, // Указатель на данные, которые нужно передать
int count, // Количество элементов данных, которые нужно передать
MPI_Datatype datatype, // Тип данных передаваемых элементов
int root, // Ранг корневого процесса
MPI_Comm communicator // Коммуникатор
)
Ниже приведен пример кода, иллюстрирующий использование функции MPI_Bcast для передачи массива данных из корневого процесса во все остальные процессы:
#include
#include
int main(int argc, char** argv) {
int rank, size;
int data[5] = {1, 2, 3, 4, 5};
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
if (rank == 0) {
// Корневой процесс отправляет данные всем остальным процессам
MPI_Bcast(data, 5, MPI_INT, 0, MPI_COMM_WORLD);
} else {
// Остальные процессы принимают переданные данные
MPI_Bcast(data, 5, MPI_INT, 0, MPI_COMM_WORLD);
}
printf("Process %d received data: ", rank);
for (int i = 0; i < 5; i++) {
printf("%d ", data[i]);
}
printf("\n");
MPI_Finalize();
return 0;
}
В этом примере процесс с рангом 0 является корневым процессом, который инициализирует массив данных. Затем он использует функцию MPI_Bcast для отправки этого массива всем остальным процессам в коммуникаторе MPI_COMM_WORLD. Остальные процессы вызывают ту же функцию, чтобы принять переданные данные.
На выходе каждый процесс распечатывает полученные данные.
Этот пример демонстрирует, как функция MPI_Bcast может быть использована для эффективного распространения данных из одного процесса во все остальные процессы в коммуникаторе MPI.