読者です 読者をやめる 読者になる 読者になる

ローグウェーブソフトウェアのブログ

開発をシンプルに 安全で高品質のコードを 素早くお客様のもとへ

TotalView 並列アプリケーションのデバッグ機能

TotalView 製品とサービス

マルチスレッドやMPIなどマルチプロセスを使った複雑で困難なプログラムをデバッグするとき、ローグウェーブソフトウェアの並列デバッガ TotalView は真の強さを発揮します。

TotalViewの並列デバッグ機能概要

C/C++/Fortranで書かれたマルチスレッド/マルチプロセスのコードの実行やデータに対して活き活きとした可視性を与え、詳細なステップ実行などのコントロールモニタリングが可能になります。また、ReplayEngineを用いたリバースデバッグや、MemoryScapeを用いたヒープメモリのモニタリングやエラー検知も、シリアルコードと同様にTotalViewに統合されて使用できるだけでなくプロセスごとにわかりやすく個別に利用できるため、日増しに進んでいくコード開発の並列化に対して恐れることなく対応していくことができます。

www.roguewave.jp

TotalViewの並列デバッグ機能の特長

TotalViewは複雑な並列計算の開発をサポートするために以下のような特長を備えています。

  • プロセスおよびスレッドをグループ化し、数百台のコンピュータにまたがる何千個のプロセスおよびスレッドを実行するプログラムをデバッグできます。
  • ライセンスはプロセス数に対してかかり、スレッド数によりません。
  • 起動される1台のリモートプロセッサにつき1台のサーバを配置して、メインのTotalViewプロセスと通信します。このデバッグアーキテクチャにより、プログラムのあらゆる側面を管理および調査できます。
  • すべてのスレッドやプロセスはTotalViewの単一セッションの管理下に置かれ、複数のデバッガを実行する必要がありません。
  • プロセス、スレッド、グループに対し、個別の実行やブレークポイント設定、監視を柔軟に行うことができます
  • OpenMPやMPIなどのホモジニアスなCPU並列だけでなく、CUDA、 Xeon Phi コプロセッサ、OpenACCなどヘテロジニアスな構成でのデバッグも直観的かつシームレスに行うことができます。

たとえば、特定のプロセスのみに対して操作を実行するには、下図に示すように、ツールバーのターゲットプルダウンメニューから Process を選択します。これにより、「フォーカス」が定義され、コマンド GoStep が選択されたときにTotalViewが処理対象を把握できます。

f:id:RWSJapan:20150616125056p:plain

並列デバッグジョブの開始

TotalViewは、一般的な並列実行モデルであるMPIおよびMPICH、OpenMP、ORNL PVM、SGI共有メモリ(shmem)、Global Arrays、 CoArray FortranUPCをサポートしています。 並列デバッグジョブは、使用環境、並列プログラム、および環境設定により、GUIから、また直接シェルから実行できます。

例: totalview -args mpirun -np 4 ./mpi_program

サブセットアタッチ機能を使って必要なプロセスに対してだけアタッチすることができます。デバッグのパフォーマンスを向上させ、より並列プログラムの動きを把握しやすくします。ライセンスのトークン消費数を抑えるという効果もあります。アタッチ対象を実行中に動的に変更することも可能です。 f:id:RWSJapan:20150616125057p:plain

プロセスおよびスレッドの操作と表示

プロセスやスレッドのステータスを表示するには様々な方法があります。

Rootウィンドウには、デバッグ対象のすべてのプロセスとスレッドの概要が表示されます。詳細情報を確認するには、プロセスやスレッドにダイブします。 f:id:RWSJapan:20150616125058p:plain

Processウィンドウの下部にあるProcessesタブとThreadsタブには、すべてのプロセスとスレッドが状態ごとに色分けされて表示されます。

下図は、3つの異なる状態を持つプロセスが表示されたタブを示しています。 f:id:RWSJapan:20150616125059p:plain

オレンジ色のセルはブレークポイントにあるプロセスを示し、青色のセルは(通常、別のプロセスまたはスレッドがブレークポイントにあるため)停止中のプロセス、緑色のセルはプロセス内のすべてのスレッドが実行中または実行可能であることを示しています。

Processウィンドウのグループ選択プルダウンメニューでグループを選択した場合、TotalViewはグループに含まれないプロセスのブロックを灰色表示にします。

f:id:RWSJapan:20150616125100p:plain

実行中のプロセスを切り替えるには、プロセスを表すボックスをクリックしてコンテキストを切り替えます。 同様に、Threadsタブのスレッドをクリックすると、そのスレッドのコンテキストが変更されます。

プロセスやスレッド全体の変数値を表示

各プロセスまたはスレッドの変数の値を同時に確認することが役立つ場面は多くあります。"View"→"Show Across"→"Thread"または"View"→"Show Across"→"Process"を使用すると、プロセス全体またはスレッド全体の変数を表示できます。

プロセス全体での傾向の確認や、異常なプロセスの発見に役立ちます。

f:id:RWSJapan:20150616125101p:plain

並列バックトレースと呼び出しグラフ

全てのプロセス/スレッドのバックトレースと状態を単一のウィンドウに表示します。ツリーベースのGUIを使い、情報をコンパクトに整理して表示します。

f:id:RWSJapan:20150616125102p:plain

呼び出しグラフはプロセスグループを構成し、異常なプロセスを視覚的にわかりやすく表示します。

f:id:RWSJapan:20150616125103p:plain

Message Queueでやりとりのパターンを可視化

Tools"→"Message Queue Graphウィンドウを使ってMPIプログラムのメッセージキューを視覚的に表示できます。ロードバランシングの検証やデッドロックの検出などに使えます。

f:id:RWSJapan:20150616125104p:plainf:id:RWSJapan:20150616125105p:plain

四角で囲まれた数字をクリックすると、関連するプロセスがProcessウィンドウに表示されます。矢印の横の赤色の数字をクリックすると、送信/受信のタグやサイズなどそのメッセージキューに関する詳細情報を表示します。

f:id:RWSJapan:20150616125106p:plain

その他のリソース

ローグウェーブソフトウェアの日本語サイトには、インストールガイド、TotalViewの概要を記したクイックスタードガイドを始めとした日本語文書があります。サポートされているOSやコンパイラ、MPIなどを書いた環境表もあります。

本社サイトには英語で書かれたUser GuideやReference Guideがあり、TotalViewの基本的な使い方からMPIのデバッグまで広範な話題を詳細に説明しています。

MPIのデバッグを実演した動画についても以前ご紹介しました。

blog.roguewave.jp

blog.roguewave.jp

ユーザーガイド

最後に、ユーザーガイドでこれらの話題を扱った箇所を紹介します。

説明やデモをご要望の方は お問い合わせ | ローグウェーブ までお問い合わせください。

ローグウェーブ セールスエンジニア 柄澤(からさわ)