TotalView デバッガ の主な機能と特長

TotalView はこれらの主なテクノロジーをサポートします。

  • ラップトップ からスーパーコンピュータまで : ノートブック PC、ワークステーション、サーバー、部門別クラスタ、およびスーパーコンピュータ
  • C および C++ : テンプレートと標準テンプレートライブラリ (STL) の包括的なサポート
  • Fortran : 共通ブロックやモジュールなどのコンセプトなど
  • MPI によるマルチプロセス : 20 の異なる MPI 実装をサポート
  • マルチスレッド : Pthreads、OpenMP、TBB を使ったマルチスレッドアプリケーションをデバッグ
  • Xeon Phi コプロセッサ : Intel Xeon Phi デバッグをサポート
  • OpenPOWER Linux PowerLE : OpenPowerのリトルエンディアンプラットフォーム上でのデバッグをサポート
  • アクセラレータのサポート : NVIDIA GPU を活用するために CUDAOpenACC を使用するプログラムをデバッグ
  • ARM64 のアーリーアクセスサポート

TotalView は、デバッグをできるだけ簡素化する強力な機能を提供します。

  • データの可視化:プログラムのデータや変数を可視化
  • 型変換(Type transformation) : ユーザ定義のデータ構造をより簡単な形式に変換でデバッグしやすくします
  • 先進的なメモリデバッグ : による動的メモリデバッグ機能
  • 評価ブレークポイント(Evaluation Point):データ値を単に観察する以上の数式評価
  • TVScript : 無人の非対話的バッチデバッグ
  • リバースデバッグ:Linuxアプリケーションの競合状態やデッドロックの記録、再現、デバッグ
  • リモートディスプレイ:Linux、Windows、Macから接続してリモートデバッグ
 
“あるシミュレーションは、コードが約150 万行でした。TotalViewを使用して、コードを移植し、リアルタイムで同時に2つの異なるプラットフォームでテストして観察できたことで、開発時間を60~70%短縮できました。複数のデバッグツールを使用していたら、これは不可能だったでしょう。他のツールを購入しなくてすんだため、コストも約40%節減できました。”
CAS 社
モデリングおよびシミュレーション部門 マネージャ
Jim Knoblach
 

C と C++ のデバッグとトラブルシューティング

C 言語や C++ を使用すると、データ、アクセスパターン、メモリ管理、実行の詳細を管理できます。ただし、低レベルのマシン動作を直接管理するため、大規模な科学技術アプリケーションを開発しメンテナンスする際にはわずかのミスも許されません。TotalView は C や C++ で書かれた複雑なアプリケーションをトラブルシューティングするための理想的な環境を提供します。オブジェクトやデータ構造体、ポインタの詳細を表示でき、複雑なオブジェクトの操作が簡易化されます。

標準テンプレートライブラリ(STL)コレクションクラスは、プログラムのデータの操作を簡素化しますが、プログラムがハングしたりクラッシュした際のトラブルシュートが複雑になります。TotalView のタイプ変換機能 (TTF) を使用することにより、データオブジェクトを柔軟に表示できます。STLView 変換機能が、STL 集合体クラスオブジェクトの論理的なビューを提供し、リストデータをより実践的に理解できます。この結果、コードの構造や動作をより簡単に、直感的に理解できます。この結果、コードやデータの構造や動作をより簡単に、直感的に理解できます。

STL はプログラムのデータをシンプルに操作するためのコレクションクラスです。しかしプログラムがハングしたりクラッシュした時には STL はトラブルシューティングを厄介なものにします。TotalView の型変換機能(TTF, TypeTransformation)を使用することにより、データオブジェクトを柔軟に表示できます。STLView変換機能は STL のオブジェクトを論理的に表示します。リストデータなどを表示するにはより現実的なやり方で、コードの構造や振る舞いがシンプルで直観的に表示されます。

Fortran のデバッグ

C と Fortran には共通点もありますが、Fortran は C ではありません。TotalView は、他の言語にはない共通ブロックやモジュールなどの Fortran の表記、型、コンセプトを正しく表示します。

Fortran は特に数値や数学データの表示と操作に適しています。その主な特長の一つは配列データの表示機能です。科学者やエンジニアは、多次元配列、配列割り当て、Fortran ポインターの強力な機能などを言語レベルでサポートできるという利点から、Fortran を使用しています。TotalView のテクノロジーは、開発者のコードが Fortran のこれらの主な属性を活用する手助けをします。

アプリケーションの挙動、計算データ、パターンをよりよく理解するためのデータの可視化

