少なくとも1つの命令ストリームを実行する少なくとも1つのプロセッサの処理活動を指示するトレースデータ項目を生成するトレースユニットであって、前記少なくとも1つの命令ストリームは複数の命令グループを備え、前記少なくとも1つのプロセッサは前記命令の少なくとも一部を推測的に実行し、前記トレースユニットは、現在のトレース制御データによって制御され前記少なくとも1つのプロセッサの挙動を監視するトレース回路と、前記実行される命令グループのうち該当する命令グループに関連する前記トレース制御データの少なくとも一部を蓄積するデータストアと、を備え、前記トレース回路は、前記命令グループの実行の検出に応じて前記トレース制御データを前記データストアに蓄積するよう構成され、前記トレース回路は、前記推測的に実行された少なくとも1つの命令グループをキャンセルする前記少なくとも1つのプロセッサを検出することに反応し、前記データストアに蓄積された前記トレース制御データの少なくとも一部を取り出し、且つ前記取り出されたトレース制御データにより前記トレース回路を制御することを特徴とするトレースユニット。前記トレースユニットはさらに、前記トレース回路を制御するため前記現在のトレース制御データを蓄積する蓄積回路を備え、前記トレース回路は、前記推測的に実行された少なくとも1つの命令グループをキャンセルする前記少なくとも1つのプロセッサを検出することに応じ、前記取り出されたトレース制御データを前記蓄積回路に蓄積することを特徴とする請求項1に記載のトレースユニット。前記トレース制御データは、前記該当する命令グループを識別する識別子とともに、前記データストアに蓄積されることを特徴とする請求項1に記載のトレースユニット。前記トレース回路は、前記キャンセルされた命令グループの前記データストアに蓄積された前記トレース制御データの前記少なくとも一部を取り出すよう構成されることを特徴とする請求項1に記載のトレースユニット。前記命令グループは、前記グループ内の最初の命令が実行されると前記グループ内の前記命令の全てが実行するようグループ分けされた命令を備えることを特徴とする請求項1に記載のトレースユニット。前記トレースユニットは、アサートされたtraceenable信号に反応し前記トレース回路による前記少なくとも1つのプロセッサの前記挙動の監視を可能にし、且つアサートされていない前記traceenable信号に反応し前記トレース回路による前記挙動の監視を禁止することを特徴とする請求項1に記載のトレースユニット。前記トレース制御データはスティッキー値を備え、前記トレース回路は所定値を有する前記スティッキー値に反応し、traceenable信号がenabled値を有するか否かにかかわらず、後に実行されるトレース有効命令のトレース値を出力し、且つ前記スティッキー値をリセットし、トレース有効命令はトレースデータ項目の出力をトリガする命令であることを特徴とする請求項6に記載のトレースユニット。前記トレース回路は、トレースデータ項目の出力をトリガするトレース有効命令ではない命令の実行を検出することに反応し、前記トレース制御データにて前記スティッキー値を設定することを特徴とする請求項7に記載のトレースユニット。前記トレース回路は、トレースデータ項目の出力をトリガするトレース有効命令ではない前記命令グループの1命令グループにおける最終命令の実行を検出することに反応し、前記トレース制御データにて前記スティッキー値を設定し、且つ前記設定されたスティッキー値を前記後続命令グループの前記データストアに蓄積することを特徴とする請求項8に記載のトレースユニット。前記トレース制御データはprevious-traced値を備え、前記トレース回路は、先行グループの最終命令が実行されるときにトレースがイネーブルされていないことを検出することに反応し、前記後続命令グループのため前記previous-traced値を設定し、前記トレース回路は、推測的に実行された命令グループをキャンセルする前記プロセッサと、前記キャンセルされたグループとの関連で蓄積され設定される前記previous-traced値とに反応し、前記トレースがオンになることを指示するトレースエレメントを出力することを特徴とする請求項1に記載のトレースユニット。前記トレース制御データはinitial-traced値を備え、前記トレース回路は、命令グループの実行中に命令アドレスを指示するトレース状態エレメントの出力に反応し、前記グループの前記initial-traced値を設定し、前記トレース回路は、前記initial-traced値が設定された命令グループをキャンセルする前記プロセッサを検出することに応じ、前記キャンセル後に実行された前記命令の命令アドレスを指示するさらなる状態エレメントを出力することを特徴とする請求項1に記載のトレースユニット。前記トレース制御データはtraced-interesting値を備え、前記traced-interesting値は、グループのトレースエレメントが出力されることに応じて設定され、且つグループのトレースエレメントが出力されない場合にクリアになることを特徴とする請求項1に記載のトレースユニット。前記トレース制御データはtracemultiple値を備え、前記値が設定される場合は前記グループがトレースエレメントを生成する複数のトレース有効命令を備えていることを意味し、前記値が設定されない場合は前記グループが1個又はゼロ個のトレース有効命令を備えていることを意味することを特徴とする請求項1に記載のトレースユニット。前記トレース制御データはtracemultiple値を備え、前記値は、トレースエレメントを生成する前記グループ内のトレース有効命令数を指示することを特徴とする請求項1に記載のトレースユニット。前記トレースユニットは、インデックス値を生成し、且つ前記命令グループの各々に割り振られた前記インデックス値を蓄積するよう構成され、前記インデックス値はトレースエレメントが生成されるたびに更新されることを特徴とする請求項1に記載のトレースユニット。前記トレースユニットは前記インデックス値を生成するカウンタを備え、前記トレース回路は、前記グループの実行開始時の前記カウンタ値を指示する最初カウンタ値と、前記グループの実行終了時の前記カウンタ値を指示する最後カウンタ値とのうち、少なくとも一方を、各命令グループの前記データストアに蓄積することを特徴とする請求項15に記載のトレースユニット。前記トレースユニットは前記インデックス値を生成するカウンタを備え、前記トレース回路は、前記グループの実行開始時の前記カウンタ値を指示する最初カウンタ値と、前記グループの実行終了時の前記カウンタ値を指示する最後カウンタ値とを、各命令グループの前記データストアに蓄積することを特徴とする請求項15に記載のトレースユニット。前記トレース回路は、推測的に実行された選択命令グループがキャンセルされたことを指示するキャンセル指示を前記データ処理装置から受信し、前記キャンセルされた選択命令グループを指示するキャンセルトレース項目を生成し、且つ前記現在カウンタ値と、前記キャンセルされたグループの実行開始時の前記カウンタ値との差に関する情報を、前記キャンセルトレース項目に含めるよう構成されることを特徴とする請求項17に記載のトレースユニット。前記トレース制御データはtraced-interesting値を備え、前記traced-interesting値は、グループのトレースエレメントが出力されることに応じて設定され、且つグループのトレースエレメントが出力されない場合にクリアになり、前記トレース回路は、前記traced-interesting値を頼りに前記差に関する前記情報を判断するよう構成されることを特徴とする請求項18に記載のトレースユニット。前記トレースユニットは、推測的に実行された選択命令グループがコミットされたことを伝える前記データ処理装置からのコミット指示の受信に反応し、前記選択グループを指示するコミットトレース項目を生成し、且つ前記現在カウンタ値と前記選択グループの前記最後カウンタ値との差に関する情報を含むようにすることを特徴とする請求項16に記載のトレースユニット。前記トレース制御データはtraced-interesting値を備え、前記traced-interesting値は、グループのトレースエレメントが出力されることに応じて設定され、且つグループのトレースエレメントが出力されない場合にクリアになり、前記トレース回路は、前記traced-interesting値を頼りに前記差に関する前記情報を判断するよう構成されることを特徴とする請求項20に記載のトレースユニット。前記トレース制御データは前記グループのtracestart/stop値を備え、前記tracestart/stop値はtraceenableが設定されるか否かに影響し、前記tracestart/stop値は前記少なくとも1つのプロセッサの検出される所定挙動に応じて設定されることを特徴とする請求項1に記載のトレースユニット。命令ストリームを実行するデータ処理装置と、前記データ処理装置を監視する請求項1に記載のトレースユニットと、を備えることを特徴とするデータ処理ユニット。少なくとも1つの命令ストリームを実行する少なくとも1つのプロセッサの処理活動を指示するトレースデータ項目を生成する方法であって、前記少なくとも1つの命令ストリームは複数の命令グループを備え、前記少なくとも1つのプロセッサは前記命令の少なくとも一部を推測的に実行し、前記方法は、現在のトレース制御データにより制御されるトレース回路を使用し前記少なくとも1つのプロセッサの挙動を監視するステップと、前記実行される命令グループの1命令グループに関連する前記トレース制御データの少なくとも一部を蓄積するステップと、前記推測的に実行された少なくとも1つの命令グループをキャンセルする前記少なくとも1つのプロセッサを検出することに応じ、前記キャンセルされる推測実行命令の直前に実行された前記命令グループの前記データストアに蓄積された前記トレース制御データの少なくとも一部を取り出すステップと、前記取り出されたトレース制御データにより前記トレース回路を制御するステップと、を備えることを特徴とする方法。少なくとも1つの命令ストリームを実行する少なくとも1つのプロセッサの処理活動を指示するトレースデータ項目を生成するトレース手段であって、前記少なくとも1つの命令ストリームは複数の命令グループを備え、前記少なくとも1つのプロセッサは前記命令の少なくとも一部を推測的に実行し、前記トレース手段は、現在のトレース制御データにより制御される前記少なくとも1つのプロセッサの挙動を監視するトレース監視手段と、前記実行される命令グループのうち該当する命令グループに関連する前記トレース制御データの少なくとも一部を蓄積するデータ蓄積手段と、を備え、前記トレース監視手段は、前記命令グループの実行の検出に応じ、前記トレース制御データの前記少なくとも一部を前記データ蓄積手段に蓄積し、前記トレース監視手段は、前記推測的に実行された少なくとも1つの命令グループをキャンセルする前記少なくとも1つのプロセッサを検出することに反応し、前記キャンセルされた推測実行命令の前に実行された前記命令グループの前記データ蓄積手段に蓄積された前記トレース制御データの少なくとも一部を取り出し、且つ前記取り出されたトレース制御データにより前記トレース監視手段を制御することを特徴とするトレース手段。推測的に実行される命令をトレースする場合、トレースストリーム出力を実際にコミットされる命令に整合させることは必ずしも容易ではない。第1の態様から見て、本発明は、少なくとも1つの命令ストリームを実行する少なくとも1つのプロセッサの処理活動を指示するトレースデータ項目を生成するトレースユニットを提供し、前記少なくとも1つの命令ストリームは複数の命令グループを備え、前記少なくとも1つのプロセッサは前記命令の少なくとも一部を推測的に実行し、前記トレースユニットは、現在のトレース制御データによって制御され前記少なくとも1つのプロセッサの挙動を監視するトレース回路と、前記実行される命令グループのうち該当する命令グループに関連する前記トレース制御データの少なくとも一部を蓄積するデータストアと、を備え、前記トレース回路は、前記命令グループの実行の検出に応じて前記トレース制御データを前記データストアに蓄積するよう構成され、前記トレース回路は、前記推測的に実行された少なくとも1つの命令グループをキャンセルする前記少なくとも1つのプロセッサを検出することに反応し、前記データストアに蓄積された前記トレース制御データの少なくとも一部を取り出し、且つ前記取り出されたトレース制御データにより前記トレース回路を制御する。本発明では、推測的命令を実行するデータ処理装置をトレースすると、推測的に実行された命令が後ほどキャンセルされた場合に、トレースデータ出力を理解することが困難になる場合があると認識する。本発明は、実行される各命令グループにつきトレース制御データをデータストアに蓄積することでこの問題に対処するものであり、こうすることで推測的に実行された命令がキャンセルされる場合には、以前に使われていたトレース制御データの値をデータストアから取り出すことができる。従って、当時現行であったトレース制御データを復元することができる。一部の実施形態において、前記トレースユニットはさらに、前記トレース回路を制御するため前記現在のトレース制御データを蓄積する蓄積回路を備え、前記トレース回路は、前記推測的に実行された少なくとも1つの命令グループをキャンセルする前記少なくとも1つのプロセッサを検出することに応じ、前記取り出されたトレース制御データを前記蓄積回路に蓄積する。トレース制御データはトレース回路の制御に用いる論理状態でよいが、一部の実施形態ではこれが蓄積回路に蓄積される。一部の実施形態において、前記トレース制御データは、前記該当する命令グループを識別する識別子とともに、前記データストアに蓄積される。蓄積されるトレース制御データは、何らかの方法で該当する命令グループに関係づける必要がある。これは識別子により関係づけることができるほか、蓄積形式等の他の形式で関係づけることもできる。一部の実施形態において、前記トレース回路は、前記キャンセルされた命令グループの前記データストアに蓄積された前記トレース制御データの前記少なくとも一部を取り出すよう構成される。トレース回路を正常に機能させるには、命令グループがキャンセルされた場合に、キャンセルされた命令グループの開始時に現行であったトレース制御データを復元しなければならない。一部の実施形態では、グループの開始時に現行であったトレース制御データが当該グループのデータストアに蓄積されるため、これが取り出される。別の実施形態では、グループの実行終了時に現行であったトレース制御データが当該グループのため蓄積される。この場合は、キャンセルされたグループの直前のグループのトレース制御データが取り出されることになる。一部の実施形態において、前記グループは命令グループを備え、前記グループ内の最初の命令が実行されると、前記グループ内の前記命令の全てが実行する。命令は数通りの方法でグループ分けできる。一部の実施形態ではグループが単一の命令からなるが、この場合はトレース制御データを蓄積するデータストアが大きくなる。命令は、グループ内の最初の命令が実行される場合にグループ全体が実行されるようグループ分けするべきである。換言すると、グループ内で例外が発生することはなく、命令はグループ全体としてキャンセル及びコミットされる。推測的に実行される命令は、その結末が分かったときに、すなわち推測が正しかったか否かが分かったときに、コミット又はキャンセルされ、正しい場合にはコミットされ、正しくない場合にはキャンセルされる。一部の実施形態において、前記トレース制御データはスティッキー値を備え、前記トレース回路は所定値を有する前記スティッキー値に反応し、traceenable信号がenabled値を有するか否かにかかわらず、後に実行されるトレース有効命令のトレース値を出力する。トレース有効命令はトレースデータ項目の出力をトリガする命令である。トレースされる推測実行命令のキャンセルにともなう問題として、トレースがトレース有効命令のトレースエレメントだけを出力し、後続命令のトレースから他の命令は実行済みと示唆する場合、命令グループはキャンセルされることがあり、traceenableはオン又はオフに異なる時点で切り替えられることがあるため、もしも命令グループの最後の命令がトレース有効命令ではなく、次の命令がトレースされる前にtraceenableがオフに切り替わると、トレースデータを診断する診断装置には、このトレース無効命令が実行済みであることが分からない。この問題は、トレース制御データ内のスティッキー値の使用により対処される。トレース回路は、トレースデータ項目の出力をトリガするトレース有効命令ではない前記命令グループの1命令グループにおける最終命令の実行を検出することに反応し、後続命令グループを制御するため前記トレース制御データにて前記スティッキー値を設定し、且つ後続命令グループの前記データストアに前記スティッキー値を蓄積する。つまり、グループ内の最終命令がトレースエレメントを出力しないトレース無効命令なら、後続グループのためスティッキー値が設定される。従って、後続のトレース有効命令が実行されると、トレースがイネーブルされようがされまいが、トレースエレメントは出力される。トレースエレメントが出力されると、蓄積回路に蓄積されたスティッキー値はリセットされる。このスティッキー値により、トレースデータを解析する診断装置は、トレース無効命令が実際に実行したことを認識する。推測的に実行された命令グループがキャンセルされると、キャンセルされた命令に適用されていたスティッキー値が蓄積回路に戻される。後続命令グループのためスティッキー値が蓄積されているため、このグループがキャンセルされる場合にはスティッキー値が更新され、次のトレース有効命令ではトレースエレメントが出力されるため、先行グループにおける最終トレース無効命令の実行は示唆できる。一部の実施形態において、前記トレース制御データはprevioustraced値を備え、前記トレース回路は、先行グループの最終命令が実行されるときに前記traceenable信号の値を前記後続グループの前記previous-traced値として蓄積するよう構成され、前記トレース回路は、推測的に実行された命令グループをキャンセルする前記プロセッサと、イネーブルされる前記traceenable値と、前記キャンセルされたグループとの関連で蓄積され設定される前記previous-traced値とに反応し、前記トレースがオンであることを指示するトレースエレメントを出力する。推測的に実行された命令のキャンセルにともなうさらなる問題として、命令グループのときにトレースがオンになってこの命令グループが後ほどキャンセルされると、トレースがオンであることを伝えるため出力された指示は失われる。previous-traced値は、キャンセルされた命令に鑑みtraceon信号の出力を指示するため使用される。previous-traced値の簡素な設定方法では、先行グループの最終命令のtraceenable値を後続グループのprevioustraced値として蓄積する。こうすることで、その命令グループの実行が完了したときにトレースがイネーブルだったか否かを簡単に指示できる。一部の実施形態において、前記トレース制御データはinitial-traced値を備え、前記initial-traced値は、命令グループの最初の命令の実行でトレースがイネーブルされることに応じて設定され、前記トレース回路は、命令グループをキャンセルする前記プロセッサと、前記命令グループでクリアになる前記initial-traced値と、前記命令グループで設定される前記previous-tracedとを検出することに応じ、前記キャンセル後に実行された前記命令の実行アドレスを指示する状態エレメントを出力する。推測的グループの実行中にトレースがイネーブルされ、その後このグループがキャンセルされる場合にはさらなる問題が生じる。トレースがイネーブルされると実行アドレスを指示する状態トレースエレメントが出力され、診断装置はトレースが再びイネーブルされたことを理解できる。これらの命令が後ほどキャンセルされると、診断装置は、キャンセルされた命令のため出力された実行アドレスから実行が進行していると考え、問題が生じる。initial-traced値の使用は、さらなる実行命令アドレスを指示するさらなる状態エレメントの出力をトリガすることにより、この問題の回避に役立つ。つまり、グループのキャンセルに応じ、キャンセルされたグループのinitial-tracedがクリアで、同グループのprevioustracedが設定されると、さらなる状態エレメントが出力される。previoustracedが設定される場合は、先行グループの、この場合はキャンセルされたグループの前のグループの、最終命令が実行されたときに、トレースがイネーブルされていたことを意味し、initial-tracedがクリアの場合は、キャンセルされたグループの最初の命令が実行されたときにトレースがイネーブルされなかったことを意味する。キャンセルされたグループの実行中にはトレースがイネーブルされ状態エレメントが出力されたかもしれない。そこで、追加の状態エレメントが出力される。一部の実施形態において、前記トレース制御データはtracedinteresting値を備え、前記tracedinteresting値は、グループのトレースエレメントが出力されることに応じて設定され、且つグループのトレースエレメントが出力されない場合にクリアになる。本発明の実施形態で使用できるさらなるトレース制御値はtracedinteresting値である。これは、グループのトレースエレメントが出力される場合とグループのトレースエレメントが出力されない場合を指示するため使用される。これを使用することにより、コミットされたグループがトレースされなかった場合を判断でき、トレース出力のコミットカウント値はこのグループがトレースされたと示唆しない。これは後述するカウンタ折り返しの場合にも使用できる。一部の実施形態において、前記トレース制御データは前記グループのtracestart/stop値を備え、前記tracestart/stop値はtraceenableが設定されるか否かに影響し、前記tracestart/stop値は、前記少なくとも1つのプロセッサの所定挙動の検出に応じて設定される。トレースがイネーブルされるか否かは特定のプロセッサ状態によって制御される。一部の実施形態では、これらの状態によって制御されようがされまいが、start/stop値によりtraceenableをオン又はオフにできる。従来のプロセッサはこの制御値を使用している。ただしこの場合、本発明の実施形態はグループの値を蓄積するため、そのグループが後ほどキャンセルされる場合には、値を適切な値に戻すことができる。一部の実施形態において、前記トレース制御データはtracemultiple値を備え、前記値が設定される場合は前記グループがトレースエレメントを生成する2つのトレース有効命令を備えていることを指示し、前記値が設定されない場合は前記グループが1個又は0個のトレース有効命令を備えていることを意味する。命令グループは2つ以下のトレース有効命令に制限されることがある。この場合はトレース制御データにtracemultiple値を含めることで、グループに2つのトレース有効命令があるか否かを指示できる。後ほど明らかになるように、こうすることでより少ない値を使用しグループのトレースを実行できる。別の実施形態で、前記tracemultiple値は、前記グループ内のトレース有効命令数を指示する値を備える。別の実施形態ではtracemultiple値を数ビットとし、グループ内にあるトレース有効命令数を指示する。こうすることでグループ内に1、2、3、又は4つのトレース有効命令があるかどうかを2ビット値で指示でき、2つのトレースキー最初値と最後値を指示を蓄積するより効率的である。一部の実施形態において、前記トレースユニットは、インデックス値を生成し、且つ前記命令グループの各々に割り振られた前記インデックス値を蓄積するよう構成され、前記インデックス値は、トレースエレメントが生成されるたびに更新される。生成されるトレースエレメントを追跡する一方法ではインデックス値を設け、これを各命令グループに割り振り、トレースエレメントが生成されるたびに更新する。このようなインデックスから提供される情報は圧縮が容易であり、トレースデータを解析する診断装置によって理解される。一部の実施形態において、前記トレースユニットは、前記インデックス値を生成するカウンタを備え、前記トレース回路は、前記グループの実行開始時の前記カウンタ値を指示する最初カウンタ値と、前記グループの実行終了時の前記カウンタ値を指示する最後カウンタ値とのうち、少なくとも一方を、各命令グループの前記データストアに蓄積する。インデックス値によりトレース情報にインデックスを付ける方法はいくつかあるが、一部の実施形態ではカウンタを備える。カウンタはインデックス機能を提供する簡素な方法であるほか、容易に圧縮できるインデックスを提供する。一部の実施形態ではグループの最初カウンタ値と最後カウンタ値の両方が蓄積されるが、別の実施形態では、いずれか一方のみが蓄積される。命令がキャンセル又はコミットされるときには、グループの実行開始時のカウンタ値とグループの実行終了時のカウンタ値を使用することで、出力されたトレースエレメントのうち、キャンセルされた命令とコミットされた命令に関係するトレースエレメントがどれなのかを正確に判断することができる。いずれか一方だけが蓄積される場合でも、グループ内のトレース有効命令数が2に制限され、且つグループのmultipletraced値が蓄積される場合には、キャンセルされた命令とコミットされた命令に関係するトレースエレメントを判断できる。この場合、最初値及び最後値の他方は推定できる。これの利点として、カウンタ値が多ビットとなるのに対し、multipletraced値は単一ビットである。一部の実施形態において、前記トレース回路は、推測的に実行された選択命令グループがキャンセルされたことを指示するキャンセル指示を前記データ処理装置から受信し、前記キャンセルされた選択命令グループを指示するキャンセルトレース項目を生成し、且つ前記現在カウンタ値と、前記キャンセルされたグループの実行開始時の前記カウンタ値との差に関する情報を、前記キャンセルトレース項目に含めるよう構成される。命令グループがキャンセルされる場合には、トレースエレメントを解析する診断装置でこれを推定できることが重要であり、さもないと診断装置は実行されたストリームを正しく解析できなくなる。カウンタ値を使ってトレースエレメントにインデックスを付ければ、ストリームの中で出力されたトレースエレメントのうち、キャンセルされたエレメントがいくつあるかを指示するキャンセルトレース項目を提供することにより、診断装置に対しキャンセルを指示できる。一部の実施形態において、前記トレース回路は、前記traced-interesting値を頼りに前記差に関する前記情報を判断するよう構成される。キャンセルされたグループにトレースされなかった命令があった場合は、キャンセルされた命令グループ数に関する出力情報で、キャンセルされたグループがトレースエレメントを出力しなかったことを示唆してはならない。tracedinteresting値は、これが示唆されないよう出力値を修正するため使用される。一部の実施形態において、前記トレースユニットは、推測的に実行された選択命令グループがコミットされたことを伝える前記データ処理装置からのコミット指示の受信に反応し、前記選択グループを指示するコミットトレース項目を生成し、且つ前記現在カウンタ値と前記選択グループの前記最後カウンタ値との差に関する情報を含める。キャンセルと同様、命令グループのインデックスはどの命令がコミットされたかを指示するため使用できる。コミットされた命令を指示するため出力される値を計算するときにはtracedinterestingも役立つ。トレースされた命令がないグループがある場合、コミット信号は、出力されたトレースエレメントの一部がこれらのグループに属することを示唆しない。本発明の第2の態様は、命令ストリームを実行するデータ処理装置と、前記データ処理装置を監視する本発明の第1の態様によるトレースユニットと、を備えるデータ処理ユニットを提供する。本発明の第3の態様は、少なくとも1つの命令ストリームを実行する少なくとも1つのプロセッサの処理活動を指示するトレースデータ項目を生成する方法を提供し、前記少なくとも1つの命令ストリームは複数の命令グループを備え、前記少なくとも1つのプロセッサは前記命令の少なくとも一部を推測的に実行し、前記方法は、現在のトレース制御データにより制御されるトレース回路を使用し前記少なくとも1つのプロセッサの挙動を監視するステップと、前記実行される命令グループの1命令グループに関連する前記トレース制御データの少なくとも一部を蓄積するステップと、前記推測的に実行された少なくとも1つの命令グループをキャンセルする前記少なくとも1つのプロセッサを検出することに応じ、前記キャンセルされる推測実行命令の直前に実行された前記命令グループの前記データストアに蓄積された前記トレース制御データの少なくとも一部を取り出すステップと、前記取り出されたトレース制御データにより前記トレース回路を制御するステップと、を備える。本発明の第4の態様は、少なくとも1つの命令ストリームを実行する少なくとも1つのプロセッサの処理活動を指示するトレースデータ項目を生成するトレース手段を提供し、前記少なくとも1つの命令ストリームは複数の命令グループを備え、前記少なくとも1つのプロセッサは前記命令の少なくとも一部を推測的に実行し、前記トレース手段は、現在のトレース制御データにより制御される前記少なくとも1つのプロセッサの挙動を監視するトレース監視手段と、前記実行される命令グループのうち該当する命令グループに関連する前記トレース制御データの少なくとも一部を蓄積するデータ蓄積手段と、を備え、前記トレース監視手段は、前記命令グループの実行の検出に応じ、前記トレース制御データの前記少なくとも一部を前記データ蓄積手段に蓄積し、前記トレース監視手段は、前記推測的に実行された少なくとも1つの命令グループをキャンセルする前記少なくとも1つのプロセッサに反応し、前記キャンセルされた推測実行命令の前に実行された前記命令グループの前記データ蓄積手段に蓄積された前記トレース制御データの少なくとも一部を取り出し、且つ前記取り出されたトレース制御データにより前記トレース監視手段を制御する。本発明の上記及び他の目的、特徴、及び利点は、以降の例証的実施形態の詳細な説明を添付の図面とともに読むことにより明白となるであろう。図1に見られるシステムは、命令ストリームを部分的に推測的に実行するデータ処理装置5と、命令の実行を監視し且つトレースストリーム42を生成するトレースユニット40とを含み、トレースストリーム42は出力52を通じて診断装置140へ出力される。診断装置140は診断ロジック142を有し、診断ロジック142はソフトウェアプログラムの形をとってよい。診断ロジック142はプロセッサ10によって実行されるプログラムに関連してトレースストリームを解析し、トレースストリームはデータストアに蓄積される。診断ロジック144はデータ処理装置5によるプログラム実行に関する情報を出力し、出力された情報は故障の診断に役立てられる。本発明の一実施形態によるトレースユニット40を含むデータ処理装置5を図2に示す。データ処理装置5はプロセッサコア10データ処理ユニットと、プロセッサコア10の処理活動を監視し、且つコアの処理活動を示すトレースデータ項目を生成するよう構成されたトレースユニット40とを備え、トレースデータ項目は出力52にてトレースストリームとして出力される。プロセッサコア10はフェッチユニット20と実行ユニット25とを備える。フェッチユニット20はメモリ図示せずから命令をフェッチし、これらの命令は実行ユニット25へ引き渡され、実行ユニット25にて実行される。プロセッサコア10は推測型プロセッサであるため、フェッチユニット20は実行ユニット25向けの命令をフェッチするよう構成され、命令は要求により分岐予測ユニット30によって予測されるただし保証されない。実行ユニット25はこれらの命令を推測的に実行し、後ほど推測が正しいか否かが判明した時点で命令をキャンセルするかコミットする。トレースユニット40は、推測的命令実行を含むプロセッサコア10の処理活動を示すトレースエレメントを生成し、且つそれらを出力52にてトレースデータストリームとして出力するよう構成される。トレースユニット40が推測的に実行される命令との関連で生成されるトレースデータ項目をバッファし、推測が解決した時点でそれらを出力トレースストリームに放出することは原理上可能ではあるが、それにはトレースユニット40内にかなりの蓄積空間が必要となり、面積的に高くつく。そこで図2に示す実施形態のトレースユニット40は、推測的に実行される命令と非推測的に実行される命令の両方についてトレースデータを生成し、且つ推測が正しいか否かが分かった時点でキャンセル信号かコミット信号を生成するよう構成されている。こうしてトレースデータを解析する診断装置はトレースデータを理解することができる。図3ではトレースユニット40がより詳細に示されている。トレースユニット40は、プロセッサコアから信号を受信するトレース回路50を有する。トレースユニットは信号を監視し、トレースエレメントを適宜生成し、トレースストリームの形でトレースエレメントを出力し、トレースストリームは診断装置へ送信される。トレースユニット40はまたtraceenable信号を受信し、これによりトレース回路の中でtraceenableビットが設定される。traceenableはトレースエレメントが出力されるか否かを制御する。この実施形態のトレースユニット40は、トレース制御データを蓄積するレジスタ60を有し、トレース制御データはtraceenable値とともにトレース回路50の動作を制御する。尚、一部の実施形態においてはこれらの値がレジスタに蓄積されず、データは検出される信号値のみとなる。さらに、これらの制御値は多くの実施形態において2つのとりうる値を有し、一般的には単一ビットとして表される。トレースユニットはまた、データストア65を有し、データストア65は、推測的に実行されまだコミット又はキャンセルされていない命令に関するトレース制御データ等、トレース情報を蓄積する。この情報により、命令が実行前の値までキャンセルされる場合にはレジスタ60が更新されるほか、命令グループのキャンセルやコミットに関する情報がトレースストリームに出力される。その結果、診断装置には十分な情報が送信され、診断装置は、トレースストリームの項目のうち、キャンセルされた命令に関係する項目がどれなのかを判断できる。トレース回路は、どの命令がキャンセル又はコミットされたかを指示するトレース信号を出力するほか、プロセッサの処理活動を指示するトレース項目を出力する。こうして診断装置はトレースストリームを理解でき、トレースされた命令のうちキャンセル又はコミットされた命令がいくつあるかを認識できる。トレース回路を正常に動作させるには、推測的実行のときに変化したトレース制御値を不正推測実行以前の値にリセットすることが重要となる。推測的実行を効率よく管理するため、命令は命令グループとして管理される。これは、命令がまとめてコミットされキャンセルされる不可分の命令ブロックにグループ分けされ、グループの中で例外が発生しない場合に可能である。トレース回路は命令をトレースするときにこれらのグループを使用し、トレース有効命令が実行されトレースエレメントが出力されるたびにトレースキーを使ってカウントする。グループの実行が始まるときと終わるときのトレースキー値は最初値及び最後値と呼ばれ、データストア65に蓄積される。こうすることで、命令がグループとしてコミット及びキャンセルされるにつれ、グループの始まりと終わりを判断できる。命令ストリームにおける処理位置を診断装置が正確に判断できるようにするため、トレースキーが時折出力されることもある。通常は、トレース有効命令が実行されたことを示すトレースエレメントと、キャンセルもしくはコミットされた命令数を示すカウント値を出力すれば、これを判断できる。これよりトレースキーがどのように生成され蓄積されるかを詳しく説明する。トレースユニット40にはトレースインデックスユニット70が設けられる。インデックスユニット70は、トレースユニット50によって生成されるトレースデータ項目の少なくとも一部にインデックス値かトレースキーを割り振るよう構成される。具体的に、インデックスユニット70は所定のインデックス値シーケンスとしてインデックス値を生成するよう構成され、所定のシーケンスの中でn1番目のインデックス値はn番目のインデックス値から決定される。図示された実施形態においては、インデックスユニット70内のカウンタ72によってこの機能が提供される。トレースユニット50は所定のインデックス値シーケンスを提供するカウンタ72を備え、トレースユニット40は生成するトレースデータ項目の一部にこれを割り振ることができる。トレースユニット40はまた、カウンタ72によって生成されたインデックス値を蓄積できるデータストア65を備える。データストア65は、推測的に実行される各グループの最初カウンタ値と最後カウンタ値を、当該グループのさらなるトレース制御値とともに、蓄積する。推測的に実行される命令グループ内の最初の命令の場合、トレースユニット40は、カウンタ72からの現在カウンタ値をデータストア65の最初インデックス蓄積ユニットグループ番号によりインデックスが付くに蓄積するよう構成される。逆に、新たなグループがスタートするときには、データストア65の最後インデックス蓄積ユニットに現在カウンタ値が蓄積される。図示された実施形態で、データストア65は命令グループの点でプロセッサの最大推測デプスdepthに対応する十分なエントリを有する。プロセッサの最大推測デプスはデータストア65で保持しなければならない最大エントリ数であり、このデプスを超えるとプロセッサは命令グループをコミットもしくはキャンセルしなければならず、インデックス蓄積ユニット内のエントリは空になる。oldestuncommitted値を蓄積するデータストアもある。この値は、特定のグループをコミットする信号に応じ、診断ツールに対し実際にコミットされる命令がどれなのかを出力するため使用される。グループの実行中にtraceenableの値が切り替わる場合は特に、推測的実行中の命令追跡は容易ではない。この実行を首尾よく追跡できるようにするには、最初カウンタ値と最後カウント値に対しさらなる情報が必要となるため、データストア65はさらなる値を蓄積する。トレース回路を制御する現在のトレース制御データを蓄積するレジスタ60は、previoustraced値と、スティッキービットと、initialtraced値と、tracedinteresting値とを蓄積する。previoustraced値は先行グループの最終命令のtraceenable値であり、スティッキービットは、先行命令がトレースデータを出力しない場合に設定され、出力する場合にクリアされる。先行グループの最終命令が実行されたときのスティッキービットの値は後続グループのスティッキービットとしてデータストア65に蓄積されるが、レジスタ60内のその値は命令が実行されるにつれ更新され、更新された値は当該グループのデータストア65に蓄積されない。initialtraced値はグループ内の最初の命令のtraceenableであり、tracedinterestingはトレースされた命令がグループにあることを指示する。これらの値から診断装置は、例えば2つのグループがコミットされたことをトレース回路が指示し、特にこれらのグループの一方でトレースがイネーブルされず実際にトレースされなかった場合に、これがトレースエレメント出力にどのように関係しているかを判断できる。以降の図に関し、これらの値がどのように更新され使用されるかを説明する。データストア65はグループのtracestart/stop値も蓄積する。これはグループ内の最初の命令より前のstart/stopビットの値である。開始遷移の後、停止状態でトレースがディスエーブルされる場合、すなわちtraceenableが0になる場合、trace-enableは停止遷移まで他のソースに依存する。開始条件は、例えばサブルーチン内の最初の命令のアドレスでよく、停止条件はサブルーチン内の最後の命令のアドレスでよい。こうすることで、このサブルーチン内の命令だけがトレースされる。キャンセル後に開始/停止挙動の整合をとるには、start/stop値をデータストアに蓄積し、キャンセル時に蓄積済みの値まで逆戻りする必要がある。推測的に実行される命令だけでなく構造的に実行される命令により開始/停止挙動を定義するためである。新たなグループがスタートすると、グループ内の最初の命令が処理される前のstart/stop値が、グループに対応するデータストア内の行に蓄積される。グループがキャンセルされると、キャンセルされた命令に対応するデータストア内の行からstart/stopビットが取り出される。図4は、start/stopビットがどのように設定され、トレースがイネーブルされるか否かの決定にどのように使われるかを概略的に示すものである。命令アドレスが受信されると照合が行われ、命令アドレスがトレースユニットの構成時に定められた範囲内にあるか否かを確認する。範囲内にあるなら、start/stopビットが設定される。同様に照合が行われ、命令アドレスがトレースユニットの構成時に定められた停止アドレス範囲内にあるか否かを確認する。範囲内にあるなら、start/stopビットはクリアされる。実行され、トレースされ、コミットされる命令グループA、B、C、及びDの例を図5に示す。この場合のトレース出力はEアトムであり、キーは出力されないが命令のたびに更新され、その一部は図3のデータストア65に蓄積される。この例ではグループAが実行される。グループAは分岐命令を含んでいるため、トレースがイネーブルされるとトレースエレメントEが出力され、図3のカウンタ72の値であるkey1がこの命令に割り振られ、グループAとして蓄積される。そしてカウンタは増加する。次に実行される命令はグループBの中にある。これは新たなグループであるため、グループBの分岐命令には現在のトレースキー値key2が割り振られる。グループBは分岐を含んでおり、トレースは引き続きイネーブルされるため、別のトレースエレメントが出力され、カウンタ72はkey3に増加する。次の命令は新たなグループの中にあり、これも分岐であり、トレースは引き続きイネーブルになっているためさらなるトレースエレメントが出力され、トレースキー3がこの命令に割り振られ、カウンタ72は増加する。次に実行される命令はグループDの中にある。この命令はトレース無効命令である。トレース回路はトレースエレメントを生成しないよう構成されるため、トレースエレメントは出力されず、キーは増加しない。次に分岐命令があり、これはトレースエレメントを生成し、トレースキーの現在値4がこれに割り振られ、カウンタは増加する。次に、グループCがコミットされたことを伝えるコミット信号をトレース回路50がプロセッサから受信すると、グループCと、これに先立つグループA及びBは推測でなくなる。トレース出力を解析している診断ツールにこれを伝達する必要があるため、トレース出力にはコミット信号が加えられる。このコミット信号ではコミットされたグループを正確に指示する必要がある。それには、コミットされたグループのキー値から、蓄積図3のストア80された中で最も古い以前のコミットのキー値を引いたものを出力する。この場合は先行グループにコミットされたものがないため、出力される値は、グループCの最終命令に割り振られたキー値key3-0となり、key3信号が出力される。診断装置はこれからグループA、B、及びCの命令がコミット済みであると判断できる。そのグループで蓄積された最後のキー値key3はoldestcommittedストアに蓄積される。尚、この実施形態では図3のデータストア65に見られるように各グループにつき最初カウンタ値と最後カウンタ値を蓄積するのではなく、データストア65には単一のキー値が蓄積される。これはグループ内の最終命令に割り振られるキー値である。図6に示す例は図5に似ているが、一部の命令の実行中にはトレースがディスエーブルされる。図6ではグループCの実行とグループDの半分でトレースがディスエーブルされる。この場合はグループAの実行によってトレースエレメントの出力がトリガされ、カウンタ72の現在値であるトレースkey1がグループAのキー値として蓄積され、カウンタ72は増加する。次にグループBに入ると現在のカウンタ値2がグループBとして蓄積され、グループB内の分岐命令の実行によりトレースエレメントの出力とキー値3への増加がトリガされる。次にトレース出力がディスエーブルされ、分岐Cが実行されてもトレースエレメントの出力はトリガされない。従って、カウンタキーの現在値3がグループCとして蓄積されるが、トレースエレメントが出力されないため、値は増加しない。次に新たなグループDに入り、最初の命令はトレース無効命令であり、いずれにせよトレースはディスエーブルされるので、トレースエレメントは出力されず、カウンタは増加しない。次にトレースがイネーブルされ、実行される次のトレース有効命令はグループD内の分岐であるため、トレースエレメントは出力され、このグループとして現在のキー値3が蓄積され、カウンタは4に増加する。トレース回路は、グループCがコミットされたことを伝える信号を受信する。これを指示する信号をトレース出力ストリームで送信する必要がある。ただしグループCはトレースされていない。この問題に対処するためトレース制御データでtracedinteresting値が使用される。この値は、命令グループにトレースされるトレース有効命令がある場合に設定され、トレースされる命令がない場合にクリアになる。つまり、トレースされる命令がなければ設定されない。従ってグループCの場合はこれがクリアになる。これはグループがコミット又はキャンセルされる場合に使用される。この場合、グループCはコミットされ、そのtracedinteresting値はクリアである。グループCで蓄積されたキー値は3であり、tracedinterestingビットはクリアであるため、コミットは、蓄積されたキー値-oldestuncommitted値この場合は0-1、すなわち2となるよう計算される。従ってcommit2信号が送信され、診断装置は、前の2つのトレースエレメントがコミット済みのグループに属すると推定できる。すなわち、グループA及びBがコミットされていると推定できる。もしもコミット値から1を引かなければcommit3信号が出力され、トレース出力を解析する診断ツールは、分岐Dを含め最初の3つのトレース済み命令がコミット済みと想定することになる。これは誤りである。もしもtraced-interestingが設定されたなら、キー値から1は引かれないが、この場合は分岐Cがトレースされたことになる。次にoldestuncommitted値はkey3に設定される。traced-interesting値は、推測がプロセッサの推測デプスに達し、カウンタが折り返した場合にも使用できる。この場合、コミット又はキャンセルするキーは最も古い以前のコミットと同じ値になることがある。これは計算コミット値0を提供する。さもないとコミットされるのが0なのか、あるいは最大推測デプスNなのか分からない。これは最終グループのtraced-interestingビットから推定でき、これが設定されるなら値はゼロではなくNに違いなく、これがクリアなら値はNではなくゼロに違いない。一部の実施形態ではデータストア65が命令グループの最初カウンタ値と最後カウンタ値を蓄積する。これらの値を使用することにより、推測的命令のキャンセル及びコミットに応じキャンセル又はコミットする必要があるトレースストリームの値を判断することができる。以下、これを説明する。図3に見られる実施形態等、一部の実施形態では、最初カウンタ値と最後カウンタ値が各グループのデータストア65に蓄積される。カウンタ72は所定のインデックス値シーケンスを提供し、トレースユニット40は生成するトレースデータ項目の一部にこれを割り振ることができる。推測的に実行される命令グループ内の最初の命令の場合、トレースユニット40は、カウンタ72からの現在カウンタ値を当該グループの最初値として蓄積するよう構成され、逆に、新たなグループがスタートするときには、当該グループの最後値として現在カウンタ値が蓄積される。データストア65は、命令グループの点でプロセッサの最大推測デプスに対応する十分なエントリを有するよう構成される。プロセッサの最大推測デプスはインデックス蓄積ユニットで保持しなければならない最大エントリ数であり、このデプスを超えるとプロセッサは命令グループをコミットもしくはキャンセルしなければならず、インデックス蓄積ユニット内のエントリは空になる。これより下の表1を参照しながら最初値と最後値の使用を説明する。表1は、プロセッサコア100が命令グループA、B、及びCを推測的に実行した後、グループBのキャンセルとグループAのコミットを指示する状況で、トレースユニット110でカウンタ値と、oldestuncommitted値と、追跡テーブルがどのように更新されるかを示している。グループAはloadLDR命令から始まり、これはinterestingであり、現在トレースされている。グループAに対応する最初インデックスユニット230のエントリA.firstには現在カウンタ値0が蓄積され、カウンタは1に増加する。最後に、グループAに対応する最後インデックスユニット240のエントリA.lastに現在カウンタ値1が蓄積される。グループAの次の命令はmove命令MOVであり、これはinterestingではなく、トレースされない。グループAの最後の命令はbranch-if-equalBEQ命令であり、これはinterestingでありトレースされため、カウンタは2に増加する。そして、グループAに対応する最後インデックスユニット240のエントリA.lastが現在カウンタ値2により更新される。尚、各命令の最終ステップでは常に現在のグループに対応する最後インデックスユニット240のエントリが現在カウンタ値により更新される。勿論、これが何らかの効果をもたらすのは、その命令でカウンタが更新されている場合に限る。表1の残りの命令では、この最後値の更新を明確に説明しない。グループBはADD命令から始まり、これはinterestingではなくトレースされないが、新たなグループの最初の命令であるため最初インデックス値蓄積ユニットのエントリには現在カウンタ値2が蓄積されるB.first=2。グループBの2番目の命令はSUB命令であり、これも同様にinterestingではなくトレースされず、値を更新しない。グループCはstoreSTR命令から始まり、これはinterestingでありトレースされるため、最初インデックス蓄積ユニットのC.firstエントリには現在カウンタ値が蓄積され、カウンタは3に増加する。グループCの2番目の命令はbranch-if-not-equalBNE命令であり、これもinterestingでありトレースされるため、カウンタは4に更新される。次にプロセッサコア100は、グループBの推測的実行が不適正であるためグループB及びCのキャンセルを指示する。これに応じ、トレースユニット110トレース制御ユニット200により制御はカウンタ210の現在カウント値4と、最初インデックス蓄積ユニット230のエントリB.firstに蓄積された値2を参照する。トレースユニット110は2つのトレースデータ項目をキャンセルすべきと判断し4-2、これを指示するトレースデータ項目を生成する。カウンタ210は2にリセットされる4から2項目キャンセルのため。次にプロセッサコア100は、命令グループAの推測的実行が適正であったと判断し、命令グループAのコミットを指示する。これに応じ、トレースユニット110トレース制御ユニット200の制御下は、oldestuncommitted蓄積ユニット250に蓄積された値現在0と、このグループに対応する最後インデックス蓄積ユニット240のエントリA.last2を参照する。トレースユニット110は2つのトレースデータ項目をコミットすべきと判断し2-0、これを指示するトレースデータ項目を生成する。oldestuncommitted蓄積ユニット250に蓄積された値は、このグループで読み取られた最後の値に、この例では2に、リセットされる。尚、表1を参照しながら説明する実施形態では、イベント数の参照によりキャンセルとコミットが行われ、生成されるトレースデータ項目はキャンセル又はコミットされるイベント数を指示する。別の実施形態では、トレースユニットはイベント番号の参照によりキャンセル/コミットトレース項目を生成できる。この場合、キャンセルトレース項目の場合は最初値から、すなわち最初インデックス値蓄積ユニットの該当するエントリから、イベント番号が取られ、コミットトレース項目の場合は最後値から、すなわち最後インデックス値蓄積ユニットの該当するエントリから、イベント番号が取られる。イベント番号によるコミット及びキャンセルではハードウェアを削減できるように思われるが減算が不要のため、イベント数によりキャンセル/コミットを指示する場合は通常ならば先行ゼロがあるため、大抵は圧縮できる。イベント数によりコミット/キャンセルにするか、それともイベント番号によりコミット/キャンセルするかの選択は、システム要求に応じて判断できる。すなわち、トレースユニットのハードウェア削減とトレースストリームにおける帯域幅削減のうち、どちらを重視するかによって判断できる。これより下の表2を参照しながらさらなる例を説明する。この例のトレースユニットは、storeSTR命令をトレースしないことにより生成されるトレースをさらに選別する。表2におけるグループA及びBの値は表1の値と同じである。ただしグループCの最初の命令でSTR命令はトレースされないため、カウントは増加しない。このためカウントは、グループCでBNE命令トレースされるに遭遇したときに3に増加する。プロセッサコアがcancelBメッセージを発行すると、トレースユニット110は、現在カウントが3、B.firstが2表1の例と同様であるため、ただ1つのトレース項目をキャンセルすべきと判断する3-2。同様に、カウントは1減少する値2まで減少。表1のようにプロセッサコアがcommitAメッセージを発行すると、oldestuncommittedカウントは0、A.last=2であるため、2つのトレース項目がコミットされる。そしてoldestuncommittedカウントは2に更新される。制御レジスタ60におけるprevious-traced制御値の使用を図7に示す。ここでは、トレースがオフだったときに実行された命令がキャンセルされたためtraceon信号の出力を不要につき禁止する。previous-traced値は、先行グループの最終命令が実行されたときのtraceenable値である。従って図7の例でグループBのprevious-traced値はクリアになっている。グループBでトレースがイネーブルされると、traceon信号が分岐BのトレースエレメントEとともに出力されるほか、トレースがオンになったときのコアによるプログラム実行位置を指示する状態エレメント2000図示せずが出力される。グループCが実行されるときにはトレースが再びオフになる。その後グループCはキャンセルされ、グループDが実行される。グループCがキャンセルされたため、グループDに先行するグループはグループBとなり、このグループのトレースはイネーブルされていたため、グループDのprevious-traced値は設定される。traceenableは遷移しているが、トレース回路はprevious-tracedの設定を受けてtrace-on信号の出力を禁止する。もしもグループCがキャンセルされなかったなら、グループDでprevious-tracedは設定され、traceenable信号の遷移を受けてtraceon信号が生成されることになる。traceenableが値を変える別の例を図8に示す。この場合、グループAは分岐であり、トレースはイネーブルされ、トレースエレメントは出力され、initial-tracedは、グループ内の最初の命令のtraceenable値であるため、設定される。次にトレースはイネーブルされず、グループBの実行が始まる。グループBの最初の命令でトレースはイネーブルされないためグループBのinitial-tracedはクリアになり、グループAの最終命令でトレースはイネーブルされているためprevious-tracedは設定される。グループBの2番目の命令でトレースはイネーブルされ、これはグループの中間であるため、これを受けてtraceon信号は常に出力され、トレースがオンになるときのプロセッサの実行位置を指示する状態3004が出力される。その後、グループBの次の命令が実行され、トレースエレメントが出力される。そしてグループBのキャンセルを指示するキャンセル信号をコアから受信する。グループBで出力されたトレースエレメントは1つであるため、キャンセルは1である。トレース回路はキャンセルされたグループBのinitial-traced値と、現在蓄積されているprevious-tracedをチェックする。もしもinitial-tracedがクリアでprevious-tracedが設定されているなら、キャンセルされたグループの実行中にtraceenableが値を変化させ、状態エレメントが出力されたことになる。これらの値に応じて新たな状態エレメントが出力される。この場合、次に実行される命令はグループCのトレース無効命令であり、グループBで蓄積されたinitialtraced値とグループCで蓄積されたprevioustraced値に応じ状態エレメント4000が出力される。診断装置は、トレースがアドレス3004ではなくアドレス4000からのものであることを知る。要約すると、キャンセルされたグループに対応する表の同一行から取り出されるprevious_tracedが1でinitial_tracedが0ならforce-state-outputは出力される。図8ではグループBがキャンセルされる。グループBの前の命令はトレースされるが、グループBの最初の命令はトレースされないため、previous_traced=1、initial_traced=0となる。キャンセル後の最初のグループでprevious_traced値は1であるため、第2のtrace-onは出力されない。previous_tracedとinitial_tracedには4通りの値がある。図9に見られる推測的命令をトレースするときに生じるもうひとつの問題には、本発明の実施形態により対処する。前述したように、トレース無効命令の実行はトレース有効命令の実行をトレースすることによって示唆できるため、トレース無効命令はトレースせず、トレース有効命令に指定された命令だけをトレースすることによってトレースデータの生成量は減らすことができる。トレース有効命令は分岐、読み込み、蓄積等であり、トレース無効命令は算術命令等の他の命令である。ただし、トレースをイネーブル又はディスエーブルする機能と併せてこの種のトレーシングを使用すると、トレースがオフになった場合に後続のトレース有効命令がトレースされないため、トレース無効命令の実行を示唆できなくなる。この問題に対処するにはトレース制御データのスティッキー値を使用する。実行されるグループの最後の命令がトレースエレメントの出力をトリガするトレース有効命令でない場合には、後続グループのためスティッキー値が設定される。このスティッキー値は後続グループのデータストアに蓄積されるほか、トレースを制御する図3の制御レジスタ60の中で設定される。スティッキー値はトレースエレメントが出力されるまでトレース制御レジスタ60の中で維持され、トレースエレメントが出力されるとリセットされる。つまり、トレースがイネーブルされトレース有効命令に遭遇するとトレースエレメントが出力され、制御レジスタではスティッキー値がリセットされる。診断装置は、トレースエレメントが出力されなかった先行グループの最後のトレース無効命令が実際に実行されたと判断できる。図9では、グループBのトレース無効命令の実行を受けてグループCのためスティッキー値が設定される。グループCの分岐が実行されるときにtraceenableはオフだが、スティッキー値が設定されているため、トレースエレメントは出力される。こうすることで、診断ツールはグループBのNOPが実行されたことを示唆できる。トレースエレメントが出力された後には制御レジスタ60でスティッキー値がリセットされるが、グループCのデータストアに蓄積されたスティッキー値は引き続き設定される。図10に見られる同様の例では、推測的に実行された命令の一部がキャンセルされる。この場合、グループAではトレースがイネーブルされ、トレースエレメントが出力される。グループBでトレースはイネーブルされるが、トレース無効命令であるため、トレースエレメントは出力されない。ただしスティッキー値は設定される。次にグループCが実行され、トレースはイネーブルされないがスティッキー値が設定されているため、分岐によりトレースアトムの出力がトリガされる。次に図3の制御レジスタ60でスティッキー値がリセットされるが、データストア65では引き続きグループCに設定されている。次にグループDが実行され、トレースは再びイネーブルされ、トレースアトムが出力される。先行グループでスティッキー値が設定されたためtrace-on出力はない。次にコアからcancelgroupCが受信され、前の2つのアトムのキャンセルを指示するためcancel2が出力される。グループCをキャンセルするときには、グループBで蓄積されたトレース制御値の一部が制御レジスタに読み込まれる。グループBで蓄積されたスティッキー値は設定されており、これが制御レジスタに読み込まれ、例外が生じる。制御レジスタではスティッキー値が設定されているため、traceenableがローでも例外はトレースされる。図11に見られるトレースユニット40は図3のそれに似ているが、レジスタ60とデータストア65にはmultiple-tracedというトレース制御値が追加されている。この実施形態ではグループ内のトレース有効命令が2つまでとなるよう装置が構成され、グループに含まれるトレース有効命令が2つならmultipletracedが設定され、グループのトレース有効命令が1つかトレース有効命令がなければtraced_interestingから判断multipletracedはクリアになる。こうすることで、最初のキー値か実施形態によっては最後のキー値だけをデータストア65に蓄積すればよく、残りはmultipletraced値が設定されるか否かによって判断できる。従って、多ビットのカウント値を蓄積するのではなく単一ビットを蓄積することで残りのキーを指示できる。別の実施形態ではmultiple-traced値を数ビット幅とし、グループ内の合計トレース有効命令数を蓄積する。この場合はこの値を使ってカウンタを更新できる。この値は多ビット幅だが、最初カウント値と最後カウント値を指示する2つのトレースキーを蓄積するよりは効率的である。さらに別の実施形態ではこれを多ビット幅とし、グループ内の合計トレース有効命令数-1を蓄積する。トレース有効命令が1つかゼロかはtraced_interesting値から判断する。尚、トレース制御値はグループごとに設定され、新たなグループに遭遇するとデータストア65に蓄積される。ただしtraced-interestingはグループ内の各命令につき適宜更新され、当該グループにとっての最終的な値が蓄積される。当該グループのデータストア65には制御レジスタ60にある最初のスティッキー値が蓄積されるが、これはグループの実行にともない更新されることがあり、更新された値はデータストアに蓄積されない。図12a乃至12cは、種々のトレース制御値がどのように更新されるかを説明する流れ図である。スティッキービットがどのように設定されクリアされるかを図12aに示す。まずは、新たなグループが受信されたか否かを判断し、受信された場合は現在のスティッキービットがデータストア65に蓄積される。次に、新たなグループが受信されようがされまいが、命令がトレース有効命令か否かを判断し、トレース有効命令ならスティッキービットはクリアされ、トレース有効命令でなければトレースがイネーブルされるか否かを判断し、イネーブルされるならスティッキービットが設定される。次に、トレース有効命令があるならスティッキービットはクリアされ、命令がトレース有効命令でなくトレースがイネーブルされるならスティッキービットは設定される。previous-tracedがどのように設定されるかを図12bに示す。新たなグループがスタートするとprevious-tracedの現在値がデータストア65に蓄積される。次に、トレースがイネーブルされるか否かを判断し、イネーブルされるならprevious-tracedが設定され、イネーブルされないならスティッキービットが設定されているか否かを判断し、設定されているならprevious-tracedが設定され、設定されていなければprevious-tracedはクリアされる。グループがキャンセルされた場合に新規状態の出力をいつ強制するかを判断するため、initial_tracedがどのように更新され使用されるかを図12cに示す。グループの実行が始まるとスティッキービットが設定されているか否かを判断する。スティッキービットが設定されている場合は、トレースがイネーブルされようがされまいが、キャンセルされたグループのprevious_traced値とinitial_traced値を検討する必要がある。スティッキービットが設定されていない場合はトレースがイネーブルされるか否かを判断する。イネーブルされないならinitial_tracedはクリアされこれはグループの最初の命令のtrace_enable値、イネーブルされるなら、これがキャンセル後の最初の命令であるか否かを判断する。キャンセル後の最初の命令なら、キャンセルされたグループのprevious_traced値とinitial_traced値を検討する。キャンセルされたグループでprevious_tracedが設定されている場合は、キャンセルされたグループの前のグループの最終命令が実行されたときにトレースがイネーブルされていたことを意味し、initial_tracedがクリアの場合は、キャンセルされたグループの最初の命令が実行されたときにトレースがイネーブルされていなかったことを意味する。キャンセルされたグループの実行中にはトレースがイネーブルされ、状態エレメントが出力されたかもしれない。これが検出されるとforcenewstateが発生する。グループがキャンセルされ、trace_enableが0から1に遷移し状態が出力されたと判断される場合には新規状態が出力され、トレース診断ツールはプログラムの実行位置を判断することができる。この場合、そのグループの最初の命令でトレースがイネーブルされていないとinitial-tracedはクリアされるinitial_tracedがクリアならトレースはイネーブルされていなかったことを意味し、キャンセルされたグループの以前の値にリセットされる。キャンセルされたグループでinitial_tracedが設定されているなら、このグループの最初の命令でトレースはイネーブルされているため、initial-tracedは設定される。命令がキャンセル後の最初の命令でないか、あるいはprevious_tracedが設定されていなければ、グループの最初の命令でトレースはイネーブルされinitial_tracedでこれを反映するためinitial_tracedは設定される。次に新たなグループがスタートすると、そのグループのinitial_tracedが蓄積される。命令実行の例と、カウンタキー値とトレース制御値がどのように変化するかを図13に示す。実行される最初の命令はグループAの中にあり、アドレス1000を持ち、分岐命令である。トレースはイネーブルされ、トレースエレメントは出力され、現在のカウンタ値key1がこの命令のトレースキーとして蓄積される。この時点でスティッキー値は0であり、initialtraceは1に設定されている。loadstoreはなく、multipletrace命令はなく、previoustraced値はまだなく、oldestcommitted命令は0に設定されている。次に実行される命令はグループBの中にあり、トレース無効命令である。トレースは引き続きイネーブルされ、カウンタは2に増加したためこのグループについてはkey2が蓄積され、トレース無効命令の実行によりスティッキー値が設定される。先行グループの最後の命令が実行したときにトレースはイネーブルされていたためprevioustraced値は1に設定され、このグループの最初の命令が実行したときにトレースはイネーブルされていたためinitialtracedは1に設定される。次に実行される命令はグループCにある。これもトレース無効命令であり、トレースはイネーブルされない。カウンタ値は増加しないため、グループCのこの命令にはkey2が割り振られ、スティッキー値は設定され続ける。次に実行される命令は分岐であり、traceenableは引き続きオフである。ただしスティッキー値が設定されているので、3000で命令が実行されたことをトレースストリームを解析する診断装置に指示するため、トレースアトムが出力される。この命令についてはカウンタ値key2が蓄積され、カウンタは増加する。このトレースアトムの出力に応じてスティッキー値はリセットされる。次に実行されるグループはグループDであり、トレースはイネーブルされ、分岐命令であるためトレースエレメントが出力される。カウンタ値はkey3であるためkey3が蓄積され、この命令に割り振られる。スティッキー値は引き続き0であり、グループCの最終命令が実行したときにトレースはイネーブルされていなかったためprevioustracedは0であり、グループDの最初の命令が実行したときにトレースはイネーブルされていたためinitialtracedは1である。次にトレース回路は、グループCまで命令をキャンセルすることを指示する信号を受信する。グループCで蓄積されたキーはkey2であり、oldestcommittedは0だから、2-0、すなわち2のキャンセル信号がトレースストリームにて診断装置へ送信され、カウンタは2減少する。グループCに関係するデータストアの値からトレースを制御する制御状態が復元される。次に受信される命令はグループEにあり、分岐であり、トレースはイネーブルされるためトレースエレメントが出力され、キーは増加し、この命令についてはkey2が蓄積される。previoustracedとinitialtraceはいずれも1に設定され、このグループにはさらなるトレース有効命令loadがあるため、multipletraceは1に設定される。load及びstore命令のアドレスを出力する必要があることを指示するためtraceloadstoreも1に設定される。この場合はトレースがイネーブルされないためアドレスは出力されない。次の命令はグループFの中にあり、トレース無効命令である。このときtraceenableがオンになるため、traceonと状態出力が出力される。カウンタは増加せず、トレース無効命令であるためスティッキー値は設定されない。グループFの次の命令は分岐であるためトレースエレメントは出力される。スティッキー値はリセットされ、カウンタは4に増加する。次に、グループBをコミットする指示をコアから受信する。グループBで蓄積されたキー値はkey2であるので、通常ならばoldestcommitted値が0であるためcommit2信号が出力される。ただし、グループBのtracedinterestingは0でグループBがトレースされなかったことを指示しているため、グループAの分岐命令が実行済みであることを指示するcommit1が出力される。次のグループはグループGである。カウンタは引き続き増加し、これはトレース有効命令でありトレースはイネーブルされるため、アトムは出力される。カウンタがコミット信号の影響を受けないことに注意されたい。本発明の一実施形態による方法を説明する流れ図を図14に示す。命令グループの形に配列された命令ストリームを処理するプロセッサの挙動は、トレース制御回路によって監視される。蓄積回路にはトレース回路を制御するため現在のトレース制御データが蓄積され、グループが実行されると、実行されたグループのトレース制御データの少なくとも一部がグループを識別する識別子とともにデータストアに蓄積される。次に、推測的に実行された命令グループをプロセッサがキャンセルしたか否かを判断する。これはプロセッサを監視するトレース制御回路によって判断される。命令がキャンセルされた場合は、キャンセルされた命令の直前の命令グループのトレース制御データが取り出され、これが蓄積回路に蓄積されることにより、トレース回路は適切なトレース制御データによって制御される。命令がキャンセルされていなければ、トレース回路はトレース制御データの制御下でプロセッサの監視を続ける。ここでは添付の図面を参照しながら本発明の例証的実施形態を説明してきたが、本発明はこれらの実施形態に限定されず、添付の請求項によって定められる本発明の範囲と精神から逸脱することなく当業者により様々な変更及び修正を行えることを理解されたい。