(57)【特許請求の範囲】
【請求項１】
データ処理ユニットの処理アクティビティを示すトレースデータのアイテムを生成するように構成されるトレースユニットであって、
インデックス値を、前記トレースユニットにより生成された前記トレースデータのアイテムの少なくともサブセットに関連付けるように構成される、トレースインデックスユニットを備え、
前記トレースインデックスユニットは、所定のシーケンスのインデックス値の１つとして前記インデックス値を生成するように構成され、
前記所定のシーケンスにおけるｎ＋１番目のインデックス値は、前記所定のシーケンスにおけるｎ番目のインデックス値のみから決定され得るものであり、
前記トレースユニットは、少なくとも１つの前記インデックス値を記憶するように構成される、インデックス記憶ユニットを備え、
前記インデックス記憶ユニットは、選択的に飛行中指標を記憶するように構成され、前記飛行中指標は、前記所定のシーケンスのインデックス値の記憶されたインデックス値が現在使用されていることを示し、前記トレースユニットは、次のインデックス値を生成する際に、前記飛行中指標を参照し、前記飛行中指標が、前記次のインデックス値がまだ使用中であることを示す場合、前記次のインデックス値の代わりに代替インデックス値を記憶するように構成される、前記トレースユニット。
【請求項２】
前記データ処理ユニットの前記処理アクティビティは、データアドレスを使用した記憶されたデータ値への参照を含み、前記インデックス値は、前記少なくとも１つのデータアドレスに関連付けられたデータアドレスインデックス値である、請求項１に記載のトレースユニット。
【請求項３】
前記記憶されたデータ値への前記参照は、前記記憶されたデータ値のローディングを含む、請求項２に記載のトレースユニット。
【請求項４】
前記記憶されたデータ値への前記参照は、前記記憶されたデータ値を記憶することを含む、請求項２に記載のトレースユニット。
【請求項５】
前記トレースユニットは、データアドレスインデックス値記憶テーブルに前記データアドレスインデックス値を記憶するように構成される、請求項２に記載のトレースユニット。
【請求項６】
前記トレースユニットは、選択的に飛行中指標を記憶するように構成され、前記飛行中指標は、前記データアドレスインデックス値に関連付けられた前記記憶されたデータ値への参照がまだ完了しておらず、前記データアドレスインデックス値が飛行中であることを示す、請求項５に記載のトレースユニット。
【請求項７】
前記トレースユニットは、次のデータアドレスインデックス値を生成する際に、記憶された飛行中指標を参照し、前記記憶された飛行中指標が、前記次のデータアドレスインデックス値がまだ飛行中であることを示す場合、前記次のデータアドレスインデックス値の代わりに代替データアドレスインデックス値を記憶するように構成される、請求項６に記載のトレースユニット。
【請求項８】
前記代替データアドレスインデックス値は、データ処理ユニットインデックス値を含み、前記データ処理ユニットインデックス値は、前記データアドレスを参照するために前記データ処理ユニットにより使用される、請求項７に記載のトレースユニット。
【請求項９】
前記代替データアドレスインデックス値は、データ処理ユニットインデックス値との１対１対応を有し、前記データ処理ユニットインデックス値は、前記データアドレスを参照するために前記データ処理ユニットにより使用される、請求項７に記載のトレースユニット。
【請求項１０】
前記飛行中指標は、前記データアドレスインデックス値に関連して記憶される、請求項８に記載のトレースユニット。
【請求項１１】
前記飛行中指標は、前記データ処理ユニットインデックス値に関連して記憶される、請求項８に記載のトレースユニット。
【請求項１２】
前記トレースユニットは、前記代替データアドレスインデックス値を示すトレースデータのアイテムを生成するように構成される、請求項７に記載のトレースユニット。
【請求項１３】
前記代替データアドレスインデックス値および前記データアドレスインデックス値は、符号化プロトコルを共有する、請求項７に記載のトレースユニット。
【請求項１４】
データ処理ユニットの処理アクティビティを示すトレースデータのアイテムを生成する方法であって、
前記トレースデータのアイテムを生成するステップと、
インデックス値を、生成されたトレースデータのアイテムの少なくともサブセットに関連付けるステップと、
所定のシーケンスのインデックス値の１つとして前記インデックス値を生成するステップと、を含み、
前記所定のシーケンスにおけるｎ＋１番目のインデックス値は、前記所定のシーケンスにおけるｎ番目のインデックス値のみから決定され得るものであり、
前記方法は更に、少なくとも１つの前記インデックス値をインデックス記憶ユニットに記憶することを含み、
前記インデックス記憶ユニットは、選択的に飛行中指標を記憶するように構成され、前記飛行中指標は、前記所定のシーケンスのインデックス値の記憶されたインデックス値が現在使用されていることを示し、
前記方法は、次のインデックス値を生成する際に、前記飛行中指標を参照し、前記飛行中指標が、前記次のインデックス値がまだ使用中であることを示す場合、前記次のインデックス値の代わりに代替インデックス値を記憶することを含む、前記方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理ユニットのアクティビティの監視、具体的には、データ処理ユニットのそれらの処理アクティビティを示すトレースデータのアイテムの生成に関連する。
【背景技術】
【０００２】
現代のデータ処理装置（マイクロプロセッサ等）の複雑性は、そのようなデータ処理装置の動作のプログラミングおよびデバッギングが、複雑で時間を要する作業であることを意味する。したがって、処理アクティビティを実行する際のデータ処理装置の動作を監視することができるようにデータ処理装置を正確に構成することを目指すことが、それらの動作が所望される通りに実行されていることを検証するために、および、問題が生じたときのトラブルシューティングのために、プログラマーにとって極めて有用である。
【０００３】
データ処理装置の処理アクティビティを監視するこの要望は、現代のデータ処理装置が、典型的にはシステムオンチップ（ＳｏＣ）等の非常に小規模のデバイスとして構成されることの知識とバランスが保たれなければならない。そのようなデバイスにおけるスペースの制約が、その構造において極めて重要な因子であることは周知であり、したがって、そのようなデバイスに監視コンポーネントを追加する機会は非常に限られている。同様に、ＳｏＣの周囲のピンも高価であり、外部分析のためにＳｏＣからエクスポートされ得る診断データの量を制限している。
【０００４】
これらの理由から、そのようなデータ処理装置に関連付けられたトレースユニットを提供することが知られており、トレースユニットは、データ処理装置の処理アクティビティを監視し、それらの処理アクティビティを示すトレースデータアイテムのシーケンスを生成するように構成される。特に、転送されなければならないデータの帯域幅を低減するために、冗長である任意の情報を削除し、現在の分析目的に厳密に必要なデータのみを含む、高圧縮された形態でトレースデータのアイテムを提供することが知られておいる。米国特許第７，７０７，３９４号は、命令トレースの間に生成されるデータストリームのサイズを低減するためのいくつかの技術を記載している。
【０００５】
データ処理装置のアクティビティのトレースに関連した問題は、データ処理装置が投機的命令実行を行うことができる場合、特に顕著である。投機的命令実行は、例えば待機中のパイプライン段階を回避することにより、より速い動作を提供する機会を有することから、この技術を提供することが知られている。しかしながら、投機が解消されるまで（すなわち、所与の命令が実際に確定されるかどうかが知られるまで）、トレースユニットはデータ処理装置の動作を決定的に示すトレースデータのストリームを提供することができないため、投機的命令実行は、トレースユニットに困難を提示する。１つの可能性は、投機が解消されるまで、トレースユニットが、生成するトレースデータをバッファリングすることであるが、この技術に必要なバッファスペースは、プロセッサの投機深度が大きい場合、不要に大きくなり得る。また、代替の技術は、投機的にトレースデータを生成し、次いで、対応する命令が誤って投機されたことが後に判明した場合、トレースデータのあるアイテムをキャンセルすることである。例えば、Ｎｅｘｕｓプロトコル（「Ｔｈｅ  Ｎｅｘｕｓ  ５００１  Ｆｏｒｕｍ  -  Ｓｔａｎｄａｒｄ  ｆｏｒ  ａ  Ｇｌｏｂａｌ  Ｅｍｂｅｄｄｅｄ  Ｐｒｏｃｅｓｓｏｒ  Ｄｅｂｕｇ  Ｉｎｔｅｒｆａｃｅ」，  ＩＥＥＥ−ＩＳＴＯ  ５００１  −  ２００３，  ２３  Ｄｅｃｅｍｂｅｒ  ２００３）は、特定数のトレースデータアイテムのキャンセルをサポートしている。
【０００６】
しかしながら、データ処理装置が、キャンセルされるべき命令（またはより典型的には命令のグループ）をトレースユニットに具体的に示す場合であっても、それらのキャンセルされた命令に対応するトレースデータのアイテムを識別することは、単純ではない。いくつかの命令のみがプログラムフローの変化をもたらし得るため、命令のグループは投機実行の典型であり、したがって、グループが仮に実行される場合、命令のグループが識別され得、次いでグループ全体が実行される。
【０００７】
選択された命令のトレースデータを生成するのみであるというトレース技術に関する特定の困難が生じるが、その理由は、（例えば）データ処理装置が、最も最近の命令の２つのグループがキャンセルされるべきであることを示す場合、トレースユニットは、命令のグループと生成されるトレースデータのアイテムの数との間にそのような直接的な相関がないために、下流側の分析ユニットに、トレースデータの２つのアイテムがキャンセルするべきであることを単に示すことができないことから、この技術がトレースデータの対応するキャンセルアイテムの生成を困難とし得るためである。
【０００８】
後にトレースデータの特定のアイテムを識別する上での困難に関連した別の問題は、データ転送に関連して生じる。ロードまたは記憶動作は、完了するまでに多くのサイクルを要し得ることから、（例えば）ロード命令が実行され、トレースデータの対応するアイテムが生成される場合、要求されたデータ値がメモリから検索された時までに、データ値が関連付けられるべき、いくつものサイクル前に生成されたそのトレースデータの対応するアイテムを識別することは困難である。プロセッサが、プログラム順とは無関係に命令を実行することができる、またはデータを転送することができる場合、トレースユニットは、どのデータ値がどのデータアドレスに属するのかを識別するすべがない可能性がある。
【０００９】
アウトオブオーダー（ｏｕｔ−ｏｆ−ｏｒｄｅｒ）プロセッサのトレースに関するいくつかの背景的な技術情報は、「Ｔｈｅ  ＰＤ  Ｔｒａｃｅ  Ｉｎｔｅｒｆａｃｅ  ａｎｄ  Ｔｒａｃｅ  Ｃｏｎｔｒｏｌ  Ｂｌｏｃｋ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ」，  ４  Ｊｕｌｙ  ２００５（ｈｔｔｐ：／／ｗｗｗ．ｍｉｐｓ．ｃｏｍ／ｐｒｏｄｕｃｔｓ／ｐｒｏｄｕｃｔ−ｍａｔｅｒｉａｌｓ／ｐｒｏｃｅｓｓｏｒ／ｍｉｐｓ−ａｒｃｈｉｔｅｃｔｕｒｅ／から入手可能である）およびＡＲＭ  ＥＴＭｖ３  ａｒｃｈｉｔｅｃｔｕｒｅ  （ｈｔｔｐ：／／ｉｎｆｏｃｅｎｔｅｒ．ａｒｍ．ｃｏｍから入手可能である）に見出すことができる。
【００１０】
したがって、トレースユニットが上述の問題に対応することができるようにする、トレースデータのアイテムを生成するための改善された技術を提供することが望ましい。
【発明の概要】
【００１１】
第１の態様から見れば、本発明は、データ処理ユニットの処理アクティビティを示すトレースデータのアイテムを生成するように構成されるトレースユニットであって、インデックス値を、トレースユニットにより生成されたトレースデータのアイテムの少なくともサブセットに関連付けるように構成される、トレースインデックスユニットを備え、前記トレースインデックスユニットは、所定のシーケンスのインデックス値の１つとして前記インデックス値を生成するように構成され、前記所定のシーケンスにおけるｎ＋１番目のインデックス値は、前記所定のシーケンスにおけるｎ番目のインデックス値のみから決定され得る、トレースユニットを提供する。
【００１２】
本発明の技術によれば、トレースユニットは、インデックス値を、トレースユニットにより生成されたトレースデータのアイテムの少なくともサブセットに関連付けるように構成される、トレースインデックスユニットを備える。特に、インデックス値は、所定のシーケンスにおけるｎ＋１番目のインデックス値が、所定のシーケンスにおけるｎ番目のインデックス値のみから決定され得るように、所定のシーケンスのインデックス値に従ってトレースインデックスユニットにより生成される。トレースデータのアイテムの生成に関して、これらのインデックス値の、トレースデータのアイテムの少なくともいくつかとの関連付けは、後にトレースデータの特定のアイテムへの参照が可能となるように、トレースユニットが、生成するトレースデータのアイテムの少なくともいくつかを「タグ化」することができることから有利である。これは、例えば、後に、誤った投機のためにトレースデータの特定のアイテムをキャンセルすることが求められる場合に、特に有益となり得る。代替として、これは、データ値を、完了するまでに長時間を要し得るデータ転送命令のために生成されたトレースデータのアイテムと関連付けることが求められる場合に、有益となり得る。このようにしてトレースデータのアイテムをインデックス化することにより、後にトレースデータの特定のアイテムを参照することができる。また、所定のシーケンスにおけるｎ番目のインデックス値のみから、所定のシーケンスにおけるｎ＋１番目のインデックス値を決定することができることにより、インデックス化の多くを暗示することができ、また一般に明示的にトレースされる必要がない。したがって、トレースユニット内の貴重なスペースを節約することができ、トレースデータ帯域幅を大幅に節約することができる。
【００１３】
所定のシーケンスのインデックス値を提供するいくつかの手法が可能であるが、一実施形態において、前記トレースユニットは、カウンタを備え、前記カウンタは、前記所定のシーケンスのインデックス値を提供するように構成される。カウンタは、トレースユニットのハードウェアに比較的容易に実装することができ、カウンタにより生成された所定のシーケンス（典型的には増分するシーケンス）のインデックス値は、有利に容易に管理される。
【００１４】
トレースユニットがトレースデータのいくつかのアイテムに関連付けるインデックス値を利用し得る様々な手法があるが、実施形態において、前記トレースユニットは、少なくとも１つの前記インデックス値を記憶するように構成されるインデックス記憶ユニットを備える。後のトレースユニットの動作が、記憶された値を参照し、ひいてはそれに関連したトレースデータのアイテムを参照し得るように、インデックス記憶ユニットの提供により、トレースユニットは、少なくとも１つのインデックス値の記録を維持することができる。
【００１５】
いくつかの実施形態において、トレースユニットは、２つのインデックス値の間の差を記憶するように構成されるインデックス記憶ユニットを備える。これは、有利にコンパクトな記憶メカニズムを提供し、これにより、例えば、一連のインデックス値が記憶され得る。このインデックス記憶ユニットは、一実施形態において、ＦＩＦＯデバイスであってもよい。ＦＩＦＯデバイスは、値のシーケンスが記憶され得る単純な構造を示す。
【００１６】
トレースユニットが監視するように構成されるデータ処理ユニットは、いくつかの形態をとり得るが、一実施形態において、前記データ処理ユニットの前記処理アクティビティは、投機的命令実行を備え、前記少なくとも１つのインデックス値は、少なくとも１つの投機的に実行された命令に関連付けられる。投機的に実行された命令が、後にデータ処理ユニットによって誤って投機されたことが示される場合、トレースユニットは、この事実をトレースデータの受信側に知らせる必要があり得るため、命令の投機的実行は、困難を有するトレースユニットを提示し得る。投機的に実行された命令に関連付けられたインデックス値を記憶し得るインデックス記憶ユニットを有することにより、トレースユニットには、トレースデータの対応するアイテムを生成してからある時間経過した後であっても、その投機的命令への参照を維持することができる機構が提供される。
【００１７】
いくつかの実施形態において、前記インデックス記憶ユニットは、前記少なくとも１つの投機的に実行された命令が確定されるかまたはキャンセルされるまで、前記少なくとも１つのインデックス値を記憶するように構成される。したがって、その場合、インデックス記憶ユニットは、投機的に実行された命令の最終結果、すなわち、その命令が正確に投機的に実行された（および「確定」される）か、または誤って投機されたか（および「キャンセル」される）が知られるまで、その投機的に実行された命令に対応するインデックス値を維持する。対応するインデックス値をインデックス記憶ユニットに記憶させることにより、トレースユニットは、後にその命令を、ひいてはそれに関連して生成された任意のトレースデータを参照することができる。
【００１８】
命令の投機的実行は、個々の命令の投機的実行を含み得るが、いくつかの実施形態において、前記投機的に実行された命令は、命令のグループの一部を形成し、前記命令のグループの第１の命令の投機的実行は、前記命令のグループの全ての命令の投機的実行を必要とする。
【００１９】
いくつかの命令（例えば分岐）はシーケンシャルな命令の実行からの可能な偏差をもたらし、他の命令（例えばＡＤＤ命令）は、それらに先行する命令が実行された場合確かに実行されるため、グループにおける命令の投機的な実行は実践的である。この理由から、投機的命令実行を行うように構成されるデータ処理ユニットは、典型的には、そのような分割できないグループを形成することが知られている命令のグループを投機的に実行する。
【００２０】
いくつかの実施形態において、前記インデックス記憶ユニットは、前記命令のグループにおける第１の命令に関連付けられた第１のインデックス値を記憶するように構成される第１のインデックス記憶ユニットを備える。投機的に実行された命令のグループに対応するトレースデータを生成する上で、その命令のグループにおける第１の命令に関連付けられた第１のインデックス値を記憶することは、それによって命令のグループの開始が定義されるため、有利である。
【００２１】
第１のインデックス記憶ユニットは、単一のエントリのみを記憶してもよいが、実施形態において、前記第１のインデックス記憶ユニットは、第１の複数のエントリを備え、前記命令のグループを示す指標に基づいて、前記第１のインデックス値を記憶するように構成される。その結果、第１のインデックス記憶ユニットは、命令のグループへの後の参照により、対応する第１のインデックス値が第１のインデックス記憶ユニットから検索され得ることが可能となるように、その命令のグループを示す指標に対応するエントリに第１のインデックス値を記憶することができる。
【００２２】
データ処理ユニットが、命令のいくつかのグループを投機的に実行し得ることを考慮すると、トレースユニットがそれらのグループのそれぞれに対応するインデックス値を追跡することができれば有利であり、したがって、一実施形態において、前記第１の複数のエントリのいくつかは、前記データ処理ユニットにより投機的に実行されてもよい、少なくとも命令の最大数のグループに対応する。
【００２３】
当然ながら、投機的命令実行は時折不正確であり、いくつかの実施形態において、前記トレースユニットは、前記データ処理ユニットからのキャンセル指示を受信するように構成され、前記キャンセル指示は、投機的に実行された命令の選択されたグループがキャンセルされたことを示し、前記トレースユニットは、前記命令の選択されたグループを示すトレースデータのキャンセルアイテムを生成するように構成される。したがって、データ処理ユニットが、命令の選択されたグループがキャンセルされるべきであることを示す場合、トレースユニットは、トレースデータの対応するキャンセルアイテムを生成することにより、この情報をそのトレースデータの受信側に伝達するように構成される。
【００２４】
特に、一実施形態において、前記トレースユニットは、前記キャンセル指示の受信後、前記第１のインデックス記憶ユニットに記憶され、前記命令の選択されたグループに関連付けられた第１のインデックス値に基づいて、前記トレースデータのキャンセルアイテムを生成するように構成される。第１のインデックス記憶ユニットに記憶された第１のインデックス値は、命令のグループにおける第１の命令に関連付けられ、したがって、この第１のインデックス値への参照により、トレースユニットは、その命令の選択されたグループのキャンセルに起因してキャンセルされるべきトレースデータの第１のアイテムの指示を提供することができる。このトレースデータの第１のアイテムは、キャンセルされるいくつかのアイテムの第１のアイテムであってもよく、または、キャンセルされるトレースデータの１つの特定のアイテムであってもよい。
【００２５】
いくつかの実施形態において、トレースユニットは、前記所定のシーケンスのインデックス値を提供するように構成されるカウンタを備え、前記トレースユニットは、さらに前記カウンタの現在のカウンタ値に基づいて、前記トレースデータのキャンセルアイテムを生成するように構成される。トレースユニットは、カウンタを使用してインデックス値のシーケンスを生成するように構成されるため、カウンタの現在のカウンタ値への参照は、トレースデータの最も最近のアイテムへの参照を提供する。したがって、第１のインデックス値および現在のカウンタ値の両方に基づいてトレースデータのキャンセルアイテムを生成することにより、トレースユニットは、そのトレースデータの受信側に、トレースデータアイテムのシーケンスのどこでキャンセルを開始すべきか、およびどこで終了すべきかを示すことができる。
【００２６】
いくつかの実施形態において、前記インデックス記憶ユニットは、前記命令のグループにおける最後の命令に関連付けられた最後のインデックス値を記憶するように構成される最後のインデックス記憶ユニットを備える。投機的に実行された命令のグループに対応するトレースデータを生成する上で、その命令のグループにおける最後の命令に関連付けられた最後のインデックス値を記憶することは、それによって命令のグループの終了が定義されるため、有利である。
【００２７】
最後のインデックス記憶ユニットは、単一のエントリのみを記憶してもよいが、実施形態において、前記最後のインデックス記憶ユニットは、第２の複数のエントリを含み、前記命令のグループを示す指標に基づいて、前記最後のインデックス値を記憶するように構成される。その結果、最後のインデックス記憶ユニットは、命令のグループに対する後の参照により、対応する最後のインデックス値が第２のインデックス記憶ユニットから検索され得ることが可能となるように、その命令のグループを示す指標に対応するエントリに最後のインデックス値を記憶することができる。
【００２８】
データ処理ユニットが、命令のいくつかのグループを投機的に実行し得ることを考慮すると、トレースユニットがそれらのグループのそれぞれに対応するインデックス値を追跡することができれば有利であり、したがって、一実施形態において、前記第２の複数のエントリのいくつかは、前記データ処理ユニットにより投機的に実行されてもよい、少なくとも命令の最大数のグループに対応する。
【００２９】
投機的命令実行は、プログラムフローが（統計的に言って）正確に予測され得る多くの状況が存在するため実装される。命令の投機的実行が正確であることが決定的に知られると、その命令は「確定」され、いくつかの実施形態において、前記トレースユニットは、前記データ処理ユニットからの確定指示を受信するように構成され、前記確定指示は、投機的に実行された命令の選択されたグループが確定されたことを示し、前記トレースユニットは、前記命令の選択されたグループを示すトレースデータの確定アイテムを生成するように構成される。したがって、データ処理ユニットが、命令の選択されたグループが確定されることを示す場合、トレースユニットは、トレースデータの対応する確定アイテムを生成することにより、この情報をそのトレースデータの受信側に伝達するように構成される。
【００３０】
特に、一実施形態において、前記トレースユニットは、前記確定指示の受信後、前記最後のインデックス記憶ユニットに記憶され、前記命令の選択されたグループに関連付けられた最後のインデックス値に基づいて、前記トレースデータの確定アイテムを生成するように構成される。最後のインデックス記憶ユニットに記憶された最後のインデックス値は、命令のグループにおける最後の命令に関連付けられ、したがって、この最後のインデックス値への参照により、トレースユニットは、その命令の選択されたグループの確定に起因して確かに正しいトレースデータの最後のアイテムの指示を提供することができる。このトレースデータの最後のアイテムは、確定するいくつかのアイテムの終了ポイントを提供してもよく、または確定する特定のアイテムであってもよい。
【００３１】
いくつかの実施形態において、トレースユニットは、前記所定のシーケンスのインデックス値を提供するように構成されるカウンタと、未確定記憶ユニットとを備え、前記トレースユニットは、前記トレースの確定アイテムを生成する際に、前記未確定記憶ユニットに前記カウンタの現在のカウンタ値を記憶するように構成される。したがって、命令のグループが確定される瞬間に、トレースユニットは、未確定命令が開始するポイントを示す現在のカウンタ値の記録を作成することができる。
【００３２】
いくつかの実施形態において、トレースユニットは、前記未確定記憶ユニットに記憶された値に基づいて、前記トレースの確定アイテムを生成するように構成される。未確定記憶ユニットは、トレースの確定アイテムが最後に生成された瞬間からの現在のカウンタ値を記憶するため、未確定記憶ユニットに記憶された値の両方に基づいてトレースデータの確定アイテムを生成することにより、トレースユニットは、そのトレースデータの受信側に、トレースデータアイテムのシーケンスのどこで確定を開始すべきか、およびどこで終了すべきかを示すことができる。
【００３３】
いくつかの実施形態において、前記インデックス記憶ユニットは、前記命令のグループにおける第１の命令に関連付けられた第１のインデックス値を記憶するように構成される第１のインデックス記憶ユニットを備え、前記インデックス記憶ユニットは、前記命令のグループにおける最後の命令に関連付けられた最後のインデックス値を記憶するように構成される最後のインデックス記憶ユニットを備え、前記最後のインデックス値は、前記第１のインデックス値に関連した形式で記憶される。
【００３４】
命令のグループにおける命令の数に対する制約は、一方でその命令のグループにおける第１の命令と最後の命令との間の命令の数に対し制約を課すが、最後にインデックス化された値を、第１のインデックス値に関連した形式で、例えばそれに対するオフセットとして記憶することにより、有利な記憶効率を得ることができることを意味し得る。この関連した形式は、いくつかの形態をとり得ることが認識されるが、一実施形態において、前記第１のインデックス値に関連した前記形式は、２ビットデータ形式である。代替の実施形態は、関心のあるグループにおける命令の数に依存して、１ビットデータ形式または２ビットを超えるデータ形式を使用し得る。
【００３５】
いくつかの実施形態において、トレースユニットは、投機深度カウンタを備え、前記投機深度カウンタは、前記データ処理ユニットにより実行されている命令の現在の投機深度を示すように構成される。投機深度カウンタの提供により、トレースユニットは、投機的に実行され、したがってキャンセルまたは確定される必要があり得る命令の数を追跡することができる。したがって、この投機深度カウンタは、投機的に実行された命令が確定される、またはキャンセルされる場合に減少され得る。
【００３６】
いくつかの実施形態において、トレースユニットは、保留確定カウンタを備え、前記保留確定カウンタは、出力が保留されているトレースデータの確定アイテムの現在の数を示すように構成される。したがって、トレースユニットは、トレースデータの確定アイテムを、それが生じた際にすぐに出力する必要はないが、そのようないくつかの保留アイテムを追跡することができる。これは、さらに、トレース帯域幅の望ましい低減に有益である。
【００３７】
いくつかの実施形態において、トレースユニットは、前記トレースデータの確定アイテムが生成されることなく前記確定指示が受信される場合、前記保留確定カウンタを増分させるように構成される。したがって、保留確定の数の現在高が維持され得るため、保留確定カウンタは、トレースデータが生成されなければならない周波数を低減し、確定指示がデータ処理ユニットから受信されるがトレースデータの確定アイテムは生成されない場合、保留確定カウンタを増分させる。
【００３８】
いくつかの実施形態において、トレースユニットは、前記投機深度カウンタが所定の値に達する場合、前記保留確定カウンタを減少させるように構成される。例えば、投機深度カウンタがデータ処理ユニットの既知の最大投機深度に達する場合、最も古い投機的に実行された命令の確定が生じなければならないことが推察され得る。
【００３９】
いくつかの実施形態において、前記投機深度カウンタが所定の値に達する場合、トレースデータのさらなるアイテムの生成は、前記トレースユニットが前記データ処理ユニットからさらなる確定指示を受信したことを暗示する。例えば、投機深度カウンタがデータ処理ユニットの既知の最大投機深度に達する場合、さらなるトレースデータのアイテムが受信されると、最も古い投機的に実行された命令の確定が、トレースデータの受信側により推察され得る。トレースデータの受信側は、典型的には、この推察を有効化するために、データ処理ユニットの投機深度も追跡するように構成される。
【００４０】
いくつかの実施形態において、トレースユニットは、所定のイベントに応答して、前記所定のシーケンスの値の前記インデックス値を、所定の値にリセットするように構成される。例えば、さらなるトレースデータのアイテムを同じインデックス値に関連付けることが望ましくなり得るが、これは、インデックスシーケンスをリセットすることにより簡単に達成され得る。
【００４１】
いくつかの実施形態において、トレースユニットは、前記所定のシーケンスの値を、ループするシーケンスの値として生成するように構成される。これは、エンドレスのシーケンスを生成するための便利な機構を提供する。
【００４２】
トレースユニットは、複数の様式で構成され得るが、一実施形態において、前記トレースユニットは、前記データ処理ユニットが応答する命令の少なくとも１つの種類に対して、トレースデータのアイテムを生成しないように構成される。特定の命令は、生成されたトレースデータの受信側にとって、他の命令よりも関心がある可能性があり、したがって、ある特定の種類の命令を、関心がないトレースデータから削除することにより貴重なトレース帯域幅を節約することができる。
【００４３】
いくつかの実施形態において、前記インデックス記憶ユニットは、選択的に飛行中指標を記憶するように構成され、前記飛行中指標は、前記所定のシーケンスのインデックス値の記憶されたインデックス値が現在使用されていることを示す。所定のシーケンスのインデックス値は、インデックス値の再使用があいまいさなしに生じ得るように選択され得るが、ある特定のインデックス値が長期間特定のトレースアイテムに関連付けられたままである場合が存在し得る。飛行中指標は、どのインデックス値がこの様式で取り扱われるべきかを識別する機構を提供する。
【００４４】
いくつかの実施形態において、前記トレースユニットは、次のインデックス値を生成する際に、前記飛行中指標を参照し、前記飛行中指標が、前記次のインデックス値がまだ使用中であることを示す場合、前記次のインデックス値の代わりに代替インデックス値を記憶するように構成される。代替インデックス値を記憶することは、まだ使用中のインデックス値を再使用することを回避する。
【００４５】
データ処理ユニットの処理アクティビティは変動し得るが、一実施形態において、前記データ処理ユニットの前記処理アクティビティは、データアドレスを使用した記憶されたデータ値への参照を含み、前記インデックス値は、前記少なくとも１つのデータアドレスに関連付けられたデータアドレスインデックス値である。データアドレスを使用した記憶されたデータ値への参照は、命令がトレースユニットによりトレースされている時間スケールと比較して、相当な時間を要し得る。例えば、命令が、データ処理ユニットに、メモリからデータ値をそのデータアドレスを参照してロードさせる場合、そのデータ値は、いくつものクロックサイクル後まで、データ処理ユニットに返されない可能性がある。この状況では、そのローディング命令に関連した、トレースユニットにより生成されたトレースデータのアイテムは、データ値がデータ処理ユニットに返されるずっと前に生成されていた可能性がある。そのようなシナリオにおいて、データアドレスインデックス値の使用は、記憶されたデータ値を参照するデータアドレスに関連したトレースデータの特定のアイテムが、後に、例えばその参照プロセスが完了した時に識別され得る機構を提供するため、有利である。
【００４６】
いくつかの実施形態において、前記記憶されたデータ値への前記参照は、前記記憶されたデータ値をロードすることを含み、他の実施形態において、前記記憶されたデータ値への前記参照は、前記記憶されたデータ値を記憶することを含む。データ値のローディングおよび記憶は両方とも、上述の長い期間を必要とし得るメモリへのアクセスを必要とする。
【００４７】
いくつかの実施形態において、前記トレースユニットは、前記データアドレスインデックス値を、データアドレスインデックス値記憶テーブルに記憶するように構成される。データアドレスインデックス値記憶テーブルの提供により、データトレースユニットは、後に参照が必要となるまで、例えばそれに関連付けられたロードまたは記憶動作が完了した時に、データアドレスインデックス値を記憶することができる。
【００４８】
上述のように、その動作が完了するのに相当な時間を要し得る、トレースデータの生成されたアイテムが関連付けられ得るある特定の命令が存在する。したがって、そのような命令は、トレースされると、その命令が完了されたとみなされ得る前に生じなければならないさらなるイベントを有さない、他の命令から区別され得る。そのようなイベントが完了するのを待っている状態は、「飛行中」として知られ、いくつかの実施形態において、前記トレースユニットは、選択的に飛行中指標を記憶するように構成され、前記飛行中指標は、前記データアドレスインデックス値に関連付けられた前記記憶されたデータ値への参照がまだ完了しておらず、前記データアドレスインデックス値が飛行中であることを示す。このようにして飛行中指標を記憶するようにトレースユニットを構成することは、トレースユニットが、まだ完了していない動作に関連付けられたそれらのデータアドレスインデックス値を追跡することができる機構を提供する。
【００４９】
そのような実施形態において、トレースユニットは、次のデータアドレスインデックス値を生成する際に、記憶された飛行中指標を参照し、前記記憶された飛行中指標が、前記次のデータアドレスインデックス値がまだ飛行中であることを示す場合、前記次のデータアドレスインデックス値の代わりに代替データアドレスインデックス値を記憶するように構成されてもよい。
【００５０】
トレースユニットは、スペースの制約のために、典型的には、生成することができる有限および制限された範囲のデータアドレスインデックス値を有する。したがって、完了するのに長時間を要する命令に遭遇した場合、その命令に関連付けられたデータアドレスインデックス値の使用は、トレースユニットが、それに利用可能なデータアドレスインデックス値のフルセットを通してサイクルする場合よりも長期間必要とされ得る。したがって、トレースユニットは、まだ飛行中である、すなわちまだ再使用されるべきではないデータアドレスインデックス値に遭遇し得、この状況では、トレースユニットは、単に、所定のシーケンスにおける次のデータアドレスインデックス値を使用しないが、その代わりに代替データアドレスインデックス値を記憶するように構成される。このようにして、データアドレスインデックス値の制限された有限のセットがトレースユニットにより一般に使用され得るが、データアドレスインデックス値がそれらのデータアドレスインデックス値の自然のサイクルよりも長期間使用されることが必要とされる時折の状況にも対応することができる。
【００５１】
代替データアドレスインデックス値は、いくつかの形態をとり得るが、一実施形態において、前記代替データアドレスインデックス値は、データ処理ユニットインデックス値を含み、前記データ処理ユニットインデックス値は、前記データアドレスを参照するために前記データ処理ユニットにより使用される。データ処理ユニット自体は、典型的には、（プロセッササイクル期間において）行われているデータアドレスへの参照と返されているデータ値との間に大幅な遅延が存在する場合であっても、データ値をデータアドレスに関連付けることができるように、そのようなデータアドレスを参照するために使用するインデックスシステムも有する。この状況では、対応するデータ処理ユニットインデックス値（時折「コアキー」と呼ばれる）が、代替データアドレスインデックス値としてトレースユニットにより使用され得る。しかしながら、代替データアドレスインデックス値に使用されるのは「コアキー」自体である必要はなく（「特殊キー」）、一実施形態において、前記代替データアドレスインデックス値は、データ処理ユニットインデックス値との１対１対応を有し、前記データ処理ユニットインデックス値は、前記データアドレスを参照するために前記データ処理ユニットにより使用される。
【００５２】
飛行中指標がトレースユニットにより記憶される場合、いくつかの実施形態において、飛行中指標は、前記データアドレスインデックス値に関連して記憶されるが、他の実施形態において、前記飛行中指標は、前記データ処理ユニットインデックス値に関連して記憶される。
【００５３】
トレースユニットが代替データアドレスインデックス値を利用する場合、いくつかの実施形態において、前記トレースユニットは、前記代替データアドレスインデックス値を示すトレースデータのアイテムを生成するように構成される。トレースユニットにより生成された所定のシーケンスのインデックス値は、トレースデータの所与のアイテムのインデックスがトレースデータのその前のアイテムのインデックス値から推察されることを可能とするが、代替データアドレスインデックス値が使用される場合、これは該当しない。その場合、トレースデータの受信側がこの「ワンオフ」の特殊インデックス値を決定し得るように、トレースユニットは、代替データアドレスインデックス値を示すトレースデータのアイテムを生成することが有利となり得る。
【００５４】
代替データアドレスインデックス値およびデータアドレスインデックス値は、異なるプロトコルに従って符号化され得るが、一実施形態において、前記代替データアドレスインデックス値および前記次のデータアドレスインデックス値は、符号化プロトコルを共有する。例えば、プロトコル内の所定の範囲は、データアドレスインデックス値のために確保され得、一方残りは代替データアドレスインデックス値のために確保される。
【００５５】
いくつかの実施形態において、前記トレースユニットは、命令の初期グループおよび命令の後続グループに関連した前記データ処理ユニットからのマージ指示を受信するように構成され、前記命令の初期グループが実行される場合に前記命令の後続グループが実行されること、ひいては前記命令の初期グループおよび前記命令の後続グループが命令のマージされたグループであることが決定される場合、前記データ処理ユニットは前記マージ指示を発行し、前記トレースユニットは、前記マージ指示に基づいて、前記命令のマージされたグループに関連付けられた前記インデックス記憶ユニットにおける少なくとも１つのマージされたインデックス値を修正するように構成される。
【００５６】
投機的実行のための命令のグループを取り扱うデータ処理ユニットにおいて、グループを構成するものの定義は、典型的には、分岐命令等の命令により決定され、その分岐がどの手法で解消されるかは未知である。しかしながら、そのような分岐がとる方向が予め解消されることが可能であり、例えば、「等しい場合に分岐」命令が依存する値が決定され、この値がその分岐命令が実行される前に変化しないことが知られている場合、可能である。そのような命令が命令の２つのグループ間の境界を定義する場合、この状況では、第１の実行に続いて第２の実行が行われる必要があるため、命令の２つのグループはマージされ得る。データ処理ユニットがそのようなマージ指示を発行する場合、トレースユニットは、今は１つとなった命令の２つのグループに関連付けられたインデックス記憶ユニットに記憶されたインデックス値を修正し得る。例えば、第１および最後のインデックス値が、以前に命令の第１および第２のグループに関連したインデックス記憶ユニットに記憶された場合、これらの命令の２つのグループがマージされる際、インデックス記憶ユニットにおける値は、命令の単一のグループを示すように修正され得、第１のインデックス値は第１のグループから取り出され、最後のインデックス値は第２のグループから取り出される。
【００５７】
いくつかの実施形態において、前記トレースユニットは、トレースデータのマージアイテムを生成するように構成され、前記トレースデータのマージアイテムは、前記命令の初期グループおよび前記命令の後続グループがマージされたことを示す。この状況では、トレースユニットは、トレースデータの受信側に、命令の２つのグループがマージされ、命令の単一のグループとして取り扱われたことを示すために、トレースデータのマージアイテムを生成するように構成され得る。
【００５８】
第２の態様から見れば、本発明は、データ処理ユニットの処理アクティビティを示すトレースデータのアイテムを生成するように構成されるトレースユニットであって、インデックス値を、トレースユニットにより生成されたトレースデータのアイテムの少なくともサブセットに関連付けるためのトレースインデックス手段を備え、前記トレースインデックス手段は、所定のシーケンスのインデックス値の１つとして前記インデックス値を生成するように構成され、前記所定のシーケンスにおけるｎ＋１番目のインデックス値は、前記所定のシーケンスにおけるｎ番目のインデックス値のみから決定され得る、トレースユニットを提供する。
【００５９】
第３の態様から見れば、本発明は、データ処理ユニットの処理アクティビティを示すトレースデータのアイテムを生成する方法であって、前記トレースデータのアイテムを生成するステップと、インデックス値を、生成されたトレースデータのアイテムの少なくともサブセットに関連付けるステップと、所定のシーケンスのインデックス値の１つとして前記インデックス値を生成するステップと、を含み、ｎ＋１番目のインデックス値は、前記所定のシーケンスにおけるｎ番目のインデックス値のみから決定され得る方法を提供する。
例示のみを目的として、添付の図面に示されるような本発明の実施形態を参照しながら、本発明をさらに説明する。
【図面の簡単な説明】
【００６０】
【図１】一実施形態によるデータ処理ユニットおよび関連付けられたトレースユニットを示す概略図である。
【図２】図１のトレースユニットをより詳細に示す概略図である。
【図３】一実施形態によるトレースユニットがとる一連のステップを示す図である。
【図４】図１のトレースユニットの代替構成を示す概略図である。
【図５】一実施形態によるシーケンシャルキーおよび特殊キーの使用を示す図である。
【図６】一実施形態によるインデックス記憶ユニットを示す概略図である。
【図７】一実施形態によるインデックス記憶ユニットを示す概略図である。
【図８】一実施形態によるトレースユニットがとる一連のステップを示す図である。
【図９】１２個のシーケンシャルキーおよび４個の特殊キーに分割された１６個のキーのプロトコルスペースを示す図である。
【発明を実施するための形態】
【００６１】
図１は、本発明によるトレースユニットを含むデータ処理システムを概略的に示す。データ処理システムは、プロセッサコア１００（データ処理ユニット）と、プロセッサコア１００の処理アクティビティを監視し、コアの処理アクティビティを示すトレースデータのアイテムを（トレースストリームとして）生成するように構成される、トレースユニット１１０とを備える。プロセッサコア１００は、フェッチユニット１２０および実行ユニット１３０を備える。フェッチユニット１２０は、メモリ（図示せず）から命令をフェッチし、実行のためにそれらを実行ユニット１３０に渡す。具体的には、プロセッサコア１００は、投機的でアウトオブオーダー（ｏｕｔ−ｏｆ−ｏｒｄｅｒ）プロセッサであり、したがってフェッチユニット１２０は、必要であると予測される（ただし保証されない）、実行ユニット１３０に対する命令をフェッチするように構成される。実行ユニット１３０は、これらの命令を投機的に実行し、後に、その投機的に実行された命令が実際に実行されるべきか否かが知られた場合に、それらをキャンセルまたは確定する。
【００６２】
トレースユニット１１０は、命令の投機的実行を含むプロセッサコア１００の処理アクティビティを示すトレースデータのアイテムを生成するように構成される。原理的に、トレースユニット１１０が、投機的に実行された命令に関連して生成されたトレースデータのアイテムをバッファリングし、次いで投機が解消したら単にそれらを出力トレースストリームとしてリリースすることは可能であるが、これには、トレースユニット１１０内の貴重な記憶スペースが必要であり、好ましくはこれが回避される。代わりに、図１に示される実施形態において、トレースユニット１１０はまた、トレースデータを投機的に生成するように、すなわち、投機的に実行された命令を示すトレースデータのアイテムを生成し、次いで、投機が正しいか否かが知られたら、トレースデータのそれらのアイテムをキャンセル／確定するように構成される。これを行うために、トレースユニット１１０には、さらに、トレースインデックスユニット１４０が提供される。インデックスユニット１４０は、インデックス値を、トレースユニット１１０により生成されたトレースデータのアイテムの少なくともサブセットに関連付けるように構成される。具体的には、インデックスユニット１４０は、インデックス値を所定のシーケンスのインデックス値として生成するように構成され、ｎ＋１番目のインデックス値は、所定のシーケンスにおけるｎ番目のインデックス値から決定され得る。示された実施形態において、この機能性は、図２を参照してさらに説明されるように、インデックスユニット１４０におけるカウンタにより提供される。
【００６３】
図２は、図１に示されるトレースユニット１１０をより詳細に概略的に示す。トレースユニット１１０は、トレースユニット１１０の全体的な動作を制御するトレース制御ユニット２００を備える。トレースユニット１１０は、さらに、トレースユニット１１０が、生成するトレースデータのアイテム（のいくつか）に関連付けることができる、所定のシーケンスのインデックス値を提供する、カウンタ２１０を備える。トレースユニット１１０はまた、カウンタ２１０により生成されたインデックス値が記憶され得るインデックス記憶ユニット２２０を備える。インデックス記憶ユニット２２０は、第１のインデックス記憶ユニット２３０および最後のインデックス記憶ユニット２４０を備える。投機的に実行された命令のグループにおける第１の命令に対して、トレースユニット１１０は、カウンタ２１０からの現在のカウンタ値を、グループ番号によりインデックス化された第１のインデックス記憶ユニット内に記憶するように構成される。逆に、新しいグループが開始される場合、現在のカウンタ値は、最後のインデックス記憶ユニット２４０に記憶される。
【００６４】
示された実施形態において、インデックス記憶ユニット２２０は、命令のグループに関してプロセッサの最大投機深度に対応するのに十分なエントリを有する。プロセッサの最大投機深度は、インデックス記憶ユニットが保持する必要があるエントリの最大数を表すが、これは、その深度を超えると、プロセッサは、命令のグループを確定またはキャンセルし、これによりインデックス記憶ユニット内のエントリが解消されなければならないためである。また、示された実施形態において、プロセッサにより投機的に実行された命令の各グループは、最大で１つの分岐命令および１つのロード（または記憶）命令を有することができる。他の全ての命令は、これらの命令の指示を含むトレースストリームから推察され得るため、命令のグループ当たり最大２つの命令トレースアイテムが生成される。さらに、これにより、インデックス記憶ユニット２２０における所与のエントリに対して、最後のインデックス記憶ユニット２４０における値は、第１のインデックス記憶ユニット２３０における値とは最大２カウント異なってもよいことになる。したがって、最後のインデックス値を第１のインデックス値からの２ビットオフセット（すなわち、＋０、＋１または＋２）として記憶することにより、貴重な記憶スペースが節約される。トレースユニットは、さらに、最も古い未確定記憶ユニット２５０を備えるが、その機能については後に説明する。点線の四角２５２および２５４を含むトレースユニット１１０の変形例についても、後に説明する。
【００６５】
トレースユニット１１０により実行される一連のステップが、図３に概略的に示される。フローは、プロセッサコア１００からの新たなイベントを待つステップ３００から開始し、このフロー自体はイベントが受信されるまでステップ３００をループする。新たなイベントが受信されると（すなわち、次の命令がコアにより実行されると）、フローはステップ３１０に進み、イベントが命令の新たなグループの一部であるかどうかが決定される。イベントが命令の新たなグループの一部である場合、フローはステップ３２０に進み、インデックス記憶ユニット２２０（「テーブル」）の第１のインデックス記憶ユニット２３０におけるエントリが、新しいグループ番号Ｋに対応するエントリにおいて、現在のカウンタ値で更新される。次に、ステップ３３０において、このイベントが「関心があり」かつトレースされるかどうかが決定される。「関心がある」命令は、分岐、ロードおよび記憶命令である（上述のように、これらは命令のグループのトレースに関して重要な命令であるため）。命令は、トレースユニットにより現在フィルタリングにより除去されていない場合、トレースされる。イベント（すなわち命令）が、関心がありかつトレースされる場合、フローはステップ３４０に進み、カウンタ２１０が増分され、ステップ３５０において、イベントがトレースユニット１１０のトレースストリームに出力される。ステップ３６０において、グループＫに対応する最後のインデックス記憶ユニット２４０のエントリが、カウンタ２１０の現在値で更新される。次いで、フローは、ステップ３００に戻る。
【００６６】
ここで、トレースユニット１１０の動作、具体的にはインデックス記憶ユニット（「追跡テーブル」としても知られる）２２０の動作を、以下の表１を参照して説明する。表１は、プロセッサコア１００が命令Ａ、ＢおよびＣのグループを投機的に実行し、その後グループＢがキャンセルされるべきであり、グループＡが確定されるべきであることを示す状況において、カウンタ値、最も古い未確定値、および追跡テーブルがトレースユニット１１０において更新される様式を示す。
【００６７】
グループＡは、「関心があり」現在トレースされているロード（ＬＤＲ）命令から開始する。したがって、グループＡに対応する第１のインデックスユニット２３０のエントリ（「Ａ．ｆｉｒｓｔ」）は、現在のカウンタ値０を記憶し、次いでカウンタが１に増分される。最後に、グループＡに対応する最後のインデックスユニット２４０のエントリ（「Ａ．ｌａｓｔ」）は、現在のカウンタ値１を記憶する。グループＡにおける次の命令は、「関心がある」でもなく追跡もされない移動命令（ＭＯＶ）である。グループＡの最後の命令は、「関心があり」かつ追跡される、等しい場合分岐（ＢＥＱ）命令であるため、カウンタは２に増分される。次いで、グループＡに対応する最後のインデックスユニット２４０のエントリ（「Ａ．ｌａｓｔ」）は、現在のカウンタ値２で更新される。実際には、各命令に対する最終ステップは、常に、現在のグループに対応する最後のインデックスユニット２４０のエントリが、現在のカウンタ値で更新されることであることに留意されたい。当然ながら、これは、カウンタがその命令に対し更新された場合に限り、任意の影響を有する。このようにして「最後の」値を更新することは、表１に示される残りの命令に対しては明示的に説明されない。
【００６８】
グループＢは、「関心がある」でもなく追跡もされないＡＤＤ命令から開始するが、新しいグループにおける第１の命令として、現在のカウンタ値２を、第１のインデックス値記憶ユニットの対応するエントリに記憶させる（すなわち、Ｂ．ｆｉｒｓｔ＝２）。グループＢにおける第２の命令は、同様に「関心がある」でもなく追跡もされないＳＵＢ命令であるが、いかなる値も更新しない。
【００６９】
グループＣは、「関心があり」かつ追跡される記憶（ＳＴＲ）命令から開始し、したがって、現在のカウンタ値が、第１のインデックス記憶ユニットのエントリのＣ．ｆｉｒｓｔに記憶され、次いでカウンタが３に増分される。グループＣの第２の命令は、同じく「関心があり」かつ追跡される、等しくない場合分岐（ＢＮＥ）命令であるため、カウンタは４に更新される。
【００７０】
次に、プロセッサコア１００は、グループＢの投機的実行が不正確であり、したがってグループＢおよびＣがキャンセルされるべきであることを示す。それに応答して、トレースユニット１１０（トレース制御ユニット２００により制御される）は、現在４であるカウンタ２１０の現在のカウント値、および第１のインデックス記憶ユニット２３０の対応するエントリ（すなわちＢ．ｆｉｒｓｔ）に記憶された２の値を参照する。したがって、トレースユニット１１０は、トレースデータの２つのアイテムがキャンセルされるべきであることを決定し（４−２）、この事実を示すトレースデータのアイテムを生成する。次いで、カウンタ２１０は、２にリセットされる（以前は４であり、２つのアイテムがキャンセルされたため）。
【００７１】
次に、プロセッサコア１００は、命令グループＡの投機的実行が正しいことが決定されたため、この命令のグループが確定されるべきであることを示す。それに応答して、トレースユニット１１０（トレース制御ユニット２００の制御下）は、最も古い未確定記憶ユニット２５０に記憶された値（現在０）、およびこのグループに対応する最後のインデックス記憶ユニット２４０におけるエントリ（すなわちＡ．ｌａｓｔ）に記憶された２の値を参照する。したがって、トレースユニット１１０は、トレースデータの２つのアイテムが確定されるべきであることを決定し（２−０）、この事実を示すトレースデータのアイテムを生成する。次いで、最も古い未確定記憶ユニット２５０に記憶された値は、このグループに対して読み出された「最後の」値、すなわちこの例では２にリセットされる。
【００７２】
表１を参照して説明される実施形態において、キャンセルおよび確定は、イベントの数を参照することにより実行され、生成されたトレースデータのアイテムは、キャンセルまたは確定されるべきイベントの数を示すことが留意される。代替の実施形態において、トレースユニットは、イベント数を参照して、トレースのキャンセル／確定アイテムを生成することができる。この場合、トレースのキャンセルアイテムに対しては、イベント数は、「第１の」値、すなわち、第１のインデックス値記憶ユニットの対応するエントリから取り出され、トレースの確定アイテムに対しては、イベント数は、「最後の」値、すなわち、最後のインデックス値記憶ユニットにおける対応するエントリから取り出される。ここで、イベント数による確定およびキャンセルは、必要とするハードウェアがより少ないと考えることができるが（減算が必要でないため）、いくつかのイベントによりキャンセル／確定を示す場合、これは、多くの場合、一般に先行ゼロを有するため、圧縮され得ることに留意されたい。「イベントの数」または「イベント数」により確定するかキャンセルするかの選択は、システム要件、すなわち、トレースユニットにおけるより少ないハードウェアまたはトレースストリームにおけるより少ない帯域幅がより重要であるとみなされるか否かに依存して決定され得る。
【表１】
0005512041.tif 000002
【００７３】
ここで、以下の表２を参照してさらなる例を説明するが、トレースユニットは、さらに、例において、記憶（ＳＴＲ）命令をトレースしないことにより与えられる、生成されたトレースをフィルタリングする。表２に示されるグループＡおよびＢに対する値は、表１に示される値と同じである。しかしながら、グループＣの第１の命令に対して、ＳＴＲ命令はトレースされず、したがって、カウントは増分されない。しがたって、グループＣにおけるＢＮＥ命令（トレースされる）に遭遇した場合のみ、カウントは３に増分される。
【００７４】
したがって、プロセッサコアが「Ｂのキャンセル」メッセージを発行すると、トレースユニット１１０は、現在のカウントが３、Ｂ．ｆｉｒｓｔが２であり（表１の例の場合のように）、したがって、トレースの１つのアイテムのみ（３−２）がキャンセルされるべきであると決定する。同様に、カウントは、１だけ（２の値に）減少される。プロセッサコアが「Ａの確定」メッセージを発行すると、表１の場合のように、最も古い未確定カウントが０、Ａ．ｌａｓｔ＝２であり、したがって、トレースの２つのアイテムが確定される。次いで、最も古い未確定カウントは、２に更新される。
【表２】
0005512041.tif 000003
【００７５】
表１および２を参照して説明された命令の各グループは、グループとして投機的に実行され、次いでグループとして確定またはキャンセルされる異なるグループとして残ってもよいが、いくつかの実施形態において、命令の２つのグループは、実行後に互いにマージされてもよい。
【表３】
0005512041.tif 000004
【００７６】
表３は、そのような状況において、インデックス記憶ユニット（「追跡テーブル」）２２０における値における値がどのように使用されるかを示す。この例において、グループＢにおけるＢＮＥ命令は、グループＡにおけるＬＤＲ命令の前に解消される。この状況では、プロセッサコア１００はこの事実を示し、トレースユニットにグループＢをグループＡにマージするように命令する。これは、Ｂ．ｌａｓｔの値をＡ．ｌａｓｔにコピーすることによりなされる。換言すれば、グループＡに対応するトレース値のセットは、１だけ増加する（ＢＮＥ命令のトレースアイテムは今、グループＡの開始を形成するＬＤＲ命令の成功裏の実行に必然的に従うトレースアイテムのセットの一部を形成するため）。このマージが実行されたら、グループラベルＢは、次いで再使用が可能であり、グループＣの後の命令の次のグループのラベルとして使用される。この新たなグループＢ（ＭＯＶおよびＢＬＴが実行される）において、ＢＬＴのみがトレースされる。
【００７７】
より単純な実施形態において、インデックス記憶ユニットは、ＦＩＦＯユニットとして配設され得る。これは、図４に概略的に示され、トレースユニット１１０は、ＦＩＦＯ２６０の形態のトレースインデックスユニットを備える。この単純化された配設の１つの利点は、インデックス記憶ユニット２６０の各エントリに記憶される完全なインデックス値を必要としないことである。
【００７８】
グループは、トレースユニット１１０により受信されると、ＦＩＦＯ２６０の最後に追加される。次いで、グループが確定されると、グループはＦＩＦＯの正面から削除され、グループがキャンセルされると、グループはＦＩＦＯの最後から取り出される。ＦＩＦＯ内の各エントリは、そのグループにおける関心のある命令の数を示す小さな識別子を含む。最大２つの関心のある命令が任意のグループにあってもよい示された例において、識別子は、０、１または２を示す２ビットフィールドである。各エントリがＦＩＦＯから取り出されると（確定またはキャンセル時）、確定またはキャンセルするトレースイベントの数は、単純に、ＦＩＦＯ内のエントリの識別子により表現される数である。複数のグループが確定またはキャンセルされると、識別子は、削除されたＦＩＦＯエントリから加えられる。
【００７９】
ここで、図２にさらに示されるトレースユニット１１０の構成の変形例（点線の四角）を説明する。所与の時点において、まだ確定またはキャンセルされていない投機的トレースデータのいくつかのアイテムが存在する。この数は、ゼロからプロセッサの最大投機深度までの範囲内にある。また、通常は確定トレースデータをすぐに出力する必要はないことに留意されたい。確定カウント出力がプロセッサにより生成されたものを超えない限り、確定を遅延させる、確定カウントを加えることによって確定を結合する、または確定を分割することが可能である。
【００８０】
これらの因子は、確定がトレースストリームに明示的に出力されるのではなくむしろ暗示されるシステムを形成するために使用することができ、これによりトレース効率がさらに改善される。すぐに出力される代わりに、まだ出力されていない確定カウントの総数を示す合計が（「まだ出力されていない確定」記憶ユニット２５２に）維持される。投機的トレースデータアイテムの現在数の第２のカウントが（「投機深度」記憶ユニット２５４に）維持される。トレースデータアイテムが出力される場合、投機深度は１だけ増分される。確定カウントが出力される場合、投機深度は、確定数だけ減少される。キャンセルカウントが出力される場合、投機深度は、キャンセル数だけ減少される。
【００８１】
より多くのトレースデータが出力されると、投機深度は、最大投機深度に達する。これが生じた場合、カウント＝１の確定が暗示される。同時に、投機深度が１だけ減少される。総確定カウントもまた１だけ減少される。
【００８２】
トレースユニットが、トレースデータの生成を停止するように命令された場合、トレースユニットは、以下を行うように構成され得る。
１）現在の未出力の総確定カウントを出力し、任意の後続の確定カウントがすぐに出力される、または、
２）全てのトレースデータが確定またはキャンセルされるのを待ち、次いで総確定カウントを出力する。
【００８３】
また、本発明の技術は、特にデータ値およびデータアドレスに関して、アウトオブオーダー（ｏｕｔ−ｏｆ−ｏｒｄｅｒ）プロセッサへの具体的な適用性が見出される。アウトオブオーダー（ｏｕｔ−ｏｆ−ｏｒｄｅｒ）プロセッサにおけるトレースデータ（命令とは対照的に）は、アウトオブオーダー（ｏｕｔ−ｏｆ−ｏｒｄｅｒ）プロセッサが、異なる順番でデータアドレスに対してデータ値を生成または受信するという追加的な複雑性に対処しなければならない。本発明により提供されるトレースデータのアイテムのインデックス化は、データ値がそのデータアドレスと一致することを可能にする。しかしながら、トレースデータ値およびアドレスに関するさらなる困難は、その親命令に関してデータアドレスがどれほど遅くなり得るかに対して制限が課される可能性があるものの、これはその親データアドレスに関するデータ値には現実的ではないということである。例えば、読み出しは、完了するのに数百サイクルを要する可能性があり、その時に、任意の数の命令が実行されている可能性がある（これらの命令がいずれも読み出し値を必要としない限り）。
【００８４】
本発明の技術によれば、トレースユニットにおけるトレースインデックスユニットは、データアドレスが参照され得るように、インデックス値をそれらのデータアドレスに関連付ける。図５において、これらのインデックス値は、より低い数のラインにおいて、「データアドレスキー」である。これらのキーは一般にシーケンシャルであること、さらに、キーは、７の値に達した後０に戻ることが分かる。一般に、関連付けられたデータ値は、キーの後すぐに利用可能であり、したがって、データキーのシーケンスが戻った際に、キーは競合なしに再使用され得る。しかしながら、データ転送が完了するのに長時間を要する場合、トレースキーが解除される前にそれを再使用する可能性がある。これは、図５において、対応するデータ値が異常に長い時間受信されていないデータアドレスキー番号１により示される。したがって、データアドレスキー１が、図５において２回目に使用されるべきである時までに、それはまだ「飛行中」であり、したがって使用することができない。代わりに、トレースユニットは、シーケンシャルキー１の代わりに特殊キー（キーＡ）を使用するように構成される。この実施形態において、この特殊キーＡは、実際には、プロセッサ１００が、データ値が返されるのを待っている間このデータアドレスを追跡するために使用するコアキーである。他の実施形態において、特殊キーは、そのアルファベットがコアキーとの１対１対応を有する限り、異なる「アルファベット」から導出することができる。図５はまた、いくつかのシーケンシャルキーは、プロセッサにより明示的に無効化されている場合、対応するデータ値を有さなくてもよいことを示している（例えば、シーケンシャルキー３の第１のインスタンス）。コアキーが使用される様式に関するコア内の規則により（コアキーもまた一意的に使用されなければならない）特殊キーは飛行中再使用することができないため、特殊キーが飛行中であるかどうかをチェックする必要はないことに留意されたい。
【００８５】
図６は、データアドレスキーがコアキーにより参照されるキー追跡テーブルの一実施形態を概略的に示す。ここで、コアキーβは、シーケンシャルキーＤ１、Ｄ２およびＤ３が帰属する３つのデータアドレスをインデックス化するためにプロセッサコアにより使用される。次のデータアドレスは、コアキーβにより使用され、トレースユニットは、次のシーケンシャルキー、すなわちＤ４がコアキーαによりまだ使用されていること識別し、したがって、コアキーβ自体を現在のデータアドレス用のインデックスキーとして使用する。トレースユニットは、シーケンシャルインデックスキーＤ４に関連したフラグセットが、Ｄ４がまだ飛行中であることを示す、関連付けられた飛行中記憶ユニットを参照することにより、シーケンシャルキーＤ４がまだ飛行中であることを識別する。
【００８６】
代替の実施形態を図７に示すが、飛行中指標がコアキーにより記憶されている。この配設は、シーケンシャルキー（Ｄ１、Ｄ２等）が使用される場合、キー追跡テーブルにおいて完全連想検索が実行されることを必要とする。そのシーケンシャルキーに対する一致が見つかり、対応するコアキーフラグが設定された場合、シーケンシャルキーが飛行中であることが決定される。
【００８７】
図８は、一実施形態におけるトレースユニットにより行われる一連のステップを概略的に示す。フローは、トレースユニットが新しいデータアドレスおよび関連付けられたコアキーをプロセッサコアから受信するステップ４００から開始する。次いで、ステップ４１０において、トレースユニットは、次のシーケンシャルキーを計算し、ステップ４２０において、そのキーがキー追跡テーブルにおいて現在「飛行中」であるかが決定される。飛行中でない場合、フローはステップ４３０に進み、当該次のシーケンシャルキーがキー追跡テーブルに追加され、フローはステップ４００に戻る。しかしながら、ステップ４２０において、次のシーケンシャルキーが現在飛行中であることが決定された場合、その代わりにステップ４４０において特殊キーがキー追跡テーブルに追加され、ステップ４５０において、その特殊キーの値がトレースストリームに出力される。次いで、フローは、ステップ４００に戻る。次のシーケンシャルキーの代わりに特殊キーが使用された場合、一般に、ステップ４１０の次の反復において当該次のシーケンシャルキーをすぐにリトライしないことが好ましいことに留意されたいが、これは、１回の反復において使用中であることが判明した場合、次の反復においてもまだ使用中である可能性が高いためである。
【００８８】
一般に、利用可能なシーケンシャルキーが多い程、特殊キーが必要とされる可能性は低いことが認識される。任意の数のシーケンシャルキーがあってもよいが、Ｎから３Ｎの範囲（Ｎ個のコアキーが存在する）が一般に適当である。シーケンシャルキーはデータアドレスとともに出力される必要はないことに留意されたいが、これは、その値が予測可能であり、トレースユニットにより生成される所定のシーケンスのインデックス値の１つであるためである。
【００８９】
さらに、シーケンシャルキーおよび特殊キーは、完全に別個のプロトコル符号化を使用し得るが、いくつかの実施形態において、重複が存在しない限り、同じプロトコル符号化が使用されてもよいことに留意されたい。例えば、０〜１５の値の範囲において、シーケンシャルキーは０〜１１の値を使用することができ、特殊キーは１２〜１５の値を使用することができる。トレースデータの受信側は、当然ながら、どの規則が使用されているかを知る必要がある。図９は、１２個のシーケンシャルキーおよび４個の特殊キーに分割された１６個のキー（０〜１５）のプロトコルスペースを示す。
【００９０】
本明細書において特定の実施形態を説明したが、本発明はこれに限定されず、本発明の範囲内で多くの修正および追加が行われてもよいことが認識される。例えば、本発明の範囲から逸脱せずに、独立請求項の特徴に対し、後続の従属請求項の特徴の様々な組み合わせがなされてもよい。
【図１】
0005512041.tif 000005
【図２】
0005512041.tif 000006
【図３】
0005512041.tif 000007
【図４】
0005512041.tif 000008
【図５】
0005512041.tif 000009
【図６】
0005512041.tif 000010
【図７】
0005512041.tif 000011
【図８】
0005512041.tif 000012
【図９】
0005512041.tif 000013