2012-02-27 20 views
8

Infinibandネットワークで接続されたいくつかのマルチコアコンピュータがあります。私は共有メモリのプールで、リモートアトミック操作を使って、低レイテンシの計算をしたいと思っています。私はRDMAが行く方法であることを知っています。各ノードで、データ共有のためのメモリ領域(および保護ドメイン)を登録します。RDMAメモリ共有

オンラインRDMAの例は、多くの場合、シングルスレッドのサーバおよびシングルスレッドのクライアントとの間で単一の接続に焦点を当てます。今度は、各Infinibandノードでマルチスレッドプロセスを使用したいと思います。私は、キューのペアは、私が全部でn個のノードとメートルスレッドのクラスタのために、各ノードに準備する必要がありますどのように多くの...

  1. 以下について非常に困惑していますか?具体的には、同じノード上の複数のスレッドが同じキューペアを共有できますか?キューが、私は、各ノードに準備する必要がありますどのように多くの完了

  2. ?私は、各ノード上でリモートリード/ライト/カスケードオペレーションを発行する複数のスレッドを持っています。共通の完了キューを共有する場合は、完了イベントが混在します。スレッドが独自の分離完了キューを持っている場合は、本当に多くのスレッドが存在します。

  3. は、あなたの代わりにこのソフトウェアを書くのいずれかの既存のライブラリを持っているように私に勧めますか? (うーん、または私は1つ、オープンソースにそれを書くべき?:-)

は、あなたの種類の提案(複数可)をいただき、ありがとうございます。 Linuxの

答えて

8

少なくとも、インフィニバンド動詞ライブラリは完全にスレッドセーフです。したがって、マルチスレッドアプリケーションでは、複数のスレッドペア(QP)を任意の数だけ使用することができます.1つのQPに複数のスレッドが作業要求を安全に送信できるのはもちろんですが、リクエストなどは、スレッドセーフです。

QPが本当にキューのペアであること:)単一完了キュー(CQ)に接続されている覚えている(各キューを送信し、各受信キューことは事実です。ですから、各スレッドが独自のCQを持つようにするには、各スレッドに独自のQPが必要です。

一般的に、QPとCQは実際には限られたリソースではありません.1つのノードに何百何千もの問題が発生することは簡単です。そのため、使用しているキューの絶対数をあまり気にせずにアプリケーションを設計できます。これは、スケーラビリティについて心配する必要がないと言っているわけではありません。たとえば、受信キューとキューごとにたくさんのバッファがある場合は、受信バッファリングにあまりにも多くのメモリを割り当ててしまう可能性があります。共有受信キュー(SRQ)を使用する必要があります。

IBを使用する多数のミドルウェアライブラリがあります。おそらくMPI(例えばhttp://open-mpi.org/)は最もよく知られているものであり、事実を再考するにはあまりにも先行する前にそれを評価する価値があります。 MPI開発者は、IB/RDMAを効率的に使用するための多くの研究を公開しています。これは、独自のシステムを構築する場合に役立つでしょう。

+0

キューペア(QP)、完了キュー(CQ)、共有受信キュー(SRQ)のソースコードは独自に作成する必要があります。取る? – Alex

関連する問題