]> git.somenet.org - pub/jan/parprog.git/blob - scan/scan.c
new slides
[pub/jan/parprog.git] / scan / scan.c
1 /*
2  * Inclusive scan
3  */
4
5 #include <stdio.h>
6 #include <stdlib.h>
7 #include "scan.h"
8 #include <mpi.h>
9
10 #define KEY 1234 // tag for control messages
11
12 int main(int argc, char *argv[])
13 {
14   int rank, size;
15   int prev;
16   char name[MPI_MAX_PROCESSOR_NAME];
17   int nlen;
18
19   MPI_Init(&argc,&argv);
20
21   // get rank and size from communicator
22   MPI_Comm_size(MPI_COMM_WORLD,&size);
23   MPI_Comm_rank(MPI_COMM_WORLD,&rank);
24
25   MPI_Get_processor_name(name,&nlen);
26
27   if (rank==0) {
28     printf("Rank %d initializing, total %d\n",rank,size);
29   } else {
30     MPI_Recv(&prev,1,MPI_INT,rank-1,KEY,MPI_COMM_WORLD,MPI_STATUS_IGNORE);
31     printf("Rank %d on %s received from %d, passing on\n",rank,name,prev);
32   }
33   if (rank+1<size) MPI_Send(&rank,1,MPI_INT,rank+1,KEY,MPI_COMM_WORLD);
34       
35   MPI_Finalize();
36   return 0;
37 }