Sun Studio 12: パフォーマンスアナライザ

プログラムデータオブジェクトへのデータアドレスのマッピング

メモリー演算に対応するハードウェアカウンタイベントからの PC が、原因と思われるメモリー参照命令にうまくバックトラックするように処理されると、アナライザは、コンパイラからハードウェアプロファイルサポート情報内に提供された命令識別子と記述子を使用して、関連するプログラムデータオブジェクトを生成します。

データオブジェクトという用語は、ソースコード内のプログラム定数、変数、配列、構造体や共用体などの集合体のほか、別個の集合体要素を示す場合に使用します。データオブジェクトのタイプとそのサイズはソース言語によって異なります。多くのデータオブジェクトの名前は明示的にソースプログラム内で付けられますが、名前が付けられないものもあります。データオブジェクトの中には、ほかの単純なデータオブジェクトから生成または集計され、より複雑なデータオブジェクトの集合になるものもあります。

各データオブジェクトは、1 つのスコープへ関連付けられています。スコープとは、そのオブジェクトが定義され、そのオブジェクトを参照できるソースプログラムの領域のことで、それは大域的な領域となる場合 (ロードオブジェクトなど)、特定のコンパイルユニットになる場合 (オブジェクトファイル)、または関数となる場合があります。同一のデータオブジェクトを異なるスコープで定義したり、特定のデータオブジェクトを異なるスコープで異なる方法で参照することができます。

バックトラッキングを有効にして収集された、メモリー操作に関するハードウェアカウンタイベントからのデータ派生メトリックは、関連するプログラムのデータオブジェクトタイプに属するものとされ、そのデータオブジェクトを含む集合体と、<未知><スカラー> も合わせてすべてのデータオブジェクトを含むと見なされる <合計> 擬似データオブジェクトに伝搬します。<未知> のさまざまなサブタイプは、<未知> の集合体まで伝搬します。以降の節では、<合計><スカラー><未知> の各データオブジェクトについて説明します。

データオブジェクト記述子

データオブジェクトは、宣言された型と名前の組み合わせで完全に記述できます。単純なスカラーデータオブジェクト「{int i}」は、型「int」の変数「i」を記述するのに対して、「{const+pointer+int p}」は、「p」と呼ぶ型「int」への定数ポインタを記述します。型名のスペースは「_」(アンダースコア) と置き換えられ、名前の付いていないデータオブジェクトは「-」(ハイフン)、たとえば、「{double_precision_complex -}」という名前で表されます。

集合体全体も同様に、「foo_t」型の構造体の場合は「{structure:foo_t}」と表されます。集合体の要素は、その要素のコンテナを追加指定する必要があります。たとえば、直前の「foo_t」型の構造体の型「int」のメンバー「i」の場合は「{structure:foo_t}.{int i}」となります。集合体はそれ自体、(さらに大きい) 集合体の要素になることも可能で、対応する記述子は集合体記述子を連結したもの、最終的にはスカラー記述子になります。

完全修飾された記述子は、データオブジェクトを明確にするために必ずしも必要ではありませんが、データオブジェクトの識別を支援するために一般的な完全指定を示します。

<合計> データオブジェクト

<合計> データオブジェクトは、プログラムのデータオブジェクト全体を表すために使用される擬似的な構造です。あらゆるパフォーマンスメトリックは、異なるデータオブジェクト (およびそのオブジェクトが属する集合体) のメトリックとして加算されるほかに、<合計> という特別なデータオブジェクトに加算されます。このデータオブジェクトはデータオブジェクトリストの先頭に表示され、そのデータを使用してほかのデータオブジェクトのデータの概略を見ることができます。

<スカラー> データオブジェクト

集合体要素のパフォーマンスメトリックは関連する集合体のメトリック値にさらに加算されますが、すべてのスカラー定数および変数のパフォーマンスメトリックは擬似的な <スカラー> データオブジェクトのメトリック値にさらに加算されます。

<未知> データオブジェクトとその要素

さまざまな状況下で、特定のデータオブジェクトにイベントデータをマップできない場合があります。このような場合、データは <未知> という特別なデータオブジェクトと次に説明するいずれかの要素にマップされます。