## 5.5.3. (Approximate) Current Practice #3

Up: Motivating Examples Next: Example #4 Previous: Current Practice #2

    main(int argc, char **argv)
      {
        int me, count, count2;
        void *send_buf, *recv_buf, *send_buf2, *recv_buf2;
        MPI_Group MPI_GROUP_WORLD, grprem;
        MPI_Comm commslave;
        static int ranks[] = {0};
        ...
        MPI_Init(&argc, &argv);
        MPI_Comm_group(MPI_COMM_WORLD, &MPI_GROUP_WORLD);
        MPI_Comm_rank(MPI_COMM_WORLD, &me);  /* local */

    MPI_Group_excl(MPI_GROUP_WORLD, 1, ranks, &grprem);  /* local */
        MPI_Comm_create(MPI_COMM_WORLD, grprem, &commslave);

    if(me != 0)
        {
          /* compute on slave */
          ...
          MPI_Reduce(send_buf,recv_buff,count, MPI_INT, MPI_SUM, 1, commslave);
          ...
        }
        /* zero falls through immediately to this reduce, others do later... */
        MPI_Reduce(send_buf2, recv_buff2, count2,
                   MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD);

    MPI_Comm_free(&commslave);
        MPI_Group_free(&MPI_GROUP_WORLD);
        MPI_Group_free(&grprem);
        MPI_Finalize();
      }

This example illustrates how a group consisting of all but the zeroth process of the ``all'' group is created, and then how a communicator is formed ( commslave) for that new group. The new communicator is used in a collective call, and all processes execute a collective call in the MPI_COMM_WORLD context. This example illustrates how the two communicators (that inherently possess distinct contexts) protect communication. That is, communication in MPI_COMM_WORLD is insulated from communication in commslave, and vice versa.

In summary, ``group safety'' is achieved via communicators because distinct contexts within communicators are enforced to be unique on any process.

Up: Motivating Examples Next: Example #4 Previous: Current Practice #2

Return to MPI 1.1 Standard Index
Return to MPI-2 Standard Index
Return to MPI Forum Home Page

MPI-1.1 of June 12, 1995
HTML Generated on August 6, 1997