首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >远程内存访问(RMA)的用途

远程内存访问(RMA)的用途
EN

Stack Overflow用户
提问于 2018-03-03 03:32:16
回答 2查看 764关注 0票数 3

我阅读了MPI标准,找到了一个关于MPI_Put和MPI_Get操作的章节。然而,对于我来说,RMA在这些功能的基础上有什么好处还不清楚。当使用这样的函数比使用异步MPI_Isend更好时,MPI_Irecv?使用RMA的一般目的是什么(不在MPI环境中)?

EN

回答 2

Stack Overflow用户

发布于 2018-03-09 13:52:49

单边通信的最大好处是能够在节点之间推送或获取数据,而不会产生发送/接收开销。

想象一个有2个节点的场景。您希望将数据从节点1推送到节点2。

当节点1使用MPI_ISendMPI_Send向节点2发送数据时,节点2仍然必须使用MPI_Irecv正式接收该数据。节点2将等待该接收器,匹配MPI标记,然后允许您继续。这在理论上类似于套接字,因为两端都必须协调。即使使用异步版本的MPI_I*,仍然存在协调。

使用MPI_Put,您从节点1推送数据,节点2将拥有这些数据。涉及到同步步骤,但笑点是节点2将拥有它,并且不需要正式接受。组中的所有节点都可以访问由其他节点附加的内存缓冲区。

我的一位同事有一个很好的类比。MPI_SendMPI_Recv就像邮件递送一样,收件人必须为包裹签名。他们可以在门口无限期地等待(MPI_Send)或留下便条让你回电(MPI_ISend)。

MPI_Put就像亚马逊的送货员走进你的房子,把杂货放好。MPI_Get就像你走进一家关门的杂货店,然后抓起你需要的东西。

与本例类似,MPI_PutMPI_Get依赖于信任和良好的设计。只有当共享内存和单向数据移动有效时,才应该使用它们。

好的概述:https://www.cc.gatech.edu/~echow/ipcc/hpc-course/19_rma.pdf

票数 3
EN

Stack Overflow用户

发布于 2018-03-09 22:42:37

一些应用程序使用RMA更容易或更自然地编写。例如,考虑一个2D模拟应用程序,其中每个进程都拥有网格的某些部分,但需要来自其他进程的数据才能计算其迭代。使用消息传递原语需要每个进程匹配send/recv对,每个接收者都要理解每条消息的含义(请在此处写入此数据)。程序员必须小心地使用协调的发送和接收,或者通常所说的“异步”I中间操作来避免死锁。使用RMA原语不需要目标消息理解请求,因为它的含义是隐含的(请给我或写下这个数据)。

但是,将MPI_PutMPI_Get操作视为真正的片面操作是不正确的。MPI被设计为在不同的硬件上工作。有些网络,如infiniband,在某种意义上支持真正的DRMA,因为它们不需要目标进程的参与(在我阅读here时,情况并非如此)。其他网络不支持RDMA,RMA标准的设计使得高效的RMA原语(相对于硬件功能)可以在不与本规范冲突的情况下实现。

正如Using advanced MPI一书中所解释的,MPI_Put不仅仅是一个不需要recv的send,而且它类似于一个MPI_Isend,即使发布了相应的MPI_Recv变体,它也需要调用MPI_WaitMPI_Test来进行make progress。类似地,MPI RMA操作需要同步操作,比如可以取得进展的最基本的同步操作,比如MPI_Win_fence。MPI标准只规定当调用一个这样的操作时,这些操作应该最迟完成,这意味着它可以在之前完成。行为取决于MPI实现,而RMA操作实际上可以使用消息传递来实现。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49076115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档