在产生如下所示的工作进程之前,我需要检查该数目是否可用,以便在请求的插槽不可用时,以下代码不会崩溃。
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个可用?
或其他方式,如何处理因资源不可用而导致的崩溃。这次崩溃导致服务中断。
答案 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
}