The main program:
2.2
The user library initialization code:
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();
}
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