質問

クラスターにMPIシステムを実装する必要があります。ここにMPI(MPICH / OpenMPI)の経験がある人は、x86_64ボックスのクラスターでどちらが優れているか、どのようにパフォーマンスを向上できるかを知りたいです。

役に立ちましたか?

解決

MPICHはずっと以前から存在しています。それは非常に移植性が高く、オンラインで何年もの価値のあるヒントやコツを見つけることができます。それは安全な賭けであり、おそらくより多くのMPIプログラムと互換性があります。

OpenMPIの方が新しいです。移植性はそれほど高くありませんが、最も一般的なプラットフォームを非常によくサポートしています。ほとんどの人は、特にフォールトトレランスに関して、いくつかの点ではるかに優れていると考えているようですが、これを利用するには、MPI標準に含まれない特別な機能の一部を使用する必要があります。

パフォーマンスに関しては、アプリケーションに大きく依存します。一般的なアドバイスをするのは難しいです。実行する計算の種類、ノードの数、および使用しているネットワークハードウェアの種類を含むハードウェアの種類に関する特定の質問を投稿する必要があります。

他のヒント

WindowsクラスターとLinuxクラスターの両方で多数の並列アプリケーションを作成しましたが、現時点ではMPICH2がおそらくより安全な選択肢であることをお伝えできます。他のレスポンダーが言及しているように、それは非常に成熟したライブラリです。また、十分なブロードキャストサポートがあります( MPI_Bcast を介して)現在、実際、MPICH2にはのような非常に優れた機能がいくつかあります。スキャッターアンドギャザー

OpenMPIはある程度の地位を獲得しています。ペンギンコンピューティング(彼らは大規模なクラスターベンダーであり、Linuxが好きです)には、特定の状況でOpenMPIがMPICH2に勝つという非常に強力なベンチマークがあります。

「パフォーマンスの向上」についてのコメントに関して、私ができる最善のアドバイスは、I / Oに縛られている場合は絶対に必要な量を超えるデータを送信しないことです。 CPUバウンド。間違ったコードを複数回最適化するというtrapに陥りました:)うまくいけば、あなたは私の足跡をたどらないでしょう!

MPIフォーラムをチェックしてください- MPIルーチンに関する情報と、 Beowulf サイトには、興味深い質問がたくさんあります。

「より良い」を定義するのは難しい...「より速い」は、コードとハードウェアでベンチマークすることで答えることができます。集合的な&オフロードの最適化は、正確なハードウェアに依存し、ドライバースタックのバージョンに関してもかなり変動します。Googleは、動作する組み合わせを見つけることができるはずです。

最適化が機能する限り、それはコードとハードウェアにある程度依存します。

コードI / Oはストレージにバインドされていますか?その場合、NFSよりも優れた調査が非常に役立つか、単純な並列I / OではなくMPI I / Oを使用します

ネットワークに縛られている場合は、通信地域と通信/計算の重複を確認すると役立ちます。さまざまなMPI実装のほとんどには、ノード内通信にネットワークではなくローカル共有メモリを使用するためのチューニングオプションがあり、コードによってはネットワーク負荷を大幅に削減できます。

I / OとMPIトラフィックの分離は、一部のクラスター、特にギガビットイーサネットクラスターで大きな違いを生む可能性があります。

mpichを使用したのは、最も入手しやすく文書化されていると思われるためであり、代替のテストに多くの労力を費やしませんでした。 MPICHには、Windowsでの展開に適したツールがあります。
私たちが抱えていた主なパフォーマンスの問題は、すべてのノードに同じベースデータを出荷する必要があり、MPICHはブロードキャストをサポートしていない(またはサポートしていなかった)ため、初期データのデプロイはO(n)

でした
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top