当应用程序缓冲区大小大于MPI缓冲区大小时,MPI_发送如何工作?

当应用程序缓冲区大小大于MPI缓冲区大小时,MPI_发送如何工作?,mpi,Mpi,如果发送数据的大小大于MPI缓冲区大小,MPI_如何将数据发送到接收进程?例如,假设我想发送10个字节的数据,即,在单个发送消息中,我的应用程序缓冲区的大小是10B,但MPI缓冲区的固定大小是6B。在这种情况下,MPI_如何发送数据?它是否先传输6B,然后传输其余4B?还是只传输6B?MPI消息中涉及几种不同类型的缓冲区,所以我想弄清楚它们各自的作用 应用程序缓冲区-这些缓冲区由应用程序分配和管理。您的数据存储在这些文件中,您使用这些文件进行计算,然后将这些文件传递到MPI,告诉它在哪里发送或接

如果发送数据的大小大于MPI缓冲区大小,MPI_如何将数据发送到接收进程?例如,假设我想发送10个字节的数据,即,在单个发送消息中,我的应用程序缓冲区的大小是10B,但MPI缓冲区的固定大小是6B。在这种情况下,MPI_如何发送数据?它是否先传输6B,然后传输其余4B?还是只传输6B?

MPI消息中涉及几种不同类型的缓冲区,所以我想弄清楚它们各自的作用

应用程序缓冲区-这些缓冲区由应用程序分配和管理。您的数据存储在这些文件中,您使用这些文件进行计算,然后将这些文件传递到MPI,告诉它在哪里发送或接收数据。它们的大小与您的数据一样大或更大

内部缓冲区-这些缓冲区是MPI的内部缓冲区,可能存在,也可能不存在。MPI标准中没有关于这些缓冲区的内容,也没有关于它们应该如何工作、应该有多大等的内容。但是,您可以做出一些合理的假设

通常会有一些内部缓冲区用于加速数据传输,特别是对于小消息。如果您的邮件足够小,则可以将其复制到此缓冲区,以便稍后排队传输。这是通常发生的情况,如果你做一个非常小的MPI_发送。呼叫将立即返回,但数据可能已发送到接收进程,也可能尚未发送到接收进程。接收端也有类似的缓冲区,因此,如果在应用程序提供可存储数据的应用程序缓冲区之前,小消息到达,则可以将其放入这些较小的内部缓冲区中,直到指定其最终目的地。这通常被称为渴望协议。 有时,内部缓冲区要么已经用完,要么太小,无法将消息复制到其中。在这种情况下,MPI返回到集合协议。在这种情况下,MPI通常根本不使用内部缓冲区,而是保留对应用程序缓冲区的控制,并直接从那里发送数据。如果发生这种情况,在MPI库使用缓冲区完成并且应用程序可以安全地再次修改数据之前,对MPI_SEND的调用不会返回。 特殊缓冲区-还有其他类型的缓冲区可以提供特殊服务,例如网卡上的缓冲区可以加速数据传输。这些行为方式通常特定于您使用的网络类型。
谢谢你的回答!还有一个疑问:当MPI遵循集合协议时,它是一次性传输整个缓冲区还是将其分块传输。如果是这种情况,这些零件的尺寸可能会有所不同,但这取决于哪些参数?…可能是任何东西。它的变化很大,这取决于您发送的消息数量、可用内存等。