首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RDMA内存共享

RDMA内存共享
EN

Stack Overflow用户
提问于 2012-02-27 18:50:45
回答 1查看 4.2K关注 0票数 11

我有几台由Infiniband网络连接的多核计算机.我希望在共享内存池上进行一些低延迟的计算,并使用远程原子操作。我知道RDMA是最好的选择。在每个节点上,我将为数据共享注册一个内存区域(和保护域)。

在线RDMA示例通常集中在单线程服务器和单线程客户端之间的单个连接上。现在,我希望在每个Infiniband节点上都有一个多线程进程。我很困惑于以下几点..。

  1. :对于n个节点和m个线程的集群,我应该在每个节点上准备多少个队列对?更具体地说,同一个节点上的多个线程可以共享相同的队列对吗?
  2. ,我应该在每个节点上准备多少个完成队列?我将让多个线程在每个节点上发出远程读/写/cas操作。如果它们共享一个公共完成队列,则完成事件将被混淆。如果线程有自己独立的完成队列,那么就会有很多这样的线程。
  3. ,您建议我使用任何现有的库来代替编写这个软件吗?(嗯,还是我应该写一个,然后开放源代码呢?:-)

谢谢你的善意建议。

EN

回答 1

Stack Overflow用户

发布于 2012-02-27 19:16:37

至少在Linux上,InfiniBand谓词库是完全线程安全的。因此,您可以在多线程应用程序中使用任意数量或尽可能少的队列对(QPs) --多个线程可以安全地将工作请求发送到单个QP,当然,您必须确保在自己的应用程序中对未决请求的任何跟踪都是线程安全的。

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

一般来说,QPs和CQs并不是真正有限的资源--在一个节点上可以轻松地拥有数百个或数千个节点。这样你就可以设计你的应用程序,而不用担心你使用的队列的绝对数量。这并不是说您不必担心可伸缩性--例如,如果每个队列有很多接收队列和大量缓冲区,那么您可能会在接收缓冲区中占用太多内存,因此您最终需要使用共享接收队列(SRQ)。

有许多使用IB的中间件库;可能MPI (如http://open-mpi.org/)是最著名的中间件库,在您进行太大的创新之前,这一点可能是值得评估的。MPI开发人员还发表了大量关于高效使用IB/RDMA的研究报告,如果您确实决定构建自己的系统,这可能是值得研究的。

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

https://stackoverflow.com/questions/9470512

复制
相关文章

相似问题

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