開発されるアプリケーションの大部分がデータ操作のためのエンジンです。それが観察の対象であるか、計算の対象であるかにかかわらず、重要なのはデータです。物理システムの動作に対する見識を得る目的の場合は、定量的なアプローチが必要になります。計算システムの動作を理解する目的でも同様のアプローチが必要になります。

トラブルシューティングの中には、稼働中のアプリケーションの挙動を観察したり、計算が思ったように実行されない理由の手がかりを探ったり、データを様々な形でスライスして未知のパターンを探す、という作業があります。そのようなデータを簡単に観察し操作できるツールが不可欠であり、TotalView を使えば効率的にこれらの作業を行うことができます。

メモリリークやアロケート周りのエラーをデバッグ

メモリは有限のリソースであり、何百万行という大量コードのアプリケーションでは特に、実装に大きな影響を与えます。プログラムの複雑性が増すと、メモリリークのデバッグ や malloc エラーのトラブルシュートが困難になります。メモリ関連のコード欠陥があると、リソース管理ができなくなり、ランダムにデータ破壊が発生する原因になります。メモリエラーによって、不規則なプログラムクラッシュが起こる場合もあり、生産性に悪影響を与えます。最悪の場合、メモリエラーによってデータが壊れ、プログラムから不正確な結果が生成される原因になることもあります。TotalView はコードが正しく動いてきちんと正確な結果を出すように、このようなリスクをコントロールします。

MPI、OpenMP、その他の並列パラダイムのサポート

TotalView は、MPI、OpenMP、UPC、GAを包括的にサポートしています。TotalView は 20以上のMPI実装をサポートしており、並列プログラミング講座のデバッガとして選択されてきました。 

マルチスレッドアプリケーション/マルチコアアーキテクト

クロック数が増加していく時代は終わり、プロセッサの構造はマルチコアやメニーコアで設計されるようになりました。マルチスレッドのアプリケーションを作成したり逐次アプリケーションを並列アプリケーションに移行するのは大きな課題です。TotalView とReplayEngine は初めから並行、並列、マルチスレッドのアプリケーションの問題を解決するために作られています。

競合状態(レースコンディション)は、適切に検証されたマルチスレッドアプリケーションでも、よく見られる問題です。ロック、セマフォー、アトミック操作を使用して、競合状態を回避することができますが、それら自体がまた新しい微妙な問題の原因になりかねません。ローグウェーブのツールを使用することにより、コードの動作を可視化し、このような問題の影響に対する理解を深められます。

TVScript

TotalView の自動バッチデバッグスクリプトである TVScript は、TotalView を使用した非対話型デバッグのためのフレームワークです。対象プログラム内で起こる可能性のある一連のイベントをユーザが定義すると、TVScript がプログラムの読み込みを制御し、必要に応じてブレークポイントを設定し、プログラムを実行します。プログラムが停止するたびに TVScript がデータを収集し、ジョブの完了後にユーザが確認できる出力ファイルにログを記録します。TVScript を引数なしで呼び出すと、使用方法と、使用できるイベントやアクションのリストが表示されます。TVScript は強化版 printf と考えることもできます。

アクセラレータのサポート

Linux x86-64上のTotalViewは以下のような CUDA OpenACC によるデバッグをサポートします。日本語ブログの関連記事はこちら

  • CUDA の最新バージョン (6.5、7.0、7.5 など)
  • 同じセッション内でホストおよびデバイスコードをデバッグ
  • Tesla、Kepler、Maxwell、Fermi ハードウェアで直接実行される CUDA
  • CUDA Dynamic Parallelism
  • CUDA 6.0 の統一メモリ (Unified Memory)
  • Linux と GPU デバイス上のスレッドを可視化
  • 階層型のデバイス、ブロック、スレッドメモリを完全に可視化
  • 論理座標とデバイス座標によるデバイススレッドのナビゲート
  • CUDA 関数呼び出し、ホストにピン留めされたメモリ領域、CUDA コンテキスト
  • CUDA 関数をインラインでもスタック上でも処理可能
  • CUDA 関数のためのコマンドラインインターフェイス
  • 複数の NVIDIA デバイスを同時に使用するアプリケーション
  • CUDA で高速化されたクラスタ上の MPI アプリケーション
  • 統一された仮想アドレス (Unified Virtual Addressing) と GPUDirect
  • CUDA C++ とインライン PTX
  • メモリエラーを検知してレポート、CUDA の例外をハンドリング
  • PGI コンパイラや Cray CCE コンパイラでコンパイルされた ACCディレクティブを完全サポート
  • CUDA の動的モードと互換
  • CUDA コアファイルのデバッグ