我正在研究在MPI中并行实现Quicksort的通信复杂性,我在一本书中发现了类似的内容:
“单个进程从每个其他p-1进程中收集常规样本。由于传递的值相对较少,因此消息延迟可能是此步骤的主要术语。因此聚集的通信复杂性是O(log p)“(O实际上是theta,p是处理器的数量)。
对广播信息也作出同样的肯定。
为什么这些群组通信的复杂性为O(log p)?是因为通信是使用某种基于树的层次结构完成的吗?
如果延迟不是主要术语并且发送了大量数据怎么办?复杂性是否为O(n log(p)),其中n将是发送数据的大小除以可用带宽?
那么,MPI_Send()和MPI_Recv()的通信复杂性怎么样?
提前致谢!
答案 0 :(得分:5)
是的,聚集和散射是使用(取决于特定的MPI版本)实现的,例如二项式树,超立方体,线性阵列或2D方形网格。可以使用超立方体等来实现全集合操作。
对于聚集或分散,让lambda成为延迟并测试带宽。然后需要log p步骤。假设您要发送n个整数,每个整数使用4个字节表示。发送它们的时间是
当n = 0(1)时,这是O(log p),否则是O(log p + n)。 对于广播,所需时间是
当n = 0(1)时为O(log p),否则为O(n log p)。
最后,对于像MPI_Send()这样的点对点通信,如果要发送n个整数,则通信复杂度为O(n)。当n = 0(1)时,复杂性显然是O(1)。