Как можно обрабатывать сигналы в безопасном режиме и приложение MPI (например, SIGUSR1, который должен сообщить приложению, что его время выполнения истекло и должно завершиться в следующие 10 мин.) У меня есть несколько ограничения:Обработка сигналов в приложении MPI/Изящный выход
- Завершить все параллельные/последовательные ввода-вывода сначала для выхода из приложения!
- Во всех остальных случаях приложение может выйти без каких-либо проблем
Как может это быть достигнуто безопасно, нет тупиков при попытке выйти и правильно выходить из текущего контекста прыгает обратно в main()
и призывающую MPI_FINALIZE()
? Каким-то образом процессы должны взаимодействовать с выходом (я думаю, что это одно и то же в многопоточных приложениях), но как это делается эффективно, не имея большого общения? Кто-нибудь знает какой-то стандартный способ сделать это правильно?
Ниже приведены некоторые мысли, которые могут или не могут работать:
Идея 1:
Допустим, для каждого процесса мы ловим сигнал в обработчике сигнала и толкать его на «стек необработанное сигналов» (USS), и мы просто возвращаемся из процедуры обработчика сигнала. Затем у нас есть определенные терминальные точки в нашем приложении, особенно до и после операций ввода-вывода, которые затем обрабатывают все сигналы в USS. Если в USS есть SIGUSR1, каждый процесс затем выйдет в точке завершения.
- Эта идея возникла проблема, что там еще может быть тупиков, процесс 1 только подхватить Befor с состоянием сигнала оконечной точки, в то время как процесс 2 прошел этот момент уже и в настоящее время начинает параллельный ввод-вывод. Процесс 1 бы выход, что приводит к тупиковой ситуации в процессе 2 (ожидание процесса 1 для ввода-вывода, которые возбужденный) ...
Идеи 2:
только главного процесс 0 ловит сигнал в сигнале обработчик, а затем отправляет широковещательное сообщение: «весь процесс выхода!» в определенной точке приложения. Все процессы получают широковещательную передачу, а также исключение, которое выловлено в main
и вызывается MPI_FINALIZE
.
- Таким образом, выход происходит благополучно, но за счет того, чтобы получить непрерывно широковещательные сообщения, чтобы увидеть, если мы должны выйти или не
Спасибо большое!