Как отключить процессы, которые могут зависать в MPI - PullRequest
0 голосов
/ 20 сентября 2018

Моя программа - это просто процедура диагонализации гамильтониана определенной системы.Я пытаюсь работать с очень большой системой, которая очень сложна в вычислительном отношении.Фактически, если я увеличу размер системы на одну единицу, он превысит максимальный размер, который LAPACK может раскосить.(Примечание: не масштабируется линейно с количеством единиц).

В настоящее время я пытаюсь получить результат с очень высоким разрешением, что означает, что мне нужно усреднить вычисление примерно 10000 раз.Если бы я должен был сохранить серийный код, это заняло бы около 300 часов, поэтому я распараллелил свою программу.

Я настроил ее так, чтобы я выполнял 1000 вычислений на 10 разных ядрах и объединял их в конце,Я делал это довольно давно, поэтому не верю, что это проблема.

Моя проблема в том, что в моем коде есть ошибка, из-за которой программа зависает.К сожалению, это происходит только на одном из моих десяти процессоров, каждый из которых выполняет 1000 вычислений.Это может быть так редко, как 1 на 10000 запусков (очень специфический сценарий).

Я знаю, что он застревает, потому что внутри моей программы есть вызов MPI_reduce.Кроме того, я вывожу на экран прогресс каждого процесса (каждые 10% выполнения).Я могу определить, что мой мастер-процесс не может продолжаться после MPI_reduce, потому что один из остальных 10 процессов вышел из строя (но не остановлен).Я легко могу определить, какой процесс не удался.

У меня нет времени, чтобы найти и исправить ошибку, поэтому я ищу следующее:

  1. Это плохая практика, чтобы делать реальные расчеты на моем мастер-процессе?Или же мой основной процесс должен быть оставлен для общения и выполнения вычислений в конце.

  2. Как отменить процесс (чтобы мой основной процесс мог продолжиться после MPI_reduce) изнутри программы?

Проблема с 2: Мой мастер-процесс не может прочитать дополнительные строки, пока он ожидает, пока другие процессы достигнут команды mpi_reduce.

Я программирую на Фортране, используя OpenMPI и компилятор mpifort.

1 Ответ

0 голосов
/ 20 сентября 2018

Нет ничего плохого в использовании ранга 0 для вычислений, если только вы не знаете, что он вводит специальное узкое место.

В настоящее время невозможно восстановить MPI, если один ранг застрял.

Прилагаются определенные усилия для обеспечения отказоустойчивости, но это в первую очередь предназначено для того, чтобы пережить аппаратные ошибки.

Независимо от того, хотите вы этого или нет, вы должны действительно исправить свой код.Если у вас есть ошибка, которую вы не понимаете, все ваши результаты совершенно бесполезны (если у вас нет отдельного метода для полной проверки результатов).Неважно, как редко эта ошибка проявляется как зависание.Было бы безответственно использовать результаты для научной работы, если вы не сможете убедительно доказать, что они не влияют на результаты.

...