gpt4 book ai didi

infiniband - RDMA内存共享

转载 作者:行者123 更新时间:2023-12-01 18:21:20 26 4
gpt4 key购买 nike

我有几台通过 Infiniband 网络连接的多核计算机。我想在共享内存池上进行一些低延迟计算,并进行远程原子操作。我知道 RDMA 是可行的方法。在每个节点上,我将注册一个内存区域(和保护域)以进行数据共享。

在线 RDMA 示例通常关注单线程服务器和单线程客户端之间的单个连接。现在我想在每个 Infiniband 节点上都有一个多线程进程。我对以下内容感到非常困惑......

  1. 对于总共 n 个节点和 m 个线程的集群,我应该在每个节点上准备多少个队列对?更具体地说,同一节点上的多个线程可以共享同一个队列对吗?

  2. 我应该在每个节点上准备多少个完成队列?我将有多个线程在每个节点上发出远程读/写/cas 操作。如果它们共享一个公共(public)完成队列,则完成事件将会混合。如果线程有自己独立的完成队列,那么线程数量确实会很多。

  3. 您是否建议我使用现有的库而不是编写此软件? (嗯,或者我应该写一个并开源它?:-)

感谢您的善意建议。

最佳答案

至少在 Linux 上,InfiniBand 动词库是完全线程安全的。因此,您可以根据需要在多线程应用程序中使用任意数量的队列对 (QP)——多个线程可以安全地将工作请求发布到单个 QP,尽管您当然必须确保对未完成的任务进行任何跟踪您在自己的应用程序中执行的请求等是线程安全的。

确实,每个发送队列和每个接收队列(请记住,QP 实际上是一对队列:) 都附加到单个完成队列 (CQ)。因此,如果您希望每个线程都有自己的 CQ,那么每个线程都需要自己的 QP 来提交工作。

一般来说,QP 和 CQ 并不是真正的有限资源——您可以轻松地在单个节点上拥有数百或数千个资源,而不会出现任何问题。因此,您可以设计应用程序,而不必过多担心正在使用的队列的绝对数量。这并不是说您不必担心可扩展性 - 例如,如果您有很多接收队列并且每个队列有很多缓冲区,那么您可能会在接收缓冲中占用太多内存,因此您最终会需要使用共享接收队列(SRQ)。

有很多使用IB的中间件库;也许 MPI(例如 http://open-mpi.org/ )是最著名的一个,在您深入重新发明事物之前,可能值得对其进行评估。 MPI 开发人员还发表了大量有关高效使用 IB/RDMA 的研究成果,如果您决定构建自己的系统,这些研究成果可能值得一看。

关于infiniband - RDMA内存共享,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9470512/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com