@Nikitko_Cent

MPI. Как прервать выполнение всех процессов?

Допустим, в одном из выполняющихся процессов произошла ошибка, из-за которой невозможно дальнейшее исполнение всей параллельной программы в принципе, вследствие чего нужно корректно завершить работу всех процессов.

Знаю о функции MPI_Abort, предусмотренную для этих целей, но она не очень удобна...

Вообще, я хотел бы заложить прям в алгоритм исполнения программы корректный экстренный выход из процесса. Что то типо такой конструкции обработки возникновения экстренной ситуации :

try
{
	...
}
catch (std::exception &err)
{
	errCode = 2;

	for (int i = 0; i < procCount; i++)
	{
		if (i == procRank)
			continue;

		const int msg = 0;
		MPI_Send(&msg, 1, MPI_INT, i, MSG_WORK, MPI_COMM_WORLD);
	}

	std::cerr << "Error : " << err.what() << '\n';
}


И затем, соответственно, в остальных процессах организовать прерывание при поступлении соответствующего сообщения. Проблема в том, что я не могу завершить процесс до того, как остальные процессы не примут соответствующие "экстренные" сообщения. Это может привести к deadlock'у (например, если сразу несколько процессов "обвалились", то они по приведённому выше мною коду рассылают всем сообщения, но сами не принимают их)

Более чем уверен, что этим вопросом далеко не я первый задаюсь. Должны же быть какие то адекватные решения...
  • Вопрос задан
  • 800 просмотров
Пригласить эксперта
Ответы на вопрос 1
@motral
архитектурно поменяйте решение, сделайте отдельный процесс мониторинга
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы