我是MPI世界的新人,我有点迷惑......
我正在使用“MPI_Scatter”来分解多个部分的数组。但案例是......它可以在多台机器上运行程序吗?
我的观点是:我必须使用像MPI_Send和MPI_Rcv这样的东西吗?或Scatter可以做到这一点? MPI_Scatter只能在一台机器上运行?找不到任何关于此的好参考..
谢谢! =)
答案 0 :(得分:2)
MPI_Scatter
都可以正常工作。它具有与根进程执行MPI_Send
操作循环并且所有其他进程已执行单个MPI_Recv
的效果相同的效果。事实上,MPI_Scatter
通常使用MPI_Send
和MPI_Recv
在内部实施,除非网络设备支持某种卸载工作(但最终它再次归结为一系列发送和接收事件)。其对应MPI_Gather
以及MPI中的任何其他集体通信呼叫也是如此。
MPI是一个抽象规范 - 它只定义了通信实体(排名)与MPI环境(API)交互的方式以及此交互的结果。它不关心排名是同一节点上的进程,还是它们在大规模并行超级计算机上运行,或者它们是否通过Internet在全球范围内进行通信。这在MPI规范的以下摘录中有最好的描述:
消息传递范式的吸引力至少部分源于其广泛的可移植性。以这种方式表达的程序可以在分布式存储器多处理器,工作站网络以及所有这些的组合上运行。此外,共享存储器实现(包括多核处理器和混合架构的实现)也是可能的。组合共享和分布式内存视图的架构或网络速度的提高不会使范例过时。因此,在各种各样的机器上实施该标准应该是可行和有用的,包括由通信网络连接的其他机器集合组成的“机器”,并行或不并行。