Данная операция аналогична функции MPI_Allreduce в том отношении, что после ее выполнения каждый процесс получает результирующий массив. Главное отличие данной функции состоит в том, что содержимое результирующего массива в процессе i является результатом выполнения коллективной операции над массивами из процессов с номерами от 0 до i включительно.
Формат вызова: MPI_Scan (&sendbuf, &recvbuf, count, datatype, op, comm)
5. Перечислите и опишите функции управление процессами.
MPI_Comm_group - Получить обработчик глобальной группы, связанной с коммуникатором MPI_COMM_WORLD,
MPI_Group_incl - Создать новую группу как подмножество глобальной группы,
MPI_Comm_create - Создать новый коммуникатор для вновь созданной группы
MPI_Comm_rank - Получить новый ранг процесса во вновь созданном коммуникаторе
MPI_Group_free и MPI_Comm_free - освободить (уничтожить) группу и коммуникатор
6. Перечислите и опишите функции для организации логических топологий процессов.
В MPI поддерживается два основных типа топологий - декартовые (решеточные)
топологии и топологии в виде графа. MPI-топологии являются виртуальными - связь между физической структурой параллельной машины и топологией MPI-процессов может и отсутствовать. Виртуальные топологии строятся на основе групп и коммуникаторов, и "программируется" разработчиком параллельного приложения. Смысл использования виртуальных топологий заключается в том, что они в некоторых случаях удобны для задач со специфической коммуникационной структурой. Например,декартова топология удобна для задач, в которых обрабатывающие элементы в процессе вычислений обмениваются данными только со своими 4-мя непосредственными соседями. В конкретных реализациях, возможна оптимизация отображения MPI-процессов на физическую структуру заданной параллельной машины
.
MPI_Comm cartcomm;
MPI_Cart_create (MPI_COMM_WORLD, 2, dims, periods, reorder, &cartcomm);
MPI_Comm_rank (cartcomm, &rank);
MPI_Cart_coords (cartcomm, rank, 2, coords);
MPI_Cart_shift (cartcomm, 0, 1, &nbrs[UP], &nbrs[DOWN]);
MPI_Cart_shift (cartcomm, 1, 1, &nbrs[LEFT], &nbrs[RIGHT]);
MPI_Waitall (8, reqs, stats);