問題タブ [mpich]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
mpi - 複数のネットワーク カードを搭載したサーバーでの mpich2 (hydra、tcp/ip) の使用
3 つのサーバーの通常とは異なるネットワーク構成で MPICH2 MPI ライブラリを使用したいと考えています。
eth0-eth5 のペアのみ。eth1-eth2; eth3-eth4 が接続されています。すべてのペアには、異なる IP サブネットワークがあります。
nemesis & tcp; で MPICH2 をセットアップできますか? PM は hydra がこのようなネットワーク構成を使用するのですか?
server1 の eth0 と eth1 の間、または server2 の eth2 と eth3 の間にブリッジ ネットワークをセットアップできないことに注意してください。これは私の eth ドライバーの制限です。
tcp - MPI プログラム (MPICH2+nemesis+tcp) が使用する tcp 接続の数
使用される MPI が MPICH2 の場合、MPI プログラムがデータを送信するためにどれくらいの tcp 接続が使用されますか? pmi 接続についても知っている場合は、それらを別々に数えます。
たとえば、4 つのプロセスと追加の 2 つのコミュニケーターがあるとします (1 番目と 2 番目のプロセスには COMM1、3 番目と 4 番目のプロセスには COMM2)。データは、可能なプロセスの各ペア間で送信されます。可能なすべてのコミュニケーターで。
最近の MPICH2 + hydra + デフォルトの pmi を使用しています。OSはlinux、ネットワークはスイッチイーサネット。すべてのプロセスは別の PC で行われます。
したがって、データのパスは次のとおりです(プロセスのペアで):
あってもいいと思う
- ケース 1:
6 つの TCP 接続のみが使用されます。COMM1 と MPI_COMM_WORLD で送信されたデータは、単一の tcp 接続で混合されます。
- ケース 2:
8 つの tcp 接続: MPI_COMM_WORLD で 6 (all-to-all = フルメッシュ) + 1 <-> 2COMM1 で 1 + 3 <-> 4COMM2 で1
- 私が考えていなかった他の変種。
linux - ifort mpi-openmp セグメンテーション違反
セグメンテーション違反、不正な終了エラーでクラッシュするハイブリッド mpi-openmp コードがあります。mpif90/ifort を使用してコンパイルし、mpich2 を使用します。私が使用してエラーが発生するコンパイル行は次のとおりです。
このコマンドを使用しているときに、あるノードから別のノードを含むマシン ファイルを指定して実行すると、セグメンテーション エラーが発生します。
ただし、これを特定のノード (node1 など) から実行し、マシン ファイルに「node1」しかない場合は、ノードごとに適切な量のスレッドを使用して、期待どおりに実行されます (「node1」がマシンに 2 回リストされている場合など)。ファイルと mpiexec コマンドは "mpiexec -np 2 ..." のようでした)。
2 番目に試みたのは、「-openmp」をリンクする代わりに、「-liomp5」をリンクすることです。これを行うと、ノード間でもコードがコンパイルされて実行されます。ただし、スレッド化された意味では実行されません。「omp_get_num_threads」はノードごとに 8 つのスレッドを返しますが (これは正しい)、マシン ファイルにリストされているノードごとに 1 つのスレッドしか実行しないため、実際のスレッド化は行われません。
前述のように、最新の ifort コンパイラ (12.1.2) と mpich2 を使用しています。スタック サイズは無制限であり、「ulimit -a」で検証され、無制限と見なされます。
laplace.f ファイルのソース コードは次のとおりです。
コンパイルでリンクされた -liomp5 を実行すると、次のことがわかります。
nthrds = 8で実行され、printステートメントで検証されますが、次の方法ですぐにチェックする場合:
結果の nthreads = 1. ただし、コンパイル時に -openmp でリンクすると完了する場合 (machines ファイル内のすべての同じノードで、実行は同じノードから開始される)、nthreads = 8.
マシン ファイルで最初にヘッドノード名を長く指定すると、次のようになります。
たくさんの情報がありますが、多すぎないことを願っています。助けてくれてありがとう。
mpi - INT 送信時の MPICH2 メモリ不足
私は一週間中、tork+mpich2 を実行する 3 台のマシン クラスターを取得しようと取り組んできました。私の計画は、それを開発環境として使用し、最終的に EC2 または他のクラウドで本番コードを実行することです。これは開発環境なので、予備のマシンをいくつか使用しています (重要な場合に備えて、64 ビット 2 台、32 ビット 1 台)。マシンは、Ubuntu のさまざまなディストリビューション (マーベリック、ハーディ、カルミック) を使用しています。
私が直面している問題は、recv 呼び出しを行った単純な send/recv テスト プログラムでメモリが不足しているように見え、その理由がわかりません。~1.2G の RAM がマシン上で解放され、1 つの int が送受信されます。
コードは次のとおりです。
出力は次のとおりです。
必要な情報が含まれていない場合はお知らせください。追加します。
MPICH2 バージョン: 各マシンでソースからコンパイルされた mpich2-1.4.1p1
gcc バージョン:
マスター: 4.2.4ノード 1
: 4.4.5ノード 2
: 4.4.1
また、重要なこととして、node2 は 32 ビット マシンです。助けてくれてありがとう。
編集:コードをテストするためにセットアップされ、動作することがわかっている過去に使用したクラスターでこれを実行しました。コードは正しく動作しているように見えます。私が見ている問題は、開発クラスターでの MPI の構成に関連していると思います。
c - MPI送信アレイのアレイ
わかりました。MPIを介してこのような構造を送信しようとしています。
そして、私がそのようなデータのいくつかのBS割り当てを行う場合
そして、この構造をそのまま送信すると、ポインタがBで送信され、そのポインタが他のプロセッサ上の何も指さないため、うまく機能しないと思います。次のようなデータを送信するにはどうすればよいでしょうか。これはMPIで。
c++ - MPICH2 対応コードを OpenCL コードに変換する
私は C++ で書かれたユーティリティを持っており、MPICH2 を使用して重い計算を行いますが、パフォーマンスに満足できず、改善の余地がたくさんあります。
まず、MPICH2 は exe のみを使用するため、データをファイルに書き込み、そのファイルを引数としてそのユーティリティに渡す必要があります。ユーティリティはすべてのデータを再度読み取り、出力をファイルに書き戻します。これをdllに入れることができれば、データを渡す時間を大幅に節約できます。また、何らかの方法でこれを GPU で実行できれば、ブーストが得られます (よくわかりません)。
ユーティリティ コードを OpenCL に変換するのにどれくらいの労力がかかるのか、または変換タスクの 60 ~ 70% を実行できるツールがあるのか疑問に思っています。
c++ - Boost.MPIライブラリを使用する目的は何ですか?
Boost.MPIライブラリを使用する目的は何ですか?パフォーマンスは向上しますか?そして、それとMPICHライブラリの違いは何ですか?
mpi - MPICHで静的にコンパイルされたプログラムには、異なるバージョンのランタイムで問題が発生しますか?
MPIの実装についてはまだあまり読んでいませんが、バージョン1.2.1でMPICH2ランタイムを実行する環境で、MPICH2のバージョン1.4.1plに対して静的にリンクされたサードパーティソフトウェアをセットアップするように依頼されました。
問題が発生する可能性がありますか?
c - クラスタ上の MPI の簡単なテスト プログラム
各スレッドは、ファイルの一部を読み取り、それを書き留めます。
ローカル マシン (mpich) で完全に正常に動作します。クラスター (openmpi) でエラーが発生しました。
関数 write_result の close(fd) でプログラムが終了しました。
ここにエラーメッセージがあります
関連する問題を検索した後、問題はファイルの開閉プロセスに起因する可能性があると推測しています。特定のスレッドによって開かれたファイルは、同じスレッドによって閉じられる必要があります。おそらくopenmpiは、どのスレッドがそれを開き、どのスレッドが閉じたかを認識していません。しかし、MPICH では問題なく動作します。
mpi - MPICH 用の valgrind の構成: 間違った libmpi*.so ファイルが使用されています
mpi アプリケーションでエラーを検出するために valgrind を実行すると、次のエラーが発生します。
Valgrindの ドキュメント(セクション 4.9.1) には、「ラップされる MPI 関数は、libmpi.so* と一致する soname を持つ ELF 共有オブジェクトにあると想定されています。これは、少なくとも Open では正しいことが知られています。 MPI と Quadrics MPI であり、必要に応じて簡単に変更できます。」
したがって、mpich2 を使用しているため、実際には libmpich.so.1.0 を使用する必要があります。
これは、libmpiwrap.c で確認できます。
私の質問は次のとおりです。これをどこでどのように構成しますか?