メモリー演算に対応するハードウェアカウンタイベントからの PC が、原因と思われるメモリー参照命令に正しくバックトラックするように処理されると、アナライザは、コンパイラからハードウェアプロファイルサポート情報内に提供された命令識別子と記述子を使用して、関連するプログラムデータオブジェクトを生成します。
データオブジェクトという用語は、ソースコードに記述されているプログラムの定数、変数、配列、および構造体や共用体などの集合体のほか、別個の集合体要素を示す場合に使用します。データオブジェクトのタイプとそのサイズはソース言語によって異なります。多くのデータオブジェクトの名前は明示的にソースプログラム内で付けられますが、名前が付けられないものもあります。データオブジェクトの中には、ほかの単純なデータオブジェクトから生成または集計され、より複雑なデータオブジェクトの集合になるものもあります。
各データオブジェクトは、1 つのスコープに関連付けられています。スコープとは、そのオブジェクトが定義され、そのオブジェクトを参照できるソースプログラムの領域のことで、大域 (ロードオブジェクトなど)、特定のコンパイルユニット (オブジェクトファイル)、または関数のいずれかになります。同一のデータオブジェクトを異なるスコープで定義したり、特定のデータオブジェクトを異なるスコープで異なる方法で参照することができます。
バックトラッキングを有効にして収集された、メモリー操作に関するハードウェアカウンタイベントからのデータ派生メトリックスは、関連するプログラムのデータオブジェクトタイプに属するものとされ、そのデータオブジェクトを含む集合体と、<Unknown> や <Scalars> などすべてのデータオブジェクトを含むと見なされる <Total> 擬似データオブジェクトに伝搬します。<Unknown> の各種サブタイプは、<Unknown> の集合体まで伝搬します。次の節では、<Total>、<Scalars>、および <Unknown> の各データオブジェクトについて説明します。
データオブジェクトは、宣言された型と名前の組み合わせで記述します。単純なスカラーデータオブジェクト {int i} は、int 型の変数 i を記述しているのに対して、{const+pointer+int p} は、int 型 p への定数ポインタを記述しています。型名のスペースは「_」(アンダースコア) に置き換えられ、名前の付いていないデータオブジェクトは「-」(ハイフン)、たとえば {double_precision_complex -} という名前で表されます。
集合体全体も同様に、foo_t 型の構造体の場合は {structure:foo_t} と表します。集合体の要素では、その要素のコンテナを追加指定する必要があります。たとえば、前述の foo_t 型の構造体のメンバーである int 型の i の場合は {structure:foo_t}.{int i} となります。集合体はそれ自体、(さらに大きい) 集合体の要素になることも可能で、対応する記述子は集合体記述子を連結したもの、最終的にはスカラー記述子になります。
完全修飾された記述子は、データオブジェクトを明確にするために必ずしも必要ではありませんが、データオブジェクトの識別を支援するために一般的な完全指定を示します。
<Total> データオブジェクトは、プログラムのデータオブジェクト全体を表すために使用される擬似的な構造です。あらゆるパフォーマンスメトリックスは、異なるデータオブジェクト (およびそのオブジェクトが属する集合体) のメトリックスとして加算されるほかに、<Total> という特別なデータオブジェクトに加算されます。このデータオブジェクトはデータオブジェクトリストの先頭に表示され、そのデータを使用してほかのデータオブジェクトのデータの概略を見ることができます。
集合体要素のパフォーマンスメトリックスは、関連する集合体のメトリック値に加算されますが、すべてのスカラー定数および変数のパフォーマンスメトリックスは擬似的な <Scalars> データオブジェクトのメトリック値にさらに加算されます。
さまざまな状況下で、特定のデータオブジェクトにイベントデータをマップできない場合があります。このような場合、データは <Unknown> という特別なデータオブジェクトと、次に説明するいずれかの要素にマップされます。
トリガー PC を持つモジュールが -xhwcprof を使用してコンパイルされていない
トリガー PC を持つモジュールが -xhwcprof を使用してコンパイルされていない イベントの原因となっている命令またはデータオブジェクトは、オブジェクトコードがハードウェアカウンタプロファイルサポートを指定してコンパイルされていなかったので、識別されませんでした。
バックトラッキングで有効な分岐先が検出できなかった
バックトラッキングで有効な分岐先を検出できなかったイベントの原因となっている命令は、コンパイルオブジェクト内で提供されたハードウェアプロファイルサポート情報が、バックトラッキングの妥当性を検証するには不十分だったため、識別されませんでした。
バックトラッキングで分岐先をトラバースした
バックトラッキングで分岐先をトラバースしたイベントの原因となっている命令またはデータオブジェクトは、バックトラッキングで命令ストリーム内から制御転送ターゲットが検出されたため、識別されませんでした。
識別する記述子がコンパイラから提供されなかった
識別する記述子がコンパイラから提供されなかったバックトラッキングで原因と思われるメモリー参照命令を判別しましたが、それに関連するデータオブジェクトはコンパイラで指定されませんでした。
タイプ情報がない
タイプ情報がないバックトラッキングでイベントの原因と思われる命令を判別しましたが、その命令は、コンパイラによってメモリー参照命令として識別されませんでした。
コンパイラが提供したシンボリック情報から判別不能
コンパイラが提供したシンボリック情報から判別不能バックトラッキングで原因と思われるメモリー参照命令を判別しましたが、その命令はコンパイラによって識別されなかったため、それに関連するデータオブジェクトも判別できません。コンパイラのテンポラリは一般に識別されません。
ジャンプ命令または呼び出し命令によってバックトラッキングが阻止された
バックトラッキングが、ジャンプ命令または呼び出し命令によって阻止された イベントの原因となっている命令は、バックトラッキングで命令ストリームの中から分岐命令または呼び出し命令が検出されたため、識別されませんでした。
バックトラッキングでトリガー PC が検出されなかった
バックトラッキングでトリガー PC が検出されなかったイベントの原因である命令を、最大のバックトラッキング範囲内から検出できませんでした。
トリガー命令のあとでレジスタが変更されたため、仮想アドレスを特定できなかった
トリガー命令のあとでレジスタが変更されたため、仮想アドレスを判別できなかったレジスタがハードウェアカウンタのスキッド中に上書きされたため、データオブジェクトの仮想アドレスを判別できませんでした。
メモリー参照命令で有効な仮想アドレスが指定されなかった
メモリー参照命令で有効な仮想アドレスが指定されなかった データオブジェクトの仮想アドレスが有効であるように見えませんでした。