Прерывание выполнения всех процессов в MPI - PullRequest
5 голосов
/ 30 января 2012

Проблема заключается в поиске пароля в большом файле размером около 10 ГБ с использованием MPI.Я разделил файл между различными процессами с размером фрагмента (Total number of bytes in file / P), где p - число процессов, которые нужно создать, и параллельно применил мою логику поиска в каждом процессе через цикл.Я хочу остановить другие процессы, когда один процесс найдет решение.

Таким образом, чтобы прервать все другие процессы, я использую следующие два подхода.

  1. Первый подход заключается в вызове функции MPI_Abort ().из процесса всякий раз, когда его найти решение.
  2. второй подход заключается в использовании флага и установить его всякий раз, когда какой-либо процесс находит свое решение.После установки этого флага отправьте его всем остальным процессам, используя неблокирующую функцию send / recv / Iprobe.Затем проверьте этот флаг каждым процессом, используя if(flag == 1) break;и сделайте так ..

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

* Произошла ошибка в MPI_Finalize * после завершения MPI *** MPI_ERRORS_ARE_FATAL (до свидания) [abc: 19150] Прервать до успешного завершения MPI_INIT;не может гарантировать, что все остальные процессы были убиты!

* Произошла ошибка в MPI_Finalize * после завершения MPI * MPI_ERRORS_ARE_FATAL (до свидания) [abc: 19151]Прервать до успешного завершения MPI_INIT;не может гарантировать, что все остальные процессы были убиты!

1 Ответ

2 голосов
/ 01 февраля 2012

MPI_Abort предназначен для аварийного завершения работы. Стандарт гласит:

int MPI_Abort(MPI_Comm comm, int errorcode)

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

Так что ее действительно следует использовать только для выхода из задания MPI в качестве крайней меры, а не в качестве обычного выходаflag.

Для второй проблемы проверьте, не вызывает ли какой-либо процесс двойной вызов MPI_Finalize.Кроме того, после вызова MPI_Finalize другие функции MPI не могут использоваться.

...