Я пишу программу на C++, которая использует OpenMPI. Он выполняется в «раундах», где в каждом раунде процесс 0 отправляет куски данных другим процессам, он делает материал и отправляет результаты назад, а когда больше нет кусков для отправки, процесс 0 отправляет «сделанные», сообщение друг другу. Сообщение «done» - это сообщение только одного типа с тегом 3. Мой первый раунд выполняется отлично. Однако, когда я добираюсь до второго раунда, обрабатывает 1-p «пробник» и «получает» выполненное сообщение перед процессом 0, имел возможность отправить что-либо (не говоря уже о сделанном сообщении).MPI: Получение уже полученного сообщения?
Я уже много раз пересматривал свой код, и кажется, что единственное место, откуда может появиться это сообщение, - это то, где процесс 0 отправил его в предыдущем раунде, но каждый процесс уже получил это. Я бы предпочел не публиковать свой код, так как он довольно большой, но кто-нибудь знает, можно ли получать сообщения MPI дважды?
Также обратите внимание: если информация в сообщении содержится в его теге (например, сообщение «done»), вы можете отправить сообщение с count = 0. – ricky116
@ ricky116 Должен ли я получить его в этом дело? – FrancesKR
Если вы отправляете 'ISend', его нужно будет обработать с помощью операции получения на целевом узле, поэтому да, в то время как информация, которую вы хотите, будет полностью доступна через« IProbe », вам все равно необходимо выполнить 'Recv' на сообщение с нулевым размером. – ricky116