async_progress_sample.c

#define PROGRESS_THREAD_COUNT 4MPI_Comm comms[PROGRESS_THREAD_COUNT];MPI_Request requests[PROGRESS_THREAD_COUNT];MPI_Info info;int idx;/* create “per-thread” communicators and assign thread id for each communicator */for (idx = 0; idx < PROGRESS_THREAD_COUNT; idx++){        MPI_Comm_dup(MPI_COMM_WORLD, &comms[idx]);        char thread_id_str[256] = { 0 };        sprintf(thread_id_str, "%d", idx);        MPI_Info_create(&info);        MPI_Info_set(info, "thread_id", thread_id_str);        MPI_Comm_set_info(comms[idx], info);        MPI_Info_free(&info);    }/* distribute MPI operations between communicators - i.e. between progress threads */for (idx = 0; idx < PROGRESS_THREAD_COUNT; idx++){    MPI_Iallreduce(…, comms[idx], &requests[idx]);}MPI_Waitall(PROGRESS_THREAD_COUNT, requests, …)

See Also

Asynchronous Progress Control