データ処理ユニットの処理アクティビティを示すトレースデータのアイテムを生成するように構成されるトレースユニットであって、インデックス値を、前記トレースユニットにより生成された前記トレースデータのアイテムの少なくともサブセットに関連付けるように構成される、トレースインデックスユニットを備え、前記トレースインデックスユニットは、所定のシーケンスのインデックス値の1つとして前記インデックス値を生成するように構成され、前記所定のシーケンスにおけるn1番目のインデックス値は、前記所定のシーケンスにおけるn番目のインデックス値のみから決定され得る、トレースユニット。前記トレースユニットは、カウンタを備え、前記カウンタは、前記所定のシーケンスのインデックス値を提供するように構成される、請求項1に記載のトレースユニット。前記トレースユニットは、少なくとも1つの前記インデックス値を記憶するように構成される、インデックス記憶ユニットを備える、請求項1に記載のトレースユニット。前記トレースユニットは、2つのインデックス値の間の差を記憶するように構成される、インデックス記憶ユニットを備える、請求項1に記載のトレースユニット。前記インデックス記憶ユニットは、FIFOデバイスである、請求項4に記載のトレースユニット。前記データ処理ユニットの前記処理アクティビティは、投機的命令実行を備え、前記少なくとも1つのインデックス値は、少なくとも1つの投機的に実行された命令に関連付けられる、請求項3に記載のトレースユニット。前記インデックス記憶ユニットは、前記少なくとも1つの投機的に実行された命令が確定されるかまたはキャンセルされるまで、前記少なくとも1つのインデックス値を記憶するように構成される、請求項6に記載のトレースユニット。前記投機的に実行された命令は、命令のグループの一部を形成し、前記命令のグループのうちの第1の命令の投機的実行は、前記命令のグループのうちの全ての命令の投機的実行を必要とする、請求項6に記載のトレースユニット。前記インデックス記憶ユニットは、前記命令のグループにおける第1の命令に関連付けられた第1のインデックス値を記憶するように構成される第1のインデックス記憶ユニットを備える、請求項8に記載のトレースユニット。前記第1のインデックス記憶ユニットは、第1の複数のエントリを備え、前記命令のグループを示す指標に基づいて前記第1のインデックス値を記憶するように構成される、請求項9に記載のトレースユニット。前記第1の複数のエントリの数は、前記データ処理ユニットにより投機的に実行されてもよい命令のグループの少なくとも最大数に対応する、請求項10に記載のトレースユニット。前記トレースユニットは、前記データ処理ユニットからのキャンセル指示を受信するように構成され、前記キャンセル指示は、投機的に実行された命令の選択されたグループがキャンセルされたことを示し、前記トレースユニットは、前記命令の選択されたグループを示すトレースデータのキャンセルアイテムを生成するように構成される、請求項9に記載のトレースユニット。前記トレースユニットは、前記キャンセル指示の受信後、前記第1のインデックス記憶ユニットに記憶され、前記命令の選択されたグループに関連付けられた第1のインデックス値に基づいて、前記トレースデータのキャンセルアイテムを生成するように構成される、請求項12に記載のトレースユニット。前記トレースユニットは、前記所定のシーケンスのインデックス値を提供するように構成されるカウンタを備え、前記トレースユニットは、さらに前記カウンタの現在のカウンタ値に基づいて、前記トレースデータのキャンセルアイテムを生成するように構成される、請求項13に記載のトレースユニット。前記インデックス記憶ユニットは、前記命令のグループにおける最後の命令に関連付けられた最後のインデックス値を記憶するように構成される最後のインデックス記憶ユニットを備える、請求項8に記載のトレースユニット。前記最後のインデックス記憶ユニットは、第2の複数のエントリを備え、前記命令のグループを示す指標に基づいて前記最後のインデックス値を記憶するように構成される、請求項15に記載のトレースユニット。前記第2の複数のエントリの数は、前記データ処理ユニットにより投機的に実行されてもよい命令のグループの少なくとも最大数に対応する、請求項16に記載のトレースユニット。前記トレースユニットは、前記データ処理ユニットからの確定指示を受信するように構成され、前記確定指示は、投機的に実行された命令の選択されたグループが確定されたことを示し、前記トレースユニットは、前記命令の選択されたグループを示すトレースデータの確定アイテムを生成するように構成される、請求項15に記載のトレースユニット。前記トレースユニットは、前記確定指示の受信後、前記最後のインデックス記憶ユニットに記憶され、前記命令の選択されたグループに関連付けられた最後のインデックス値に基づいて、前記トレースデータの確定アイテムを生成するように構成される、請求項18に記載のトレースユニット。前記トレースユニットは、前記所定のシーケンスのインデックス値を提供するように構成されるカウンタと、未確定記憶ユニットとを備え、前記トレースユニットは、前記トレースの確定アイテムを生成する際に、前記未確定記憶ユニットに前記カウンタの現在のカウンタ値を記憶するように構成される、請求項19に記載のトレースユニット。前記トレースユニットは、前記未確定記憶ユニットに記憶された値に基づいて、前記トレースの確定アイテムを生成するように構成される、請求項20に記載のトレースユニット。前記インデックス記憶ユニットは、前記命令のグループにおける第1の命令に関連付けられた第1のインデックス値を記憶するように構成される第1のインデックス記憶ユニットを備え、前記インデックス記憶ユニットは、前記命令のグループにおける最後の命令に関連付けられた最後のインデックス値を記憶するように構成される最後のインデックス記憶ユニットを備え、前記最後のインデックス値は、前記第1のインデックス値に関連した形式で記憶される、請求項8に記載のトレースユニット。前記第1のインデックス値に関連した前記形式は、2ビットデータ形式である、請求項22に記載のトレースユニット。前記トレースユニットは、投機深度カウンタを備え、前記投機深度カウンタは、前記データ処理ユニットにより実行されている命令の現在の投機深度を示すように構成される、請求項18に記載のトレースユニット。前記トレースユニットは、保留確定カウンタを備え、前記保留確定カウンタは、出力が保留されているトレースデータの確定アイテムの現在の数を示すように構成される、請求項24に記載のトレースユニット。前記トレースユニットは、前記トレースデータの確定アイテムが生成されることなく前記確定指示が受信される場合、前記保留確定カウンタを増分させるように構成される、請求項25に記載のトレースユニット。前記トレースユニットは、前記投機深度カウンタが所定の値に達する場合、前記保留確定カウンタを減少させるように構成される、請求項25に記載のトレースユニット。前記投機深度カウンタが所定の値に達する場合、トレースデータのさらなるアイテムの生成は、前記トレースユニットが前記データ処理ユニットからさらなる確定指示を受信したことを暗示する、請求項24に記載のトレースユニット。前記トレースユニットは、所定のイベントに応答して、前記所定のシーケンスの値の前記インデックス値を、所定の値にリセットするように構成される、請求項1に記載のトレースユニット。前記トレースユニットは、前記所定のシーケンスの値を、ループするシーケンスの値として生成するように構成される、請求項1に記載のトレースユニット。前記トレースユニットは、前記データ処理ユニットが応答する命令の少なくとも1つの種類に対して、トレースデータのアイテムを生成しないように構成される、請求項1に記載のトレースユニット。前記インデックス記憶ユニットは、選択的に飛行中指標を記憶するように構成され、前記飛行中指標は、前記所定のシーケンスのインデックス値の記憶されたインデックス値が現在使用されていることを示す、請求項3に記載のトレースユニット。前記トレースユニットは、次のインデックス値を生成する際に、前記飛行中指標を参照し、前記飛行中指標が、前記次のインデックス値がまだ使用中であることを示す場合、前記次のインデックス値の代わりに代替インデックス値を記憶するように構成される、請求項32に記載のトレースユニット。前記データ処理ユニットの前記処理アクティビティは、データアドレスを使用した記憶されたデータ値への参照を含み、前記インデックス値は、前記少なくとも1つのデータアドレスに関連付けられたデータアドレスインデックス値である、請求項1に記載のトレースユニット。前記記憶されたデータ値への前記参照は、前記記憶されたデータ値のローディングを含む、請求項34に記載のトレースユニット。前記記憶されたデータ値への前記参照は、前記記憶されたデータ値を記憶することを含む、請求項34に記載のトレースユニット。前記トレースユニットは、データアドレスインデックス値記憶テーブルに前記データアドレスインデックス値を記憶するように構成される、請求項34に記載のトレースユニット。前記トレースユニットは、選択的に飛行中指標を記憶するように構成され、前記飛行中指標は、前記データアドレスインデックス値に関連付けられた前記記憶されたデータ値への参照がまだ完了しておらず、前記データアドレスインデックス値が飛行中であることを示す、請求項37に記載のトレースユニット。前記トレースユニットは、次のデータアドレスインデックス値を生成する際に、記憶された飛行中指標を参照し、前記記憶された飛行中指標が、前記次のデータアドレスインデックス値がまだ飛行中であることを示す場合、前記次のデータアドレスインデックス値の代わりに代替データアドレスインデックス値を記憶するように構成される、請求項38に記載のトレースユニット。前記代替データアドレスインデックス値は、データ処理ユニットインデックス値を含み、前記データ処理ユニットインデックス値は、前記データアドレスを参照するために前記データ処理ユニットにより使用される、請求項39に記載のトレースユニット。前記代替データアドレスインデックス値は、データ処理ユニットインデックス値との1対1対応を有し、前記データ処理ユニットインデックス値は、前記データアドレスを参照するために前記データ処理ユニットにより使用される、請求項39に記載のトレースユニット。前記飛行中指標は、前記データアドレスインデックス値に関連して記憶される、請求項40に記載のトレースユニット。前記飛行中指標は、前記データ処理ユニットインデックス値に関連して記憶される、請求項40に記載のトレースユニット。前記トレースユニットは、前記代替データアドレスインデックス値を示すトレースデータのアイテムを生成するように構成される、請求項39に記載のトレースユニット。前記代替データアドレスインデックス値および前記データアドレスインデックス値は、符号化プロトコルを共有する、請求項39に記載のトレースユニット。前記トレースユニットは、命令の初期グループおよび命令の後続グループに関連した前記データ処理ユニットからのマージ指示を受信するように構成され、前記命令の初期グループが実行される場合に前記命令の後続グループが実行されること、ひいては前記命令の初期グループおよび前記命令の後続グループが命令のマージされたグループであることが決定される場合、前記データ処理ユニットは前記マージ指示を発行し、前記トレースユニットは、前記マージ指示に基づいて、前記命令のマージされたグループに関連付けられた前記インデックス記憶ユニットにおける少なくとも1つのマージされたインデックス値を修正するように構成される、請求項8に記載のトレースユニット。前記トレースユニットは、トレースデータのマージアイテムを生成するように構成され、前記トレースデータのマージアイテムは、前記命令の初期グループおよび前記命令の後続グループがマージされたことを示す、請求項46に記載のトレースユニット。データ処理ユニットの処理アクティビティを示すトレースデータのアイテムを生成するように構成されるトレースユニットであって、インデックス値を、前記トレースユニットにより生成された前記トレースデータのアイテムの少なくともサブセットに関連付けるためのトレースインデックス手段を備え、前記トレースインデックス手段は、所定のシーケンスのインデックス値の1つとして前記インデックス値を生成するように構成され、前記所定のシーケンスにおけるn1番目のインデックス値は、前記所定のシーケンスにおけるn番目のインデックス値のみから決定され得る、トレースユニット。データ処理ユニットの処理アクティビティを示すトレースデータのアイテムを生成する方法であって、前記トレースデータのアイテムを生成するステップと、インデックス値を、生成されたトレースデータのアイテムの少なくともサブセットに関連付けるステップと、所定のシーケンスのインデックス値の1つとして前記インデックス値を生成するステップと、を含み、前記所定のシーケンスにおけるn1番目のインデックス値は、前記所定のシーケンスにおけるn番目のインデックス値のみから決定され得る、方法。図1は、本発明によるトレースユニットを含むデータ処理システムを概略的に示す。データ処理システムは、プロセッサコア100データ処理ユニットと、プロセッサコア100の処理アクティビティを監視し、コアの処理アクティビティを示すトレースデータのアイテムをトレースストリームとして生成するように構成される、トレースユニット110とを備える。プロセッサコア100は、フェッチユニット120および実行ユニット130を備える。フェッチユニット120は、メモリ図示せずから命令をフェッチし、実行のためにそれらを実行ユニット130に渡す。具体的には、プロセッサコア100は、投機的でアウトオブオーダーout-of-orderプロセッサであり、したがってフェッチユニット120は、必要であると予測されるただし保証されない、実行ユニット130に対する命令をフェッチするように構成される。実行ユニット130は、これらの命令を投機的に実行し、後に、その投機的に実行された命令が実際に実行されるべきか否かが知られた場合に、それらをキャンセルまたは確定する。トレースユニット110は、命令の投機的実行を含むプロセッサコア100の処理アクティビティを示すトレースデータのアイテムを生成するように構成される。原理的に、トレースユニット110が、投機的に実行された命令に関連して生成されたトレースデータのアイテムをバッファリングし、次いで投機が解消したら単にそれらを出力トレースストリームとしてリリースすることは可能であるが、これには、トレースユニット110内の貴重な記憶スペースが必要であり、好ましくはこれが回避される。代わりに、図1に示される実施形態において、トレースユニット110はまた、トレースデータを投機的に生成するように、すなわち、投機的に実行された命令を示すトレースデータのアイテムを生成し、次いで、投機が正しいか否かが知られたら、トレースデータのそれらのアイテムをキャンセル/確定するように構成される。これを行うために、トレースユニット110には、さらに、トレースインデックスユニット140が提供される。インデックスユニット140は、インデックス値を、トレースユニット110により生成されたトレースデータのアイテムの少なくともサブセットに関連付けるように構成される。具体的には、インデックスユニット140は、インデックス値を所定のシーケンスのインデックス値として生成するように構成され、n1番目のインデックス値は、所定のシーケンスにおけるn番目のインデックス値から決定され得る。示された実施形態において、この機能性は、図2を参照してさらに説明されるように、インデックスユニット140におけるカウンタにより提供される。図2は、図1に示されるトレースユニット110をより詳細に概略的に示す。トレースユニット110は、トレースユニット110の全体的な動作を制御するトレース制御ユニット200を備える。トレースユニット110は、さらに、トレースユニット110が、生成するトレースデータのアイテムのいくつかに関連付けることができる、所定のシーケンスのインデックス値を提供する、カウンタ210を備える。トレースユニット110はまた、カウンタ210により生成されたインデックス値が記憶され得るインデックス記憶ユニット220を備える。インデックス記憶ユニット220は、第1のインデックス記憶ユニット230および最後のインデックス記憶ユニット240を備える。投機的に実行された命令のグループにおける第1の命令に対して、トレースユニット110は、カウンタ210からの現在のカウンタ値を、グループ番号によりインデックス化された第1のインデックス記憶ユニット内に記憶するように構成される。逆に、新しいグループが開始される場合、現在のカウンタ値は、最後のインデックス記憶ユニット240に記憶される。示された実施形態において、インデックス記憶ユニット220は、命令のグループに関してプロセッサの最大投機深度に対応するのに十分なエントリを有する。プロセッサの最大投機深度は、インデックス記憶ユニットが保持する必要があるエントリの最大数を表すが、これは、その深度を超えると、プロセッサは、命令のグループを確定またはキャンセルし、これによりインデックス記憶ユニット内のエントリが解消されなければならないためである。また、示された実施形態において、プロセッサにより投機的に実行された命令の各グループは、最大で1つの分岐命令および1つのロードまたは記憶命令を有することができる。他の全ての命令は、これらの命令の指示を含むトレースストリームから推察され得るため、命令のグループ当たり最大2つの命令トレースアイテムが生成される。さらに、これにより、インデックス記憶ユニット220における所与のエントリに対して、最後のインデックス記憶ユニット240における値は、第1のインデックス記憶ユニット230における値とは最大2カウント異なってもよいことになる。したがって、最後のインデックス値を第1のインデックス値からの2ビットオフセットすなわち、0、1または2として記憶することにより、貴重な記憶スペースが節約される。トレースユニットは、さらに、最も古い未確定記憶ユニット250を備えるが、その機能については後に説明する。点線の四角252および254を含むトレースユニット110の変形例についても、後に説明する。トレースユニット110により実行される一連のステップが、図3に概略的に示される。フローは、プロセッサコア100からの新たなイベントを待つステップ300から開始し、このフロー自体はイベントが受信されるまでステップ300をループする。新たなイベントが受信されるとすなわち、次の命令がコアにより実行されると、フローはステップ310に進み、イベントが命令の新たなグループの一部であるかどうかが決定される。イベントが命令の新たなグループの一部である場合、フローはステップ320に進み、インデックス記憶ユニット220テーブルの第1のインデックス記憶ユニット230におけるエントリが、新しいグループ番号Kに対応するエントリにおいて、現在のカウンタ値で更新される。次に、ステップ330において、このイベントが関心がありかつトレースされるかどうかが決定される。関心がある命令は、分岐、ロードおよび記憶命令である上述のように、これらは命令のグループのトレースに関して重要な命令であるため。命令は、トレースユニットにより現在フィルタリングにより除去されていない場合、トレースされる。イベントすなわち命令が、関心がありかつトレースされる場合、フローはステップ340に進み、カウンタ210が増分され、ステップ350において、イベントがトレースユニット110のトレースストリームに出力される。ステップ360において、グループKに対応する最後のインデックス記憶ユニット240のエントリが、カウンタ210の現在値で更新される。次いで、フローは、ステップ300に戻る。ここで、トレースユニット110の動作、具体的にはインデックス記憶ユニット追跡テーブルとしても知られる220の動作を、以下の表1を参照して説明する。表1は、プロセッサコア100が命令A、BおよびCのグループを投機的に実行し、その後グループBがキャンセルされるべきであり、グループAが確定されるべきであることを示す状況において、カウンタ値、最も古い未確定値、および追跡テーブルがトレースユニット110において更新される様式を示す。グループAは、関心があり現在トレースされているロードLDR命令から開始する。したがって、グループAに対応する第1のインデックスユニット230のエントリA.firstは、現在のカウンタ値0を記憶し、次いでカウンタが1に増分される。最後に、グループAに対応する最後のインデックスユニット240のエントリA.lastは、現在のカウンタ値1を記憶する。グループAにおける次の命令は、関心があるでもなく追跡もされない移動命令MOVである。グループAの最後の命令は、関心がありかつ追跡される、等しい場合分岐BEQ命令であるため、カウンタは2に増分される。次いで、グループAに対応する最後のインデックスユニット240のエントリA.lastは、現在のカウンタ値2で更新される。実際には、各命令に対する最終ステップは、常に、現在のグループに対応する最後のインデックスユニット240のエントリが、現在のカウンタ値で更新されることであることに留意されたい。当然ながら、これは、カウンタがその命令に対し更新された場合に限り、任意の影響を有する。このようにして最後の値を更新することは、表1に示される残りの命令に対しては明示的に説明されない。グループBは、関心があるでもなく追跡もされないADD命令から開始するが、新しいグループにおける第1の命令として、現在のカウンタ値2を、第1のインデックス値記憶ユニットの対応するエントリに記憶させるすなわち、B.first=2。グループBにおける第2の命令は、同様に関心があるでもなく追跡もされないSUB命令であるが、いかなる値も更新しない。グループCは、関心がありかつ追跡される記憶STR命令から開始し、したがって、現在のカウンタ値が、第1のインデックス記憶ユニットのエントリのC.firstに記憶され、次いでカウンタが3に増分される。グループCの第2の命令は、同じく関心がありかつ追跡される、等しくない場合分岐BNE命令であるため、カウンタは4に更新される。次に、プロセッサコア100は、グループBの投機的実行が不正確であり、したがってグループBおよびCがキャンセルされるべきであることを示す。それに応答して、トレースユニット110トレース制御ユニット200により制御されるは、現在4であるカウンタ210の現在のカウント値、および第1のインデックス記憶ユニット230の対応するエントリすなわちB.firstに記憶された2の値を参照する。したがって、トレースユニット110は、トレースデータの2つのアイテムがキャンセルされるべきであることを決定し4-2、この事実を示すトレースデータのアイテムを生成する。次いで、カウンタ210は、2にリセットされる以前は4であり、2つのアイテムがキャンセルされたため。次に、プロセッサコア100は、命令グループAの投機的実行が正しいことが決定されたため、この命令のグループが確定されるべきであることを示す。それに応答して、トレースユニット110トレース制御ユニット200の制御下は、最も古い未確定記憶ユニット250に記憶された値現在0、およびこのグループに対応する最後のインデックス記憶ユニット240におけるエントリすなわちA.lastに記憶された2の値を参照する。したがって、トレースユニット110は、トレースデータの2つのアイテムが確定されるべきであることを決定し2-0、この事実を示すトレースデータのアイテムを生成する。次いで、最も古い未確定記憶ユニット250に記憶された値は、このグループに対して読み出された最後の値、すなわちこの例では2にリセットされる。表1を参照して説明される実施形態において、キャンセルおよび確定は、イベントの数を参照することにより実行され、生成されたトレースデータのアイテムは、キャンセルまたは確定されるべきイベントの数を示すことが留意される。代替の実施形態において、トレースユニットは、イベント数を参照して、トレースのキャンセル/確定アイテムを生成することができる。この場合、トレースのキャンセルアイテムに対しては、イベント数は、第1の値、すなわち、第1のインデックス値記憶ユニットの対応するエントリから取り出され、トレースの確定アイテムに対しては、イベント数は、最後の値、すなわち、最後のインデックス値記憶ユニットにおける対応するエントリから取り出される。ここで、イベント数による確定およびキャンセルは、必要とするハードウェアがより少ないと考えることができるが減算が必要でないため、いくつかのイベントによりキャンセル/確定を示す場合、これは、多くの場合、一般に先行ゼロを有するため、圧縮され得ることに留意されたい。イベントの数またはイベント数により確定するかキャンセルするかの選択は、システム要件、すなわち、トレースユニットにおけるより少ないハードウェアまたはトレースストリームにおけるより少ない帯域幅がより重要であるとみなされるか否かに依存して決定され得る。ここで、以下の表2を参照してさらなる例を説明するが、トレースユニットは、さらに、例において、記憶STR命令をトレースしないことにより与えられる、生成されたトレースをフィルタリングする。表2に示されるグループAおよびBに対する値は、表1に示される値と同じである。しかしながら、グループCの第1の命令に対して、STR命令はトレースされず、したがって、カウントは増分されない。しがたって、グループCにおけるBNE命令トレースされるに遭遇した場合のみ、カウントは3に増分される。したがって、プロセッサコアがBのキャンセルメッセージを発行すると、トレースユニット110は、現在のカウントが3、B.firstが2であり表1の例の場合のように、したがって、トレースの1つのアイテムのみ3-2がキャンセルされるべきであると決定する。同様に、カウントは、1だけ2の値に減少される。プロセッサコアがAの確定メッセージを発行すると、表1の場合のように、最も古い未確定カウントが0、A.last=2であり、したがって、トレースの2つのアイテムが確定される。次いで、最も古い未確定カウントは、2に更新される。表1および2を参照して説明された命令の各グループは、グループとして投機的に実行され、次いでグループとして確定またはキャンセルされる異なるグループとして残ってもよいが、いくつかの実施形態において、命令の2つのグループは、実行後に互いにマージされてもよい。表3は、そのような状況において、インデックス記憶ユニット追跡テーブル220における値における値がどのように使用されるかを示す。この例において、グループBにおけるBNE命令は、グループAにおけるLDR命令の前に解消される。この状況では、プロセッサコア100はこの事実を示し、トレースユニットにグループBをグループAにマージするように命令する。これは、B.lastの値をA.lastにコピーすることによりなされる。換言すれば、グループAに対応するトレース値のセットは、1だけ増加するBNE命令のトレースアイテムは今、グループAの開始を形成するLDR命令の成功裏の実行に必然的に従うトレースアイテムのセットの一部を形成するため。このマージが実行されたら、グループラベルBは、次いで再使用が可能であり、グループCの後の命令の次のグループのラベルとして使用される。この新たなグループBMOVおよびBLTが実行されるにおいて、BLTのみがトレースされる。より単純な実施形態において、インデックス記憶ユニットは、FIFOユニットとして配設され得る。これは、図4に概略的に示され、トレースユニット110は、FIFO260の形態のトレースインデックスユニットを備える。この単純化された配設の1つの利点は、インデックス記憶ユニット260の各エントリに記憶される完全なインデックス値を必要としないことである。グループは、トレースユニット110により受信されると、FIFO260の最後に追加される。次いで、グループが確定されると、グループはFIFOの正面から削除され、グループがキャンセルされると、グループはFIFOの最後から取り出される。FIFO内の各エントリは、そのグループにおける関心のある命令の数を示す小さな識別子を含む。最大2つの関心のある命令が任意のグループにあってもよい示された例において、識別子は、0、1または2を示す2ビットフィールドである。各エントリがFIFOから取り出されると確定またはキャンセル時、確定またはキャンセルするトレースイベントの数は、単純に、FIFO内のエントリの識別子により表現される数である。複数のグループが確定またはキャンセルされると、識別子は、削除されたFIFOエントリから加えられる。ここで、図2にさらに示されるトレースユニット110の構成の変形例点線の四角を説明する。所与の時点において、まだ確定またはキャンセルされていない投機的トレースデータのいくつかのアイテムが存在する。この数は、ゼロからプロセッサの最大投機深度までの範囲内にある。また、通常は確定トレースデータをすぐに出力する必要はないことに留意されたい。確定カウント出力がプロセッサにより生成されたものを超えない限り、確定を遅延させる、確定カウントを加えることによって確定を結合する、または確定を分割することが可能である。これらの因子は、確定がトレースストリームに明示的に出力されるのではなくむしろ暗示されるシステムを形成するために使用することができ、これによりトレース効率がさらに改善される。すぐに出力される代わりに、まだ出力されていない確定カウントの総数を示す合計がまだ出力されていない確定記憶ユニット252に維持される。投機的トレースデータアイテムの現在数の第2のカウントが投機深度記憶ユニット254に維持される。トレースデータアイテムが出力される場合、投機深度は1だけ増分される。確定カウントが出力される場合、投機深度は、確定数だけ減少される。キャンセルカウントが出力される場合、投機深度は、キャンセル数だけ減少される。より多くのトレースデータが出力されると、投機深度は、最大投機深度に達する。これが生じた場合、カウント=1の確定が暗示される。同時に、投機深度が1だけ減少される。総確定カウントもまた1だけ減少される。トレースユニットが、トレースデータの生成を停止するように命令された場合、トレースユニットは、以下を行うように構成され得る。1現在の未出力の総確定カウントを出力し、任意の後続の確定カウントがすぐに出力される、または、2全てのトレースデータが確定またはキャンセルされるのを待ち、次いで総確定カウントを出力する。また、本発明の技術は、特にデータ値およびデータアドレスに関して、アウトオブオーダーout-of-orderプロセッサへの具体的な適用性が見出される。アウトオブオーダーout-of-orderプロセッサにおけるトレースデータ命令とは対照的には、アウトオブオーダーout-of-orderプロセッサが、異なる順番でデータアドレスに対してデータ値を生成または受信するという追加的な複雑性に対処しなければならない。本発明により提供されるトレースデータのアイテムのインデックス化は、データ値がそのデータアドレスと一致することを可能にする。しかしながら、トレースデータ値およびアドレスに関するさらなる困難は、その親命令に関してデータアドレスがどれほど遅くなり得るかに対して制限が課される可能性があるものの、これはその親データアドレスに関するデータ値には現実的ではないということである。例えば、読み出しは、完了するのに数百サイクルを要する可能性があり、その時に、任意の数の命令が実行されている可能性があるこれらの命令がいずれも読み出し値を必要としない限り。本発明の技術によれば、トレースユニットにおけるトレースインデックスユニットは、データアドレスが参照され得るように、インデックス値をそれらのデータアドレスに関連付ける。図5において、これらのインデックス値は、より低い数のラインにおいて、データアドレスキーである。これらのキーは一般にシーケンシャルであること、さらに、キーは、7の値に達した後0に戻ることが分かる。一般に、関連付けられたデータ値は、キーの後すぐに利用可能であり、したがって、データキーのシーケンスが戻った際に、キーは競合なしに再使用され得る。しかしながら、データ転送が完了するのに長時間を要する場合、トレースキーが解除される前にそれを再使用する可能性がある。これは、図5において、対応するデータ値が異常に長い時間受信されていないデータアドレスキー番号1により示される。したがって、データアドレスキー1が、図5において2回目に使用されるべきである時までに、それはまだ飛行中であり、したがって使用することができない。代わりに、トレースユニットは、シーケンシャルキー1の代わりに特殊キーキーAを使用するように構成される。この実施形態において、この特殊キーAは、実際には、プロセッサ100が、データ値が返されるのを待っている間このデータアドレスを追跡するために使用するコアキーである。他の実施形態において、特殊キーは、そのアルファベットがコアキーとの1対1対応を有する限り、異なるアルファベットから導出することができる。図5はまた、いくつかのシーケンシャルキーは、プロセッサにより明示的に無効化されている場合、対応するデータ値を有さなくてもよいことを示している例えば、シーケンシャルキー3の第1のインスタンス。コアキーが使用される様式に関するコア内の規則によりコアキーもまた一意的に使用されなければならない特殊キーは飛行中再使用することができないため、特殊キーが飛行中であるかどうかをチェックする必要はないことに留意されたい。図6は、データアドレスキーがコアキーにより参照されるキー追跡テーブルの一実施形態を概略的に示す。ここで、コアキーβは、シーケンシャルキーD1、D2およびD3が帰属する3つのデータアドレスをインデックス化するためにプロセッサコアにより使用される。次のデータアドレスは、コアキーβにより使用され、トレースユニットは、次のシーケンシャルキー、すなわちD4がコアキーαによりまだ使用されていること識別し、したがって、コアキーβ自体を現在のデータアドレス用のインデックスキーとして使用する。トレースユニットは、シーケンシャルインデックスキーD4に関連したフラグセットが、D4がまだ飛行中であることを示す、関連付けられた飛行中記憶ユニットを参照することにより、シーケンシャルキーD4がまだ飛行中であることを識別する。代替の実施形態を図7に示すが、飛行中指標がコアキーにより記憶されている。この配設は、シーケンシャルキーD1、D2等が使用される場合、キー追跡テーブルにおいて完全連想検索が実行されることを必要とする。そのシーケンシャルキーに対する一致が見つかり、対応するコアキーフラグが設定された場合、シーケンシャルキーが飛行中であることが決定される。図8は、一実施形態におけるトレースユニットにより行われる一連のステップを概略的に示す。フローは、トレースユニットが新しいデータアドレスおよび関連付けられたコアキーをプロセッサコアから受信するステップ400から開始する。次いで、ステップ410において、トレースユニットは、次のシーケンシャルキーを計算し、ステップ420において、そのキーがキー追跡テーブルにおいて現在飛行中であるかが決定される。飛行中でない場合、フローはステップ430に進み、当該次のシーケンシャルキーがキー追跡テーブルに追加され、フローはステップ400に戻る。しかしながら、ステップ420において、次のシーケンシャルキーが現在飛行中であることが決定された場合、その代わりにステップ440において特殊キーがキー追跡テーブルに追加され、ステップ450において、その特殊キーの値がトレースストリームに出力される。次いで、フローは、ステップ400に戻る。次のシーケンシャルキーの代わりに特殊キーが使用された場合、一般に、ステップ410の次の反復において当該次のシーケンシャルキーをすぐにリトライしないことが好ましいことに留意されたいが、これは、1回の反復において使用中であることが判明した場合、次の反復においてもまだ使用中である可能性が高いためである。一般に、利用可能なシーケンシャルキーが多い程、特殊キーが必要とされる可能性は低いことが認識される。任意の数のシーケンシャルキーがあってもよいが、Nから3Nの範囲N個のコアキーが存在するが一般に適当である。シーケンシャルキーはデータアドレスとともに出力される必要はないことに留意されたいが、これは、その値が予測可能であり、トレースユニットにより生成される所定のシーケンスのインデックス値の1つであるためである。さらに、シーケンシャルキーおよび特殊キーは、完全に別個のプロトコル符号化を使用し得るが、いくつかの実施形態において、重複が存在しない限り、同じプロトコル符号化が使用されてもよいことに留意されたい。例えば、0~15の値の範囲において、シーケンシャルキーは0~11の値を使用することができ、特殊キーは12~15の値を使用することができる。トレースデータの受信側は、当然ながら、どの規則が使用されているかを知る必要がある。図9は、12個のシーケンシャルキーおよび4個の特殊キーに分割された16個のキー0~15のプロトコルスペースを示す。本明細書において特定の実施形態を説明したが、本発明はこれに限定されず、本発明の範囲内で多くの修正および追加が行われてもよいことが認識される。例えば、本発明の範囲から逸脱せずに、独立請求項の特徴に対し、後続の従属請求項の特徴の様々な組み合わせがなされてもよい。