ps_homeworks/dn5/server.c

71 lines
1.5 KiB
C

#include <stdlib.h>
#include <stdio.h>
#include <mpi.h>
#define buffsize 650
int main(int argc, char* argv[])
{
int taskid, ntasks;
int *buff;
double inittime, totaltime;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &taskid);
MPI_Comm_size(MPI_COMM_WORLD, &ntasks);
buff = (int *)malloc(sizeof(int)*buffsize);
for (int i=0; i<buffsize; i++)
buff[i] = i;
MPI_Barrier(MPI_COMM_WORLD);
printf("Task %d has started, ntasks = %d\n", taskid, ntasks);
fflush(stdout);
inittime = MPI_Wtime();
if(taskid == 0) {
buff[0] = 0;
buff[1] = -1;
printf("Task %d has started sending message, ntasks = %d\n", taskid, ntasks);
fflush(stdout);
MPI_Send(buff, buffsize, MPI_INT, 1, 0, MPI_COMM_WORLD);
}
MPI_Recv(buff, buffsize, MPI_INT, taskid, 0, MPI_COMM_WORLD, NULL);
printf("Task %d has recieved the message, ntasks = %d\n", taskid, ntasks);
fflush(stdout);
if (taskid != 0) {
for (int j = 0; j < buffsize; j++) {
if(buff[j] == -1) {
buff[j] = taskid;
buff[j + 1] = -1;
break;
}
}
if (taskid != ntasks - 1) {
MPI_Send(buff, buffsize, MPI_INT, 0, 0, MPI_COMM_WORLD);
}
MPI_Send(buff, buffsize, MPI_INT, taskid + 1, 0, MPI_COMM_WORLD);
}
totaltime = MPI_Wtime() - inittime;
if (taskid == 0) {
printf("Cas prenosa: %f s, buffsize: %ld\n", totaltime, sizeof(int)*buffsize);
for(int i = 0; i < buffsize; i++) {
if(buff[i] == -1) {
break;
}
printf("%d ", buff[i]);
}
}
free(buff);
MPI_Finalize();
return 0;
}