2017-01-27 12 views
3

私は、オプションでMPIを使用して並列に実行できるプログラム(C++ 11)を作成しています。このプロジェクトではCMakeを使用して設定を行い、CMakeが見つからない場合は自動的にMPakeを無効にし、警告メッセージを表示します。mpirun/mpiexecで実行しているときにMPIを使用していないことを検出

しかし、私はユーザーがHPCクラスタ上でプログラムを構成してコンパイルし、MPIモジュールをロードするのを忘れ、警告に気づかないという完璧な可能性のあるユースケースについて心配しています。同じユーザーがプログラムを実行しようとすると、mpirunが見つからず、MPIモジュールをインクルードしますが、再コンパイルするのは忘れてしまいます。ユーザーがmpirunでプログラムを実行すると、これは機能しますが、コンパイル時にMPIが無効になっているので、プログラムは何も並列化されずに何度も実行されます。ユーザーがプログラムが並行して実行されていると思うのを防ぐために、この場合はプログラムにエラーメッセージを表示させたいと思います。

私の質問は、私のプログラムがMPIライブラリ関数を使用せずに並列に実行されていることを検出する方法です(コンパイル時にMPIが無効になったため)。 mpirunはプログラムを何度も起動しますが、私が知る限り並列起動されているプロセスについては通知しません。

私はプログラムにいくつかのテストファイルを書き込ませ、そのファイルがすでに存在するかどうかを確認することを考えましたが、並行性の問題のためにこれが難しいかもしれないという事実から離れて、mpirunファイルシステムを共有するノード上のさまざまなプロセス

システム変数を使用して2つのプロセス間で通信することも考えましたが、わかっている限り、これを行うシステムに依存しない方法はありません(並行性の問題が発生する可能性があります。さまざまなプロセス間の座標システムコール)。

だから、私は考えがなくなってしまったので、これを達成するのに役立つ提案をいただければ幸いです。好ましいソリューションは、オペレーティングシステムに依存しないものでなければなりませんが、UNIXのみのソリューションが既に大きな助けになっています。

+0

'ldd'コマンドを使って、プログラムがMPIライブラリにリンクされているかどうかを確認できます。たとえば、https://cc.ulb.ac.be/hpc/Howto_hydra/compile_mpi.phpを参照してください。おそらくプログラムは 'ldd'自身で(' argv [0] 'を使って)、' mpicc --show'の出力を解析してモジュールがロードされているかどうかを調べることができます...もし結果が互換でないならば、エラー。これを行うには、最もクリーンな方法が必要です。 – francis

+0

「FOOBARはSERIALモードで動作しています」という冒頭に大きな太いバナーを表示するだけです。注意力のあるユーザーに気付くでしょう。 –

答えて

0

基本的には、非MPIコードパスでmpirunなどで実行されているかどうかの検出を実行する必要があります。非常によく似た質問があります:How can my program detect, whether it was launch via mpirunは、既にポータブルではないソリューションを提示しています。

mpirunで設定されている環境変数を確認します。例えば参照してください: http://www.open-mpi.org/faq/?category=running#mpi-environmental-variables

別の選択肢として、あなたはprocess id of the parent processを得ることができる、それがprocess nameだと、このようなorted,slurmstepd,hydra?? として知られているMPIランチャーバイナリのリストと比較します。それについてのすべては、残念ながら再びポータブルではありません。

起動自体はMPI標準によって明確に定義されていないため、標準的な方法では検出できません。

1:私の記憶からのみ、文字通りリストを取らないでください。シリアルFancySimulatorを実行

:ビューのユーザーエクスペリエンスの観点から


は、私はいつものプログラムのような、実行されているどのように明確なメッセージを示すことを主張するだろう。これをmpirunの一部として見る場合は、FANCYSIM_MPI = TrueのFancySimuilatorを再構築してください。 120個のMPIプロセスと並行してFancySimulator実行

又は

は、問題を「解決」します。ユーザーが120文字のメッセージを得るとうまくいけば気づくでしょう。

関連する問題