在产生MPI进程之前检查可用的广告位/资源

时间:2018-07-03 07:11:49

标签: mpi

在产生如下所示的工作进程之前,我需要检查该数目是否可用,以便在请求的插槽不可用时,以下代码不会崩溃。

   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);

如何检查MPI的可用插槽?

这是在服务接受多个请求的情况下发生的:

让我们假设:可用插槽总数:13

REQ1:生成5个进程

Req2:产生另外5个进程

Req3:将尝试产生5个proc,但是由于只有3个可用而崩溃。如何检查只有3个可用?

或其他方式,如何处理因资源不可用而导致的崩溃。这次崩溃导致服务中断。

1 个答案:

答案 0 :(得分:0)

您可以简单地要求MPI_Comm_spawn()返回一个错误代码,而不必中止应用程序。

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
}