请问有人能够解释一下 MPI_Scatter
和 MPI_Bcast
的区别吗?(除了任何进程可以使用 MPI_Scatter
进行广播,只有根进程才能使用 MPI_Bcast
这个事实之外)
在什么情况下我应该使用其中一个而不是另一个呢?
MPI_Bcast()
将同样的数据发送给所有人,而MPI_Scatter()
则向每个进程发送输入数组的一部分。MPI_Bcast()
与MPI_Reduce()
相反,MPI_Scatter()
与MPI_Gather()
相反。像这样的简单示意图已经说明了问题。
而且,MPI_Scatter()
和MPI_Bcast()
都有一个名为int root
的参数来指定根进程。
MPI_Bcast将根进程(红框)的单个数据元素复制到所有其他进程。MPI_Scatter将元素数组按进程等级顺序分配元素。
MPI_SCATTER
确实是MPI_GATHER
的相反操作,但我不会称MPI_BCAST
为MPI_REDUCE
的相反操作。 - Hristo IlievMPI_Reduce()
可以通过许多不同的方式来组合数据片段,例如MPI_SUM
或MPI_MAX
。而MPI_Bcast()
则将同样的数据提供给每个进程,没有在途中进行任何操作。 - francis