(57)【要約】  追跡モジュール１２は、処理回路要素８による命令の処理を監視するための監視回路要素１８と、処理回路要素８による命令の処理の成果を示す要素のシーケンスを出力するための追跡出力回路要素２０とを有する。追跡モジュールは、少なくとも１つの投機的に実行される命令を表す少なくとも１つの投機的要素を備える追跡ストリームの一部分を表すコミット・ウィンドウが、追跡ストリームの最も古い残りの投機的要素がコミットされないままである間、移動するべきであることを示す、コミット・ウィンドウ移動要素の出力をサポートする。これは、プログラム・コード内のトランザクショナル・メモリ機能性の追跡のために有用であり得る。
2021511587.tif 000002
【特許請求の範囲】
【請求項１】
処理回路要素による命令の処理を監視するための監視回路要素と、
前記処理回路要素による前記命令の前記処理の成果を示す要素のシーケンスを出力するための追跡出力回路要素と
を備える追跡モジュールであって、
前記追跡出力回路要素は、
前記処理回路要素が、要素の前記シーケンスのコミット・ウィンドウにおける少なくとも１つの最も古い投機的要素によって表される１つ又は複数の投機的に実行される命令をコミットしたことを示す、コミット要素であって、前記コミット・ウィンドウが、前記処理回路要素によって依然としてコミットされるべきである少なくとも１つの投機的に実行される命令を表す少なくとも１つの投機的要素を備える要素の前記シーケンスの一部分を備え、前記コミット要素は、前記コミット要素に続いて前記少なくとも１つの最も古い投機的要素が前記コミット・ウィンドウから除外されるべきであることをも示す、コミット要素と、
要素の前記シーケンスの最も古い残りの投機的要素によって表される１つ又は複数の投機的に実行される命令が、前記処理回路要素によってコミットされないままである間、前記コミット・ウィンドウが、どの投機的要素が前記コミット・ウィンドウの前記最も古い投機的要素であるかを変更するために、前記最も古い残りの投機的要素に対して移動するべきであることを示す、コミット・ウィンドウ移動要素と
を出力することが可能である、追跡モジュール。
【請求項２】
前記処理回路要素が、前記コミット・ウィンドウにおける前記少なくとも１つの最も古い投機的要素によって表される１つ又は複数の投機的に実行される命令をコミットしたことに応答して、
前記コミット・ウィンドウにおける投機的要素の数が最大投機深度よりも小さいとき、前記追跡出力回路要素が、前記コミット要素を出力するように構成され、
前記コミット・ウィンドウにおける投機的要素の数が前記最大投機深度に等しいとき、前記追跡出力回路要素が、前記コミット要素の出力を抑制するように構成された、
請求項１に記載の追跡モジュール。
【請求項３】
前記コミット・ウィンドウ移動要素が、前記コミット・ウィンドウ移動要素によって示される前記コミット・ウィンドウの位置の変更に続いて前記コミット・ウィンドウの前記最も古い投機的要素になるべきである前記投機的要素を示すウィンドウ開始インジケータを指定する、請求項１及び２のいずれか一項に記載の追跡モジュール。
【請求項４】
前記ウィンドウ開始インジケータが、前記コミット・ウィンドウ移動要素によって示される前記コミット・ウィンドウの位置の前記変更に続いて前記コミット・ウィンドウの前記最も古い投機的要素よりも古くなるべきである、要素の前記シーケンスの前記最も古い残りの投機的要素を含む、投機的要素の数を識別する、請求項３に記載の追跡モジュール。
【請求項５】
前記追跡出力回路要素は、前記監視回路要素が、前記処理回路要素がトランザクション開始命令を実行することを検出したことに応答して、前記コミット・ウィンドウ移動要素を出力するように構成され、前記トランザクション開始命令が、前記トランザクション開始命令とトランザクション終了命令との間に実行される１つ又は複数の命令を備えるトランザクションの開始を表し、前記トランザクションの前記命令の効果が、前記トランザクション開始命令と前記トランザクション終了命令との間にアボート・イベントが発生しない場合、前記トランザクション終了命令に達したときにコミットされるべきである、請求項１から４までのいずれか一項に記載の追跡モジュール。
【請求項６】
前記追跡出力回路要素は、前記監視回路要素が、前記処理回路要素が所定のタイプのロード／ストア命令を実行することを検出したことに応答して、前記コミット・ウィンドウ移動要素を出力するように構成された、請求項１から５までのいずれか一項に記載の追跡モジュール。
【請求項７】
前記追跡出力回路要素は、要素の前記シーケンスの前記最も古い残りの投機的要素が前記コミット・ウィンドウの前記最も古い投機的要素になるべきであることを示すコミット・ウィンドウ・リセット要素を出力することが可能である、請求項１から６までのいずれか一項に記載の追跡モジュール。
【請求項８】
前記コミット・ウィンドウ・リセット要素は、要素の前記シーケンスの前記最も古い残りの投機的要素が前記コミット・ウィンドウの前記最も古い投機的要素になるべきであることを示すウィンドウ開始インジケータを指定する前記コミット・ウィンドウ移動要素を備える、請求項７に記載の追跡モジュール。
【請求項９】
前記追跡出力回路要素は、前記監視回路要素が、前記処理回路要素がトランザクション終了命令を実行することを検出したことに応答して、前記コミット・ウィンドウ・リセット要素を出力するように構成され、前記トランザクション終了命令が、トランザクション開始命令と前記トランザクション終了命令との間に実行される１つ又は複数の命令を備えるトランザクションの終了を表し、前記トランザクションの前記命令の効果が、前記トランザクション開始命令と前記トランザクション終了命令との間にアボート・イベントが発生しない場合、前記トランザクション終了命令に達したときにコミットされるべきである、請求項７及び８のいずれか一項に記載の追跡モジュール。
【請求項１０】
前記追跡出力回路要素は、前記処理回路要素が所定のタイプのロード／ストア命令をコミットしたことに応答して、前記コミット・ウィンドウ・リセット要素を出力するように構成された、請求項７から９までのいずれか一項に記載の追跡モジュール。
【請求項１１】
前記追跡出力回路要素は、前記処理回路要素が、前記コミット・ウィンドウにおける少なくとも１つの最も若い投機的要素によって表される１つ又は複数の投機的に実行される命令の効果をキャンセルしたことを示すキャンセル要素を出力することが可能である、請求項１から１０までのいずれか一項に記載の追跡モジュール。
【請求項１２】
前記監視回路要素が、
要素の前記シーケンスの前記最も古い残りの投機的要素と、
前記コミット・ウィンドウの前記最も古い投機的要素と
のうちの少なくとも１つを示すステータス情報を維持するように構成された、請求項１から１１までのいずれか一項に記載の追跡モジュール。
【請求項１３】
前記追跡出力回路要素が、
要素の前記シーケンスの前記最も古い残りの投機的要素と、
前記コミット・ウィンドウの前記最も古い投機的要素と
のうちの少なくとも１つを示す追跡情報要素を出力することが可能である、請求項１から１２までのいずれか一項に記載の追跡モジュール。
【請求項１４】
請求項１から１３までのいずれか一項に記載の追跡モジュールと、前記処理回路要素とを備える、データ処理装置。
【請求項１５】
処理回路要素による命令の処理を追跡するための方法であって、
前記処理回路要素による前記命令の処理を監視することと、
前記処理回路要素による前記命令の前記処理の成果を示す要素のシーケンスを出力することと
を含み、
要素の前記シーケンスは、
前記処理回路要素が、要素の前記シーケンスのコミット・ウィンドウにおける少なくとも１つの最も古い投機的要素によって表される１つ又は複数の投機的に実行される命令をコミットしたことを示す、コミット要素であって、前記コミット・ウィンドウが、前記処理回路要素によって依然としてコミットされるべきである少なくとも１つの投機的に実行される命令を表す少なくとも１つの投機的要素を備える要素の前記シーケンスの一部分を備え、前記コミット要素は、前記コミット要素に続いて前記少なくとも１つの最も古い投機的要素が前記コミット・ウィンドウから除外されるべきであることをも示す、コミット要素と、
要素の前記シーケンスの最も古い残りの投機的要素によって表される１つ又は複数の投機的に実行される命令が、前記処理回路要素によってコミットされないままである間、前記コミット・ウィンドウが、どの投機的要素が前記コミット・ウィンドウの前記最も古い投機的要素であるかを変更するために、前記最も古い残りの投機的要素に対して移動するべきであることを示す、コミット・ウィンドウ移動要素と
を含む、方法。
【請求項１６】
ターゲット処理回路要素による命令の処理の成果を示す要素のシーケンスを取得することと、
要素の前記シーケンスにおけるコミット要素を検出したことに応答して、
前記ターゲット処理回路要素が、要素の前記シーケンスのコミット・ウィンドウにおける少なくとも１つの最も古い投機的要素によって表される１つ又は複数の投機的に実行される命令をコミットしたと推論することであって、前記コミット・ウィンドウが、前記ターゲット処理回路要素によってコミットされると依然として推論されるべきである少なくとも１つの投機的に実行される命令を表す少なくとも１つの投機的要素を備える要素の前記シーケンスの一部分を備える、推論することと、
要素の前記シーケンスの後続の要素の分析のために前記コミット・ウィンドウから前記少なくとも１つの最も古い投機的要素を除外することと、
要素の前記シーケンスにおけるコミット・ウィンドウ移動要素を検出したことに応答して、要素の前記シーケンスの最も古い残りの投機的要素が前記ターゲット処理回路要素によってコミットされると依然として推論されるべきままである間、どの投機的要素が前記コミット・ウィンドウの前記最も古い投機的要素であるかを変更するために、前記最も古い残りの投機的要素に対して前記コミット・ウィンドウを移動することと
を含む、追跡分析方法。
【請求項１７】
請求項１６に記載の方法を実施するようにデータ処理装置を制御するためのコンピュータ・プログラム。
【請求項１８】
請求項１７に記載のコンピュータ・プログラムを記憶する記憶媒体。
【請求項１９】
ホスト処理回路要素と、
請求項１６に記載の方法を実施するように前記ホスト処理回路要素を制御するためのコンピュータ・プログラムを記憶するための記憶回路要素と
を備える装置。
【請求項２０】
ターゲット処理回路要素による命令の処理の成果を示す要素のシーケンスを取得するための追跡入力と、
要素の前記シーケンスにおけるコミット要素の検出に応答して、前記ターゲット処理回路要素が、要素の前記シーケンスのコミット・ウィンドウにおける少なくとも１つの最も古い投機的要素によって表される１つ又は複数の投機的に実行される命令をコミットしたと推論することであって、前記コミット・ウィンドウが、前記ターゲット処理回路要素によってコミットされると依然として推論されるべきである少なくとも１つの投機的に実行される命令を表す少なくとも１つの投機的要素を備える要素の前記シーケンスの一部分を備える、推論することと、要素の前記シーケンスの後続の要素の分析のために前記コミット・ウィンドウから前記少なくとも１つの最も古い投機的要素を除外することとを行うための、追跡分析回路要素と
を備える追跡分析器であって、
要素の前記シーケンスにおけるコミット・ウィンドウ移動要素を検出したことに応答して、前記追跡分析回路要素は、要素の前記シーケンスの最も古い残りの投機的要素が前記ターゲット処理回路要素によってコミットされると依然として推論されるべきままである間、どの投機的要素が前記コミット・ウィンドウの前記最も古い投機的要素であるかを変更するために、前記最も古い残りの投機的要素に対して前記コミット・ウィンドウを移動するように構成された、追跡分析器。
【発明の詳細な説明】
【技術分野】
【０００１】
本技法は、データ処理の分野に関する。
【背景技術】
【０００２】
より詳細には、本技法は、処理回路要素による命令の処理の成果（ｏｕｔｃｏｍｅ）を示す追跡（ｔｒａｃｅ）データの生成及び分析に関する。
【発明の概要】
【０００３】
データ処理装置は、処理回路要素による命令の処理を監視し、処理回路要素によって命令を処理した成果を示す要素のシーケンスを出力するための、追跡モジュールを有し得る。たとえば、追跡モジュールによって生成された追跡要素は、処理回路要素による命令の処理中に起こる、分岐命令の成果、例外の発生、又は他の関心イベントの発生など、処理挙動を示し得る。追跡分析ユニットは、追跡モジュールによって出力された要素のシーケンスを分析し、所与のプログラムが実行されたとき、処理回路要素によってどんな動作が実行されたかを再構築することができる。これは、デバッギング又は診断目的のために有用であり、たとえば、ソフトウェア開発を支援するために又は性能分析のために有用であり得る。
【０００４】
少なくともいくつかの実例は、
処理回路要素による命令の処理を監視するための監視回路要素と、
処理回路要素による命令の処理の成果を示す要素のシーケンスを出力するための追跡出力回路要素と
を備える追跡モジュールであって、
追跡出力回路要素は、
処理回路要素が、要素のシーケンスのコミット・ウィンドウ（ｃｏｍｍｉｔ  ｗｉｎｄｏｗ）における少なくとも１つの最も古い（ｏｌｄ）投機的要素（ｓｐｅｃｕｌａｔｉｖｅ  ｅｌｅｍｅｎｔ）によって表される１つ又は複数の投機的に実行される（ｓｐｅｃｕｌａｔｉｖｅｌｙ  ｅｘｅｃｕｔｅｄ）命令をコミットしたことを示す、コミット要素（ｃｏｍｍｉｔ  ｅｌｅｍｅｎｔ）であって、コミット・ウィンドウが、処理回路要素によって依然としてコミットされるべきである少なくとも１つの投機的に実行される命令を表す少なくとも１つの投機的要素を備える要素のシーケンスの一部分を備え、コミット要素は、コミット要素に続いて前記少なくとも１つの最も古い投機的要素がコミット・ウィンドウから除外されるべきであることをも示す、コミット要素と、
要素のシーケンスの最も古い残りの投機的要素によって表される１つ又は複数の投機的に実行される命令が、処理回路要素によってコミットされないままである間、コミット・ウィンドウが、どの投機的要素がコミット・ウィンドウの最も古い投機的要素であるかを変更するために、最も古い残りの投機的要素に対して移動するべきであることを示す、コミット・ウィンドウ移動要素（ｃｏｍｍｉｔ  ｗｉｎｄｏｗ  ｍｏｖｅ  ｅｌｅｍｅｎｔ）と
を出力することが可能である、追跡モジュールを提供する。
【０００５】
少なくともいくつかの実例は、上記で説明されたような追跡モジュールと、処理回路要素とを備える、データ処理装置を提供する。
【０００６】
少なくともいくつかの実例は、処理回路要素による命令の処理を追跡するための方法であって、
処理回路要素による命令の処理を監視することと、
処理回路要素による命令の処理の成果を示す要素のシーケンスを出力することと
を含み、
要素のシーケンスは、
処理回路要素が、要素のシーケンスのコミット・ウィンドウにおける少なくとも１つの最も古い投機的要素によって表される１つ又は複数の投機的に実行される命令をコミットしたことを示す、コミット要素であって、コミット・ウィンドウが、処理回路要素によって依然としてコミットされるべきである少なくとも１つの投機的に実行される命令を表す少なくとも１つの投機的要素を備える要素のシーケンスの一部分を備え、コミット要素は、コミット要素に続いて前記少なくとも１つの最も古い投機的要素がコミット・ウィンドウから除外されるべきであることをも示す、コミット要素と、
要素のシーケンスの最も古い残りの投機的要素によって表される１つ又は複数の投機的に実行される命令が、処理回路要素によってコミットされないままである間、コミット・ウィンドウが、どの投機的要素がコミット・ウィンドウの最も古い投機的要素であるかを変更するために、最も古い残りの投機的要素に対して移動するべきであることを示す、コミット・ウィンドウ移動要素と
を含む、方法を提供する。
【０００７】
少なくともいくつかの実例は、
ターゲット処理回路要素による命令の処理の成果を示す要素のシーケンスを取得することと、
要素のシーケンスにおけるコミット要素を検出したことに応答して、
ターゲット処理回路要素が、要素のシーケンスのコミット・ウィンドウにおける少なくとも１つの最も古い投機的要素によって表される１つ又は複数の投機的に実行される命令をコミットしたと推論することであって、コミット・ウィンドウが、ターゲット処理回路要素によってコミットされると依然として推論されるべきである少なくとも１つの投機的に実行される命令を表す少なくとも１つの投機的要素を備える要素のシーケンスの一部分を備える、推論することと、
要素のシーケンスの後続の要素の分析のためにコミット・ウィンドウから前記少なくとも１つの最も古い投機的要素を除外することと、
要素のシーケンスにおけるコミット・ウィンドウ移動要素を検出したことに応答して、要素のシーケンスの最も古い残りの投機的要素がターゲット処理回路要素によってコミットされると依然として推論されるべきままである間、どの投機的要素がコミット・ウィンドウの最も古い投機的要素であるかを変更するために、最も古い残りの投機的要素に対してコミット・ウィンドウを移動することと
を含む、追跡分析方法を提供する。
【０００８】
上記で説明された追跡分析方法を実施するようにデータ処理装置を制御するためのコンピュータ・プログラムが提供され得る。記憶媒体がコンピュータ・プログラムを記憶し得る。記憶媒体は、非一時的記憶媒体であり得る。
【０００９】
少なくともいくつかの実例は、ホスト処理回路要素と、上記で実施された追跡分析方法を実施すようにホスト処理回路要素を制御するためのコンピュータ・プログラムを記憶するための記憶回路要素とを備える装置を提供し得る。
【００１０】
少なくともいくつかの実例は、
ターゲット処理回路要素による命令の処理の成果を示す要素のシーケンスを取得するための追跡入力と、
要素のシーケンスにおけるコミット要素の検出に応答して、ターゲット処理回路要素が、要素のシーケンスのコミット・ウィンドウにおける少なくとも１つの最も古い投機的要素によって表される１つ又は複数の投機的に実行される命令をコミットしたと推論することであって、コミット・ウィンドウが、ターゲット処理回路要素によってコミットされると依然として推論されるべきである少なくとも１つの投機的に実行される命令を表す少なくとも１つの投機的要素を備える要素のシーケンスの一部分を備える、推論することと、要素のシーケンスの後続の要素の分析のためにコミット・ウィンドウから前記少なくとも１つの最も古い投機的要素を除外することとを行うための、追跡分析回路要素と
を備える追跡分析器であって、
要素のシーケンスにおけるコミット・ウィンドウ移動要素を検出したことに応答して、追跡分析回路要素は、要素のシーケンスの最も古い残りの投機的要素がターゲット処理回路要素によってコミットされると依然として推論されるべきままである間、どの投機的要素がコミット・ウィンドウの最も古い投機的要素であるかを変更するために、最も古い残りの投機的要素に対してコミット・ウィンドウを移動するように構成された、追跡分析器を提供し得る。
【００１１】
本技法のさらなる態様、特徴及び利点は、添付の図面とともに読まれるべきである、実例の以下の説明から明らかであろう。
【図面の簡単な説明】
【００１２】
【図１】処理回路要素によって実施される処理の特性を示す追跡データ要素のシーケンスを生成するための追跡モジュールと、追跡モジュールによって生成された追跡データを分析するための追跡分析器とを有する、データ処理装置の実例を示す図である。
【図２】追跡モジュールによって生成され得る追跡要素のタイプのサブセットを示す表である。
【図３】コミット要素を使用した投機的に実行される命令の追跡の実例を示す図である。
【図４】キャンセル要素を使用した投機的に実行される命令の追跡の実例を示す図である。
【図５】追跡分析器が、追跡モジュールによって生成されたコミット要素及びキャンセル要素に基づいて、どの要素がコミットされた命令又はキャンセル命令に関係するかをどのように推論することができるかを示す実例を示す図である。
【図６】追跡分析器が、追跡モジュールによって生成されたコミット要素及びキャンセル要素に基づいて、どの要素がコミットされた命令又はキャンセル命令に関係するかをどのように推論することができるかを示す実例を示す図である。
【図７】トランザクション開始命令とトランザクション終了命令との間に実行される命令のシーケンスを備えるトランザクションの実例を示す図である。
【図８】コミット・ウィンドウ移動要素を含んだ追跡要素のシーケンスを分析することの実例を示す図である。
【図９】トランザクション開始命令に応答してコミット・ウィンドウ移動要素を生成することの実例を示す図である。
【図１０】追跡要素を生成する例示的な方法を示す流れ図である。
【図１１】追跡要素のシーケンスを分析する方法を示す流れ図である。
【発明を実施するための形態】
【００１３】
データ処理装置が、命令の投機的実行をサポートし得、命令は、命令が実行されるべきであったかどうか、又は命令へのデータ入力が有効であるかどうかが実際に知られる前に、実行される。たとえば、装置は、分岐命令の成果を予測するための分岐予測器を有し得、所与の分岐命令の予測に続いて、予測が正しいと仮定して後続の命令が投機的に実行され得る。後で分岐命令が実際に実行されると、分岐の現実の成果が決定され得、予測が正しかった場合、後続の投機的に実行される命令がコミットされ得、したがって、それらの結果が有効として扱われる。予測が正しくなかった場合、投機的に実行される命令は、分岐が実行されたときに存在した状態に状態を巻き戻すために、それらの命令の効果がキャンセルされ得、次いで、実行されているプログラム内の命令の異なる経路を実行し始める。投機的実行の他の理由は、たとえば、データ投機（ｓｐｅｃｕｌａｔｉｏｎ）を含み得、ここで、メモリからロードされるべきロード命令のデータ値は、ロードが実際に行われる前に予測されて、ロードが完了する前に後続の命令が実行されることが可能になり得る。また、以下で説明されるように、いくつかの装置は、トランザクション内の命令の投機的実行を導入し得るトランザクショナル・メモリをサポートし得る。
【００１４】
追跡モジュールは、処理回路要素による命令の処理を監視するための監視回路要素と、処理回路要素による命令の処理の成果を示す要素のシーケンスを出力するための追跡出力回路要素とを備え得る。そのような追跡モジュールでは、命令の投機的実行が、追跡モジュールによって出力された要素のシーケンスにおける実行された命令の成果を効率的に表すことについての課題を提示することがある。追跡要素が出力される前にオンチップで追跡要素をバッファするためのリソースは、しばしば限られていることがあり、したがって、投機的に知られている命令が明確にコミットされるべきであることが知られるまで追跡要素の出力を保持することが、実際的でないことがある。投機が正しかったかどうかにかかわらず、投機的に実行される命令の成果を示す要素を出力し、次いで、前に出力された要素投機的要素が、コミットされた命令に関係するのかキャンセルされた命令に関係するのかを示す追加の要素を追跡ストリーム中に含めることが、追跡出力回路要素にとってより単純であり得る。
【００１５】
したがって、追跡出力回路要素は、処理回路要素が、要素のシーケンスのコミット・ウィンドウにおける少なくとも１つの最も古い投機的要素によって表される１つ又は複数の投機的に実行される命令をコミットしたことを示す、コミット要素の出力をサポートし得る。コミット・ウィンドウは、処理回路要素によって依然としてコミットされるべきである少なくとも１つの投機的に実行される命令を表す少なくとも１つの投機的要素を含む要素のシーケンスの一部分を表す。コミット要素は、コミット要素が追跡分析器によって見られると、少なくとも１つの最も古い投機的要素がコミット・ウィンドウから除外されるべきであることをも示し得る。したがって、コミット・ウィンドウは、コミット・ウィンドウが、コミットされた命令に関係する要素をもはや含まないように、追跡ストリーム内で前方に移動する。そのようなコミット要素をサポートすることは、追跡モジュールが、実行される命令が投機的であるかどうかにかかわらず、それらに関係する要素を単に出力するが、次いで、命令がコミットされると、コミット要素を出力することによって、前に出力された投機的要素の成果を解決することを可能にする。この手法は、対応する命令がコミットされるまで追跡モジュール内に要素をバッファする必要を回避し、オンチップ追跡リソースを節約する。
【００１６】
しかしながら、発明者は、ますます、投機的実行の追跡をより複雑にする現代の処理装置によってサポートされる投機の形態があることを認識した。トランザクショナル・メモリ又は長レイテンシ・ロード／ストア動作など、いくつかのタイプの投機が、長時間投機的であるままであり得る間、いくつかのより若い命令が、前の投機が解決される前に投機的に実行及び解決される。このタイプの投機は、コミット・ウィンドウの最も古い要素のコミットメントを表すコミット要素のみを用いて追跡することが困難であり得る。実際には、これは、しばしば、そのような長寿命投機イベントをサポートする、処理回路要素のために生成され得る追跡情報の有効性を限定し得る。
【００１７】
以下で説明される技法では、追跡モジュールは、要素のシーケンスの最も古い残りの投機的要素によって表される１つ又は複数の投機的に実行される命令が、処理回路要素によってコミットされないままである間、コミット・ウィンドウが、どの投機的要素がコミット・ウィンドウの最も古い投機的要素であるかを変更するために、最も古い残りの投機的要素に対して移動するべきであることを示す、コミット・ウィンドウ移動要素をもサポートする。したがって、コミット・ウィンドウ移動要素の出力は、コミット・ウィンドウの開始が命令のシーケンス内で移動されることを可能にし、したがって、最も古い残りの投機的要素が投機的であるままであり、コミットされないままである間、後続のコミット要素が、まさに最も古い残りの投機的要素をコミットすることにもはや制限されず、シーケンスにおけるより遅い要素のコミットメントを表すことができる。これは、たとえば、トランザクショナル・メモリ又は長レイテンシ・ロード・ストア動作を使用する命令のシーケンスを追跡するために極めて有用であり得る。通常、処理回路要素が、任意のより若い要素をコミットする前に最も古い残りの投機的要素の成果を解決する必要があることを予想するので、最も古い残りの投機的要素を実際にコミットすることなしに、コミット・ウィンドウの開始を移動することが有用であろうことは、反直観的であるように見え得る。しかしながら、トランザクショナル・メモリなどの機能性があれば、より若い分岐又は他の投機的命令が、トランザクションが全体としてコミットされ得る前に解決されることが可能であり得る。同様に、長レイテンシ・ロードがあれば、ロードが解決される前に、より若い投機的命令が解決され得る。したがって、コミット・ウィンドウ移動要素は、より良い診断情報がそのようなプログラム・コードの実行を評価するために提供されることを可能にするために使用され得る。たとえば、（アボートされたトランザクションなどの）誤投機（ｍｉｓｓｐｅｃｕｌａｔｉｏｎ）の場合、これは、誤投機が識別される前にプロセッサがプログラム・コード内でその投機についてどこまで達したかに関する診断情報を提供するのを助けることができる。たとえば、トランザクション・メモリの場合、これは、トランザクション・コードの実行における性能の損失についての考えられる理由を診断する際に有用であり得る。
【００１８】
追跡出力回路要素は、投機的に実行された命令が処理回路要素によってコミットされるたびにコミット要素を出力する必要はない。いくつかの実例では、処理回路要素が、コミット・ウィンドウにおける少なくとも１つのより古い投機的要素によって表される１つ又は複数の投機的に実行される命令をコミットすることに応答して、追跡モジュールは、コミット・ウィンドウにおける投機的要素の数が最大投機深度よりも小さいかどうかを決定し得る。最大投機深度は、所与の追跡モジュールのためにハードワイヤードされるか又はレジスタ内にプログラム可能であり得るパラメータであり得る。最大投機深度は、処理回路要素によって一度に投機的であるままであり得る（たとえば、所与のプロセッサ・コアのマイクロ・アーキテクチャ設計のパラメータであり得る）異なる投機ポイントの最大数に対応するようにセットされ得る。したがって、システム設計者は、追跡モジュールがともに使用されるべきである特定の処理回路要素の知識に基づいて、その追跡モジュールのための最大投機深度を定義し得る。
【００１９】
処理回路要素が１つ又は複数の命令をコミットしたものとして検出され、コミット・ウィンドウにおける投機的要素の数が最大投機的深度よりも小さいとき、追跡出力回路要素は、それらの命令に対応する１つ又は複数の投機的要素がコミットされたことを示すために、コミット要素を出力し得る。しかしながら、コミット・ウィンドウにおける投機的要素の数が最大投機深度に等しいとき、コミット・ウィンドウの最も古い１つ又は複数の要素によって表される１つ又は複数の投機的に実行される命令がコミットされたにもかかわらず、追跡出力回路要素は、コミット要素の出力を抑制し得る。これは、追跡モジュールによって出力される追跡要素の数を低減することによって追跡帯域幅を節約するために有用であり得る。一般に、処理回路要素は、いくつの投機ポイントが一度に保留中であり得るかにおいて限定され得、たとえば、命令がキャンセルされるとき、前の状態の復元を可能にするために投機ポイントに関する情報をバッファするためのバッファ中のエントリの数によって限定され得る。したがって、最大投機深度に達したとき、投機的に実行される命令に関係する任意のさらなる要素が追跡モジュールによって出力される場合、暗黙的に、最も古い投機的要素に対応する命令がすでにコミットされたであろうことが仮定され得、したがって、これは、追跡要素のストリーム中に含まれるべき明示的追跡要素を必要とすることなしに、追跡分析器によって推論され得る。したがって、最大投機深度の定義は、出力される必要があるコミット要素の数を低減するために有用であり得る。
【００２０】
コミット・ウィンドウ移動要素の追跡モジュール・サポートが、コミット要素がいつ出力される必要があるかを限定するためにそのような最大投機深度を使用する追跡モジュールのために特に有用であり得る。初期投機ポイントが非常に長い間投機的であるままであり、次いで、その投機ポイントの後に発生したいくつかのより若い投機ポイントが、投機的に実行され、最も古い投機ポイントが解決される前に解決される、プログラム・コードのシーケンスの追跡について考える。コミット・ウィンドウ移動要素のサポートなしに、各投機ポイントの成果を十分に追跡することが可能であるように、最大投機深度は、比較的大きくなるようにセットされる必要があり得る。これは、特に、トランザクションが、多数の分岐又は他の投機判定ポイントを含み得る潜在的に無限の数の命令を含み得る、トランザクショナル・メモリを伴うコードについての問題であり、したがって、そのコードの挙動を完全に追跡することは、トランザクションが全体として解決される前にトランザクションの開始の後に比較的多数の投機的要素が出力されることを必要とし得る。
【００２１】
そのようなプログラム・コードを追跡することに対する１つの手法は、最も古い要素をコミットする必要なしに、さらなる投機ポイントに達するにつれて、コミット・ウィンドウのサイズが増加し続けることができるように、最大投機深度を大きくすることであり得る。しかしながら、これは、トランザクションを使用しないコードを追跡するとき、追跡モジュールの効率を減少させることになり、なぜなら、最大投機深度を増加させることが、命令がコミットされたとき、最大投機深度にまだ達していないことをより一般的にし、したがって、コミット要素が必要とされるであろうからである。これは、生成される追跡データの量を増加させることがあり、したがって、追跡出力回路要素によって出力される生成された追跡要素がオフチップ追跡分析器によって追跡バッファから読み取られる前に、それらの生成された追跡要素をバッファするための、オンチップ追跡バッファ中のスペースなど、リソースのあまり効率的でない使用をもたらす。
【００２２】
（コミット・ウィンドウ移動要素のサポートがない場合の）別の手法は、最大投機深度をより小さく保つことであり得るが、この場合、最大投機深度に達すると、トランザクションが全体としてまだコミットされ得ない場合、コミット要素が、コミット・ウィンドウの最も古い残りの要素に作用するので、トランザクションの分岐又は他の投機ポイントに応答して、さらなる投機的要素を出力することは可能でないであろう。トランザクションのより遅い投機的イベントに関する要素が出力されない場合、これは、追跡分析器が、トランザクションのより遅い命令に関する情報を推論することが可能になることを妨げ得る。たとえば、トランザクションがアボートされた場合、アボートが、最大投機深度に達する前の最後の投機的要素出力の後に発生した場合、追跡ストリームは、追跡分析器が、アボートが発生する前に、処理回路要素がトランザクションを通してどのくらいさらに進めることが可能であったかを推論することが可能であることを可能にすることになる情報を含んでいないことがあり、これは、アボートのタイミング（及び、したがって、潜在的原因）を推論することをはるかに困難にすることがある。
【００２３】
対照的に、上記で説明されたコミット・ウィンドウ移動要素を使用することによって、コミット・ウィンドウ・バッファの開始が、要素のシーケンス全体の最も古い残りの投機的要素を実際にコミットする必要なしに前方に移動され得、したがって、次のコミット要素が、最も古い残りの投機的要素をコミットすることなしに、より若い要素がコミットされたことを示すことができる。これは、長時間投機的であるままであり得るイベントに続いてより若い命令のコミットメントを扱うために最大投機深度を大幅に増加させる必要を回避し、したがって、長寿命投機的イベントに続く各投機的イベントに関する診断情報を依然として提供しながら、全体的に、利用可能な追跡帯域幅がより効率的に使用され得る。
【００２４】
要素のシーケンスの「最も古い残りの投機的要素」という用語は、全体として追跡出力回路要素によって生成される要素のシーケンスにおけるまさに最も古い投機的要素を指すことに留意されたい。すなわち、最も古い残りの投機的要素は、処理回路要素によって依然としてコミット又はキャンセルされるべき最も古い命令に関係する、前に出力された要素である（又は、追跡分析器の観点から、最も古い残りの投機的要素は、ターゲット・プログラムが実行されたとき、処理回路要素によってコミットされたと追跡分析器によって依然として推論されるべき最も古い命令に関係する）。一方、コミット・ウィンドウにおける「最も古い投機的要素」は、コミット・ウィンドウに対応する追跡シーケンスの特定の部分における最も古い要素を指し、これは、全体として要素のシーケンスにおける最も古い残りの投機的要素と同じであることも同じでないこともある。コミット・ウィンドウ移動要素が追跡ストリーム中に含まれたとき、コミット・ウィンドウの開始は、最も古い残りの投機的要素よりも遅くなり得、したがって、この場合、コミット・ウィンドウの最も古い投機的要素は、要素のシーケンスの最も古い残りの投機的要素と同じでないことがある。
【００２５】
いくつかの実装形態では、コミット・ウィンドウ移動要素が出力されるときにコミット・ウィンドウが移動されるべきである要素の数は、固定であり得る。たとえば、デフォルト量（たとえば、１つの要素だけコミット・ウィンドウを移動すること）が仮定され得る。
【００２６】
しかしながら、他の実装形態では、コミット・ウィンドウ移動要素は、コミット・ウィンドウ移動要素によって示されるコミット・ウィンドウの位置の変更に続いてコミット・ウィンドウの最も古い投機的要素になるべきである投機的要素を示すウィンドウ開始インジケータを示し得る。これは、コミット・ウィンドウが、２つ以上の要素だけ移動する必要がある場合、コミット・ウィンドウが移動するべきである追跡ストリームにおけるポイント、すなわち、どの投機的要素が今ではコミット・ウィンドウの最も古い投機的要素になるべきであるか、を指定する単一のコミット・ウィンドウ要素が出力され得るので、生成されるべき追跡要素の数を低減するのを助けることができる。コミット・ウィンドウ移動要素のウィンドウ開始インジケータは、異なるやり方で、たとえば、要素のシーケンスの最も古い残りの投機的要素に対して、要素のシーケンスの最も最近出力された追跡要素に対して、又はコミット・ウィンドウの最も古い投機的要素に対して表現され得る。
【００２７】
しかしながら、一実例では、ウィンドウ開始インジケータは、コミット・ウィンドウ移動要素によって示されるコミット・ウィンドウの位置の変更が行われた後にコミット・ウィンドウの最も古い投機的要素よりも古くなるべきである、要素のシーケンスの最も古い残りの投機的要素を含む、投機的要素の数を識別する。すなわち、ウィンドウ開始インジケータは、全体として要素のシーケンスの最も古い残りの投機的要素の開始に対するコミット・ウィンドウの開始のオフセットを効果的に示し得る。
【００２８】
コミット・ウィンドウ移動要素は、異なるタイミングにおいて追跡出力回路要素によって出力され得る。異なる追跡実装形態が、そのようなコミット・ウィンドウ移動要素を出力することが有用であり得る、異なるポイントを選定し得る。したがって、概して、比較的長寿命の投機イベントを含むトランザクショナル・メモリ又は他のコードのより効率的な追跡を可能にするために、出力されたウィンドウ移動要素をサポートすることが追跡アーキテクチャにとって有用であるが、コミット・ウィンドウ移動要素における正確なタイミングが、実装される特定のシステム実施形態についての問題であり得る。
【００２９】
それにもかかわらず、いくつかの実例では、追跡モジュールの監視回路要素が、処理回路要素がトランザクション開始命令を実行したことを検出したことに応答して、コミット・ウィンドウ移動要素を出力することが有用であり得、トランザクション開始命令が、トランザクション開始命令とトランザクション終了命令との間に実行される１つ又は複数の命令を備えるトランザクションの開始を表し、トランザクションへの命令の効果が、トランザクション開始命令とトランザクション終了命令との間にアボート・イベントが発生することなくトランザクション終了命令に達したときにコミットされるべきである。そのようなトランザクショナル・メモリをサポートするシステムでは、トランザクショナル開始命令に続いて、トランザクション全体が、トランザクション終了命令に達する前に潜在的に無限長の時間の間投機的であるままであり得、トランザクション終了命令とトランザクション開始命令との間に、追跡モジュールによって解決される必要があり得るいくつかの他の分岐又は他の投機ポイントがあり得る。コミット・ウィンドウ移動要素の使用は、サポートされる最大投機深度を大幅に増加させる必要なしに、より若い分岐又は他の投機ポイントが解決される場合でも、トランザクション開始命令を表す投機的追跡要素が長時間投機的である（コミットされない）ままであることを可能にする。トランザクション開始命令の実行に応答してコミット・ウィンドウ移動要素が出力される正確なタイミングは変動し得る。いくつかの場合には、コミット・ウィンドウ移動要素は、トランザクション開始命令自体に応答して出力され得る。代替的に、コミット・ウィンドウ移動要素は、トランザクション開始命令に続く第１の命令に応答して出力され得る。コミット・ウィンドウ移動要素を出力する正確なタイミングは、採用される特定の追跡実装形態に依存し得る（たとえば、同じ一般的な追跡アーキテクチャの異なるマイクロ・アーキテクチャ実装形態が、これのための異なるオプションを選定し得る）。
【００３０】
いくつかの実例では、追跡出力回路要素は、監視回路要素が、処理回路要素が所定のタイプのロード／ストア命令を実行することを検出したことに応答して、コミット・ウィンドウ移動要素を出力し得る。所定のタイプのロード／ストア命令は、すべてのロード／ストア命令であり得る。代替的に、所定のタイプは、ロード／ストア命令のサブセット、たとえば、解決するのに潜在的に長い時間がかかることが予想されるロード／ストア命令（たとえば、メモリから複数のレジスタに値を転送するためのロード複数命令（ｌｏａｄ  ｍｕｌｔｉｐｌｅ  ｉｎｓｔｒｕｃｔｉｏｎｓ）、又は比較的遅いアクセス時間を有することが予想されるメモリの領域からのロード）を備え得る。ロード値投機を使用するシステムでは、ロード命令に続く投機の期間は、比較的長くなり得、したがって、後続のコミット要素が、ロード／ストア命令が実行された後に達したより若い投機ポイントに関係するより遅い要素に作用し得る間、ロード／ストア命令を表す追跡要素が投機的であるままであることができるように、コミット・ウィンドウの開始を移動するためにコミット・ウィンドウ移動要素を使用することが有用であり得る。
【００３１】
追跡出力回路要素は、要素のシーケンスの最も古い残りの投機的要素がコミット・ウィンドウの最も古い投機的要素になるべきであることを示すコミット・ウィンドウ・リセット要素（ｃｏｍｍｉｔ  ｗｉｎｄｏｗ  ｒｅｓｅｔ  ｅｌｅｍｅｎｔ）の出力をもサポートし得る。したがって、コミット・ウィンドウ・リセット要素は、コミット・ウィンドウが、全体として要素のシーケンスの最も古い残りの投機的要素において開始する、デフォルトに戻るべきであることを効果的に示し得る。たとえば、これは、コミット・ウィンドウ移動要素が出力されることを引き起こした長寿命投機イベントが解決されると有用であり得る。いくつかの場合には、コミット・ウィンドウ・リセット要素は、異なる追跡要素フォーマット又は異なる要素タイプ識別子を有することができるが、いくつかの場合には、コミット・ウィンドウ・リセット要素は、コミット・ウィンドウ移動要素と共通符号化フォーマットを共有し得、ただし、コミット・ウィンドウ・リセット要素のための（コミット・ウィンドウが移動されるべき追跡ストリームにおけるポイントを示す）ウィンドウ開始インジケータが、要素のシーケンスの最も古い残りの投機的要素がコミット・ウィンドウの最も古い投機的要素になるべきであることを示す。たとえば、ウィンドウ開始インジケータが、上記で説明されたように、シーケンスの最も古い残りの投機的要素に対するコミット・ウィンドウ開始位置を示す場合、コミット・ウィンドウ・リセット要素は、０のウィンドウ開始インジケータを指定するコミット・ウィンドウ移動要素を単に備え得る。コミット・ウィンドウ・リセット要素は、様々なイベントに応答して出力され得る。たとえば、コミット・ウィンドウ・リセット要素は、トランザクションのトランザクション終了命令に応答して、又は処理回路要素が上記で説明された所定のタイプのロード／ストア命令をコミットしたことに応答して出力され得る。
【００３２】
コミット要素及びコミット・ウィンドウ移動要素に加えて、追跡出力回路要素は、処理回路要素が、コミット・ウィンドウにおける少なくとも１つの最も若い投機的要素によって表される１つ又は複数の投機的に実行される命令の効果をキャンセルしたことを示すキャンセル要素の出力をもサポートし得る。したがって、コミット要素がコミット・ウィンドウの最も古い要素をコミットする間、キャンセル要素は、コミット・ウィンドウにおける（１つ又は複数の）最も若い要素に作用する。コミット要素及びキャンセル要素はともに、処理回路要素が、未解決の（ｕｎｒｅｓｏｌｖｅｄ）分岐をトラッキングするデータをバッファするための限られた量のバッファ・スペースのみを有し得る場合、分岐のシーケンスなど、同時に保留中であり得る投機イベントの数が比較的限られる投機イベントを扱うために有用であり得る。しかしながら、トランザクショナル・メモリ又は長レイテンシ・ロード投機をサポートするシステムでは、これは、後続の投機イベントの解決に関する完全な情報を与えるには不十分であり得、したがって、上記で説明されたコミット・ウィンドウ移動要素を導入することによって、これは、解決するのに長い時間がかかるロード値予測を受けるトランザクション又はロードを伴うコードの処理に関係するより良い診断情報を与えることができる。
【００３３】
コミットされた命令の状態のトラッキングを支援するために、追跡モジュールの監視回路要素は、要素のシーケンスの最も古い残りの投機的要素、及び／又はコミット・ウィンドウの最も古い投機的要素のうちの少なくとも１つを示す追跡情報を維持し得る。この情報は、異なるやり方で、たとえば、最も最近生成された追跡要素など、追跡ストリームにおける何らかの参照ポイントに対して表され得る。したがって、さらなる追跡要素が生成されると、全体としてシーケンスの最も古い残りの投機的要素及びコミット・ウィンドウの最も古い投機的要素を示す情報は、参照される特定の要素が変更しなかった場合でも、相対位置情報を変更するために更新され得る。他の実例では、各要素は、パケット識別子を有し得、最も古い残りの投機的要素及びコミット・ウィンドウの最も古い投機的要素は、固有パケット識別子を通して識別され得る。したがって、ステータス情報を表す様々なやり方がある。監視回路要素及び追跡出力回路要素は、上記で説明されたコミット・ウィンドウ移動要素又はコミット・ウィンドウ・リセット要素など、どんな追跡要素が出力されるべきであるかを判定するのを助けるために、ステータス情報を使用することができる。監視回路要素によって維持されるステータス情報は、コミット・ウィンドウ投機深度と最大投機深度との比較に基づいてコミット要素を出力すべきかどうかを決定するために有用であり得る、コミット・ウィンドウにおける要素の数（コミット・ウィンドウ投機深度）など、他の情報をもトラッキングし得る。
【００３４】
いくつかの実例では、追跡出力回路要素は、要素のシーケンスの最も古い残りの投機的要素、及び／又はコミット・ウィンドウにおける最も古い投機的要素のうちの少なくとも１つを示す追跡情報要素を出力することも可能であり得る。たとえば、追跡出力回路要素は、そのような追跡情報要素を周期的に出力し得、たとえば、一定数の追跡要素の出力の後に追跡情報要素が出力され得る。これは、追跡シーケンスからの追跡情報の潜在的損失（たとえば、追跡バッファについてすべての追跡要素が読み取られることが可能になる前に、追跡バッファがオーバーフローした場合、一部の情報が失われ得る）から守るために有用であり得る。最も古い残りの投機的要素及びコミット・ウィンドウの最も古い投機的要素を指定する情報を周期的に出力することによって、これは、先行する追跡データのすべてが追跡分析器に可視であるとは限らない場合でも、追跡分析器が、追跡情報要素が出力されるシーケンスにおけるポイントの後にどの要素がコミットされたかに関する情報を復元することを可能にすることができる。
【００３５】
対応するやり方では、ターゲット処理回路要素による命令の処理の成果を示す要素のシーケンスを分析するための分析方法が提供され得る。シーケンスは、上記で説明されたような追跡モジュールから受信され得る。要素のシーケンスにおいてコミット要素が検出されたとき、追跡分析器は、ターゲット処理回路要素が、要素のシーケンスのコミット・ウィンドウにおける最も古い投機的要素によって表される１つ又は複数の投機的に実行される命令をコミットしたと推論し得る。この場合も、コミット・ウィンドウは、コミットされると依然として推論されるべきである少なくとも１つの投機的要素を含む要素のシーケンスの一部分を備える。コミット・ウィンドウにおけるより古い投機的要素のうちの１つ又は複数がコミットされたと推論すると、次いで、追跡分析はまた、シーケンスにおける後続の要素の分析のためにコミット・ウィンドウからコミットされた要素を除外し得、すなわち、コミット・ウィンドウは追跡ストリーム内で前方に移動され得る。追跡要素のシーケンスにおいてコミット・ウィンドウ移動要素が検出された場合、追跡分析器は、要素のシーケンスの最も古い残りの投機的要素が全体としてターゲット処理回路要素によってコミットされると依然として推論されるべきままである間、どの投機的要素がコミット・ウィンドウの最も古い投機的要素であるかを変更するために、要素のシーケンスの最も古い残りの投機的要素に対してコミット・ウィンドウを移動し得る。コミット・ウィンドウが、追跡シーケンスの最も古い要素をコミットすることなしに移動され得るので、より早いイベントが投機的であるままである間、潜在的に無制限の数の後続のイベントがコミットされると推論され得、初期投機ポイントを過ぎたイベントの処理に関するより多くの情報が推論されることを可能にする（たとえば、トランザクションを通してどのくらいでアボート・イベントが発生したかを決定する）。
【００３６】
図１は、データ処理装置４と、追跡分析器６とを備えるシステム２の実例を示す。データ処理装置４は、処理回路要素８を有し、処理回路要素８は、追跡されるべきターゲット・プログラムを実行している処理回路要素であるので、ターゲット処理回路要素と呼ばれることがある。データ処理装置４は、実行されているターゲット・プログラムを記憶することと、他のデータ又は命令を記憶することとを行うための、オンチップ記憶回路要素１０を有する。データ処理装置４は、処理回路要素８がターゲット・プログラムを実行するときに処理回路要素８の動作を監視することと、追跡分析器６による分析のための（追跡ストリームと呼ばれる）追跡要素のシーケンスを出力することとを行うための、埋込み追跡モジュール１２を有する。オンチップ追跡バッファ１４が、データ処理装置４内で出力追跡要素を一時的にバッファし得る。追跡分析器６は、追跡出力ポート１６を介して追跡バッファ１４から追跡要素を読み取り得る。追跡バッファ１４は、たとえば、バッファがフルになるとき、最も古い追跡要素が、追跡モジュール１２によって生成されたより新しい追跡要素で上書きされるような、サーキュラー・バッファとして機能し得る。追跡モジュール１２は、処理回路要素８がターゲット・プログラムを実行するときに処理回路要素８の動作を監視することと、処理回路要素８によって実施される処理の特性を示す追跡要素の対応するシーケンスを生成するように追跡出力回路要素２０を制御することとを行うための、監視回路要素１８を含み得る。埋込み追跡モジュールはまた、以下でより詳細に説明される、追跡ストリームに関係するステータス情報を追跡するためのいくつかのステータス記憶要素（たとえば、レジスタ）２２と、コミット・ウィンドウ内の投機的要素の最大数を表す最大投機深度を示すための記憶要素２４（たとえば、レジスタ）とを有し得る。
【００３７】
追跡分析器６は、追跡モジュールによって生成された追跡ストリームの分析のための専用集積回路であり得るか、又は追跡分析器を制御するためのソフトウェアを実行する汎用コンピュータであり得る。追跡分析器は、追跡分析を実行するためのホスト処理回路要素３０を有する。たとえば、ホスト処理回路要素３０は、追跡分析制御プログラム３２を実行する汎用ＣＰＵであり得るか、又は追跡情報を復号するための論理ゲートをもつ専用ハードウェア回路であり得る。データ処理装置からの追跡ポート１６を介して出力された追跡ストリームは、追跡分析器６内の追跡記憶域３４（たとえば、メモリ）内に記憶され得る。追跡ストリームは、ホスト処理回路要素３０によって記憶域３４から読み取られ、ホスト処理回路要素３０は、追跡ストリームが生成されたときにターゲット処理回路要素８によって実行されたターゲット・プログラムのコピー３６に基づいて追跡要素を分析する。
【００３８】
処理回路要素がターゲット・プログラムを実行していた間、処理回路要素の挙動を示す追跡要素のストリームを提供することによって、これは、追跡分析器が、ターゲット・プログラムを通してとられたプログラム・フローの経路を決定することを可能にし、これは、性能の損失又は正しくない処理結果についての潜在的理由を特定するために有用であり得る。これは、処理回路要素８がオンチップ記憶域１０からターゲット・プログラムを実行するシステムのために特に有用であり、なぜなら、この場合、オンチップ記憶域１０と処理回路要素８との間の信号経路が外部に可視でなく、したがって、たとえば、外部集積回路ピン上の信号を観測することによって処理回路要素８の挙動を診断することが可能でないからである。したがって、処理回路要素８の動作を観測するためにハードウェアで提供されるオンチップ追跡モジュール１２を含めることは、たとえば、埋込みシステムのためのソフトウェア開発及びプラットフォーム開発の支援を提供する。しかしながら、追跡ストリームがオンチップで生成されるとき、オンチップで提供される追跡バッファ１４のサイズが限定され得、追跡出力ポート１６が追跡データを出力するためのある限られた帯域幅を有するにすぎないことがあるので、生成された追跡データのボリュームを管理することにおける課題があり得る。
【００３９】
図２は、追跡モジュール１２の追跡出力回路要素２０によって出力され得る追跡要素のタイプのサブセットを示す表を示す。生成された追跡データのボリュームを限定するための１つのやり方は、ターゲット処理回路要素８によって実行されるあらゆる命令に応答して追跡要素を生成するのではなく、代わりに、「ウェイポイント（ｗａｙｐｏｉｎｔ）」命令と呼ばれる選択されたタイプの命令に応答して追跡要素を生成することであり得る。ウェイポイント命令に応答して生成された要素は、Ｐ０要素と呼ばれ、Ｅ（成立する（ｔａｋｅｎ））又はＮ（成立しない（ｎｏｔ  ｔａｋｅｎ））の２つのタイプのものであり得る。ウェイポイント命令は、プログラム・フローが発散し得るか又は処理回路要素の動作がターゲット・プログラム・コピー３６のみから推論され得ない命令（分岐命令、条件付き命令又は他のプログラム・フロー変更命令など）を含み得る。ウェイポイント命令は、投機が正しくなかった場合に処理が巻き戻されるプログラムのポイントを表すためのマーカーとしてＰ０要素を出力することが有用であるので、投機（後続の挙動の予測）が行われる命令をも含み得る。追跡分析器６は、ターゲット・プログラムのコピー３６を有するので、非ウェイポイント命令について、追跡分析器は、２つの連続するウェイポイント命令のうちの２番目のウェイポイント命令に対応するＰ０要素が追跡ストリームにおいて観測されたとき、これらのウェイポイント命令間のすべての命令が実行されたと仮定することができる。したがって、Ｐ０要素は、所与のウェイポイント命令に応答して出力されるが、そのウェイポイント命令で終了する１つ又は複数の命令のブロックの実行を表す。分岐の場合、Ｅ要素は、分岐が成立することが予測される場合に追跡モジュールによって出力され、Ｎ要素は、分岐が成立しないと予測される場合に出力される。分岐以外のウェイポイント命令の場合、Ｅ要素がＰ０要素として出力され得る。
【００４０】
Ｐ０要素によって表される命令は、投機的に又は非投機的にのいずれかで実行されたことがあり、Ｐ０要素は、投機的に実行される命令又は非投機的に実行される命令を区別しない。図２の３番目の行及び４番目の行に示されているように、追跡モジュール１２は、投機について行われた予測が正しかったかどうかが解決されると、Ｐ０要素に対応する投機的に実行される命令がコミットされたのか、キャンセルされたのかを示すための、コミット要素及びキャンセル要素をサポートし得る。投機の目的は、たとえば、分岐予測、ロード・データ値予測、トランザクションの実行など、変動し得る。
【００４１】
コミット要素は、追跡ストリームの投機的要素のある数を示すパラメータＸを指定する。Ｘは、０よりも大きく、レジスタ２４において示される最大投機深度よりも小さいか又はそれに等しい。コミット要素が追跡モジュールによって出力されたとき、これは、追跡ストリームのコミット・ウィンドウ内の最も古いＸ個の投機的要素によって表される投機的命令が処理回路要素によってコミットされたことと、コミット・ウィンドウの開始がそれらのコミットされた要素の後に移動されるべきであることとを示す。「最も古い」要素は、追跡モジュール１２によって最も過去に出力された、又は追跡ストリーム内の最も早い位置を有する、コミット・ウィンドウの要素である（逆に、「最も若い」要素は、追跡モジュール１２によって最も最近出力された、追跡ストリームにおける最も遅い位置における要素である）。コミット・ウィンドウは、追跡分析器が処理回路要素による命令の投機的実行及びそれらの投機的に実行される命令の後続の解決（コミットされた又はキャンセルされた）をトラッキングするための参照ポイントとして作用する追跡ストリームの一部分を指す。キャンセル要素はまた、０よりも大きく、最大投機深度よりも小さいか又はそれに等しい、パラメータＸを指定する。キャンセル要素は、コミット・ウィンドウの最も若いＸ個の投機的要素によって表される投機的命令が（それらが正しくない予測に続いて正しくなく実行されたので）処理回路要素によってキャンセルされたことを示す。したがって、追跡モジュールは、それらの投機成果が解決されるまで、オンチップでバッファ内にそれらの要素を保持する必要を回避するために、前に出力されたＰ０要素（又は他のタイプの追跡要素）によって表される命令の成果を解決するためにコミット要素及びキャンセル要素を使用することができ、必要とされるオンチップ・バッファ・スペースの量を低減することによって回路面積を節約する。
【００４２】
図２の５番目の行に示されているように、追跡モジュールは、０よりも大きいか又はそれに等しく、最大投機深度よりも小さいか又はそれに等しい、投機的要素の数を示すパラメータＸを指定する、コミット・ウィンドウ移動要素（ＣＷＭ要素）をもサポートする。Ｘが０に等しいとき、ＣＷＭ要素は、コミット・ウィンドウ・リセット要素として解釈され、これは、追跡分析器６が、分析されている命令のシーケンスにおける最も古い残りの投機的要素にコミット・ウィンドウの開始を移動するべきであることを示す。Ｘが０よりも大きい場合、コミット・ウィンドウ移動要素は、追跡ストリームの最も古い残りの投機的要素がコミットされないままである間、その最も古い残りの投機的要素に続くＸ番目の投機的要素にコミット・ウィンドウの開始を移動するように追跡分析器６をトリガする。したがって、コミット・ウィンドウ移動要素は、追跡ストリームのどの要素がその後発行されたコミット要素によってターゲットにされるかを制御するために追跡モジュールによって使用され得、したがって、コミット要素が追跡要素のシーケンスのまさに最も古い残りの投機的要素に常に作用することは必須でない。これは、長寿命投機イベント、特に、トランザクション・メモリなど、アーキテクチャ投機を追跡するために有用であり得る。
【００４３】
図２の最下行に示されているように、追跡モジュールは、前に生成されたＮ要素又はＥ要素が正しくなく、したがって、Ｎ要素又はＥ要素によって実際に示される成果とは反対の成立する成果又は成立しない成果を示すものとして解釈されるべきであることを示す誤予測要素を出力することをもサポートし得る。これは、分岐誤予測が処理回路要素８によって検出されたとき、追跡モジュールによって使用され得る。
【００４４】
図２は、追跡モジュールによってサポートされ得るすべてのタイプの要素を示すとは限らないことが諒解されよう。追跡要素タイプの他の実例は、以下を含むことができる。
・  追跡ストリームの最も古い残りの投機的要素、コミット・ウィンドウの位置、又は現在の投機深度をトラッキングする情報など、追跡モジュールのステータス２２に関する情報を提供する追跡情報要素。追跡分析器６が、追跡モジュール１２によって生成された完全な追跡ストリームを受信した場合、追跡分析器６は、出力追跡データを分析することによって、追跡モジュール１２によって記録されたステータス情報２２への対応するステータス情報を推論し得る。しかしながら、時々、追跡バッファ１４は、すべての追跡データが追跡分析器６によってバッファ１４から読み取られる前にオーバーフローし得る。ステータス情報２２のスナップショットを周期的に提供するために追跡情報要素を含めることは、すべての前に生成された追跡データが追跡分析器６に可視であるとは限らない場合でも、追跡分析器６が正しい処理成果を再構築することを可能にする。すべての追跡データが利用可能である場合でも、追跡情報要素を提供することは、追跡分析器が、追跡ストリームのすべての先行する追跡データを処理する必要なしにプログラムの中間ポイントから分析を開始することを可能にするので、追跡分析器によるプログラムの選択された部分のより速い分析をも可能にする。
・  追跡が開始したことを示す「追跡オン」要素。
・  追跡がオンに切り替えられたときに処理がそこから開始した、プログラム命令アドレスを示すアドレス要素、
・  処理回路要素８が命令を実行している、実行コンテキストを示すコンテキスト要素。
・  処理回路要素８の処理中の（割込みを含む）例外の発生を示す例外要素。
他のタイプの追跡要素も生成され得ることが諒解されよう。
【００４５】
図３は、投機的実行をトラッキングするために、コミット要素を使用してプログラムの命令の実行をトラッキングすることの実例を示す。左側列は、ターゲット処理回路要素８によって実行される命令を示す。中間列は、これらの命令に応答して追跡モジュール１２によって生成された追跡要素を示す。表の右側の注の列は、生成された要素についての説明を示す注を提供する。
【００４６】
図３に示されているように、処理回路要素４が、示されている命令を実行するとき、各ウェイポイント命令（この実例では、命令アドレス０ｘ１０００及び０ｘ２００Ｃにおける分岐）が、Ｐ０要素の出力をトリガする。Ｐ０要素がＥであるのか、Ｎであるのかは、分岐が成立すると予測されたのか、成立しないと予測されたのかに依存する。アドレス０ｘ２００Ｃにおいて出力されるＮ要素は、アドレス０ｘ２００ＣにおけるＢＥＱ命令だけでなく先行する非ウェイポイント命令（ＭＯＶ、ＬＤＲ及びＣＭＰ）も実行されたことを示すことに留意されたい。分岐の成果が解決されたとき、コミット要素が出力される。この場合、０ｘ１０００及び０ｘ２００Ｃにおける分岐の成果を予測した後に、例外（ＩＲＱ）が発生し、例外が発生したプログラム中のポイントをマークするアドレスを指定する例外要素が出力される。例外が発生しなかった場合、分岐に対応する要素は、処理回路要素８が、分岐予測が正しかったかどうかを決定することに応答して、コミット又はキャンセルされることになる。しかしながら、例外が、先行する命令の処理に割込みをかけるとき、分岐予測が正しくなかった場合でも、例外が、処理の現在のスレッドの処理を中断し、代わりに、例外ハンドリング・ルーチンからの命令が実行されることになるので、プロセッサ状態のより早いポイントへの巻戻しがないことになる。したがって、例外は、アドレス０ｘ１０００及び０ｘ２００Ｃにおける分岐命令のために生成されたＰ０要素を効果的にコミットすることがコミットされ得るものと見なされ得る。したがって、追跡モジュール１２は、コミットされるべき要素の数を３として指定するコミット要素を出力する（Ｅ要素及びＮ要素は分岐に対応し、例外要素は例外に対応する）。
【００４７】
図４は、キャンセル要素の使用を示す、追跡される命令のシーケンスの別の実例を示す。図４の初期部分は、図３と同様であるが、このとき、例外が発生せず、代わりに、アドレス０ｘ２０１４における第３の分岐の実行に続いて、アドレス０ｘ２００Ｃにおける分岐が誤予測されたと決定され、したがって、成立しない成果が実際は成立するべきであった。したがって、アドレス０ｘ２０１０及び０ｘ２０１４における命令は実行されるべきでなかった。したがって、追跡モジュール１２は、キャンセルされるべき要素の数を示す１のパラメータを指定するキャンセル要素を出力する。このポイントにおいて、コミット・ウィンドウは、アドレス０ｘ１０００、０ｘ２００Ｃ、０ｘ２０１４における分岐のための３つのＰ０要素（Ｅ、Ｎ、Ｅ）出力に対応する。キャンセル要素は、コミット・ウィンドウの最も若い要素に作用し、したがって、対応する命令（ＳＴＲ、Ｂ）が実行されるべきでなかったことを示すために、０ｘ２０１４におけるＥ要素出力をキャンセルする。また、追跡モジュール１２は、０Ｘ２００Ｃにおける分岐のための先行するＮ要素が、間違った状態を示すこと、すなわち、今では追跡分析器によってＥ原子要素（ａｔｏｍ  ｅｌｅｍｅｎｔ）として解釈されるべきであることを示すために、誤予測要素を出力する。キャンセル要素及び誤予測要素の使用は、それらが正しいことが知られるまで、要素をバッファする必要を回避することによって追跡バッファ・スペースを温存することを助け、これは、追跡バッファ１４及び追跡ポート１６を介して出力される追跡データの連続ストリームを提供するのにより効率的であり得る。アドレス０ｘ２００Ｃにおける分岐ＢＥＱのターゲット・アドレス０ｘ３０００から実行が再開すると、アドレス０ｘ１０００、０ｘ２００Ｃ及び０ｘ３００４における分岐のために生成されたＰ０要素が解決されたことを示すために、最終的にコミット要素が出力される。
【００４８】
追跡モジュール１２は、命令がコミットされるたびにコミット要素を出力する必要はない。マイクロ・アーキテクチャ投機の場合、処理回路要素内の投機的に実行される命令を追跡するためのマイクロ・アーキテクチャ・リソースは、一般に、一度に保留中のある限られた数の投機イベントのみをサポートし得る。たとえば、処理回路要素８は、誤投機がある場合に処理状態が復元され得る巻戻しポイントを識別する情報をバッファするための限られた数のスロットをもつバッファを有し得る。すべてのスロットが使用された場合、処理回路要素８は、最も古い投機イベントが解決されるまで、それ以上の投機的予測を行うことができない。処理回路要素８がそのような投機をどのように制御するかの正確な詳細は、（ターゲット・プログラムがどのように解釈されるべきかを定義する命令セット・アーキテクチャではなく）所与のプロセッサのマイクロ・アーキテクチャ実装形態に依存し得る。したがって、処理回路要素がその最大投機深度に達すると、（分岐などの）投機のための基礎として働く別の命令に遭遇した場合、次いで、それが実行された場合、これは、最も古い残りの投機がコミットされたことを暗示し得る。したがって、明示的に追跡ストリームにおいて最も早い投機イベントのコミットメントを示すことが必要でないことがある。したがって、追跡モジュールは、許容される最大投機深度をトラッキングするレジスタ２４を有し得る。システム設計者は、追跡モジュールが使用されるべきである特定のマイクロ・アーキテクチャの知識に基づいて、最大投機深度として使用するための値を選定し得る。投機の解決に続いて１つ又は複数の命令のブロックがコミットされるとき、現在の投機深度（依然として解決されるべきコミット・ウィンドウにおける解決されていない（ｏｕｔｓｔａｎｄｉｎｇ）投機的要素の数）が最大投機深度にある場合、コミット要素の発行は、次の投機的追跡要素が出力されるとき、これが、最も古い解決されていない投機的要素がコミットされたことを暗黙的に示し得るので、抑制され得る。
【００４９】
図５は、処理回路要素によって実施されている処理の特性を決定するために、追跡モジュール１２によって出力されたＰ０要素とコミット要素とのシーケンスが追跡分析器６によってどのように分析され得るかの実例を示し、投機的要素の暗黙的コミットメントの実例を示す。図５に示されているように、追跡分析器は、処理の成果についての推論を行うために、追跡要素のシーケンスを通して１ステップずつ進む。この実例では、説明を簡単にするために、シーケンスは、Ｅ要素とコミット要素とのみを備える。追跡分析器は、追跡分析器が追跡ストリームをパースするとき、現在の投機深度５０を示すパラメータをトラッキングし、また、コミット・ウィンドウ５２の位置を示すパラメータを維持し、これは、要素が依然として投機的である、追跡ストリームの部分を表す（すなわち、コミット・ウィンドウは、処理回路要素によって投機的に実行されたが、現在の分析ポイントにおいてコミット又は解決されると依然として推論されるべきである、命令に関係する投機的要素を備える）。図５の表記法では、分析器６が達した現在の分析ポイントは、下向きの矢印によって示され、コミット・ウィンドウ５２の位置は、コミット・ウィンドウ内の要素の下方の括弧によって示され、追跡分析器６によってそのステータスがすでに解決された要素は、アスタリスクで示される。この実例では、最大投機深度は３であると仮定される。
【００５０】
この実例における追跡ストリームの分析は、以下のように進む（図５に示されているステップに対応する）。
１．追跡分析器は、追跡ストリームを分析することを開始する。
２．追跡分析器は、第１のＥ要素から、１つ又は複数の命令が投機的に実行されたと決定し、したがって、投機深度を１に増加させる。コミット・ウィンドウ５２は、今ではシーケンスの第１のＥ要素を備える。
３．別のＥ要素に遭遇し、これは、コミット・ウィンドウの投機深度及びサイズを２つの要素に増加させる。
４．別のＥ要素に遭遇し、これは、コミット・ウィンドウの投機深度及びサイズを３つの要素に増加させる。
５．別のＥ要素に遭遇する。現在の投機深度がすでに最大投機深度（３）にあったので、さらなる投機的要素Ｅの出力は、ストリームの第１のＥ要素がコミットされたことを暗黙的に示し、なぜなら、処理回路要素８は、すでにその最大投機深度にあったので、最も古い投機がコミットされるまで、さらなる投機を実施することが可能でなかったからである。したがって、第１のＥ要素は、それが解決されたことを示すために今ではアスタリスクで示され、コミット・ウィンドウは、今ではストリームの第２から第４のＥ要素を備える。現在の投機深度は、３のままである。
６．シーケンスにおける次の要素は、コミットされるべき要素の数が１つであることを指定するコミット要素である。コミット・ウィンドウにおける最も古い投機的要素（今ではアスタリスクでマークされた、シーケンスの第２のＥ要素）は、コミットされたと推論され、コミット・ウィンドウの開始は、このコミットされた要素を除外するために移動する。１つ又は複数の要素がコミットされたとき、投機深度は、コミットされた要素の数だけ減分され、したがって、投機深度は、今では２である（依然として、コミット・ウィンドウ内に残る２つの投機的要素があることを反映する）。
７．さらなるＥ要素が検出され、したがって、投機深度は３に増加し、コミット・ウィンドウのサイズは増加する。
８．別のコミット要素が、コミット・ウィンドウにおける最も古い投機的要素（追跡ストリームの始まりから開始して、第３の要素）がコミットされたことを示し、再び、投機深度が２に減分される。
【００５１】
要約すれば、前の投機的要素の成果を示すためにコミット要素を使用することによって、次いで、これは、追跡分析器が、コミット要素より前に追跡モジュールによって出力されたどの追跡要素が信用され得るかを決定することを可能にすることができる。
【００５２】
図６は、少なくとも１つのキャンセル要素が含まれる対応する実例を示す。
Ａ．ステップＡにおいて、追跡分析器のステータスは、図５のステップ４のステータスと同様である（すなわち、図５のステップ１〜３は、簡潔のために図６に示されていない）。
Ｂ．追跡ストリームにおいて分析される次の要素は、キャンセルされるべき要素の数として１を指定するキャンセル要素である。したがって、コミット・ウィンドウの最も若い要素がキャンセルされる（すなわち、分析器６は、対応する命令が実行されるべきでなかったと推論する）。キャンセル要素は、投機深度が２に減分されることを引き起こすが、コミット・ウィンドウにおける最も古い要素は未解決であるままであり、したがって、コミット・ウィンドウの開始位置は同じままである。キャンセルされた要素が、誤予測された分岐に関係する場合、分岐誤予測要素も含まれ得た（分岐誤予測要素は簡潔のために図６に示されていない）。
Ｃ．さらなるＥ要素が受信され、これは、投機深度を３に増加させ、コミット・ウィンドウは、今では３つの投機的要素を備える（ウィンドウは実際に４つのＰ０要素にわたるが、キャンセルされたＥ要素は、その成果がすでに解決されたとき、キャンセルされたＥ要素が投機的要素でないので、投機深度に寄与すると見なされない）。
Ｄ．次の要素はコミット要素であり、これは、コミット・ウィンドウ５２における最も古い要素がコミットされたことを示し、投機深度が２に減少され、コミット・ウィンドウ５２の開始はストリームの第２の要素に移動した。
【００５３】
図３〜図６に示されているコミット要素及びキャンセル要素を使用する技法は、いくつかの命令が明確に実行されるべきであることが知られる前にそれらの命令を実行することによって性能を改善するために、処理回路要素８によってマイクロ・アーキテクチャ投機機構が使用されているとき、命令の実行を追跡するために有用であり得る。一般に、処理回路要素８は、実施されている投機をトラッキングするために利用可能な有限量のマイクロ・アーキテクチャ・リソースを有するにすぎないので、コミット・ウィンドウをある最大投機深度に限定することが有用であり得る。
【００５４】
ただし、プロセスは、トランザクショナル・メモリと呼ばれる投機のアーキテクチャ形態をもサポートし得る。トランザクショナル・メモリは、データ処理システム内で実行する処理の複数のスレッド（単一の処理要素上でのタイムシェアされるか、又は並列に異なる処理要素上で実行しているのいずれか）が、共用リソースにアクセスする必要があり、データ処理動作の性質が、スレッドが共用リソースと相互作用することを開始すると、動作のセットが、別のスレッドがその間にリソースにアクセスすることなしに、リソースを使用してアトミックに（ａｔｏｍｉｃａｌｌｙ）完了することが必要であり得るようなものであり得る場合、有用であり得る。スレッド間のこの競合を扱うための１つの技法は、少なくとも１つのターゲット・リソースへの排他的アクセスを制御するためのロックを使用することであり得る。たとえば、１つのスレッドが特定のアドレス領域におけるデータにアクセスすることを開始するとき、スレッドは、ロックの所有権を主張するためにロック変数を設定し得、次いで、ロックを所有するスレッドがロックの所有権を有する間、ロック変数をチェックする他のスレッドは、ロックがすでに主張されたと決定し得、したがって、そのアドレス領域と相互作用するコードのセクションに入らないことがある。そのようなロック・ベースの手法は、各スレッドが、競合が発生し得ないことを保証するロックの所有権を有しない限り、別のスレッドとの競合が発生し得るので、各スレッドが、デフォルトで、共用リソースにアクセスするコードのセクションに入ることができないと仮定するという点で、悲観的と見られ得る。しかしながら、しばしば、ロック識別子が、いくつかのリソース（たとえば、アドレスの範囲）への排他的アクセスを制御し得、したがって、あるスレッドが、ロック変数によって保護されたリソースのセット内のあるリソースにアクセスしている場合、別のスレッドが、同じリソースに明確にアクセスすることになることは保証されない。したがって、ロック・ベースの手法は、スレッド間の競合がまれである場合、スレッドが、共用リソースを使用するコードのクリティカル・セクションに入る前にロックが解放されることを不必要に待っていることがあるので、性能の損失をもたらし得る。
【００５５】
共用リソースにアクセスするスレッド間の競合を扱うためのより楽観的な手法は、トランザクショナル・メモリ・サポートを使用することであり得る。データ処理システムは、処理回路要素によるデータ処理のスレッド内のトランザクションの実行をサポートするための回路要素を有し得る。図７に示されているように、トランザクションは、トランザクションの始まりをマークするトランザクション開始命令ＴＳＴＡＲＴとトランザクションの終了をマークするトランザクション終了命令ＴＣＯＭＭＩＴとの間に実行されるスレッドの命令を備える。トランザクション開始命令とトランザクション終了命令との間に、処理回路要素は、介在する命令を投機的に実行し、トランザクション終了命令に達するまで、それらの投機的に実行される命令の結果のコミットメントを防ぎ得る。トランザクション開始命令の実行に続く（ただし、トランザクション終了命令に達する前の）アボート・イベントの発生により、トランザクションがアボートされ、投機的結果が廃棄され得る。別のスレッドによって行われたメモリ・アクセスとの検出された競合、トランザクション内でサポートされないタイプの命令の実行、又はトランザクションの処理中の例外の発生など、トランザクションをアボートするためのいくつかの理由があり得る。トランザクショナル・メモリ手法の場合、各スレッドは、楽観的に、他のスレッドとの競合が発生しないと仮定してコードのクリティカル・セクションを処理することを開始し得、次いで、競合が検出されることなしにクリティカル・セクションの終了に達した場合、トランザクションの結果がコミットされ得る。競合がまれである場合、トランザクショナル・メモリ・サポートを使用することは、より多くのスレッドがコードのそれらのクリティカル・セクションをコンカレントに処理することを可能にすることによって、性能を改善することができる。
【００５６】
したがって、データ処理装置４におけるターゲット処理回路要素８は、アーキテクチャ・レベルにおけるトランザクションの実行をサポートする命令セット・アーキテクチャに従って命令の実行をサポートするための、様々なトランザクショナル・メモリ・サポート・リソース６０を有し得る。トランザクショナル・メモリ・サポート回路要素６０は、様々な形態をとり得、トランザクションの処理を支援するいくつかのリソースを含み得る。たとえば、トランザクショナル・メモリ・サポート回路要素６０は、少なくとも１つのスレッドの少なくとも１つのトランザクションのための投機的に実行される命令の結果を記憶するための投機的結果記憶回路要素を含み得る。いくつかの場合には、異なるスレッドにおいて動作するトランザクションのために、投機的に実行される結果の複数のセットが記憶され得る。すべての投機的結果が投機的結果記憶回路要素に記憶されることは必須でない。たとえば、トランザクショナル・メモリ・サポート回路要素は、トランザクションをアボートすると復元される、トランザクション開始命令に応答してキャプチャされる状態を記憶するための復元状態記憶回路要素をも有し得る。したがって、トランザクションをアボートすると復元されるレジスタ状態値又は他のアーキテクチャ状態値は、プロセッサのアーキテクチャ・レジスタにおける現在の値が、（トランザクションのアボート時に復元状態で上書きされる）それらの投機的結果を効果的に示し得るので、投機的結果記憶回路要素に記憶される必要がない。投機的結果記憶回路要素は、たとえば、メモリに値を記憶するためのストア命令の結果を記憶し得る。トランザクションがコミットされるまで、投機的結果記憶回路要素におけるストア命令のための投機的結果を保持することによって、これは、その後正しくないとわかり得るか又は他のスレッドが正しく挙動しないことを引き起こし得る、データ値でメモリを汚染することを回避する。
【００５７】
別の例では、トランザクショナル・メモリ・サポート回路要素は、第１のスレッドのトランザクション内で行われる所与のアドレスへのデータ・アクセスと、（トランザクション内で又は非トランザクショナル・スレッド中でのいずれかで）別のスレッドによって行われた同じアドレスへのデータ・アクセスとの間の競合を検出するための、競合検出回路要素を備え得る。たとえば、トランザクション内の命令によってアクセスされるアドレスをトラッキングするためにアドレス・トラッキング回路要素が提供され得る。競合検出回路要素は、別のスレッドが、アドレス・トラッキング回路要素に記録されたアドレスのうちの１つにアクセスするとき、競合を検出し得る。競合が検出されたとき、競合検出回路要素は、アドレスがトラッキングされている第１のスレッドのトランザクションのアボートをトリガし得る。
【００５８】
トランザクショナル・メモリ・サポート回路要素は、トランザクションのアボートを引き起こし得る他のイベントを検出するための回路要素をも有し得る。たとえば、割込み又は例外を受信すると、トランザクションはアボートされ得る。また、トランザクショナル・メモリ・サポート回路要素がリソースを使い果たした場合（たとえば、投機的結果記憶回路要素に記憶されるべき投機的結果の数又はアドレス・トラッキング回路要素によってトラッキングされるアドレスの数が、提供される記憶域内で利用可能な容量を超える場合）、トランザクションがアボートされ得、したがって、トランザクションが競合なしに正しく進むことを保証することはもはや可能でない。また、いくつかのタイプの命令が、トランザクション内で処理されるには不適切であり得、トランザクション内で可能にされないタイプの命令に遭遇すると、トランザクションはアボートされ得る。トランザクションをアボートすると、再びトランザクションを実行することを試みるべきであるのか、ロックを使用することなど、非トランザクション・ベース機構を使用して代替コード経路を実行することを試みるべきであるのかを決定することは、ソフトウェア次第であり得る。
【００５９】
追跡モジュール１２が、マイクロ・アーキテクチャ投機を追跡することが可能な追跡アーキテクチャをすでにサポートする場合、同じ機構が、トランザクションを使用するアーキテクチャ投機を追跡するためにも使用され得ることを予想し得る。たとえば、監視回路要素１８が、ターゲット処理回路要素８がトランザクション開始命令を実行することを検出したとき、別のＥ要素が生成されて、これが、そこを越えると実行が投機的であるポイントを表すことが示され得る。トランザクションがアボートされた場合、そのＥ要素（及び、トランザクション内で実行される命令に関連する任意のその後生成されたＥ要素）は、追跡ストリームにおけるキャンセル要素を出力することによってキャンセルされ得る。アボートが発生することなく、トランザクションがトランザクション終了命令に達した場合、トランザクション全体がコミットされ得、追跡モジュール１２は、トランザクションに関連するすべてのＥ要素をコミットするためにコミット要素を出力することができる。
【００６０】
しかしながら、達し得る投機の深度が、投機的実行を追跡するために処理回路要素８において提供される限られたマイクロ・アーキテクチャ・リソースに基づいて、一般に、ある最大数に限られる、マイクロ・アーキテクチャ投機とは異なり、トランザクショナル・メモリでは、トランザクション開始命令においてレジスタ状態がキャプチャされ、トランザクションは、トランザクション終了命令に達するまで潜在的に無制限の数の命令を含むことができるので、トランザクション中に達し得る投機深度（最も古い投機的要素が解決され得る前に出力され得る投機的追跡要素の数）に固定の限界がない。これは、明示的コミット要素が必要とされるかどうかをトラッキングするために最大投機深度２４を使用する追跡モジュール１２を用いて適切に追跡することが困難であり得る。たとえば、図７に示されているようなトランザクション開始命令とトランザクション内の最初の数個の分岐とに関してＥ要素が出力される場合、最大投機深度にすぐに達し得、次いで、追跡モジュールは、通常、次の分岐がコミットされるとき、これが、ＴＳＴＡＲＴ命令のための最も古い残りの投機的に出力された要素もコミットされるべきであることを暗示することを仮定することになる。しかしながら、トランザクションでは、これは、ＴＳＴＡＲＴ命令を表すＥ要素が、後の分岐が解決される準備ができている場合でも、依然として投機的であり得るので、正しくないことになる。
【００６１】
１つのソリューションは、トランザクションの終了に達する前に、より早い命令をコミットすることを暗示する必要がないように、トランザクション内のすべての投機ポイントがコミット・ウィンドウ内にあるままであり得る可能性を高くするために、最大投機深度を増加させることであり得る。しかしながら、最大投機深度についてどんな値が仮定されても、コードが、トランザクション内で最大投機深度よりも大きい数の投機ポイントを伴って実行され得る見込みが常にあり得る。最終的に、最大投機深度に達すると、追跡モジュールは、ＴＳＴＡＲＴ命令のＥ要素が解決され得るまで、さらなる投機的要素を出力することが可能でなくなり、したがって、トランザクション内の後続の処理に関するさらなる追跡情報を提供することが可能でなくなり、これにより、後続のアボートの原因を識別すること、又は、追跡分析器が、アボートが発生する前に、トランザクションを通して処理がどのくらい進んだかを推論することを可能にすることが困難にする。いずれの場合も、最大投機深度２４を増加させることは、それが、より早い要素をコミットすることを明示的に示すために出力されなければならないコミット要素の数を増加させ得るので、非トランザクショナル・コードを追跡するときに、あまり効率的でない追跡リソース使用状況につながり得る。
【００６２】
これらの問題点は、上記で説明されたコミット・ウィンドウ移動要素を提供することによって対処され得、これは、最も古い残りの投機的要素がまだコミットされていないにもかかわらず、コミット・ウィンドウの開始が移動されることを可能にする。たとえば、トランザクションの開始をマークするＴＳＴＡＲＴ命令に遭遇したとき、Ｅ要素が出力され得、コミット・ウィンドウ移動要素も、追跡出力回路要素２０によって出力されて、コミット・ウィンドウが、ＴＳＴＡＲＴ命令に対応する投機的Ｅ要素の後の次の要素において実際に開始すると見なされるべきであることが示され得る。ＴＳＴＡＲＴ命令に対応する投機的要素を、その要素を実際にコミットすることなしにコミット・ウィンドウから除外することによって、これは、最大投機深度２４を大幅に増加させる必要なしに、トランザクションを通して進行をトラッキングする、より有用な追跡情報が生成され得るように、後続のコミット要素が次の要素に作用することを可能にし、したがって、利用可能な追跡リソース（たとえば、バッファ１４中のスペース又は追跡出力ポート１６上の帯域幅）のより効率的な使用を可能にする。
【００６３】
図８は、コミット・ウィンドウ移動要素が含まれるときの追跡分析を示す図５及び図６と同様の実例を示す。この実例では、図２に示されているようにコミット・ウィンドウ移動要素の符号化が使用され、０のウィンドウ開始パラメータを指定する要素ＣＷＭ（０）が、コミット・ウィンドウ・リセット要素を表す。現在の分析ポイント（下向き矢印）、コミット・ウィンドウ位置５２（括弧）、及び解決された要素（アスタリスク）を示すために図５及び図６において使用される表記法に加えて、図８では、追跡ストリーム全体における最も古い残りの投機的要素７０が、ボールド及び下線フォントを使用して示されている。最も古い残りの投機的要素７０の位置及びコミット・ウィンドウ５２の開始（最も古い投機的要素）の位置が、追跡モジュール内のステータス・レジスタ２２において示され得、また、追跡ストリームを分析するときに追跡分析器６によってトラッキングされ得る。同様に、現在の投機深度５０が、追跡モジュールによってステータス・レジスタ２２内で、及び追跡分析器６によって任意の追跡分析ステータスにおいて、トラッキングされ得る。図８のステップ１〜４は、図５の場合と同じであり、したがって、再び詳細に説明されない。ステップ２〜４における最も古い残りの投機的要素７０は、（要素がまだコミットされていないので）追跡ストリームの第１の要素である。図８の後続のステップは、以下のように進む。
５．追跡分析器６によって分析されるべき次の要素は、ＣＷＭ（１）要素であり、これは、最も古い残りの投機的要素７０がそれ自体コミットされていない間、コミット・ウィンドウ５２が、最も古い残りの投機的要素に対して１つの要素位置だけ移動されるべきであり、したがって、今では追跡ストリームの第２から第４の要素にわたることを示す。コミット・ウィンドウ移動要素は、（依然として未解決の３つの投機的要素があるので）実際の投機深度を変更しないが、コミット・ウィンドウ投機深度５１（コミット・ウィンドウ自体内の投機的要素の数）は、今では２である。コミット・ウィンドウ投機深度５１は、追跡モジュールのステータス・レジスタ２２における全体的投機深度５０から、及び追跡分析器６によって対応する様式で、別々にトラッキングされ得る。コミット要素を出力するべきかどうかを決定するために、追跡モジュール１２は、ＣＷＭ（１）要素に続いて最も古い残りの投機的要素が今ではコミット・ウィンドウの外部にあるので、総投機深度を比較するのではなく、コミット・ウィンドウ投機深度５１を最大投機深度２４と比較し得る。
６．追跡ストリームにおいて分析される次の要素は、コミット要素である。ステップ５に続いて、コミット・ウィンドウの最も古い投機的要素は、全体として追跡ストリームの第２の要素であり、これは、それが解決されたことを示すために、今ではステップ６におけるアスタリスクで示される。最も古い残りの投機的要素７０はコミットされないままである。総投機深度５０及びコミット・ウィンドウ投機深度５１は、それぞれ、２及び１に減分される。
７．別のＥ要素が検出され、これは、コミット・ウィンドウが拡張されるので、総投機深度５０／コミット・ウィンドウ投機深度５１をそれぞれ３及び２に増加させる。
８．分析される次の要素は、ＣＷＭ（０）要素、すなわち、コミット・ウィンドウ・リセット要素であり、したがって、コミット・ウィンドウ５２の開始が、最も古い残りの投機的要素７０において開始するようにリセットされる。総投機深度５０は、依然として３つの投機的要素があるにすぎないので、３のままであり、最も古い残りの投機的要素７０が今では再びコミット・ウィンドウ内にあるので、コミット・ウィンドウ投機深度５１も３になる。コミット・ウィンドウ内の３つの投機的要素は、示されている追跡ストリームの第１、第３及び第６の要素である。
９．検出される次の要素は、コミット・ウィンドウにおける最も古い投機的要素がコミットされることを示す、コミット（１）要素である。この場合、コミット・ウィンドウにおける最も古い投機的要素は、全体としてストリームの最も古い残りの投機的要素でもある。コミット・ウィンドウは、前方に移動し、最も古い残りの投機的要素７０は、今では追跡ストリームの第３の要素になり、これは、依然として未解決である最も古い要素である。総投機深度５０及びコミット・ウィンドウ投機深度５１は、２に減分される。
【００６４】
要約すれば、異なるタイプの要素は、追跡モジュール１２及び追跡分析器６によって維持されるステータス・パラメータ２２に対して以下の効果を有する。
【表１】
2021511587.tif 000003
【００６５】
上記の表に示されている４つのパラメータのうちの１つ又は複数を示すステータス情報パケットが、追跡モジュールによって周期的に（たとえば、ある数のパケット又はある時間期間の間隔で）出力され得る。いくつかの実例では、コミット・ウィンドウ投機深度５１が、関心情報が追跡分析器６によって再構築されることを可能にするのに十分であり得るので、ステータス情報２２における全体的投機深度５０を明示的に表すことが必要でないことがある。
【００６６】
図９は、コミット・ウィンドウ移動要素のための例示的な使用事例を示すトランザクションを含む命令のシーケンスの実行の実例を示す。これは、可能な実装形態の一実例にすぎず、同じ追跡アーキテクチャをサポートする他のシステムが、わずかに異なるタイミングにおいて又は異なるイベントに応答して要素を生成するマイクロ・アーキテクチャ実装形態を有し得ることが諒解されよう。
【００６７】
０ｘ１０００：ＴＳＴＡＲＴ命令が、ターゲット処理回路要素８によって実行される。図９に示されている最初の４つの追跡要素は、追跡の開始をマークするための、図３の場合と同じである。ＴＳＴＡＲＴ命令はまた、ＴＳＴＡＲＴ命令が、そこを越えると実行が投機的であるポイントを表すので、Ｅ要素を生成するように追跡モジュール１２をトリガする。また、追跡モジュール１２は、トランザクションが、不確定な期間の間、投機的であるままであることが予想されることになり、トランザクションが全体としてコミットされ得る前に、後の要素をコミットすることが必要とされ得るので、ＣＷＭ（１）要素を生成する。ＣＷＭ（１）は、コミット・ウィンドウ投機深度５１が０に戻るが、全体的投機深度５０が１である（ＴＳＴＡＲＴに対応するＥ原子が、依然として投機的であるが、コミット・ウィンドウ５２の外部にある）ことを意味する。コミット・ウィンドウは、現在、０個の投機的要素を含んでおり、したがって、コミット・ウィンドウ５２の最も古い要素は、追跡モジュール１２によって生成された次の投機的要素であることになる。
【００６８】
０ｘ２０００−０ｘ２００８：ＭＯＶ、ＬＤＲ及びＣＭＰ命令が実行され、これらのいずれもウェイポイント命令でなく、したがって、追跡要素が生成されない。
【００６９】
０ｘ２００Ｃ：分岐が成立しないと予測され、したがって、追跡モジュール１２は、Ｎ要素を生成する。Ｎ要素は、３つの前の命令及びＢＥＱ命令の実行を暗示する。全体的投機深度５０及びコミット・ウィンドウ投機深度５１は、それぞれ、２及び１に増分する。最も古い残りの投機的要素７０は、依然として、０ｘ１０００において出力されたＥ要素であるが、コミット・ウィンドウの最も古い要素は、０ｘ２００Ｃにおいて出力されたＮ要素である。
【００７０】
０ｘ２０１４：分岐が成立すると予測され、したがって、追跡モジュール１２は、Ｅ要素を生成する。Ｅ要素は、Ｂ命令の実行と、０ｘ２００ＣにおけるＢＥＱと０ｘ２０１４におけるＢとの間の介在する命令の実行とを暗示する。全体的投機深度５０及びコミット・ウィンドウ投機深度５１は、３及び２に増加する。
【００７１】
０ｘ４０００−０ｘ４００４：ＬＤＲ及びＣＭＰ命令は、ウェイポイント命令でなく、したがって、追跡要素の生成をトリガしない。
【００７２】
０ｘ４００８：分岐が成立しないと予測され、したがって、追跡モジュール１２は、Ｎ要素を生成する。Ｎ要素は、ＬＤＲ及びＣＭＰ命令とＢＮＥ命令との実行を暗示する。全体的投機深度５０及びコミット・ウィンドウ投機深度５１は、４及び３に増加する。
【００７３】
アドレス０ｘ２００Ｃにおける分岐が、正しく予測されたと決定される：追跡モジュール１２は、コミット・ウィンドウ投機深度５１が最大投機深度（この実例では３）に等しいので、コミット要素を出力する必要がない。全体的投機深度５０及びコミット・ウィンドウ投機深度５１は、要素をコミットしたことにもかかわらず、同じであるままであり、なぜなら、追跡分析器６の観点から、このコミットメントは、次のＰ０要素が出力されるまで可視にならないからであり、したがって、このポイントにおいて、追跡分析器６は、依然として、コミット・ウィンドウにおいて３つの要素を投機的として知覚し、全体として追跡ストリーム内の４つの投機的要素を知覚する。同じ理由で、追跡分析器６は、依然として、コミット・ウィンドウ５２の最も古い投機的要素を、０ｘ２００Ｃにおいて出力されたＮ要素として知覚する。全体としてストリームの最も古い残りの投機的要素７０は不変（依然として０ｘ１０００において出力されたＥ要素）である。
【００７４】
０ｘ４００Ｃ：分岐が成立すると予測され、したがって、Ｅ要素が出力される。このＥ要素を検出したとき、追跡分析器６は、コミット・ウィンドウ投機深度５１が、この要素に遭遇するより前に３の最大値にあったので、新しいＥ要素の出力が、０ｘ２００Ｃにおいて出力されたＮ要素がコミットされたと推論され得ることを暗黙的に示すと決定することになる。コミット・ウィンドウ投機深度５１がすでに最大値にあったので、全体的投機深度５０及びコミット・ウィンドウ投機深度５１は、同じであるままである（効果的に、Ｅ要素に応答して通常は実施されるであろう増分が、アドレス０ｘ２００Ｃに関連するより早いＮ要素を暗黙的にコミットすることによって相殺（ｃａｎｃｅｌ  ｏｕｔ）された）。０ｘ２００ＣにおけるＮ要素がコミットされたと推論されたので、コミット・ウィンドウ５２の最も古い要素は、０ｘ２０１４において出力されたＥ要素になる。
【００７５】
０ｘ８０００：ＡＤＤ命令はウェイポイント命令でなく、したがって、追跡要素が出力されない。
【００７６】
０ｘ９０００：ＴＣＯＭＭＩＴ命令は、トランザクションがアボートなしに完了したことを示す。最も古い残りの投機的要素７０（０ｘ１０００において出力されたＥ要素）において開始するように、コミット・ウィンドウをリセットするために、コミット・ウィンドウ・リセット要素ＣＷＭ（０）が出力される。追跡モジュールは、次いで、今では最も古い残りの投機的要素７０でもある、コミット・ウィンドウの最も古い要素をコミットするために、コミット（１）要素を出力する。全体的投機深度５０及びコミット・ウィンドウ投機深度５１は、３つの未解決の要素、すなわち、０ｘ２０１４において出力されたＥ、０ｘ４００８において出力されたＮ、０ｘ４００Ｃにおいて出力されたＥが依然としてあるので、ＣＷＭ（１）要素及びコミット（１）要素の出力に続いて３になる。図９は、ＣＷＭ（０）要素の出力に応答して、コミット・ウィンドウ投機深度５１の（最大値を上回る）４への一時的増分を示すが、それは、コミット（１）要素の出力に続く減分によって直ちに相殺される。いくつかの追跡モジュール・マイクロ・アーキテクチャは、コミット要素が発行されたときにコミット・ウィンドウ投機深度５１が直ちに相殺されることが知られている場合、コミット・ウィンドウ投機深度５１をまったく増分しないことを選定することができることが諒解されよう。
【００７７】
すべての実行をコミットする：すべての分岐予測が正しいと決定され、すべての残りのＥ要素／Ｎ要素がコミットされることを示すためにコミット（３）要素が出力される。
【００７８】
要約すれば、コミット・ウィンドウ移動要素を使用することによって、トランザクション開始命令に関連する要素は、提供される診断情報を改善することができるトランザクションのより効果的な追跡を可能にするために、より若い要素がコミットされたときでも、しばらくの間投機的であるままであり得る。コミット・ウィンドウ移動要素は、（トランザクションだけでなく）他のタイプの投機のためにも使用され得ることが諒解されよう。
【００７９】
図１０は、追跡モジュール１２を使用して追跡要素を生成する方法を示す流れ図である。流れ図は、追跡モジュールが、監視回路要素１８によって、処理回路要素８によって検出されたいくつかのイベントに応答することを示す。これらは、追跡され得るすべてのイベントであるとは限らず、他のイベントも追跡情報の出力につながり得ることが諒解されよう。
【００８０】
ステップ１００において、監視回路要素は、処理回路要素によって実行される現在の命令が、Ｐ０要素を使用して追跡されるべきウェイポイント命令であるかどうかを決定する。たとえば、そのような命令は、分岐命令、ＴＳＴＡＲＴ命令又は他のタイプの命令であり得る。命令がＰ０要素を使用して追跡されるべきである場合、ステップ１０２において、監視回路要素は、その命令が、成立しないと予測される分岐命令であるかどうかを決定する。命令が、成立しないと予測される分岐である場合、ステップ１０４において、監視回路要素１８は、追跡ストリームの次の要素としてＮ要素を出力するように追跡出力回路要素を制御する。命令が、分岐でないか、又は成立すると予測される分岐であるかのいずれかである場合、ステップ１０６において、追跡出力回路要素２０によってＥ要素が出力される。
【００８１】
ステップ１０８において、監視回路要素が、処理回路要素８が、ＴＳＴＡＲＴ命令の実行又は所定のタイプのロード／ストア動作の実行など、潜在的に長い投機期間を示すイベントに遭遇したと決定した場合、（そのイベントに関連する任意のＥ要素又は他の投機的要素を出力すると）、ステップ１１０において、監視回路要素１８は、コミット・ウィンドウ移動（ＣＷＭ）要素をも出力するように追跡出力回路要素２０を制御する。コミット・ウィンドウが移動されるべきである要素の数は、いくつの他の追跡要素が、ＣＷＭ要素の出力を引き起こしたイベントに関連するか、又はいくつの前の要素が出力され、投機的であるままであるかに依存し得る。
【００８２】
ステップ１１２において、追跡モジュール１２の監視回路要素１８は、処理回路要素が、追跡ストリームの１つ又は複数の前に出力された投機的要素に対応する命令をコミットしたかどうかを決定する。コミットした場合、ステップ１１４において、監視回路要素は、コミット・ウィンドウにおける投機的要素の数（コミット・ウィンドウ投機深度５１）が、現在、最大投機深度２４よりも小さいかどうかを決定する。最大投機深度２４よりも小さくない場合（コミット・ウィンドウ投機深度５１が最大投機深度に等しいとき）、コミットされた要素が、次のＰ０要素の出力から追跡分析器によって推論され得るので、追跡ストリームにおいて要素が出力される必要がない。しかしながら、コミット・ウィンドウ５２における投機的要素の数５１が、最大投機深度２４よりも小さい場合、ステップ１１６において、コミットされるべき要素の数を指定するコミット要素が出力される。
【００８３】
ステップ１１８において、監視回路要素は、処理回路要素が、追跡ストリームにおいて前に出力された投機的要素に対応する任意の投機的に実行される命令をキャンセルしたかどうかを検出し、キャンセルした場合、ステップ１２０において、監視回路要素１８は、キャンセルされるべきであるコミット・ウィンドウの最も若い要素の数を指定する、追跡ストリームにおけるキャンセル要素を出力するように追跡出力回路要素２０を制御する。
【００８４】
ステップ１２２において、監視回路要素は、処理回路要素が、その開始がＣＷＭ要素を出力されるようにトリガした、投機期間の終了に達したかどうかを検出する。たとえば、ステップ１２２において検出され得るイベントは、処理回路要素による、トランザクション終了（ＴＣＯＭＭＩＴ）命令の実行又は投機されたロード／ストア命令のコミットメントを含むことができる。これらのイベントのうちの１つが検出された場合、ステップ１２４において、監視回路要素１８は、コミット・ウィンドウ・リセット要素、たとえば、ウィンドウ開始パラメータとして０を指定するＣＷＭ要素を出力する追跡出力回路要素２０を制御し、コミット・ウィンドウ・リセット要素は、追跡ストリームにおける最も古い残りの投機的要素７０に戻ってコミット・ウィンドウ５２に開始を移動するように追跡分析器をトリガすることになる。
【００８５】
追跡によってどのタイプの要素が出力されたかにかかわらず、ステップ１０４、１０６、１１０、１１４、１１６、１２０、１２４のいずれかに続いて、方法は、処理回路要素における別のイベントについてチェックするために、ステップ１００に戻る。方法は、処理回路要素が、実行されるプログラムを通して１ステップずつ進むように、循環する。
【００８６】
図１１は、追跡分析器６によって実施される、追跡モジュールによって生成された追跡要素のストリームを分析する方法を示す流れ図を示す。追跡分析プログラム３２を実行するホスト処理回路要素３０は、ターゲット処理回路要素によって実行されるターゲット・プログラムのコピー３６を受信し、これを使用して、追跡記憶域３４から受信された追跡要素のシーケンスを解釈する。ステップ１５０において、追跡分析器６は、まだ検討されていない追跡要素のシーケンスにおける次の要素を分析する。
【００８７】
ステップ１５２において、次の要素がＰ０要素、たとえば、上記で説明されたＥ要素又はＮ要素であるかどうかが決定される。そうである場合、ステップ１５４において、追跡分析器は、ターゲット・プログラムのコピー３６から、どの命令がＥ要素又はＮ要素に対応するかを決定し、Ｅ要素又はＮ要素に基づいて、それらの命令の成果を推論する。たとえば、Ｅ要素又はＮ要素は、次のウェイポイント命令に先行する命令が実行されたことを暗示し、並びにターゲット・プログラム３６における次のウェイポイント命令の成果を示し得る。ステップ１５６において、追跡分析器は、（コミット・ウィンドウにおける投機的要素の数を示す）コミット・ウィンドウ投機深度５１が、追跡ストリームを生成した特定の追跡モジュールのために定義された最大投機深度２４に現在等しいかどうかを決定する。等しくない場合、任意のより早い要素のコミットメントに関する推論がこの段階で行われないことがあり、方法は、ステップ１５０に戻る。しかしながら、コミット・ウィンドウ投機深度５１が最大投機深度２４に等しい場合、ステップ１５８において、追跡分析器はまた、コミット・ウィンドウ５２における最も古い投機的要素がコミットされたと推論することができ、コミット・ウィンドウの次の最も古い投機的要素において開始するようにコミット・ウィンドウを前方に移動し得る。したがって、明示的コミット要素が追跡ストリーム中に含まれなかったにもかかわらず、より早い要素のコミットメントに関する推論が依然として行われ得る。最も古い投機的要素がコミットされるべきと推論されるとき、これは、ターゲット・プログラム３６における１つ又は複数の命令の対応するブロックが、誤予測なしに正しく実行されたと決定され得ることを意味する。
【００８８】
ステップ１６０において、追跡分析器６は、追跡ストリームにおける次の要素がＣＷＭ（Ｘ）要素であるかどうかを決定する。ＣＷＭ（Ｘ）要素である場合、ステップ１６２において、追跡分析器は、コミット・ウィンドウ開始位置が、追跡ストリーム全体の最も古い残りの投機的要素７０の後のＸ番目の投機的要素に移動されることを示すために、その内部状態を更新する。Ｘ＝０である場合、これは、事実上、コミット・ウィンドウ・リセットであり、コミット・ウィンドウは、今では、最も古い残りの投機的要素７０自体において開始する。Ｘ＞０である場合、コミット・ウィンドウ５２は、最も古い残りの投機的要素７０よりも後の要素において開始するように移動される。
【００８９】
ステップ１６４において、分析されるべき追跡ストリームにおける次の要素がコミット要素コミット（Ｘ）である場合、ステップ１６６において、追跡分析器は、Ｘがコミット要素によって指定されたパラメータである、コミット・ウィンドウ５２におけるＸ個の最も古い投機的要素がコミットされたと決定し、また、Ｘ個の要素だけコミット・ウィンドウの開始を前方に移動する。したがって、追跡分析器は、追跡ストリームが生成されたとき、それらのＸ個の最も古い投機的要素に対応する命令のブロックがターゲット・プロセッサ８によって正常に実行されたと推論することができる。
【００９０】
一方、ステップ１６８において、追跡ストリームにおける次の要素がキャンセル（Ｘ）要素である場合、ステップ１７０において、追跡分析器は、コミット・ウィンドウにおける最も若いＸ個の投機的要素が、これらが、より早い誤投機に続いて正しく実行されなかった命令のブロックを表すので、キャンセルされるべきであると決定する。この場合も、キャンセルされるべきより若い投機的要素の数が、キャンセル要素において指定されたパラメータによって示される。
【００９１】
検出された要素のタイプにかかわらず、次いで、ターゲット処理回路要素８の挙動に関する推論が行われ、追跡ステータス情報（たとえば、投機深度、コミット・ウィンドウ位置など）に対する更新が行われ、次いで、方法は、シーケンスにおける次の要素を分析するために、ステップ１５０に戻る。
【００９２】
本発明の例示的な実施例が、添付の図面を参照しながら本明細書では詳細に説明されたが、本発明がそれらの正確な実施例に限定されないこと、並びに、様々な変更及び修正が、添付の特許請求の範囲及び趣旨によって規定される本発明の範囲から逸脱することなく、当業者によってその中で実施され得ることを理解されたい。
【図１】
2021511587.tif 000004
【図２】
2021511587.tif 000005
【図３】
2021511587.tif 000006
【図４】
2021511587.tif 000007
【図５】
2021511587.tif 000008
【図６】
2021511587.tif 000009
【図７】
2021511587.tif 000010
【図８】
2021511587.tif 000011
【図９】
2021511587.tif 000012
【図１０】
2021511587.tif 000013
【図１１】
2021511587.tif 000014
【国際調査報告】
2021511587.tif 000015
2021511587.tif 000016