我试图获得更多关于RDMA读写语义(特别是数据放置语义)的详细信息,我想与这里的专家确认我的理解。
一旦在完成队列中看到RDMA读取完成,数据是否可用/在本地缓冲区中看到。是相同的行为,如果我使用GPU直接DMA和本地地址映射到GPU内存。一旦在完成队列中看到RDMA读取完成,GPU中的数据会立即可用吗?如果没有立即可用,什么操作将确保它。
远程主机在看到接收队列中的即时数据后,是否可以检查其内存中是否存在数据。如果写的是GPU内存(使用GDR),那么期望/行为是否会改变。
发布于 2021-10-30 11:30:02
RDMA读取。在完成队列中看到RDMA读取完成后,本地缓冲区中会提供/看到数据吗?
是
的行为是一样的,如果我使用GPU直接DMA和本地地址映射到GPU内存?
不一定。NIC可能已经将数据发送到GPU,但是GPU还没有收到它。同时,RDMA读取完成已经到达CPU。造成这种情况的根本原因是PCIe语义,它允许对不同目标(CPU/GPU内存)的写入进行重新排序。
如果它不能立即可用,什么操作将确保它?
为了确保数据已经到达GPU,您可以在RDMA完成后在CPU上设置一个标志,并从GPU代码对此标志进行轮询。这是因为GPU发出的PCIe读取将“推送”NIC的DMA写入(根据PCIe排序语义)。
RDMA写入立即(或) RDMA写+发送:远程主机在看到接收队列中的即时数据后,能检查内存中是否存在数据吗?如果写的是GPU内存(使用GDR),那么期望/行为是否会改变。
是的,这是可行的,但与PCIe内存相比,与CPU内存相比,GDR遇到了与CPU内存相同的问题,即写入到GPU内存的顺序错误,这同样是由于CPU排序语义的缘故。RNIC无法控制PCIe,因此在这两种情况下都不能强制实现“所需”的语义。
https://stackoverflow.com/questions/69534739
复制相似问题