Может кто-нибудь объяснить мне MPI_Alltoall - PullRequest
0 голосов
/ 15 октября 2018

Я заметил, что он работает аналогично MPI_Scatter.Однако я не совсем понимаю, как он распределяет данные между процессами.Можно ли использовать MPI_Scatter в сочетании с другой коллективной функцией для достижения того же результата, что и MPI_Alltoall?

Спасибо

1 Ответ

0 голосов
/ 15 октября 2018

Ответ находится в стандарте MPI (5.8, стр. 168)

J-й блок, отправленный из процесса i, получен процессом j и помещен в i-й блок recvbuf.

[...]

Если comm является внутрикоммуникатором, результат такой, как если бы каждый процесс выполнял отправку каждому процессу (включая его) с вызовом,

MPI_Send(sendbuf+i * sendcount * extent(sendtype),sendcount,sendtype,i, ...)

и получение от любого другого процесса с вызовом

MPI_Recv(recvbuf+i * recvcount * extent(recvtype),recvcount,recvtype,i,...)

И да, вы можете реализовать MPI_Alltoall() с comm_size MPI_Scatter(), еслиэто то, что вы просите.

...