struct timeval tv1, tv2; /* Для засечения времени */
int dt1;
/* Инициализация библиотеки MPI*/
MPI_Init(&argc, &argv);
/* Каждая ветвь узнает количество задач в * стартовавшем приложении */
MPI_Comm_size(MPI_COMM_WORLD, &size);
/* и свой собств. номер: от 0 до (size-1) */
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
/* Обнуляем массив dims и заполняем массив
*periods для топологии "кольцо" */ for(i=0; i<NUM_DIMS; i++)
{dims[i] = 0; periods[i] = 1;
}
/* Заполняем массив dims, где указываются * размеры (одномерной) решетки */
MPI_Dims_create(size, NUM_DIMS, dims);
/* Создаем топологию "кольцо" с comm_cart */
MPI_Cart_create(MPI_COMM_WORLD, NUM_DIMS,
dims, periods, reorder, &comm_cart);
/* Отображаем ранги на координаты компьютеров,
*с целью оптимизации отображения заданной
*виртуальной топологии на физическую
*топологию системы. */
MPI_Cart_coords(comm_cart, rank, NUM_DIMS, new_coords);
/* Каждая ветвь находит своих соседей вдоль
*кольца, в направлении меньших значений
*рангов */
MPI_Cart_shift(comm_cart, 0, -1, &sour,