問題タブ [openmpi]

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.

0 投票する
1 に答える
2993 参照

c - MPI 基礎プログラム

こんにちは、C で MPI を使用して学習したかったのです。Windows 7 で Codeblocks を使用しています。

私はこのプログラムを実行しました:

しかし、何らかの理由で、「mpi.h」でエラーが発生します。ライブラリを追加する方法はありますか?

0 投票する
2 に答える
3508 参照

c++ - MPI_Barrier が正しく機能しない

MPI を理解するのに役立つように、以下の C アプリケーションを作成し、巨大な C++ アプリケーションで MPI_Barrier() が機能しない理由を説明します。ただし、はるかに小さな C アプリケーションを使用して、巨大なアプリケーションで問題を再現することができました。基本的に、for ループ内で MPI_Barrier() を呼び出します。MPI_Barrier() はすべてのノードに表示されますが、ループを 2 回繰り返した後、プログラムはデッドロック状態になります。何かご意見は?

出力:

Ubuntu 10.10 リポジトリから GCC 4.4、Open MPI 1.3 を使用しています。

また、私の巨大な C++ アプリケーションでは、MPI ブロードキャストが機能しません。ノードの半分だけがブロードキャストを受信し、残りはそれを待ってスタックします。

助けや洞察を事前にありがとう!

更新: Open MPI 1.4.4 にアップグレードされ、ソースから/usr/local/にコンパイルされました。

更新:実行中のプロセスに GDB をアタッチすると、興味深い結果が得られます。MPI システムがバリアで停止したように見えますが、MPI はまだプログラムが実行されていると考えています。

GDB をアタッチすると、興味深い結果が得られます。すべてのノードが MPI バリアで停止しているように見えますが、MPI はまだそれらが実行されていると考えています。

更新:私もこのコードを持っています:

無限ループにもかかわらず、ループ内の printf() からの出力は 1 つだけです。

何かご意見は?

0 投票する
0 に答える
140 参照

multithreading - MPI ノンブロッキング メッセージの非対称スループットの原因は何ですか?

2 つのタスク間の通信に MPI ノンブロッキング メッセージを使用しています。通信パターンは次のとおりです。各タスクには、他のタスクからメッセージを受信するマスター スレッドがあります。計算を行い、他のタスクにメッセージを送信する 5 つほどの作業スレッドがあります。マスター スレッドはループし、着信メッセージをテストします。これが唯一のことです。

私の問題は、タスク 0 がタスク 1 から送信されたすべてのメッセージを即座に受信する一方で (送受信されるメッセージの数はほぼ一致します)、タスク 1 はタスク 0 によって送信されたメッセージの約 1/4 しか受信しないことです。何千もの未処理のメッセージ。

PAPI を使用して、タスク 1 が test と irecv でブロックされているように見えることを確認しました。命令スループットは、他のタスクの >0.2 とは対照的に、わずか 0.03 命令/サイクルであり、デバッガーでタスクを停止すると、ロックを取得しようとしていることが示されます。ただし、ブロックしている受信とテストは、「欠落」したメッセージに対するものではなく、別のクラスの非常にまれなメッセージに対するものです。

実際にコードを試してみないと何が原因なのかはわかりませんが、MPI のパフォーマンスにこのような非対称性があることは不可解です。受信についていけないのは、試行錯誤が原因ではなく、受信メッセージのテストにすべての時間を費やしているためです。

MPI_THREAD_MULTIPLE で OpenMPI 1.5.3 を使用しており、通信は sm 経由です (2 つのタスクは同じノード上にあります)。

これを追跡する方法についてのアイデアをいただければ幸いです。

0 投票する
1 に答える
2835 参照

python - Mac での mpi4py のインストール

Macにmpi4pyをインストールしようとしていますが、以下のエラーに直面しました:

mpi4py を検索しています

以前にopenmpiをインストールしたことに注意してください。

解決策を知っている人はいますか?

0 投票する
1 に答える
326 参照

c - MPI_Allgather は一貫性のない結果を生成します

非常に大きなソフトウェアの一部で MPI_Allgather に問題があります。

次の関数は、ノードごとに異なる double および関連フラグを渡されます。この関数は、グローバルに最小の double を見つけ、すべてのノードを対応する値に設定することになっています。

現在、これを 6 つのノードで実行していますが、ノード 5 (dt の値が最小) でのみ次のエラーが発生することがわかりました。

  • の真の値gathered[0]gathered[2]
  • の真の値gathered[1]gathered[3]

