Updated .make_tar and .htaccess for all src/* directories.
[parallel_computing.git] / src / MPI2_message_passing / hop.c
1              
2              /*      node identifications      */
3
4              /* passing a message to neighbors */
5                                                    /* Michel Vallieres */
6 #include   <stdio.h>
7 #include   <mpi.h>
8
9 int main (int argc, char *argv[])
10 {
11 int         my_rank, size;
12 MPI_Status  recv_status;
13 int         my_number, hop;
14 int         target_node, from_node;
15 int         message;
16
17    MPI_Init(&argc, &argv);
18
19    MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
20    MPI_Comm_size(MPI_COMM_WORLD, &size);
21
22                                 /*  def my_number */
23    my_number = 2 * my_rank;
24                                 /* define hop */
25    hop = 1 ;
26                                 /* target node */
27    target_node = my_rank + hop;
28    target_node = target_node % size;
29                                 /* from node */
30    from_node = my_rank- hop;
31    from_node = (from_node + size) % size;
32                                 /* Print out a message from each processor */
33    fprintf( stderr,
34     "This is process %d out of %d -- target & from: %d %d -- my number %d\n",
35                my_rank, size, target_node, from_node, my_number ); 
36
37                                 /* send info to target node */
38                                 /*                          */
39                                 /* note: a blocking send    */
40                                 /* MPI_Ssend produces a     */
41                                 /* deadlock in this case    */
42    message = my_number;
43    MPI_Ssend(&message, 1, MPI_INT, target_node, 121, MPI_COMM_WORLD);
44
45                                 /* receive new number from the */
46                                 /* - from node -               */
47    MPI_Recv(&message, 1, MPI_INT, from_node, 121,
48                                MPI_COMM_WORLD, &recv_status);
49                                  /* update my_number */
50    my_number = message;
51         
52    printf ( " I am process %d  --  my number is now : %d \n",
53                  my_rank, my_number ); 
54
55    MPI_Finalize();
56 }
57
58