user9983159
user9983159

Reputation: 21

check the available slots/resources before spawning MPI processes

I need ,before spawning a number of workers processes as shown below, to check if this number is available so that the below code will not crash if the requested slots is not available.

   int numworkers = settings.Parallelism + 1; //omp_get_num_procs();
    MPI_Comm_spawn("./processes/montecarlo", MPI_ARGV_NULL, numworkers,
            MPI_INFO_NULL,
            0, MPI_COMM_SELF, &workercomm, MPI_ERRCODES_IGNORE);

How to check available slots for mpi?

This is happening in the context of a service accepting several requests:

let us suppose:Total available slots: 13

REQ1: spawn 5 processes

Req2: spawn another 5 proc

Req3: will try to spawn 5 proc , but will crash because only 3 is available. how to check that only 3 is available?

or otherwise how to handle the crash that results from the non availability of resources. this crash is killing the service.

Upvotes: 1

Views: 272

Answers (1)

Gilles Gouaillardet
Gilles Gouaillardet

Reputation: 8395

you can simply ask MPI_Comm_spawn() to return with an error code instead of aborting the application.

MPI_Comm_set_errhandler(MPI_COMM_SELF, MPI_ERRORS_RETURN);
int res = MPI_Comm_spawn("./processes/montecarlo", MPI_ARGV_NULL, numworkers,
                          MPI_INFO_NULL, 0, MPI_COMM_SELF, &workercomm, MPI_ERRCODES_IGNORE);
if (MPI_SUCCESS != res) {
    // MPI_Comm_spawn failed
}

Upvotes: 1

Related Questions