71 lines
1.4 KiB
C
71 lines
1.4 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;
|
|
|
|
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);
|
|
} else {
|
|
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;
|
|
}
|