проверьте доступные слоты / ресурсы перед порождением процессов MPI - PullRequest
0 голосов
/ 03 июля 2018

Мне нужно, перед тем как запустить несколько рабочих процессов, как показано ниже, проверить, доступно ли это число, чтобы приведенный ниже код не зависал, если запрошенные слоты недоступны.

   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 процессов, но потерпит крах, потому что доступно только 3. как проверить что доступно только 3?

или иным образом, как обработать сбой, вызванный отсутствием ресурсов. этот сбой убивает службу.

1 Ответ

0 голосов
/ 03 июля 2018

Вы можете просто попросить 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
}
...