2

MPIでは、各ランクに固有のアドレススペースがあり、それらの間の通信はメッセージパッシングを介して行われます。

共有メモリを備えたマルチコアマシンでMPIがどのように機能するか知りたいです。ランクが共有メモリのない2つの異なるマシン上にある場合、MPIは通信にメッセージを使用する必要があります。しかし、ランクが同じ物理マシン上にある場合(ただし、各ランクのアドレススペースは異なります)、MPI呼び出しは共有メモリを利用しますか?

たとえば、ALLREDUCE呼び出しを発行しているとします。私は2台のマシンM1とM2を持っており、それぞれに2つのコアがあります。ランクR1とR2はマシンM1のコア1とコア2にあり、R3とR4はマシンM2のコア1と2にあります。ALLREDUCEはどのように発生しますか?複数のメッセージが送信されますか?理想的には、R1とR2が使用可能な共有メモリ(同様にR3とR4)を使用して削減を行い、続いてM1とM2の間でメッセージを交換することを期待します。

MPIでの一括操作の実装の詳細について読むことができるドキュメントはありますか?

4

2 に答える 2

6

集合操作の実装は、MPIライブラリごとに異なります。見るのに最適な場所は、使用している/使用したい具体的なライブラリのソースコードです。

OpenMPIがどのように集合体を実装するかについてお話しすることができます。Open MPIは、さまざまなコンポーネント(モジュール)が存在するさまざまなレイヤーで構成されています。coll下位レベルのbtlフレームワークを使用してメッセージを転送する集合操作のフレームワークがあります。フレームワークには多くの異なるアルゴリズムが実装されており、collそれらのアルゴリズムを実装する多くの異なるモジュールもあります。スコアリングメカニズムを使用して、ライブラリがケースに最適なモジュールであると考えるものを選択しますが、これはMCAパラメーターで簡単にオーバーライドできます。最も顕著なものは、tuned十分にテストされ、共有メモリからInfiniBandまで、あらゆる種類の相互接続で適切に拡張できるモジュールです。モジュールは、tunedプロセスがどこにあるかについてはまったく気づいていません。それはただ使用しますbtlメッセージを送信するためのフレームワークであり、btl共有メモリまたはネットワーク操作の使用に注意を払います。モジュール内の一部のアルゴリズムtunedは階層的であり、パラメーターを適切に調整することで(OMPIの優れた柔軟性は、多くの内部MCAパラメーターを再コンパイルせずに変更できるという事実に由来します)、これらのアルゴリズムをクラスターの実際の階層に一致させることができます。可能な限り多くの物理トポロジ情報を収集し、それを使用して集合的な通信を最適化するために最善を尽くす、という別のcollモジュールがあります。hierarch

残念ながら、事実上すべてのMPI実装は、Fortranインターフェースを提供するために、最上位に非常に薄いレイヤーを備えたCで記述されています。したがって、このトピックに飛び込みたい場合は、Cについて平均以上の知識があることを願っています。集団運用の最適化に関する多くの研究論文もあります。それらのいくつかは無料で利用可能であり、他はアカデミックサブスクリプションを通じて利用可能です。

于 2012-07-26T08:58:14.733 に答える
2

これは使用しているMPI実装の実装の詳細であるため、使用しているMPI実装のメーリングリストで質問するのが最善だと思います。または、Google Scholarやその他の科学論文を検索するためのサイトで「mpicollective」を検索すると、多くのヒットが得られます。

しかし、そうです、合理的な実装は、ネットワークメッセージの数を減らすために、最初に共有メモリを使用してノード内で削減を行うことです。

于 2012-07-26T08:57:03.620 に答える