ПАРАЛЛЕЛЬНОЕ ПРОГРАММИРОВАНИЕ
86
Пример создания коммуникатора
#include <stdio.h>
#include "mpi.h"
int main(int argc, char *argv[])
{
char message[24];
MPI_Group MPI_GROUP_WORLD;
MPI_Group group;
MPI_Comm fcomm;
int size, q, proc;
int* process_ranks;
int rank, rank_in_group;
MPI_Status status;
/**
*инициализация параллельной части приложения
*/
MPI_Init(&argc, &argv);
/**
*Определение общего числа параллельных процессов в группе
*/
MPI_Comm_size(MPI_COMM_WORLD, &size);
/**
*Определение номера процесса в группе
*/
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
printf("New group contains processes:");
q = size - 1;
process_ranks = (int*) malloc(q* sizeof(int));
for (proc = 0; proc < q; proc++)
{
process_ranks[proc] = proc;
printf(" %i", process_ranks[proc]);
}
printf("\n");
/**
*Определение группы
*/
MPI_Comm_group(MPI_COMM_WORLD, &MPI_GROUP_WORLD);
/**
*Добавление процессов в группу
*/
MPI_Group_incl(MPI_GROUP_WORLD, q, process_ranks, &group);
/**
*Создание нового коммуникатора группы
*/
MPI_Comm_create(MPI_COMM_WORLD, group, &fcomm);
if(fcomm != MPI_COMM_NULL)
{
MPI_Comm_rank(fcomm, &rank_in_group);
if(rank_in_group == 0)
1...,78,79,80,81,82,83,84,85,86,87 89,90,91,92,93,94,95,96,97,98,...180