Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MPI SEND/MPI Issend是否使用系统缓冲区?_Mpi - Fatal编程技术网

MPI SEND/MPI Issend是否使用系统缓冲区?

MPI SEND/MPI Issend是否使用系统缓冲区?,mpi,Mpi,根据文档,MPI_Ssend和MPI_Issend是一种阻塞和非阻塞发送操作,两者都是同步的。MPI规范规定,同步发送在接收方开始接收消息时完成,之后可以安全地更新发送缓冲区: 函数MPI_WAIT和MPI_TEST用于完成非阻塞 沟通。发送操作的完成表明 发送方现在可以自由更新发送缓冲区中的位置( 发送操作本身保留发送缓冲区的内容 不变)。它并不表示已收到该消息, 相反,它可能已被通信子系统缓冲。 但是,如果使用了同步模式发送,则 发送操作表示已启动匹配的接收,并且 消息最终将由此匹配接收接收

根据文档,
MPI_Ssend
MPI_Issend
是一种阻塞和非阻塞发送操作,两者都是同步的。MPI规范规定,同步发送在接收方开始接收消息时完成,之后可以安全地更新发送缓冲区:

函数MPI_WAIT和MPI_TEST用于完成非阻塞 沟通。发送操作的完成表明 发送方现在可以自由更新发送缓冲区中的位置( 发送操作本身保留发送缓冲区的内容 不变)。它并不表示已收到该消息, 相反,它可能已被通信子系统缓冲。 但是,如果使用了同步模式发送,则 发送操作表示已启动匹配的接收,并且 消息最终将由此匹配接收接收

请记住,同步发送在刚开始接收时被视为已完成,我不确定以下几点:

  • 当发送完成的信号发出时,
    MPI\u Ssend
    MPI\u Issend
    可能只从发送缓冲区读取了部分数据?例如,前N个字节已发送和接收,而下M个字节仍在发送
  • 在收到整个消息之前,调用者如何安全地修改数据?这是否意味着数据必须复制到系统缓冲区?据我所知,MPI标准允许使用系统缓冲区,但不需要它。此外,我从中了解到,
    MPI_Issend()
    从不在本地缓冲数据
MPI_Ssend()
(或与
MPI_Issend()
相关的
MPI_Wait()
)在以下情况下返回:

  • 接收方已开始接收消息
  • 发送缓冲区可以重复使用
  • 如果消息已完全接收,或者MPI库在本地缓冲数据,则满足第二个条件

    我没有读到MPI标准禁止数据缓冲

    来自标准MPI 3.1 chpt 3.4第37页

    无论是否匹配,都可以启动使用同步模式的发送 收到的邮件已寄出。但是,只有在匹配的接收被选中时,发送才会成功完成 已发布,并且接收操作已开始接收同步服务器发送的消息 发送。因此,同步发送的完成不仅表明发送缓冲区 可以重复使用,但它也表示接收器已达到其应用程序中的某个点 执行,即它已开始执行匹配的接收。如果同时发送和 接收是阻塞操作,然后使用同步模式提供同步 通信语义:通信不是在两端之前完成的 进程在通讯处会合。在此模式下执行的发送是非本地的