【发布时间】:2015-03-01 10:24:48
【问题描述】:
谁能解释一下MPI_Scatter 和MPI_Bcast 之间的区别? (除了任何进程都可以使用MPI_Scatter进行广播并且只有root可以使用MPI_Bcast)
在哪些情况下我应该使用第一个而不是另一个?
【问题讨论】:
谁能解释一下MPI_Scatter 和MPI_Bcast 之间的区别? (除了任何进程都可以使用MPI_Scatter进行广播并且只有root可以使用MPI_Bcast)
在哪些情况下我应该使用第一个而不是另一个?
【问题讨论】:
MPI_Bcast() 向每个人发送相同的数据,而MPI_Scatter() 向每个进程发送输入数组的一部分。 MPI_Bcast() 是 MPI_Reduce() 的反面,MPI_Scatter() 是 MPI_Gather() 的反面。像this one 这样的小方案是不言自明的。
MPI_Scatter() 和 MPI_Bcast() 都有一个名为 int root 的参数来指定根进程。
【讨论】:
MPI_SCATTER 确实是MPI_GATHER 的反面,但我不会将MPI_BCAST 称为MPI_REDUCE 的反面。
MPI_Reduce()可以将很多不同ways中的数据块组合起来,比如MPI_SUM或者MPI_MAX和MPI_Bcast()给每个进程提供相同的数据块,不需要途中的任何操作。
MPI_Bcast 在根进程(红色框)获取单个数据元素并将其复制到所有其他进程。 MPI_Scatter 获取一个元素数组,并按照进程等级的顺序分配元素。
【讨论】: