问题描述
我知道 MPI_PACK()
是用来将不连续的数据捆绑在一起发送的,但是它有什么用,而不是一个接一个地使用 MPI_Send()
发送数据?
解决方法
我知道 MPI_PACK() 用于捆绑非连续数据 一起发,可是有什么用,
优点之一就是不必
然后一个接一个地使用 MPI_Send() 发送数据?
您过去常常减少跨进程的 MPI 调用次数(这往往是并行化瓶颈)。通常,通过减少通信调用节省的时间可以证明计算与 MPI_PACK()
调用相关的所有代码所花费的时间是合理的。
从 Pack and unpack 可以了解到其他一些好处(例如兼容性、灵活性和抽象性),即:
提供打包/解包例程**是为了与以前的库兼容。 ** 此外,它们提供了一些其他方式不可用的功能 在 MPI 中。 例如,一条消息可以分几个部分接收, 在稍后部分完成的接收操作可能取决于 前一部分的内容。另一个用途是传出的消息可能是 明确缓冲在用户提供的空间中,从而覆盖系统 缓冲政策。最后,打包和解包的可用性 运营促进额外沟通的发展 位于 MPI 之上的库。
这可能不是最好的比喻;从表面上看,您可以将其视为与试图将尽可能多的物品装在一个盒子中的原因相同;尽量减少一个人必须携带那个盒子的次数,从而减少旅行的次数——类似于交流。
超出了这个问题的范围,但仍然useful:
派生数据类型,在节派生数据类型中描述, 允许在大多数情况下避免显式打包和解包
为了更好地理解,请查看 Derived Datatypes vs Pack/Unpack