next up previous
Next: The listing of Up: Lesson 2 -- Previous: Lesson 2 --

The listing of preamble.c

 

    MPI_Init ( &argc, &argv );
    MPI_Comm_size ( MPI_COMM_WORLD, &pool_size ); 
    MPI_Comm_rank ( MPI_COMM_WORLD, &my_rank );
    MPI_Get_processor_name ( my_node_name, &node_name_length );
    MPI_Attr_get ( MPI_COMM_WORLD, MPI_HOST, (void**) &host_rank_ptr,
                   &found_flag );
    if ( (int) host_rank_ptr != MPI_PROC_NULL ) host_rank = *host_rank_ptr; 
    else {
       MPI_Attr_get ( MPI_COMM_WORLD, MPI_IO, (void **) &host_rank_ptr,
                      &found_flag );
       if ( (int) host_rank_ptr != MPI_ANY_SOURCE ) host_rank = *host_rank_ptr;
       else {
          strcpy ( console_name, argv[1] );
          if ( 0 == strcmp ( my_node_name, console_name ) ) {
             host_rank = my_rank;
             i_am_the_master = B_TRUE;
          }
       }
    }
    if (i_am_the_master) {
       int_buffer[0] = host_rank;
       for (destination = 0; destination < pool_size; destination++)
          if (destination != my_rank) 
             MPI_Send(int_buffer, 1, MPI_INT, destination, 1001, 
                      MPI_COMM_WORLD);
    }
    else {
       MPI_Recv(int_buffer, 1, MPI_INT, MPI_ANY_SOURCE, 1001, 
                MPI_COMM_WORLD, &status);
       host_rank = int_buffer[0];
    }
    if (i_am_the_master) strcpy (char_buffer, my_node_name);
    MPI_Bcast(char_buffer, BUFSIZ, MPI_CHAR, host_rank, 
              MPI_COMM_WORLD);
    strcpy (host_name, char_buffer);
    if (! i_am_the_master) {
       sprintf (char_buffer, "Greetings to the master (%s, %d) from (%s, %d)",
                host_name, host_rank, my_node_name, my_rank);
       MPI_Send (char_buffer, strlen(char_buffer) + 1, MPI_CHAR, host_rank, 
                 2002, MPI_COMM_WORLD);
    }
    else {
       for (source = 0; source < pool_size; source++) {
          if (source != my_rank) {
             MPI_Recv(char_buffer, BUFSIZ, MPI_CHAR, source, 2002,
                      MPI_COMM_WORLD, &status);
             printf ("%s\n", char_buffer);
          }
       }
    }



Zdzislaw Meglicki
Tue Feb 28 15:07:51 EST 1995