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

Python_user

MPI_Send()如果发送数据的大小大于MPI缓冲区的大小,如何将数据传达给接收过程?例如,假设我要在一条发送消息中发送10个字节的数据(即,我的应用程序缓冲区的大小为10B),但是MPI缓冲区的固定大小为6B。在这种情况下,如何MPI_Send()发送数据?它先传输6B,然后传输其余4B吗?还是仅传输6B?

韦斯利·布兰德

MPI消息涉及几种不同的缓冲区,因此我想弄清楚它们各自的作用。

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

  2. 内部缓冲区-这些缓冲区在MPI内部,并且可能存在甚至可能不存在。在MPI标准中,没有关于这些缓冲区的任何信息,也没有说明它们如何起作用,应该有多大等等。但是,您可以做出一些合理的假设。

    • 通常,会有一些内部缓冲区用于加速数据传输,特别是对于小消息。如果您的消息足够小,则可以将其复制到此缓冲区中,以便稍后排队传输。如果您做的很小,通常会发生这种情况MPI_SEND该呼叫将立即返回,但实际上可能已经或可能没有将数据发送到接收过程。接收端也有类似的缓冲区,因此,如果在应用程序提供可以存储数据的应用程序缓冲区之前收到一条小消息,则可以将其放入这些较小的内部缓冲区之一中,直到指定了最终目的地为止。这通常称为eager协议
    • 有时,内部缓冲区要么全部用完,要么太小而无法将您的消息复制到其中。在这种情况下,MPI会退回到集合协议在这种情况下,MPI通常根本不使用内部缓冲区,而是保留对应用程序缓冲区的控制并直接从那里发送数据。如果发生这种情况,您MPI_SEND对MPI库的调用将不会返回,直到使用缓冲区完成了MPI库,并且您的应用程序可以安全地再次修改数据。
  3. 特殊缓冲区-还有其他类型的缓冲区可以提供特殊服务,例如网卡上的缓冲区可以加快数据传输速度。这些行为通常取决于您所使用的网络类型。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MPI发送和接收挂起,缓冲区大小大于64kb

来自分类Dev

处理大于缓冲区大小的帧

来自分类Dev

MPI_Send仅适用于静态分配的缓冲区

来自分类Dev

BufferedInputStream的缓冲区大小

来自分类Dev

获取缓冲区的大小

来自分类Dev

FUSE缓冲区的大小?

来自分类Dev

Awk缓冲区大小

来自分类Dev

如何指定WebSocket的缓冲区大小?

来自分类Dev

调整缓冲区大小时OpenGL失败

来自分类Dev

您将如何限制缓冲区大小并返回c ++中的缓冲区限制?

来自分类Dev

Java中的缓冲区大小

来自分类Dev

C ++中的缓冲区大小

来自分类Dev

AVPlayer / AVPlayerItem的缓冲区大小

来自分类Dev

HttpClient缓冲区大小超出限制

来自分类Dev

使用WriteableBitmap的缓冲区大小不足?

来自分类Dev

是gorouines忽略通道的缓冲区大小

来自分类Dev

OutputStreamWriter内部缓冲区大小

来自分类Dev

<>运算符缓冲区大小

来自分类Dev

增加Python的标准缓冲区大小

来自分类Dev

设置rpc调用的缓冲区大小

来自分类Dev

Python Poster缓冲区大小

来自分类Dev

Java协议缓冲区-消息大小

来自分类Dev

在GZipStream中设置缓冲区大小

来自分类Dev

超过HttpClient缓冲区大小限制

来自分类Dev

Android DatagramSocket接收缓冲区大小

来自分类Dev

硬盘缓冲区大小重要吗?

来自分类Dev

BufferedImage错误的缓冲区大小

来自分类Dev

Rx动态大小的滑动缓冲区

来自分类Dev

Java OutputStream 缓冲区大小