#include <mpi.h> #include <omp.h> #define n 2 MPI_Comm split_comm[n]; int main() { int i, provided; MPI_Init_thread(NULL, NULL, MPI_THREAD_MULTIPLE, &provided); for (i = 0; i < n; i++) MPI_Comm_dup(MPI_COMM_WORLD, &split_comm[i]); #pragma omp parallel for num_threads(n) for (i = 0; i < n; i++) { int j = i; MPI_Allreduce(MPI_IN_PLACE, &j, 1, MPI_INT, MPI_SUM, split_comm[i]); printf("Thread %d: allreduce returned %d\n", i, j); } MPI_Finalize(); }