139. Library Example #1


Up: Motivating Examples Next: Library Example #2 Previous: Example #4

The main program: 2.2

   int main(int argc, char **argv) 
   { 
     int done = 0; 
     user_lib_t *libh_a, *libh_b; 
     void *dataset1, *dataset2; 
     ... 
     MPI_Init(&argc, &argv); 
     ... 
     init_user_lib(MPI_COMM_WORLD, &libh_a); 
     init_user_lib(MPI_COMM_WORLD, &libh_b); 
     ... 
     user_start_op(libh_a, dataset1); 
     user_start_op(libh_b, dataset2); 
     ... 
     while(!done) 
     { 
        /* work */ 
        ... 
        MPI_Reduce(..., MPI_COMM_WORLD); 
        ... 
        /* see if done */ 
        ... 
     } 
     user_end_op(libh_a); 
     user_end_op(libh_b); 
 
     uninit_user_lib(libh_a); 
     uninit_user_lib(libh_b); 
     MPI_Finalize(); 
   } 

The user library initialization code:

   void init_user_lib(MPI_Comm comm, user_lib_t **handle) 
   { 
     user_lib_t *save; 
 
     user_lib_initsave(&save); /* local */ 
     MPI_Comm_dup(comm, &(save -> comm)); 
 
     /* other inits */ 
     ... 
 
     *handle = save; 
   } 
User start-up code:
   void user_start_op(user_lib_t *handle, void *data) 
   { 
     MPI_Irecv( ..., handle->comm, &(handle -> irecv_handle) ); 
     MPI_Isend( ..., handle->comm, &(handle -> isend_handle) ); 
   } 
User communication clean-up code:
   void user_end_op(user_lib_t *handle) 
   { 
     MPI_Status status; 
     MPI_Wait(handle -> isend_handle, &status); 
     MPI_Wait(handle -> irecv_handle, &status); 
   } 
User object clean-up code:
   void uninit_user_lib(user_lib_t *handle) 
   { 
     MPI_Comm_free(&(handle -> comm)); 
     free(handle); 
   } 



Up: Motivating Examples Next: Library Example #2 Previous: Example #4


Return to MPI-2.2 Standard Index
Return to MPI Forum Home Page

(Unofficial) MPI-2.2 of September 4, 2009
HTML Generated on September 10, 2009