Сообщение переменного размера в MPI

Есть ли вызов библиотеки, который позволил бы отправлять/получать сообщения переменного размера с использованием MPI?

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


person Emma    schedule 25.11.2010    source источник
comment
В общем случае два сообщения с размером и полезной нагрузкой являются предпочтительным методом для передачи сообщения, размер которого неизвестен до времени выполнения.   -  person Stan Graves    schedule 29.11.2010
comment
Это обходной путь, но он не прост, потому что два сообщения могут мешать другой паре в другом потоке. Дуглас Грегор и другие обсуждают потокобезопасные подходы в этой статье researchgate.net/publication/ и привести аргументы в пользу стандартного способа сделать это.   -  person alfC    schedule 22.10.2017


Ответы (2)


Количество, предоставляемое MPI_Recv, является только верхней границей. MPI_Get_count можно использовать для определения точного количества полученных элементов.

Что-то вроде сокетов, я думаю.

person Emma    schedule 25.11.2010
comment
Единственное предостережение состоит в том, что количество и размер буфера, передаваемые в MPI_Recv, должны совпадать по размеру. Если можно заранее установить разумные ограничения на размер сообщения, это может оказаться эффективным методом. В противном случае, чтобы приспособиться к общему случаю, будет некоторое количество буферов, способных хранить 32-битное количество типов данных. Это может серьезно увеличить объем памяти. - person Stan Graves; 29.11.2010
comment
Можете ли вы добавить пример? Вы бы использовали MPI_Get_count(), а затем что-то вроде malloc(sizeof(char)*getCountResult), а затем передали полученный буфер MPI_Recv()? - person binki; 19.09.2017

Вы также можете использовать MPI_Probe или MPI_Iprobe вместо публикации сообщения с MPI_Recv или MPI_Irecv. Probe/Iprobe может иметь недостатки в производительности при неправильном использовании, но они являются одним из распространенных подходов к работе с сообщениями переменного размера. Кроме того, будьте осторожны в многопоточной среде, потому что Probe/Iprobe небезопасны в некоторых многопоточных контекстах. Подробное обсуждение этих проблем и эскиз исправления (Mprobe), которое, вероятно, будет включено в MPI-3.

person Dave Goodell    schedule 29.11.2010