Время выполнения не выводится
Время выполнения не выводится, вроде ошибок нет Само задание
Реализовать программу с использованием технологии mpi.
В транспьютерной матрице размером 4x4, в каждом узле которой находится один процесс, необходимо выполнить операцию сбора данных (длиной 4 байта) от всех процессов для одного (MPI_GATHER) - процесса с координатами (0,0). Реализовать программу, моделирующую выполнение операции MPI_GATHER на транспьютерной матрице при помощи пересылок MPI типа точка-точка. Получить временную оценку работы алгоритма. Оценить сколько времени потребуется для выполнения операции MPI_GATHER, если все процессы выдали ее одновременно. Время старта равно 100, время передачи байта равно 1 (Ts=100,Tb=1). Процессорные операции, включая чтение из памяти и запись в память, считаются бесконечно быстрыми.
Команды для компиляции программы: mpicc gather.c -o gather mpirun -n 16 ./gather
#include <stdio.h>
#include <stdlib.h>
#include <mpi.h>
#define MATRIX_SIZE 4
int main(int argc, char** argv) {
int rank, size;
int data[MATRIX_SIZE][MATRIX_SIZE];
int recv_data[MATRIX_SIZE*MATRIX_SIZE];
int i, j;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
if (rank == 0) {
printf("Start the timer...\n");
double start_time = MPI_Wtime();
// Gather data from all processes
for (i = 0; i < size; i++) {
MPI_Recv(recv_data+i*MATRIX_SIZE, MATRIX_SIZE, MPI_INT, i, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
}
double end_time = MPI_Wtime();
printf("Elapsed time = %lf seconds.\n", end_time - start_time);
}
else {
// Send data to process 0
for (i = 0; i < MATRIX_SIZE; i++) {
MPI_Send(data[i], MATRIX_SIZE, MPI_INT, 0, 0, MPI_COMM_WORLD);
}
}
MPI_Finalize();
return 0;
}