Могу ли я использовать MPI_Probe для проверки сообщений, отправленных с помощью коллективной операции? - PullRequest
0 голосов
/ 22 марта 2012

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

Мне было интересно, допустимо ли использовать MPI_Broadcast для трансляции этих сообщений завершения и использовать MPI_Probe для проверки их прибытия.

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

Ответы [ 2 ]

5 голосов
/ 22 марта 2012

Нет, вы можете использовать MPI_Probe только для тестирования двухточечной связи. Для коллективного общения единственный способ участвовать - это сделать коллективный вызов. Из определения MPI_Probe в стандарте , "Вызов совпадает с тем же сообщением, которое было бы получено при вызове MPI_RECV (..., source, tag, comm, status), выполненном в той же точке в программе "- например, он соответствует только вещам типа" точка-точка ", как Recv.

С появлением новых неблокирующих коллективов в MPI3 вы сможете использовать MPI_Test (или MPI_Wait), чтобы проверить состояние запроса на неблокирование, так же, как и при неблокирующем отправлении / записи, хотя у меня нет Я следил за тем, чтобы рабочие группы работали слишком тесно, поэтому я не знаю деталей.

1 голос
/ 22 марта 2012

Я не уверен, что стандарт MPI исключает это, но я не понимаю, как это было бы полезно, если это возможно. В редких случаях, когда я использовал mpi_probe, я использовал его, чтобы узнать размер входящего сообщения; Конечно, он также может получать другую информацию о сообщениях «в полете». Но mpi_bcast - это коллективная операция, поэтому все процессы в коммуникаторе знают все о сообщении, которое вы можете использовать mpi_probe, чтобы выяснить это. Я думаю?

...