MPI_Comm_Split(); への呼び出しが潜在的にあるため、これはおそらく MPI_COMM_WORLD と関係があると思いました。ただし、まだコードのその部分を理解していません。

誰にもアイデアはありますか?

-- 編集: 関連付けられているフラグを実際に保持する必要があることを反映するように質問を更新しましたdt-- これは、@suszterpatt の提案が私の最初の質問には最適ですが、実際には機能しないことを意味します (私は考えていません)このため。

0 投票する
1 に答える
3545 参照

eclipse - minGW で MPI (openMPI または MPICH2) を使用する方法 - GNU gfortran コンパイラ

私は eclipse PTP IDE を使用して MPI コードを開発しています。Windows で MPI をコンパイルできるようにしたいと考えています。これは c++ および c バインディングを提供しているようですが、fortran および gfortran コンパイラを使用して書いており、Windows で作業したいと考えています。現在の問題は、Linux ではローカルにライブラリをコンパイルして .mod モジュールを使用できるため、Linux には存在しません。

cygwin を使用してモジュールをコンパイルしたかったのですが、cygwin の GNU gfortran のバージョンが古すぎて、miniGW を使用して Windows で openMPI または MPICH2 を実行できませんでした。

助言がありますか?Fortran 2003 で c++ バインディングを使用している可能性があります。この機能をサポートするように、Fortran 2003 でコードを記述します。

この問題に関するドキュメントは不足しています。

ありがとうございました。

0 投票する
1 に答える
1916 参照

mpi - LAM MPI と OpenMPI の違い

この二人の関係がどうなっているのか気になりました。ここで誰か説明してもらえますか?

乾杯。

0 投票する
2 に答える
1551 参照

segmentation-fault - 対応する非ブロッキングプリミティブの前にMPI_Waitを呼び出すことは、OpenMPIでは許可されていませんか?

私のアプリケーションはLAM/MPIで動作しますが、OpenMPIでクラッシュします。

以下は私のコードがどのように見えるかです。

ご覧のとおり、関数の開始時にMPI_Waitが呼び出され、続いていくつかの計算が行われ、最終的には関数の終了時にそれぞれのMPI_ISendが呼び出されます。

OpenMPIで実行するたびに、MPI_Wait内からセグメンテーション違反が発生し続けます。

次のようにブール変数*first_time*を使用して関数が初めて呼び出されるかどうかを確認することで、これを修正しました。

ここの誰かがこのエラーについて何か考えを持っていますか?

乾杯。

0 投票する
2 に答える
243 参照

c++ - --with-memory-manager=none mpi コンパイル用フラグ

通常、mpicc でソースをコンパイルする場合は、次のコマンドを使用します。

ただし、現在のソースをコンパイルする際に問題が発生したり、セグメント障害が発生したりしています。フォーラムで、私の問題は openmpi のバグが原因であることがわかりました。これは、次のフラグを追加することである程度解決できます: --with-memory-manager=none。このフラグを使用して、コンパイル コマンドをどのように表示するか。いくつかの方法で試しましたが、コマンドが認識されないようです。手伝っていただけませんか。ありがとう

0 投票する
1 に答える
6723 参照

parallel-processing - #pragmaの最後にある暗黙のバリア

友達、私はopenMPパラダイムを学ぼうとしています。プラグマの#ompを理解するために、次のコードを使用しました。

}

上記のコードでは、#pragma omp parallelの最後に暗黙のバリアがあります。つまり、次のステートメントに進む前に、すべてのスレッド0、1、2、3、4がそこに到達する必要があります。

したがって、このバリアを確認するために、この「プラグマfor」を条件if(tid!= 0)で囲みました。つまり、スレッド0、つまり1,2,3,4を除くすべてのスレッドがループ内で作業を完了し、thread0を待機する必要があります。無期限に。しかし、驚いたことに、これは起こっていません。すべてのスレッドが反復を実行し、正常に完了しています。つまり、t1は反復5,6,7,8を完了します---- t2は9,10,11,12を実行します----t3は13,14,15,16を実行し、t4は17,18,19,20を実行します。注意:反復1、2、3、4は完了していません。

さらに深く掘り下げるために、tid!= 0の代わりに、同じ#pragma forをtid!= 1で囲みました。これは、thread0の代わりにthread1がバリアをバイパスすることを意味します。驚いたことに、プログラムがハングし、すべてのスレッドがthread1を待機します。

そのような予期せぬ行動の説明を誰かに教えてもらえますか?ハングした最終コード:

}

共有またはプライベートに設定してみましたが、プログラムの動作は変わりませんでした。