MPI_Send()
如果发送数据的大小大于MPI缓冲区的大小,如何将数据传达给接收过程?例如,假设我要在一条发送消息中发送10个字节的数据(即,我的应用程序缓冲区的大小为10B),但是MPI缓冲区的固定大小为6B。在这种情况下,如何MPI_Send()
发送数据?它先传输6B,然后传输其余4B吗?还是仅传输6B?
MPI消息涉及几种不同的缓冲区,因此我想弄清楚它们各自的作用。
应用程序缓冲区-这些缓冲区由应用程序分配和管理。您的数据存储在这些文件中,您使用这些文件进行计算,然后将这些文件传递给MPI,以告诉它在哪里发送或接收数据。它们的大小大于或大于您的数据。
内部缓冲区-这些缓冲区在MPI内部,并且可能存在甚至可能不存在。在MPI标准中,没有关于这些缓冲区的任何信息,也没有说明它们如何起作用,应该有多大等等。但是,您可以做出一些合理的假设。
MPI_SEND
。该呼叫将立即返回,但实际上可能已经或可能没有将数据发送到接收过程。接收端也有类似的缓冲区,因此,如果在应用程序提供可以存储数据的应用程序缓冲区之前收到一条小消息,则可以将其放入这些较小的内部缓冲区之一中,直到指定了最终目的地为止。这通常称为eager协议。MPI_SEND
对MPI库的调用将不会返回,直到使用缓冲区完成了MPI库,并且您的应用程序可以安全地再次修改数据。本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句