在生成 MPI 进程之前检查可用的 slots/resources

check the available slots/resources before spawning MPI processes

我需要,在生成如下所示的一些工作进程之前,检查这个数字是否可用,这样如果请求的插槽不可用,下面的代码就不会崩溃。

   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 的可用插槽?

这是在服务接受多个请求的上下文中发生的:

让我们suppose:Total可用的插槽:13

REQ1:生成 5 个进程

要求 2:生成另外 5 个 proc

Req3:将尝试产生 5 个 proc,但会崩溃,因为只有 3 个可用。如何检查只有 3 个可用?

或者如何处理因资源不可用而导致的崩溃。这次崩溃正在终止服务。

您可以简单地询问 MPI_Comm_spawn() 到 return 一个错误代码,而不用中止应用程序。

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
}