並列デバッグにはどのソフトウェアが適していますか?


24

現在、並列コードを実行していませんが、将来OpenMPとMPIのハイブリッドを使用して並列コードを実行する予定です。デバッガーは、シリアルプロジェクトを実行するときに非常に貴重なツールでした。

並列ソフトウェアのデバッグに使用する並列デバッガー(または複数のデバッガー)をお勧めできますか?フリーソフトウェアが望ましいが、効果的な商用ソフトウェアについて言及することをheしないでください。


ここでの回答がstackoverflow.com/questions/329259/…とどのように大きく異なるかはわかりません。MPIはここでは難しい部分であり、OpenMPではありません。いずれにせよ、スレッド化されたプログラムでの競合状態のデバッグは、現在のところ境界線で解決できません。
ジェフ

ThreadSanitizerは、スレッドプログラムの競合状態をデバッグするための優れたソリューションですが、MPIをミックスに追加しようとした人は誰もいません。
マブラハム

回答:


17

基本的に、2つの主要な商業的選択肢があります。AllineaのDDTTACCで使用しているもの)とTotalview(他のコメントで述べたように)です。それらは同等の機能を備えており、どちらも積極的に開発されており、直接の競合相手です。

EclipseにはParallel Tools Platformがあり、MPIおよびOpenMPプログラミングサポートと並列デバッガーが含まれている必要があります。


PTP並列デバッガーを使用している人のことは聞いたことがありません。私は確信して何という意味...ないよ
ジェフ・

試した同僚は数人いますが、自分で遊んだことはありません。
ビル・バルト

16

私はcurmudgeonに答えを与えなければなりません。上記の提案によって生産性が向上したことはありません。これらは、並列の私の優先オプション(プロセスごとに1つのgdbセッション)と比較して、遅くて高価です。各gdbはMPIプロセスに接続し、xtermに配置できます(これはを使用してPETScで自動的に行われます-start_in_debugger)。私はこれを15年間幸せに使ってきました。異論:

1)グローバルデータが表示されない

MPIは共有なしモデルであるため、グローバルデータはなく、ローカルデータのみ

2)この戦略は多くのプロセスに対応していません

バグもありません。バグは個々のプロセスで発生し、おそらく1つまたは2つの近隣からの入力があります。YOuは、参加しているプロセス(-debugger_nodes 0,5,17たとえば、使用するPETSc )でのみgdbを簡単に生成できます。また、上記のシステムは、すべてのプロセスで実行すると多くの処理を放棄するため、処理が遅くなります。実際、gdbメソッドははるかにスケーラブルです。

gdbも非常にポータブルです。どこでも実行され、C ++とFortranを理解し、実行中に任意のコードを実行できます。実行中にデータを簡単に表示するための特別な関数を作成しました。


4
ヘイ・コワード、あなたが投票した場合、コメントを残してください。
マットネプリー

5
私は反対票ではありませんでしたが、ある程度は賛成しません。私は小さなサイズでは表示されない大規模なバグに遭遇しましたが、並列デバッガーを使用することはそれらを見つける効率的な方法でした。私はほとんどのデバッグをprintfで行い、個々のプロセスにgdbでアタッチしますが、並列デバッガーを使用することの利点を理解しています。
ビル・バルト

3
大規模なバグに遭遇したのは、不適切な集団通信アルゴリズムが選択されたことによるパフォーマンスのバグだけでした。繰り返しになりますが、私が使用するデバッガーに最も近いものはvalgrindであるため、私の見解はMattの見解よりもさらに極端です。
ジャックポールソン

1
@BillBarth小さな問題には現れない1000個のプロセスにバグが存在することは正しいことを知っています(Dineshには、82プロセスでしか現れなかった有名なPETScのものがありました)。私のポイントは、一般的な知恵に対抗することでした。並列デバッガーは、最初の手段ではなく、良い最後の手段だと思います。
マットネプリー

3
私はあなたに投票しました。あなたの答えは尋ねられたものではありません。
aterrel

5

シリアルプログラムとパラレルプログラムには2つのデバッガーのみを使用します。

  1. Kernighanデバッガー、つまり、賢明な印刷ステートメントと慎重な思考。
  2. http://www.open-mpi.org/faq/?category=debugging#serial-debuggersで説明されているGDBの複数のインスタンス。

(2)が十分にスケーラブルでない場合、(1b)を参照します。


1
「Kernighan debugger」という名前を聞いたことはありませんが、それは私がいつもデバッグする方法なので、私は承認します。
ジャックポールソン

4

並列デバッガーを含むIntel Parallel Studioがあります。使ったことはありませんが、いくつかのデモで使われているのを見てきました。以下に、機能の一部を示すビデオチュートリアルを示します。

また、特定の場合に適度に機能するgdbのラッパーもいくつか見ました。


3

Totalview。市販のデバッガーです。各プロセッサのスタックを表示するのは非常に簡単です。プロセッサー/スレッド間で変数値を表示(および変更)できます。ベクトルまたは行列をプロットして、変数値を視覚化できます。洗練されたウォッチポイント分析のために、どうやらスクリプティングも可能です(Tk / Tcl)。


主観的な面では、私の大学のHPCセンターがこれをインストールしたとき、私はそれが過剰だと思いました。その後、非常に複雑なデバッグを行うのがどれほど簡単かを知りました。本当に素晴らしいプログラムです。
ヤン

私も2番目のtotalview。私は多くの例でそれを使用し、それは非常に高価ですが、非常に強力です
...-BlaB


1

OPが好むオープンソースでフリーソフトウェアであるPadb(Parallel Application Debugger)に誰も言及しなかったのはなぜでしょうか?


-1

以前に私に与えられたいくつかの答えの要約は次のとおりです。

OpenMPにはタイミング関数があります:omp_get_wtime()およびomp_get_wtick()-オンラインドキュメント

GoogleにはCPUプロファイラーがあります

ありますScalascaのOpenMPとMPIプロファイルと分析を行います

次に、私が使用していないTauvtuneがあります。

がんばろう!


問題はタイミングに関するものではないと思いますが、間違っているかもしれません。良い提案しかし...
ヤン・

この答えは...もっとデバッグよりもプロファイリングについてです
MBQ

プロファイリングツールは、並列デバッガーの優れた代替品であることがわかりました。並列バグは、MPIのlogjamなどのパフォーマンスの問題に関連していることがよくあります。多くの場合、パフォーマンスツールがこれを明らかにします。TAUのメモリプロファイラーは、ランダムなセグメンテーション違反が発生する理由を理解するのに適しています。
ジェフ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.