2 /* node identifications */
4 /* passing a message to neighbors */
9 int main (int argc, char *argv[])
12 MPI_Status recv_status;
14 int target_node, from_node;
17 MPI_Init(&argc, &argv);
19 MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
20 MPI_Comm_size(MPI_COMM_WORLD, &size);
23 my_number = 2 * my_rank;
27 target_node = my_rank + hop;
28 target_node = target_node % size;
30 from_node = my_rank- hop;
31 from_node = (from_node + size) % size;
32 /* Print out a message from each processor */
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 );
37 /* send info to target node */
39 /* note: a blocking send */
40 /* MPI_Ssend produces a */
41 /* deadlock in this case */
43 MPI_Ssend(&message, 1, MPI_INT, target_node, 121, MPI_COMM_WORLD);
45 /* receive new number from the */
47 MPI_Recv(&message, 1, MPI_INT, from_node, 121,
48 MPI_COMM_WORLD, &recv_status);
49 /* update my_number */
52 printf ( " I am process %d -- my number is now : %d \n",