8.5.5. Library Example #1

PreviousUpNext
Up: Motivating Examples Next: Library Example #2 Previous: Communication Safety Example


Example First library example

The main program:

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(); 
  return 0; 
} 

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); 
} 


PreviousUpNext
Up: Motivating Examples Next: Library Example #2 Previous: Communication Safety Example


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

(Unofficial) MPI-5.0 of June 9, 2025
HTML Generated on March 2, 2025