#mpi
#mpi
Вопрос:
У меня есть программа MPI, в которой каждый узел отправляет некоторые значения некоторым другим узлам. Отправители знают, каким узлам отправлять данные, но получатели не знают 1) сколько данных ожидается на их конце и 2) какие ранги собираются отправить на него.
Я могу использовать MPI_ANY_SOURCE для второй части вышеупомянутой проблемы, но я понятия не имею, как получатель узнает, сколько он должен получить. т. Е. Сколько раз я должен вызывать функцию приема в MPI на узле получателя.
Комментарии:
1. Я думаю, что использование MPI_Put может помочь мне решить мою проблему, потому что таким образом мне не нужно беспокоиться о части приема ..!! Есть комментарии?
Ответ №1:
Большое преимущество односторонней связи в MPI2 заключается в том, что вам не нужно координировать отправку с получением, так что это определенно был бы один из подходов. С другой стороны, вам все равно нужно знать, какой объем данных может прийти к вам при создании окна для других в MPI_Put. Так что это потенциально проблема.
Но координация сообщений «точка-точка» тоже возможна. Поскольку похоже, что все отправители знают, сколько сообщений они будут отправлять и кому, вы могли бы объединить всю эту информацию. Например, скажем, было 4 процессора, и процесс 1 должен был отправить по одному сообщению каждому из процессов 0 и 2. Для отправки может использоваться массив целых чисел:
toSend[] = {1,0,1,0}
и то же самое мог бы сделать каждый из других процессоров. Тогда вы могли бы создать MPI_Allreduce(...., MPI_SUM,...)
один из этих массивов, и теперь каждый процессор знал бы общее количество получаемых сообщений; затем они могли бы отправлять такое количество неблокирующих полученных сообщений из MPI_ANY_SOURCE
.
Если объем данных на сообщение также неизвестен, это немного сложнее; но вы могли бы сделать то же самое с объемом данных; создать соответствующее пространство буфера; затем вы могли бы выполнить MPI_Bsend()
s, а получатели могли бы выполнить MPI_Probes и MPI_Recv .
Комментарии:
1. Для моей проблемы существует ограничение на объем данных, поэтому односторонняя связь для меня достаточно хороша. Я продолжу с этим и реализую это. кстати, второй подход тоже звучит неплохо, и я переключусь на него в случае возникновения каких-либо проблем. спасибо Джонатану за помощь .. 🙂