現在、並列コードを実行していませんが、将来OpenMPとMPIのハイブリッドを使用して並列コードを実行する予定です。デバッガーは、シリアルプロジェクトを実行するときに非常に貴重なツールでした。
並列ソフトウェアのデバッグに使用する並列デバッガー(または複数のデバッガー)をお勧めできますか?フリーソフトウェアが望ましいが、効果的な商用ソフトウェアについて言及することをheしないでください。
現在、並列コードを実行していませんが、将来OpenMPとMPIのハイブリッドを使用して並列コードを実行する予定です。デバッガーは、シリアルプロジェクトを実行するときに非常に貴重なツールでした。
並列ソフトウェアのデバッグに使用する並列デバッガー(または複数のデバッガー)をお勧めできますか?フリーソフトウェアが望ましいが、効果的な商用ソフトウェアについて言及することをheしないでください。
回答:
基本的に、2つの主要な商業的選択肢があります。AllineaのDDT(TACCで使用しているもの)とTotalview(他のコメントで述べたように)です。それらは同等の機能を備えており、どちらも積極的に開発されており、直接の競合相手です。
EclipseにはParallel Tools Platformがあり、MPIおよびOpenMPプログラミングサポートと並列デバッガーが含まれている必要があります。
私は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を理解し、実行中に任意のコードを実行できます。実行中にデータを簡単に表示するための特別な関数を作成しました。
シリアルプログラムとパラレルプログラムには2つのデバッガーのみを使用します。
(2)が十分にスケーラブルでない場合、(1b)を参照します。
並列デバッガーを含むIntel Parallel Studioがあります。使ったことはありませんが、いくつかのデモで使われているのを見てきました。以下に、機能の一部を示すビデオチュートリアルを示します。
また、特定の場合に適度に機能するgdbのラッパーもいくつか見ました。
Totalview。市販のデバッガーです。各プロセッサのスタックを表示するのは非常に簡単です。プロセッサー/スレッド間で変数値を表示(および変更)できます。ベクトルまたは行列をプロットして、変数値を視覚化できます。洗練されたウォッチポイント分析のために、どうやらスクリプティングも可能です(Tk / Tcl)。
並列コードをデバッグするためのいくつかの簡単な方法については、取り引きでいくつかの回答を集めました。デバッグに関するセクションのよくある質問:https : //github.com/dealii/dealii/wiki/Frequently-Asked-Questions#debugging -dealii-applications
以前に私に与えられたいくつかの答えの要約は次のとおりです。
OpenMPにはタイミング関数があります:omp_get_wtime()
およびomp_get_wtick()
-オンラインドキュメント
GoogleにはCPUプロファイラーがあります
ありますScalascaのOpenMPとMPIプロファイルと分析を行います
がんばろう!