Как отправить сигнал (или уведомление) из процесса MPI другому на C? - PullRequest
1 голос
/ 26 мая 2010

Как я могу заставить процесс MPI уведомлять других об ошибках, например, особенно в программе MPI, где все процессы MPI независимы друг от друга (нет синхронизации между различными процессами MPI)?

Спасибо

Ответы [ 4 ]

2 голосов
/ 21 декабря 2010

несоответствие, которое вы указываете, заставляет меня задуматься: почему вы используете MPI? это, кажется, не соответствует вашей проблеме, и нет ничего хуже, чем пытаться засунуть квадратный колышек в круглые отверстия MPI. «Отсутствие синхронизации между процессами MPI» создает впечатление, что вы взяли на себя рабочую нагрузку, которая по своей сути является последовательным, и пытаетесь превратить ее в MPI.

, тем не менее, вы, вероятно, можете делать то, что вы хотите, просто периодически опрашивая MPI_Irecv и MPI_Test.

2 голосов
/ 26 мая 2010

Я нахожу вашу идею программы MPI, в которой все процессы независимы, очень странной. Я думаю, что по определению все процессы в программе MPI не являются независимыми, все они, например, находятся в одном коммуникаторе после того, как вы вызвали MPI_INIT, чтобы они все «знали» о существовании друг друга. Возможно, вы написали свой код, чтобы после этого процессы не синхронизировались, но средства все еще существуют для взаимодействия друг с другом процессов.

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

1 голос
/ 27 мая 2010

Независимость и отсутствие синхронизации - это два совершенно разных сценария работы с MPI, благодаря неблокируемой связи .

Мне кажется, что то, что вы хотите, может быть реализовано следующим образом: когда происходит ошибка, процесс передает сообщение с назначенным тегом «error», и каждый процесс периодически публикует неблокирующие сообщения для получения сообщения с этим тегом. , Если они получают такое сообщение, это означает, что недавно произошла ошибка, и они могут реагировать соответствующим образом, в противном случае они продолжают свое обычное выполнение.

(Обратите внимание, что «широковещание» в данном случае не относится к MPI_Bcast, поскольку это коллективная операция связи и как такие блоки. Вместо этого это просто означает отправку одного и того же сообщения всем, кого это касается. Если вы если вы не хотите синхронизировать процессы, то эта отправка также должна быть неблокируемой.)

0 голосов
/ 27 мая 2010

В стандарте MPI нет ничего, что позволяло бы посылать «прерывания» из одного ранга в другой (или ранги). Как правило, прогрессирование требует, чтобы пользовательский код время от времени входил в библиотеку MPI. Отсутствует прогресс, нет стандартного способа общения между рядами.

Синхронизация требует, чтобы время от времени была какая-то запись в библиотеке MPI. MPI_Barrier - это «большой молоток» для синхронизации. В сочетании с MPI_Reduce_Scatter можно было бы узнать, что есть ошибка по крайней мере для одного ранга.

...