initialize::~initialize() { if (!quiet) master_printf("\nElapsed run time = %g s\n", elapsed_time()); #ifdef HAVE_MPI end_divide_parallel(); MPI_Finalize(); #endif }
int divide_parallel_processes(int numgroups) { #ifdef HAVE_MPI end_divide_parallel(); if (numgroups > count_processors()) abort("numgroups > count_processors"); int mygroup = (my_rank() * numgroups) / count_processors(); MPI_Comm_split(MPI_COMM_WORLD, mygroup, my_rank(), &mycomm); return mygroup; #else if (numgroups != 1) abort("cannot divide processes in non-MPI mode"); return 0; #endif }
int divide_parallel_processes(int numgroups) { #ifdef HAVE_MPI int sz, rank, mygroup; end_divide_parallel(); MPI_Comm_size(mpb_comm, &sz); CHECK(numgroups > 0, "numgroups must be > 0"); CHECK(numgroups <= sz, "tried to split into more groups than processes"); MPI_Comm_rank(mpb_comm, &rank); mygroup = (rank * numgroups) / sz; MPI_Comm_split(MPI_COMM_WORLD, mygroup, rank, &mpb_comm); return mygroup; #else CHECK(numgroups != 1, "tried to split into more groups than processes"); return 0; #endif }