JP7153731B2 - コミット・ウィンドウ移動要素 - Google Patents
コミット・ウィンドウ移動要素 Download PDFInfo
- Publication number
- JP7153731B2 JP7153731B2 JP2020539701A JP2020539701A JP7153731B2 JP 7153731 B2 JP7153731 B2 JP 7153731B2 JP 2020539701 A JP2020539701 A JP 2020539701A JP 2020539701 A JP2020539701 A JP 2020539701A JP 7153731 B2 JP7153731 B2 JP 7153731B2
- Authority
- JP
- Japan
- Prior art keywords
- elements
- speculative
- commit
- trace
- commit window
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000012545 processing Methods 0.000 claims description 190
- 230000004044 response Effects 0.000 claims description 33
- 238000000034 method Methods 0.000 claims description 25
- 238000012544 monitoring process Methods 0.000 claims description 21
- 230000008859 change Effects 0.000 claims description 18
- 238000004458 analytical method Methods 0.000 claims description 17
- 238000004454 trace mineral analysis Methods 0.000 claims description 12
- 230000000694 effects Effects 0.000 claims description 8
- 238000004590 computer program Methods 0.000 claims description 6
- 235000013619 trace mineral Nutrition 0.000 description 39
- 239000011573 trace mineral Substances 0.000 description 39
- 230000006399 behavior Effects 0.000 description 7
- 238000013459 approach Methods 0.000 description 6
- 238000010586 diagram Methods 0.000 description 6
- 230000000977 initiatory effect Effects 0.000 description 4
- 238000001514 detection method Methods 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 230000003139 buffering effect Effects 0.000 description 2
- 206010000210 abortion Diseases 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 239000003550 marker Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000000737 periodic effect Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/3024—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a central processing unit [CPU]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3466—Performance evaluation by tracing or monitoring
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3466—Performance evaluation by tracing or monitoring
- G06F11/3476—Data logging
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3466—Performance evaluation by tracing or monitoring
- G06F11/348—Circuit details, i.e. tracer hardware
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3636—Software debugging by tracing the execution of the program
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
Description
本技法は、データ処理の分野に関する。
より詳細には、本技法は、処理回路要素による命令の処理の成果(outcome)を示す追跡(trace)データの生成及び分析に関する。
データ処理装置は、処理回路要素による命令の処理を監視し、処理回路要素によって命令を処理した成果を示す要素のシーケンスを出力するための、追跡モジュールを有し得る。たとえば、追跡モジュールによって生成された追跡要素は、処理回路要素による命令の処理中に起こる、分岐命令の成果、例外の発生、又は他の関心イベントの発生など、処理挙動を示し得る。追跡分析ユニットは、追跡モジュールによって出力された要素のシーケンスを分析し、所与のプログラムが実行されたとき、処理回路要素によってどんな動作が実行されたかを再構築することができる。これは、デバッギング又は診断目的のために有用であり、たとえば、ソフトウェア開発を支援するために又は性能分析のために有用であり得る。
少なくともいくつかの実例は、
処理回路要素による命令の処理を監視するための監視回路要素と、
処理回路要素による命令の処理の成果を示す要素のシーケンスを出力するための追跡出力回路要素と
を備える追跡モジュールであって、
追跡出力回路要素は、
処理回路要素が、要素のシーケンスのコミット・ウィンドウ(commit window)における少なくとも1つの最も古い(old)投機的要素(speculative element)によって表される1つ又は複数の投機的に実行される(speculatively executed)命令をコミットしたことを示す、コミット要素(commit element)であって、コミット・ウィンドウが、処理回路要素によって依然としてコミットされるべきである少なくとも1つの投機的に実行される命令を表す少なくとも1つの投機的要素を備える要素のシーケンスの一部分を備え、コミット要素は、コミット要素に続いて前記少なくとも1つの最も古い投機的要素がコミット・ウィンドウから除外されるべきであることをも示す、コミット要素と、
要素のシーケンスの最も古い残りの投機的要素によって表される1つ又は複数の投機的に実行される命令が、処理回路要素によってコミットされないままである間、コミット・ウィンドウが、どの投機的要素がコミット・ウィンドウの最も古い投機的要素であるかを変更するために、最も古い残りの投機的要素に対して移動するべきであることを示す、コミット・ウィンドウ移動要素(commit window move element)と
を出力することが可能である、追跡モジュールを提供する。
処理回路要素による命令の処理を監視するための監視回路要素と、
処理回路要素による命令の処理の成果を示す要素のシーケンスを出力するための追跡出力回路要素と
を備える追跡モジュールであって、
追跡出力回路要素は、
処理回路要素が、要素のシーケンスのコミット・ウィンドウ(commit window)における少なくとも1つの最も古い(old)投機的要素(speculative element)によって表される1つ又は複数の投機的に実行される(speculatively executed)命令をコミットしたことを示す、コミット要素(commit element)であって、コミット・ウィンドウが、処理回路要素によって依然としてコミットされるべきである少なくとも1つの投機的に実行される命令を表す少なくとも1つの投機的要素を備える要素のシーケンスの一部分を備え、コミット要素は、コミット要素に続いて前記少なくとも1つの最も古い投機的要素がコミット・ウィンドウから除外されるべきであることをも示す、コミット要素と、
要素のシーケンスの最も古い残りの投機的要素によって表される1つ又は複数の投機的に実行される命令が、処理回路要素によってコミットされないままである間、コミット・ウィンドウが、どの投機的要素がコミット・ウィンドウの最も古い投機的要素であるかを変更するために、最も古い残りの投機的要素に対して移動するべきであることを示す、コミット・ウィンドウ移動要素(commit window move element)と
を出力することが可能である、追跡モジュールを提供する。
少なくともいくつかの実例は、上記で説明されたような追跡モジュールと、処理回路要素とを備える、データ処理装置を提供する。
少なくともいくつかの実例は、処理回路要素による命令の処理を追跡するための方法であって、
処理回路要素による命令の処理を監視することと、
処理回路要素による命令の処理の成果を示す要素のシーケンスを出力することと
を含み、
要素のシーケンスは、
処理回路要素が、要素のシーケンスのコミット・ウィンドウにおける少なくとも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つの最も古い投機的要素によって表される1つ又は複数の投機的に実行される命令をコミットしたと推論することであって、コミット・ウィンドウが、ターゲット処理回路要素によってコミットされると依然として推論されるべきである少なくとも1つの投機的に実行される命令を表す少なくとも1つの投機的要素を備える要素のシーケンスの一部分を備える、推論することと、要素のシーケンスの後続の要素の分析のためにコミット・ウィンドウから前記少なくとも1つの最も古い投機的要素を除外することとを行うための、追跡分析回路要素と
を備える追跡分析器であって、
要素のシーケンスにおけるコミット・ウィンドウ移動要素を検出したことに応答して、追跡分析回路要素は、要素のシーケンスの最も古い残りの投機的要素がターゲット処理回路要素によってコミットされると依然として推論されるべきままである間、どの投機的要素がコミット・ウィンドウの最も古い投機的要素であるかを変更するために、最も古い残りの投機的要素に対してコミット・ウィンドウを移動するように構成された、追跡分析器を提供し得る。
本技法のさらなる態様、特徴及び利点は、添付の図面とともに読まれるべきである、実例の以下の説明から明らかであろう。
データ処理装置が、命令の投機的実行をサポートし得、命令は、命令が実行されるべきであったかどうか、又は命令へのデータ入力が有効であるかどうかが実際に知られる前に、実行される。たとえば、装置は、分岐命令の成果を予測するための分岐予測器を有し得、所与の分岐命令の予測に続いて、予測が正しいと仮定して後続の命令が投機的に実行され得る。後で分岐命令が実際に実行されると、分岐の現実の成果が決定され得、予測が正しかった場合、後続の投機的に実行される命令がコミットされ得、したがって、それらの結果が有効として扱われる。予測が正しくなかった場合、投機的に実行される命令は、分岐が実行されたときに存在した状態に状態を巻き戻すために、それらの命令の効果がキャンセルされ得、次いで、実行されているプログラム内の命令の異なる経路を実行し始める。投機的実行の他の理由は、たとえば、データ投機(speculation)を含み得、ここで、メモリからロードされるべきロード命令のデータ値は、ロードが実際に行われる前に予測されて、ロードが完了する前に後続の命令が実行されることが可能になり得る。また、以下で説明されるように、いくつかの装置は、トランザクション内の命令の投機的実行を導入し得るトランザクショナル・メモリをサポートし得る。
追跡モジュールは、処理回路要素による命令の処理を監視するための監視回路要素と、処理回路要素による命令の処理の成果を示す要素のシーケンスを出力するための追跡出力回路要素とを備え得る。そのような追跡モジュールでは、命令の投機的実行が、追跡モジュールによって出力された要素のシーケンスにおける実行された命令の成果を効率的に表すことについての課題を提示することがある。追跡要素が出力される前にオンチップで追跡要素をバッファするためのリソースは、しばしば限られていることがあり、したがって、投機的に知られている命令が明確にコミットされるべきであることが知られるまで追跡要素の出力を保持することが、実際的でないことがある。投機が正しかったかどうかにかかわらず、投機的に実行される命令の成果を示す要素を出力し、次いで、前に出力された要素投機的要素が、コミットされた命令に関係するのかキャンセルされた命令に関係するのかを示す追加の要素を追跡ストリーム中に含めることが、追跡出力回路要素にとってより単純であり得る。
したがって、追跡出力回路要素は、処理回路要素が、要素のシーケンスのコミット・ウィンドウにおける少なくとも1つの最も古い投機的要素によって表される1つ又は複数の投機的に実行される命令をコミットしたことを示す、コミット要素の出力をサポートし得る。コミット・ウィンドウは、処理回路要素によって依然としてコミットされるべきである少なくとも1つの投機的に実行される命令を表す少なくとも1つの投機的要素を含む要素のシーケンスの一部分を表す。コミット要素は、コミット要素が追跡分析器によって見られると、少なくとも1つの最も古い投機的要素がコミット・ウィンドウから除外されるべきであることをも示し得る。したがって、コミット・ウィンドウは、コミット・ウィンドウが、コミットされた命令に関係する要素をもはや含まないように、追跡ストリーム内で前方に移動する。そのようなコミット要素をサポートすることは、追跡モジュールが、実行される命令が投機的であるかどうかにかかわらず、それらに関係する要素を単に出力するが、次いで、命令がコミットされると、コミット要素を出力することによって、前に出力された投機的要素の成果を解決することを可能にする。この手法は、対応する命令がコミットされるまで追跡モジュール内に要素をバッファする必要を回避し、オンチップ追跡リソースを節約する。
しかしながら、発明者は、ますます、投機的実行の追跡をより複雑にする現代の処理装置によってサポートされる投機の形態があることを認識した。トランザクショナル・メモリ又は長レイテンシ・ロード/ストア動作など、いくつかのタイプの投機が、長時間投機的であるままであり得る間、いくつかのより若い命令が、前の投機が解決される前に投機的に実行及び解決される。このタイプの投機は、コミット・ウィンドウの最も古い要素のコミットメントを表すコミット要素のみを用いて追跡することが困難であり得る。実際には、これは、しばしば、そのような長寿命投機イベントをサポートする、処理回路要素のために生成され得る追跡情報の有効性を限定し得る。
以下で説明される技法では、追跡モジュールは、要素のシーケンスの最も古い残りの投機的要素によって表される1つ又は複数の投機的に実行される命令が、処理回路要素によってコミットされないままである間、コミット・ウィンドウが、どの投機的要素がコミット・ウィンドウの最も古い投機的要素であるかを変更するために、最も古い残りの投機的要素に対して移動するべきであることを示す、コミット・ウィンドウ移動要素をもサポートする。したがって、コミット・ウィンドウ移動要素の出力は、コミット・ウィンドウの開始が命令のシーケンス内で移動されることを可能にし、したがって、最も古い残りの投機的要素が投機的であるままであり、コミットされないままである間、後続のコミット要素が、まさに最も古い残りの投機的要素をコミットすることにもはや制限されず、シーケンスにおけるより遅い要素のコミットメントを表すことができる。これは、たとえば、トランザクショナル・メモリ又は長レイテンシ・ロード・ストア動作を使用する命令のシーケンスを追跡するために極めて有用であり得る。通常、処理回路要素が、任意のより若い要素をコミットする前に最も古い残りの投機的要素の成果を解決する必要があることを予想するので、最も古い残りの投機的要素を実際にコミットすることなしに、コミット・ウィンドウの開始を移動することが有用であろうことは、反直観的であるように見え得る。しかしながら、トランザクショナル・メモリなどの機能性があれば、より若い分岐又は他の投機的命令が、トランザクションが全体としてコミットされ得る前に解決されることが可能であり得る。同様に、長レイテンシ・ロードがあれば、ロードが解決される前に、より若い投機的命令が解決され得る。したがって、コミット・ウィンドウ移動要素は、より良い診断情報がそのようなプログラム・コードの実行を評価するために提供されることを可能にするために使用され得る。たとえば、(アボートされたトランザクションなどの)誤投機(misspeculation)の場合、これは、誤投機が識別される前にプロセッサがプログラム・コード内でその投機についてどこまで達したかに関する診断情報を提供するのを助けることができる。たとえば、トランザクション・メモリの場合、これは、トランザクション・コードの実行における性能の損失についての考えられる理由を診断する際に有用であり得る。
追跡出力回路要素は、投機的に実行された命令が処理回路要素によってコミットされるたびにコミット要素を出力する必要はない。いくつかの実例では、処理回路要素が、コミット・ウィンドウにおける少なくとも1つのより古い投機的要素によって表される1つ又は複数の投機的に実行される命令をコミットすることに応答して、追跡モジュールは、コミット・ウィンドウにおける投機的要素の数が最大投機深度よりも小さいかどうかを決定し得る。最大投機深度は、所与の追跡モジュールのためにハードワイヤードされるか又はレジスタ内にプログラム可能であり得るパラメータであり得る。最大投機深度は、処理回路要素によって一度に投機的であるままであり得る(たとえば、所与のプロセッサ・コアのマイクロ・アーキテクチャ設計のパラメータであり得る)異なる投機ポイントの最大数に対応するようにセットされ得る。したがって、システム設計者は、追跡モジュールがともに使用されるべきである特定の処理回路要素の知識に基づいて、その追跡モジュールのための最大投機深度を定義し得る。
処理回路要素が1つ又は複数の命令をコミットしたものとして検出され、コミット・ウィンドウにおける投機的要素の数が最大投機的深度よりも小さいとき、追跡出力回路要素は、それらの命令に対応する1つ又は複数の投機的要素がコミットされたことを示すために、コミット要素を出力し得る。しかしながら、コミット・ウィンドウにおける投機的要素の数が最大投機深度に等しいとき、コミット・ウィンドウの最も古い1つ又は複数の要素によって表される1つ又は複数の投機的に実行される命令がコミットされたにもかかわらず、追跡出力回路要素は、コミット要素の出力を抑制し得る。これは、追跡モジュールによって出力される追跡要素の数を低減することによって追跡帯域幅を節約するために有用であり得る。一般に、処理回路要素は、いくつの投機ポイントが一度に保留中であり得るかにおいて限定され得、たとえば、命令がキャンセルされるとき、前の状態の復元を可能にするために投機ポイントに関する情報をバッファするためのバッファ中のエントリの数によって限定され得る。したがって、最大投機深度に達したとき、投機的に実行される命令に関係する任意のさらなる要素が追跡モジュールによって出力される場合、暗黙的に、最も古い投機的要素に対応する命令がすでにコミットされたであろうことが仮定され得、したがって、これは、追跡要素のストリーム中に含まれるべき明示的追跡要素を必要とすることなしに、追跡分析器によって推論され得る。したがって、最大投機深度の定義は、出力される必要があるコミット要素の数を低減するために有用であり得る。
コミット・ウィンドウ移動要素の追跡モジュール・サポートが、コミット要素がいつ出力される必要があるかを限定するためにそのような最大投機深度を使用する追跡モジュールのために特に有用であり得る。初期投機ポイントが非常に長い間投機的であるままであり、次いで、その投機ポイントの後に発生したいくつかのより若い投機ポイントが、投機的に実行され、最も古い投機ポイントが解決される前に解決される、プログラム・コードのシーケンスの追跡について考える。コミット・ウィンドウ移動要素のサポートなしに、各投機ポイントの成果を十分に追跡することが可能であるように、最大投機深度は、比較的大きくなるようにセットされる必要があり得る。これは、特に、トランザクションが、多数の分岐又は他の投機判定ポイントを含み得る潜在的に無限の数の命令を含み得る、トランザクショナル・メモリを伴うコードについての問題であり、したがって、そのコードの挙動を完全に追跡することは、トランザクションが全体として解決される前にトランザクションの開始の後に比較的多数の投機的要素が出力されることを必要とし得る。
そのようなプログラム・コードを追跡することに対する1つの手法は、最も古い要素をコミットする必要なしに、さらなる投機ポイントに達するにつれて、コミット・ウィンドウのサイズが増加し続けることができるように、最大投機深度を大きくすることであり得る。しかしながら、これは、トランザクションを使用しないコードを追跡するとき、追跡モジュールの効率を減少させることになり、なぜなら、最大投機深度を増加させることが、命令がコミットされたとき、最大投機深度にまだ達していないことをより一般的にし、したがって、コミット要素が必要とされるであろうからである。これは、生成される追跡データの量を増加させることがあり、したがって、追跡出力回路要素によって出力される生成された追跡要素がオフチップ追跡分析器によって追跡バッファから読み取られる前に、それらの生成された追跡要素をバッファするための、オンチップ追跡バッファ中のスペースなど、リソースのあまり効率的でない使用をもたらす。
(コミット・ウィンドウ移動要素のサポートがない場合の)別の手法は、最大投機深度をより小さく保つことであり得るが、この場合、最大投機深度に達すると、トランザクションが全体としてまだコミットされ得ない場合、コミット要素が、コミット・ウィンドウの最も古い残りの要素に作用するので、トランザクションの分岐又は他の投機ポイントに応答して、さらなる投機的要素を出力することは可能でないであろう。トランザクションのより遅い投機的イベントに関する要素が出力されない場合、これは、追跡分析器が、トランザクションのより遅い命令に関する情報を推論することが可能になることを妨げ得る。たとえば、トランザクションがアボートされた場合、アボートが、最大投機深度に達する前の最後の投機的要素出力の後に発生した場合、追跡ストリームは、追跡分析器が、アボートが発生する前に、処理回路要素がトランザクションを通してどのくらいさらに進めることが可能であったかを推論することが可能であることを可能にすることになる情報を含んでいないことがあり、これは、アボートのタイミング(及び、したがって、潜在的原因)を推論することをはるかに困難にすることがある。
対照的に、上記で説明されたコミット・ウィンドウ移動要素を使用することによって、コミット・ウィンドウ・バッファの開始が、要素のシーケンス全体の最も古い残りの投機的要素を実際にコミットする必要なしに前方に移動され得、したがって、次のコミット要素が、最も古い残りの投機的要素をコミットすることなしに、より若い要素がコミットされたことを示すことができる。これは、長時間投機的であるままであり得るイベントに続いてより若い命令のコミットメントを扱うために最大投機深度を大幅に増加させる必要を回避し、したがって、長寿命投機的イベントに続く各投機的イベントに関する診断情報を依然として提供しながら、全体的に、利用可能な追跡帯域幅がより効率的に使用され得る。
要素のシーケンスの「最も古い残りの投機的要素」という用語は、全体として追跡出力回路要素によって生成される要素のシーケンスにおけるまさに最も古い投機的要素を指すことに留意されたい。すなわち、最も古い残りの投機的要素は、処理回路要素によって依然としてコミット又はキャンセルされるべき最も古い命令に関係する、前に出力された要素である(又は、追跡分析器の観点から、最も古い残りの投機的要素は、ターゲット・プログラムが実行されたとき、処理回路要素によってコミットされたと追跡分析器によって依然として推論されるべき最も古い命令に関係する)。一方、コミット・ウィンドウにおける「最も古い投機的要素」は、コミット・ウィンドウに対応する追跡シーケンスの特定の部分における最も古い要素を指し、これは、全体として要素のシーケンスにおける最も古い残りの投機的要素と同じであることも同じでないこともある。コミット・ウィンドウ移動要素が追跡ストリーム中に含まれたとき、コミット・ウィンドウの開始は、最も古い残りの投機的要素よりも遅くなり得、したがって、この場合、コミット・ウィンドウの最も古い投機的要素は、要素のシーケンスの最も古い残りの投機的要素と同じでないことがある。
いくつかの実装形態では、コミット・ウィンドウ移動要素が出力されるときにコミット・ウィンドウが移動されるべきである要素の数は、固定であり得る。たとえば、デフォルト量(たとえば、1つの要素だけコミット・ウィンドウを移動すること)が仮定され得る。
しかしながら、他の実装形態では、コミット・ウィンドウ移動要素は、コミット・ウィンドウ移動要素によって示されるコミット・ウィンドウの位置の変更に続いてコミット・ウィンドウの最も古い投機的要素になるべきである投機的要素を示すウィンドウ開始インジケータを示し得る。これは、コミット・ウィンドウが、2つ以上の要素だけ移動する必要がある場合、コミット・ウィンドウが移動するべきである追跡ストリームにおけるポイント、すなわち、どの投機的要素が今ではコミット・ウィンドウの最も古い投機的要素になるべきであるか、を指定する単一のコミット・ウィンドウ要素が出力され得るので、生成されるべき追跡要素の数を低減するのを助けることができる。コミット・ウィンドウ移動要素のウィンドウ開始インジケータは、異なるやり方で、たとえば、要素のシーケンスの最も古い残りの投機的要素に対して、要素のシーケンスの最も最近出力された追跡要素に対して、又はコミット・ウィンドウの最も古い投機的要素に対して表現され得る。
しかしながら、一実例では、ウィンドウ開始インジケータは、コミット・ウィンドウ移動要素によって示されるコミット・ウィンドウの位置の変更が行われた後にコミット・ウィンドウの最も古い投機的要素よりも古くなるべきである、要素のシーケンスの最も古い残りの投機的要素を含む、投機的要素の数を識別する。すなわち、ウィンドウ開始インジケータは、全体として要素のシーケンスの最も古い残りの投機的要素の開始に対するコミット・ウィンドウの開始のオフセットを効果的に示し得る。
コミット・ウィンドウ移動要素は、異なるタイミングにおいて追跡出力回路要素によって出力され得る。異なる追跡実装形態が、そのようなコミット・ウィンドウ移動要素を出力することが有用であり得る、異なるポイントを選定し得る。したがって、概して、比較的長寿命の投機イベントを含むトランザクショナル・メモリ又は他のコードのより効率的な追跡を可能にするために、出力されたウィンドウ移動要素をサポートすることが追跡アーキテクチャにとって有用であるが、コミット・ウィンドウ移動要素における正確なタイミングが、実装される特定のシステム実施形態についての問題であり得る。
それにもかかわらず、いくつかの実例では、追跡モジュールの監視回路要素が、処理回路要素がトランザクション開始命令を実行したことを検出したことに応答して、コミット・ウィンドウ移動要素を出力することが有用であり得、トランザクション開始命令が、トランザクション開始命令とトランザクション終了命令との間に実行される1つ又は複数の命令を備えるトランザクションの開始を表し、トランザクションへの命令の効果が、トランザクション開始命令とトランザクション終了命令との間にアボート・イベントが発生することなくトランザクション終了命令に達したときにコミットされるべきである。そのようなトランザクショナル・メモリをサポートするシステムでは、トランザクショナル開始命令に続いて、トランザクション全体が、トランザクション終了命令に達する前に潜在的に無限長の時間の間投機的であるままであり得、トランザクション終了命令とトランザクション開始命令との間に、追跡モジュールによって解決される必要があり得るいくつかの他の分岐又は他の投機ポイントがあり得る。コミット・ウィンドウ移動要素の使用は、サポートされる最大投機深度を大幅に増加させる必要なしに、より若い分岐又は他の投機ポイントが解決される場合でも、トランザクション開始命令を表す投機的追跡要素が長時間投機的である(コミットされない)ままであることを可能にする。トランザクション開始命令の実行に応答してコミット・ウィンドウ移動要素が出力される正確なタイミングは変動し得る。いくつかの場合には、コミット・ウィンドウ移動要素は、トランザクション開始命令自体に応答して出力され得る。代替的に、コミット・ウィンドウ移動要素は、トランザクション開始命令に続く第1の命令に応答して出力され得る。コミット・ウィンドウ移動要素を出力する正確なタイミングは、採用される特定の追跡実装形態に依存し得る(たとえば、同じ一般的な追跡アーキテクチャの異なるマイクロ・アーキテクチャ実装形態が、これのための異なるオプションを選定し得る)。
いくつかの実例では、追跡出力回路要素は、監視回路要素が、処理回路要素が所定のタイプのロード/ストア命令を実行することを検出したことに応答して、コミット・ウィンドウ移動要素を出力し得る。所定のタイプのロード/ストア命令は、すべてのロード/ストア命令であり得る。代替的に、所定のタイプは、ロード/ストア命令のサブセット、たとえば、解決するのに潜在的に長い時間がかかることが予想されるロード/ストア命令(たとえば、メモリから複数のレジスタに値を転送するためのロード複数命令(load multiple instructions)、又は比較的遅いアクセス時間を有することが予想されるメモリの領域からのロード)を備え得る。ロード値投機を使用するシステムでは、ロード命令に続く投機の期間は、比較的長くなり得、したがって、後続のコミット要素が、ロード/ストア命令が実行された後に達したより若い投機ポイントに関係するより遅い要素に作用し得る間、ロード/ストア命令を表す追跡要素が投機的であるままであることができるように、コミット・ウィンドウの開始を移動するためにコミット・ウィンドウ移動要素を使用することが有用であり得る。
追跡出力回路要素は、要素のシーケンスの最も古い残りの投機的要素がコミット・ウィンドウの最も古い投機的要素になるべきであることを示すコミット・ウィンドウ・リセット要素(commit window reset element)の出力をもサポートし得る。したがって、コミット・ウィンドウ・リセット要素は、コミット・ウィンドウが、全体として要素のシーケンスの最も古い残りの投機的要素において開始する、デフォルトに戻るべきであることを効果的に示し得る。たとえば、これは、コミット・ウィンドウ移動要素が出力されることを引き起こした長寿命投機イベントが解決されると有用であり得る。いくつかの場合には、コミット・ウィンドウ・リセット要素は、異なる追跡要素フォーマット又は異なる要素タイプ識別子を有することができるが、いくつかの場合には、コミット・ウィンドウ・リセット要素は、コミット・ウィンドウ移動要素と共通符号化フォーマットを共有し得、ただし、コミット・ウィンドウ・リセット要素のための(コミット・ウィンドウが移動されるべき追跡ストリームにおけるポイントを示す)ウィンドウ開始インジケータが、要素のシーケンスの最も古い残りの投機的要素がコミット・ウィンドウの最も古い投機的要素になるべきであることを示す。たとえば、ウィンドウ開始インジケータが、上記で説明されたように、シーケンスの最も古い残りの投機的要素に対するコミット・ウィンドウ開始位置を示す場合、コミット・ウィンドウ・リセット要素は、0のウィンドウ開始インジケータを指定するコミット・ウィンドウ移動要素を単に備え得る。コミット・ウィンドウ・リセット要素は、様々なイベントに応答して出力され得る。たとえば、コミット・ウィンドウ・リセット要素は、トランザクションのトランザクション終了命令に応答して、又は処理回路要素が上記で説明された所定のタイプのロード/ストア命令をコミットしたことに応答して出力され得る。
コミット要素及びコミット・ウィンドウ移動要素に加えて、追跡出力回路要素は、処理回路要素が、コミット・ウィンドウにおける少なくとも1つの最も若い投機的要素によって表される1つ又は複数の投機的に実行される命令の効果をキャンセルしたことを示すキャンセル要素の出力をもサポートし得る。したがって、コミット要素がコミット・ウィンドウの最も古い要素をコミットする間、キャンセル要素は、コミット・ウィンドウにおける(1つ又は複数の)最も若い要素に作用する。コミット要素及びキャンセル要素はともに、処理回路要素が、未解決の(unresolved)分岐をトラッキングするデータをバッファするための限られた量のバッファ・スペースのみを有し得る場合、分岐のシーケンスなど、同時に保留中であり得る投機イベントの数が比較的限られる投機イベントを扱うために有用であり得る。しかしながら、トランザクショナル・メモリ又は長レイテンシ・ロード投機をサポートするシステムでは、これは、後続の投機イベントの解決に関する完全な情報を与えるには不十分であり得、したがって、上記で説明されたコミット・ウィンドウ移動要素を導入することによって、これは、解決するのに長い時間がかかるロード値予測を受けるトランザクション又はロードを伴うコードの処理に関係するより良い診断情報を与えることができる。
コミットされた命令の状態のトラッキングを支援するために、追跡モジュールの監視回路要素は、要素のシーケンスの最も古い残りの投機的要素、及び/又はコミット・ウィンドウの最も古い投機的要素のうちの少なくとも1つを示す追跡情報を維持し得る。この情報は、異なるやり方で、たとえば、最も最近生成された追跡要素など、追跡ストリームにおける何らかの参照ポイントに対して表され得る。したがって、さらなる追跡要素が生成されると、全体としてシーケンスの最も古い残りの投機的要素及びコミット・ウィンドウの最も古い投機的要素を示す情報は、参照される特定の要素が変更しなかった場合でも、相対位置情報を変更するために更新され得る。他の実例では、各要素は、パケット識別子を有し得、最も古い残りの投機的要素及びコミット・ウィンドウの最も古い投機的要素は、固有パケット識別子を通して識別され得る。したがって、ステータス情報を表す様々なやり方がある。監視回路要素及び追跡出力回路要素は、上記で説明されたコミット・ウィンドウ移動要素又はコミット・ウィンドウ・リセット要素など、どんな追跡要素が出力されるべきであるかを判定するのを助けるために、ステータス情報を使用することができる。監視回路要素によって維持されるステータス情報は、コミット・ウィンドウ投機深度と最大投機深度との比較に基づいてコミット要素を出力すべきかどうかを決定するために有用であり得る、コミット・ウィンドウにおける要素の数(コミット・ウィンドウ投機深度)など、他の情報をもトラッキングし得る。
いくつかの実例では、追跡出力回路要素は、要素のシーケンスの最も古い残りの投機的要素、及び/又はコミット・ウィンドウにおける最も古い投機的要素のうちの少なくとも1つを示す追跡情報要素を出力することも可能であり得る。たとえば、追跡出力回路要素は、そのような追跡情報要素を周期的に出力し得、たとえば、一定数の追跡要素の出力の後に追跡情報要素が出力され得る。これは、追跡シーケンスからの追跡情報の潜在的損失(たとえば、追跡バッファについてすべての追跡要素が読み取られることが可能になる前に、追跡バッファがオーバーフローした場合、一部の情報が失われ得る)から守るために有用であり得る。最も古い残りの投機的要素及びコミット・ウィンドウの最も古い投機的要素を指定する情報を周期的に出力することによって、これは、先行する追跡データのすべてが追跡分析器に可視であるとは限らない場合でも、追跡分析器が、追跡情報要素が出力されるシーケンスにおけるポイントの後にどの要素がコミットされたかに関する情報を復元することを可能にすることができる。
対応するやり方では、ターゲット処理回路要素による命令の処理の成果を示す要素のシーケンスを分析するための分析方法が提供され得る。シーケンスは、上記で説明されたような追跡モジュールから受信され得る。要素のシーケンスにおいてコミット要素が検出されたとき、追跡分析器は、ターゲット処理回路要素が、要素のシーケンスのコミット・ウィンドウにおける最も古い投機的要素によって表される1つ又は複数の投機的に実行される命令をコミットしたと推論し得る。この場合も、コミット・ウィンドウは、コミットされると依然として推論されるべきである少なくとも1つの投機的要素を含む要素のシーケンスの一部分を備える。コミット・ウィンドウにおけるより古い投機的要素のうちの1つ又は複数がコミットされたと推論すると、次いで、追跡分析はまた、シーケンスにおける後続の要素の分析のためにコミット・ウィンドウからコミットされた要素を除外し得、すなわち、コミット・ウィンドウは追跡ストリーム内で前方に移動され得る。追跡要素のシーケンスにおいてコミット・ウィンドウ移動要素が検出された場合、追跡分析器は、要素のシーケンスの最も古い残りの投機的要素が全体としてターゲット処理回路要素によってコミットされると依然として推論されるべきままである間、どの投機的要素がコミット・ウィンドウの最も古い投機的要素であるかを変更するために、要素のシーケンスの最も古い残りの投機的要素に対してコミット・ウィンドウを移動し得る。コミット・ウィンドウが、追跡シーケンスの最も古い要素をコミットすることなしに移動され得るので、より早いイベントが投機的であるままである間、潜在的に無制限の数の後続のイベントがコミットされると推論され得、初期投機ポイントを過ぎたイベントの処理に関するより多くの情報が推論されることを可能にする(たとえば、トランザクションを通してどのくらいでアボート・イベントが発生したかを決定する)。
図1は、データ処理装置4と、追跡分析器6とを備えるシステム2の実例を示す。データ処理装置4は、処理回路要素8を有し、処理回路要素8は、追跡されるべきターゲット・プログラムを実行している処理回路要素であるので、ターゲット処理回路要素と呼ばれることがある。データ処理装置4は、実行されているターゲット・プログラムを記憶することと、他のデータ又は命令を記憶することとを行うための、オンチップ記憶回路要素10を有する。データ処理装置4は、処理回路要素8がターゲット・プログラムを実行するときに処理回路要素8の動作を監視することと、追跡分析器6による分析のための(追跡ストリームと呼ばれる)追跡要素のシーケンスを出力することとを行うための、埋込み追跡モジュール12を有する。オンチップ追跡バッファ14が、データ処理装置4内で出力追跡要素を一時的にバッファし得る。追跡分析器6は、追跡出力ポート16を介して追跡バッファ14から追跡要素を読み取り得る。追跡バッファ14は、たとえば、バッファがフルになるとき、最も古い追跡要素が、追跡モジュール12によって生成されたより新しい追跡要素で上書きされるような、サーキュラー・バッファとして機能し得る。追跡モジュール12は、処理回路要素8がターゲット・プログラムを実行するときに処理回路要素8の動作を監視することと、処理回路要素8によって実施される処理の特性を示す追跡要素の対応するシーケンスを生成するように追跡出力回路要素20を制御することとを行うための、監視回路要素18を含み得る。埋込み追跡モジュールはまた、以下でより詳細に説明される、追跡ストリームに関係するステータス情報を追跡するためのいくつかのステータス記憶要素(たとえば、レジスタ)22と、コミット・ウィンドウ内の投機的要素の最大数を表す最大投機深度を示すための記憶要素24(たとえば、レジスタ)とを有し得る。
追跡分析器6は、追跡モジュールによって生成された追跡ストリームの分析のための専用集積回路であり得るか、又は追跡分析器を制御するためのソフトウェアを実行する汎用コンピュータであり得る。追跡分析器は、追跡分析を実行するためのホスト処理回路要素30を有する。たとえば、ホスト処理回路要素30は、追跡分析制御プログラム32を実行する汎用CPUであり得るか、又は追跡情報を復号するための論理ゲートをもつ専用ハードウェア回路であり得る。データ処理装置からの追跡ポート16を介して出力された追跡ストリームは、追跡分析器6内の追跡記憶域34(たとえば、メモリ)内に記憶され得る。追跡ストリームは、ホスト処理回路要素30によって記憶域34から読み取られ、ホスト処理回路要素30は、追跡ストリームが生成されたときにターゲット処理回路要素8によって実行されたターゲット・プログラムのコピー36に基づいて追跡要素を分析する。
処理回路要素がターゲット・プログラムを実行していた間、処理回路要素の挙動を示す追跡要素のストリームを提供することによって、これは、追跡分析器が、ターゲット・プログラムを通してとられたプログラム・フローの経路を決定することを可能にし、これは、性能の損失又は正しくない処理結果についての潜在的理由を特定するために有用であり得る。これは、処理回路要素8がオンチップ記憶域10からターゲット・プログラムを実行するシステムのために特に有用であり、なぜなら、この場合、オンチップ記憶域10と処理回路要素8との間の信号経路が外部に可視でなく、したがって、たとえば、外部集積回路ピン上の信号を観測することによって処理回路要素8の挙動を診断することが可能でないからである。したがって、処理回路要素8の動作を観測するためにハードウェアで提供されるオンチップ追跡モジュール12を含めることは、たとえば、埋込みシステムのためのソフトウェア開発及びプラットフォーム開発の支援を提供する。しかしながら、追跡ストリームがオンチップで生成されるとき、オンチップで提供される追跡バッファ14のサイズが限定され得、追跡出力ポート16が追跡データを出力するためのある限られた帯域幅を有するにすぎないことがあるので、生成された追跡データのボリュームを管理することにおける課題があり得る。
図2は、追跡モジュール12の追跡出力回路要素20によって出力され得る追跡要素のタイプのサブセットを示す表を示す。生成された追跡データのボリュームを限定するための1つのやり方は、ターゲット処理回路要素8によって実行されるあらゆる命令に応答して追跡要素を生成するのではなく、代わりに、「ウェイポイント(waypoint)」命令と呼ばれる選択されたタイプの命令に応答して追跡要素を生成することであり得る。ウェイポイント命令に応答して生成された要素は、P0要素と呼ばれ、E(成立する(taken))又はN(成立しない(not taken))の2つのタイプのものであり得る。ウェイポイント命令は、プログラム・フローが発散し得るか又は処理回路要素の動作がターゲット・プログラム・コピー36のみから推論され得ない命令(分岐命令、条件付き命令又は他のプログラム・フロー変更命令など)を含み得る。ウェイポイント命令は、投機が正しくなかった場合に処理が巻き戻されるプログラムのポイントを表すためのマーカーとしてP0要素を出力することが有用であるので、投機(後続の挙動の予測)が行われる命令をも含み得る。追跡分析器6は、ターゲット・プログラムのコピー36を有するので、非ウェイポイント命令について、追跡分析器は、2つの連続するウェイポイント命令のうちの2番目のウェイポイント命令に対応するP0要素が追跡ストリームにおいて観測されたとき、これらのウェイポイント命令間のすべての命令が実行されたと仮定することができる。したがって、P0要素は、所与のウェイポイント命令に応答して出力されるが、そのウェイポイント命令で終了する1つ又は複数の命令のブロックの実行を表す。分岐の場合、E要素は、分岐が成立することが予測される場合に追跡モジュールによって出力され、N要素は、分岐が成立しないと予測される場合に出力される。分岐以外のウェイポイント命令の場合、E要素がP0要素として出力され得る。
P0要素によって表される命令は、投機的に又は非投機的にのいずれかで実行されたことがあり、P0要素は、投機的に実行される命令又は非投機的に実行される命令を区別しない。図2の3番目の行及び4番目の行に示されているように、追跡モジュール12は、投機について行われた予測が正しかったかどうかが解決されると、P0要素に対応する投機的に実行される命令がコミットされたのか、キャンセルされたのかを示すための、コミット要素及びキャンセル要素をサポートし得る。投機の目的は、たとえば、分岐予測、ロード・データ値予測、トランザクションの実行など、変動し得る。
コミット要素は、追跡ストリームの投機的要素のある数を示すパラメータXを指定する。Xは、0よりも大きく、レジスタ24において示される最大投機深度よりも小さいか又はそれに等しい。コミット要素が追跡モジュールによって出力されたとき、これは、追跡ストリームのコミット・ウィンドウ内の最も古いX個の投機的要素によって表される投機的命令が処理回路要素によってコミットされたことと、コミット・ウィンドウの開始がそれらのコミットされた要素の後に移動されるべきであることとを示す。「最も古い」要素は、追跡モジュール12によって最も過去に出力された、又は追跡ストリーム内の最も早い位置を有する、コミット・ウィンドウの要素である(逆に、「最も若い」要素は、追跡モジュール12によって最も最近出力された、追跡ストリームにおける最も遅い位置における要素である)。コミット・ウィンドウは、追跡分析器が処理回路要素による命令の投機的実行及びそれらの投機的に実行される命令の後続の解決(コミットされた又はキャンセルされた)をトラッキングするための参照ポイントとして作用する追跡ストリームの一部分を指す。キャンセル要素はまた、0よりも大きく、最大投機深度よりも小さいか又はそれに等しい、パラメータXを指定する。キャンセル要素は、コミット・ウィンドウの最も若いX個の投機的要素によって表される投機的命令が(それらが正しくない予測に続いて正しくなく実行されたので)処理回路要素によってキャンセルされたことを示す。したがって、追跡モジュールは、それらの投機成果が解決されるまで、オンチップでバッファ内にそれらの要素を保持する必要を回避するために、前に出力されたP0要素(又は他のタイプの追跡要素)によって表される命令の成果を解決するためにコミット要素及びキャンセル要素を使用することができ、必要とされるオンチップ・バッファ・スペースの量を低減することによって回路面積を節約する。
図2の5番目の行に示されているように、追跡モジュールは、0よりも大きいか又はそれに等しく、最大投機深度よりも小さいか又はそれに等しい、投機的要素の数を示すパラメータXを指定する、コミット・ウィンドウ移動要素(CWM要素)をもサポートする。Xが0に等しいとき、CWM要素は、コミット・ウィンドウ・リセット要素として解釈され、これは、追跡分析器6が、分析されている命令のシーケンスにおける最も古い残りの投機的要素にコミット・ウィンドウの開始を移動するべきであることを示す。Xが0よりも大きい場合、コミット・ウィンドウ移動要素は、追跡ストリームの最も古い残りの投機的要素がコミットされないままである間、その最も古い残りの投機的要素に続くX番目の投機的要素にコミット・ウィンドウの開始を移動するように追跡分析器6をトリガする。したがって、コミット・ウィンドウ移動要素は、追跡ストリームのどの要素がその後発行されたコミット要素によってターゲットにされるかを制御するために追跡モジュールによって使用され得、したがって、コミット要素が追跡要素のシーケンスのまさに最も古い残りの投機的要素に常に作用することは必須でない。これは、長寿命投機イベント、特に、トランザクション・メモリなど、アーキテクチャ投機を追跡するために有用であり得る。
図2の最下行に示されているように、追跡モジュールは、前に生成されたN要素又はE要素が正しくなく、したがって、N要素又はE要素によって実際に示される成果とは反対の成立する成果又は成立しない成果を示すものとして解釈されるべきであることを示す誤予測要素を出力することをもサポートし得る。これは、分岐誤予測が処理回路要素8によって検出されたとき、追跡モジュールによって使用され得る。
図2は、追跡モジュールによってサポートされ得るすべてのタイプの要素を示すとは限らないことが諒解されよう。追跡要素タイプの他の実例は、以下を含むことができる。
・ 追跡ストリームの最も古い残りの投機的要素、コミット・ウィンドウの位置、又は現在の投機深度をトラッキングする情報など、追跡モジュールのステータス22に関する情報を提供する追跡情報要素。追跡分析器6が、追跡モジュール12によって生成された完全な追跡ストリームを受信した場合、追跡分析器6は、出力追跡データを分析することによって、追跡モジュール12によって記録されたステータス情報22への対応するステータス情報を推論し得る。しかしながら、時々、追跡バッファ14は、すべての追跡データが追跡分析器6によってバッファ14から読み取られる前にオーバーフローし得る。ステータス情報22のスナップショットを周期的に提供するために追跡情報要素を含めることは、すべての前に生成された追跡データが追跡分析器6に可視であるとは限らない場合でも、追跡分析器6が正しい処理成果を再構築することを可能にする。すべての追跡データが利用可能である場合でも、追跡情報要素を提供することは、追跡分析器が、追跡ストリームのすべての先行する追跡データを処理する必要なしにプログラムの中間ポイントから分析を開始することを可能にするので、追跡分析器によるプログラムの選択された部分のより速い分析をも可能にする。
・ 追跡が開始したことを示す「追跡オン」要素。
・ 追跡がオンに切り替えられたときに処理がそこから開始した、プログラム命令アドレスを示すアドレス要素、
・ 処理回路要素8が命令を実行している、実行コンテキストを示すコンテキスト要素。
・ 処理回路要素8の処理中の(割込みを含む)例外の発生を示す例外要素。
他のタイプの追跡要素も生成され得ることが諒解されよう。
・ 追跡ストリームの最も古い残りの投機的要素、コミット・ウィンドウの位置、又は現在の投機深度をトラッキングする情報など、追跡モジュールのステータス22に関する情報を提供する追跡情報要素。追跡分析器6が、追跡モジュール12によって生成された完全な追跡ストリームを受信した場合、追跡分析器6は、出力追跡データを分析することによって、追跡モジュール12によって記録されたステータス情報22への対応するステータス情報を推論し得る。しかしながら、時々、追跡バッファ14は、すべての追跡データが追跡分析器6によってバッファ14から読み取られる前にオーバーフローし得る。ステータス情報22のスナップショットを周期的に提供するために追跡情報要素を含めることは、すべての前に生成された追跡データが追跡分析器6に可視であるとは限らない場合でも、追跡分析器6が正しい処理成果を再構築することを可能にする。すべての追跡データが利用可能である場合でも、追跡情報要素を提供することは、追跡分析器が、追跡ストリームのすべての先行する追跡データを処理する必要なしにプログラムの中間ポイントから分析を開始することを可能にするので、追跡分析器によるプログラムの選択された部分のより速い分析をも可能にする。
・ 追跡が開始したことを示す「追跡オン」要素。
・ 追跡がオンに切り替えられたときに処理がそこから開始した、プログラム命令アドレスを示すアドレス要素、
・ 処理回路要素8が命令を実行している、実行コンテキストを示すコンテキスト要素。
・ 処理回路要素8の処理中の(割込みを含む)例外の発生を示す例外要素。
他のタイプの追跡要素も生成され得ることが諒解されよう。
図3は、投機的実行をトラッキングするために、コミット要素を使用してプログラムの命令の実行をトラッキングすることの実例を示す。左側列は、ターゲット処理回路要素8によって実行される命令を示す。中間列は、これらの命令に応答して追跡モジュール12によって生成された追跡要素を示す。表の右側の注の列は、生成された要素についての説明を示す注を提供する。
図3に示されているように、処理回路要素4が、示されている命令を実行するとき、各ウェイポイント命令(この実例では、命令アドレス0x1000及び0x200Cにおける分岐)が、P0要素の出力をトリガする。P0要素がEであるのか、Nであるのかは、分岐が成立すると予測されたのか、成立しないと予測されたのかに依存する。アドレス0x200Cにおいて出力されるN要素は、アドレス0x200CにおけるBEQ命令だけでなく先行する非ウェイポイント命令(MOV、LDR及びCMP)も実行されたことを示すことに留意されたい。分岐の成果が解決されたとき、コミット要素が出力される。この場合、0x1000及び0x200Cにおける分岐の成果を予測した後に、例外(IRQ)が発生し、例外が発生したプログラム中のポイントをマークするアドレスを指定する例外要素が出力される。例外が発生しなかった場合、分岐に対応する要素は、処理回路要素8が、分岐予測が正しかったかどうかを決定することに応答して、コミット又はキャンセルされることになる。しかしながら、例外が、先行する命令の処理に割込みをかけるとき、分岐予測が正しくなかった場合でも、例外が、処理の現在のスレッドの処理を中断し、代わりに、例外ハンドリング・ルーチンからの命令が実行されることになるので、プロセッサ状態のより早いポイントへの巻戻しがないことになる。したがって、例外は、アドレス0x1000及び0x200Cにおける分岐命令のために生成されたP0要素を効果的にコミットすることがコミットされ得るものと見なされ得る。したがって、追跡モジュール12は、コミットされるべき要素の数を3として指定するコミット要素を出力する(E要素及びN要素は分岐に対応し、例外要素は例外に対応する)。
図4は、キャンセル要素の使用を示す、追跡される命令のシーケンスの別の実例を示す。図4の初期部分は、図3と同様であるが、このとき、例外が発生せず、代わりに、アドレス0x2014における第3の分岐の実行に続いて、アドレス0x200Cにおける分岐が誤予測されたと決定され、したがって、成立しない成果が実際は成立するべきであった。したがって、アドレス0x2010及び0x2014における命令は実行されるべきでなかった。したがって、追跡モジュール12は、キャンセルされるべき要素の数を示す1のパラメータを指定するキャンセル要素を出力する。このポイントにおいて、コミット・ウィンドウは、アドレス0x1000、0x200C、0x2014における分岐のための3つのP0要素(E、N、E)出力に対応する。キャンセル要素は、コミット・ウィンドウの最も若い要素に作用し、したがって、対応する命令(STR、B)が実行されるべきでなかったことを示すために、0x2014におけるE要素出力をキャンセルする。また、追跡モジュール12は、0X200Cにおける分岐のための先行するN要素が、間違った状態を示すこと、すなわち、今では追跡分析器によってE原子要素(atom element)として解釈されるべきであることを示すために、誤予測要素を出力する。キャンセル要素及び誤予測要素の使用は、それらが正しいことが知られるまで、要素をバッファする必要を回避することによって追跡バッファ・スペースを温存することを助け、これは、追跡バッファ14及び追跡ポート16を介して出力される追跡データの連続ストリームを提供するのにより効率的であり得る。アドレス0x200Cにおける分岐BEQのターゲット・アドレス0x3000から実行が再開すると、アドレス0x1000、0x200C及び0x3004における分岐のために生成されたP0要素が解決されたことを示すために、最終的にコミット要素が出力される。
追跡モジュール12は、命令がコミットされるたびにコミット要素を出力する必要はない。マイクロ・アーキテクチャ投機の場合、処理回路要素内の投機的に実行される命令を追跡するためのマイクロ・アーキテクチャ・リソースは、一般に、一度に保留中のある限られた数の投機イベントのみをサポートし得る。たとえば、処理回路要素8は、誤投機がある場合に処理状態が復元され得る巻戻しポイントを識別する情報をバッファするための限られた数のスロットをもつバッファを有し得る。すべてのスロットが使用された場合、処理回路要素8は、最も古い投機イベントが解決されるまで、それ以上の投機的予測を行うことができない。処理回路要素8がそのような投機をどのように制御するかの正確な詳細は、(ターゲット・プログラムがどのように解釈されるべきかを定義する命令セット・アーキテクチャではなく)所与のプロセッサのマイクロ・アーキテクチャ実装形態に依存し得る。したがって、処理回路要素がその最大投機深度に達すると、(分岐などの)投機のための基礎として働く別の命令に遭遇した場合、次いで、それが実行された場合、これは、最も古い残りの投機がコミットされたことを暗示し得る。したがって、明示的に追跡ストリームにおいて最も早い投機イベントのコミットメントを示すことが必要でないことがある。したがって、追跡モジュールは、許容される最大投機深度をトラッキングするレジスタ24を有し得る。システム設計者は、追跡モジュールが使用されるべきである特定のマイクロ・アーキテクチャの知識に基づいて、最大投機深度として使用するための値を選定し得る。投機の解決に続いて1つ又は複数の命令のブロックがコミットされるとき、現在の投機深度(依然として解決されるべきコミット・ウィンドウにおける解決されていない(outstanding)投機的要素の数)が最大投機深度にある場合、コミット要素の発行は、次の投機的追跡要素が出力されるとき、これが、最も古い解決されていない投機的要素がコミットされたことを暗黙的に示し得るので、抑制され得る。
図5は、処理回路要素によって実施されている処理の特性を決定するために、追跡モジュール12によって出力されたP0要素とコミット要素とのシーケンスが追跡分析器6によってどのように分析され得るかの実例を示し、投機的要素の暗黙的コミットメントの実例を示す。図5に示されているように、追跡分析器は、処理の成果についての推論を行うために、追跡要素のシーケンスを通して1ステップずつ進む。この実例では、説明を簡単にするために、シーケンスは、E要素とコミット要素とのみを備える。追跡分析器は、追跡分析器が追跡ストリームをパースするとき、現在の投機深度50を示すパラメータをトラッキングし、また、コミット・ウィンドウ52の位置を示すパラメータを維持し、これは、要素が依然として投機的である、追跡ストリームの部分を表す(すなわち、コミット・ウィンドウは、処理回路要素によって投機的に実行されたが、現在の分析ポイントにおいてコミット又は解決されると依然として推論されるべきである、命令に関係する投機的要素を備える)。図5の表記法では、分析器6が達した現在の分析ポイントは、下向きの矢印によって示され、コミット・ウィンドウ52の位置は、コミット・ウィンドウ内の要素の下方の括弧によって示され、追跡分析器6によってそのステータスがすでに解決された要素は、アスタリスクで示される。この実例では、最大投機深度は3であると仮定される。
この実例における追跡ストリームの分析は、以下のように進む(図5に示されているステップに対応する)。
1.追跡分析器は、追跡ストリームを分析することを開始する。
2.追跡分析器は、第1のE要素から、1つ又は複数の命令が投機的に実行されたと決定し、したがって、投機深度を1に増加させる。コミット・ウィンドウ52は、今ではシーケンスの第1のE要素を備える。
3.別のE要素に遭遇し、これは、コミット・ウィンドウの投機深度及びサイズを2つの要素に増加させる。
4.別のE要素に遭遇し、これは、コミット・ウィンドウの投機深度及びサイズを3つの要素に増加させる。
5.別のE要素に遭遇する。現在の投機深度がすでに最大投機深度(3)にあったので、さらなる投機的要素Eの出力は、ストリームの第1のE要素がコミットされたことを暗黙的に示し、なぜなら、処理回路要素8は、すでにその最大投機深度にあったので、最も古い投機がコミットされるまで、さらなる投機を実施することが可能でなかったからである。したがって、第1のE要素は、それが解決されたことを示すために今ではアスタリスクで示され、コミット・ウィンドウは、今ではストリームの第2から第4のE要素を備える。現在の投機深度は、3のままである。
6.シーケンスにおける次の要素は、コミットされるべき要素の数が1つであることを指定するコミット要素である。コミット・ウィンドウにおける最も古い投機的要素(今ではアスタリスクでマークされた、シーケンスの第2のE要素)は、コミットされたと推論され、コミット・ウィンドウの開始は、このコミットされた要素を除外するために移動する。1つ又は複数の要素がコミットされたとき、投機深度は、コミットされた要素の数だけ減分され、したがって、投機深度は、今では2である(依然として、コミット・ウィンドウ内に残る2つの投機的要素があることを反映する)。
7.さらなるE要素が検出され、したがって、投機深度は3に増加し、コミット・ウィンドウのサイズは増加する。
8.別のコミット要素が、コミット・ウィンドウにおける最も古い投機的要素(追跡ストリームの始まりから開始して、第3の要素)がコミットされたことを示し、再び、投機深度が2に減分される。
1.追跡分析器は、追跡ストリームを分析することを開始する。
2.追跡分析器は、第1のE要素から、1つ又は複数の命令が投機的に実行されたと決定し、したがって、投機深度を1に増加させる。コミット・ウィンドウ52は、今ではシーケンスの第1のE要素を備える。
3.別のE要素に遭遇し、これは、コミット・ウィンドウの投機深度及びサイズを2つの要素に増加させる。
4.別のE要素に遭遇し、これは、コミット・ウィンドウの投機深度及びサイズを3つの要素に増加させる。
5.別のE要素に遭遇する。現在の投機深度がすでに最大投機深度(3)にあったので、さらなる投機的要素Eの出力は、ストリームの第1のE要素がコミットされたことを暗黙的に示し、なぜなら、処理回路要素8は、すでにその最大投機深度にあったので、最も古い投機がコミットされるまで、さらなる投機を実施することが可能でなかったからである。したがって、第1のE要素は、それが解決されたことを示すために今ではアスタリスクで示され、コミット・ウィンドウは、今ではストリームの第2から第4のE要素を備える。現在の投機深度は、3のままである。
6.シーケンスにおける次の要素は、コミットされるべき要素の数が1つであることを指定するコミット要素である。コミット・ウィンドウにおける最も古い投機的要素(今ではアスタリスクでマークされた、シーケンスの第2のE要素)は、コミットされたと推論され、コミット・ウィンドウの開始は、このコミットされた要素を除外するために移動する。1つ又は複数の要素がコミットされたとき、投機深度は、コミットされた要素の数だけ減分され、したがって、投機深度は、今では2である(依然として、コミット・ウィンドウ内に残る2つの投機的要素があることを反映する)。
7.さらなるE要素が検出され、したがって、投機深度は3に増加し、コミット・ウィンドウのサイズは増加する。
8.別のコミット要素が、コミット・ウィンドウにおける最も古い投機的要素(追跡ストリームの始まりから開始して、第3の要素)がコミットされたことを示し、再び、投機深度が2に減分される。
要約すれば、前の投機的要素の成果を示すためにコミット要素を使用することによって、次いで、これは、追跡分析器が、コミット要素より前に追跡モジュールによって出力されたどの追跡要素が信用され得るかを決定することを可能にすることができる。
図6は、少なくとも1つのキャンセル要素が含まれる対応する実例を示す。
A.ステップAにおいて、追跡分析器のステータスは、図5のステップ4のステータスと同様である(すなわち、図5のステップ1~3は、簡潔のために図6に示されていない)。
B.追跡ストリームにおいて分析される次の要素は、キャンセルされるべき要素の数として1を指定するキャンセル要素である。したがって、コミット・ウィンドウの最も若い要素がキャンセルされる(すなわち、分析器6は、対応する命令が実行されるべきでなかったと推論する)。キャンセル要素は、投機深度が2に減分されることを引き起こすが、コミット・ウィンドウにおける最も古い要素は未解決であるままであり、したがって、コミット・ウィンドウの開始位置は同じままである。キャンセルされた要素が、誤予測された分岐に関係する場合、分岐誤予測要素も含まれ得た(分岐誤予測要素は簡潔のために図6に示されていない)。
C.さらなるE要素が受信され、これは、投機深度を3に増加させ、コミット・ウィンドウは、今では3つの投機的要素を備える(ウィンドウは実際に4つのP0要素にわたるが、キャンセルされたE要素は、その成果がすでに解決されたとき、キャンセルされたE要素が投機的要素でないので、投機深度に寄与すると見なされない)。
D.次の要素はコミット要素であり、これは、コミット・ウィンドウ52における最も古い要素がコミットされたことを示し、投機深度が2に減少され、コミット・ウィンドウ52の開始はストリームの第2の要素に移動した。
A.ステップAにおいて、追跡分析器のステータスは、図5のステップ4のステータスと同様である(すなわち、図5のステップ1~3は、簡潔のために図6に示されていない)。
B.追跡ストリームにおいて分析される次の要素は、キャンセルされるべき要素の数として1を指定するキャンセル要素である。したがって、コミット・ウィンドウの最も若い要素がキャンセルされる(すなわち、分析器6は、対応する命令が実行されるべきでなかったと推論する)。キャンセル要素は、投機深度が2に減分されることを引き起こすが、コミット・ウィンドウにおける最も古い要素は未解決であるままであり、したがって、コミット・ウィンドウの開始位置は同じままである。キャンセルされた要素が、誤予測された分岐に関係する場合、分岐誤予測要素も含まれ得た(分岐誤予測要素は簡潔のために図6に示されていない)。
C.さらなるE要素が受信され、これは、投機深度を3に増加させ、コミット・ウィンドウは、今では3つの投機的要素を備える(ウィンドウは実際に4つのP0要素にわたるが、キャンセルされたE要素は、その成果がすでに解決されたとき、キャンセルされたE要素が投機的要素でないので、投機深度に寄与すると見なされない)。
D.次の要素はコミット要素であり、これは、コミット・ウィンドウ52における最も古い要素がコミットされたことを示し、投機深度が2に減少され、コミット・ウィンドウ52の開始はストリームの第2の要素に移動した。
図3~図6に示されているコミット要素及びキャンセル要素を使用する技法は、いくつかの命令が明確に実行されるべきであることが知られる前にそれらの命令を実行することによって性能を改善するために、処理回路要素8によってマイクロ・アーキテクチャ投機機構が使用されているとき、命令の実行を追跡するために有用であり得る。一般に、処理回路要素8は、実施されている投機をトラッキングするために利用可能な有限量のマイクロ・アーキテクチャ・リソースを有するにすぎないので、コミット・ウィンドウをある最大投機深度に限定することが有用であり得る。
ただし、プロセスは、トランザクショナル・メモリと呼ばれる投機のアーキテクチャ形態をもサポートし得る。トランザクショナル・メモリは、データ処理システム内で実行する処理の複数のスレッド(単一の処理要素上でのタイムシェアされるか、又は並列に異なる処理要素上で実行しているのいずれか)が、共用リソースにアクセスする必要があり、データ処理動作の性質が、スレッドが共用リソースと相互作用することを開始すると、動作のセットが、別のスレッドがその間にリソースにアクセスすることなしに、リソースを使用してアトミックに(atomically)完了することが必要であり得るようなものであり得る場合、有用であり得る。スレッド間のこの競合を扱うための1つの技法は、少なくとも1つのターゲット・リソースへの排他的アクセスを制御するためのロックを使用することであり得る。たとえば、1つのスレッドが特定のアドレス領域におけるデータにアクセスすることを開始するとき、スレッドは、ロックの所有権を主張するためにロック変数を設定し得、次いで、ロックを所有するスレッドがロックの所有権を有する間、ロック変数をチェックする他のスレッドは、ロックがすでに主張されたと決定し得、したがって、そのアドレス領域と相互作用するコードのセクションに入らないことがある。そのようなロック・ベースの手法は、各スレッドが、競合が発生し得ないことを保証するロックの所有権を有しない限り、別のスレッドとの競合が発生し得るので、各スレッドが、デフォルトで、共用リソースにアクセスするコードのセクションに入ることができないと仮定するという点で、悲観的と見られ得る。しかしながら、しばしば、ロック識別子が、いくつかのリソース(たとえば、アドレスの範囲)への排他的アクセスを制御し得、したがって、あるスレッドが、ロック変数によって保護されたリソースのセット内のあるリソースにアクセスしている場合、別のスレッドが、同じリソースに明確にアクセスすることになることは保証されない。したがって、ロック・ベースの手法は、スレッド間の競合がまれである場合、スレッドが、共用リソースを使用するコードのクリティカル・セクションに入る前にロックが解放されることを不必要に待っていることがあるので、性能の損失をもたらし得る。
共用リソースにアクセスするスレッド間の競合を扱うためのより楽観的な手法は、トランザクショナル・メモリ・サポートを使用することであり得る。データ処理システムは、処理回路要素によるデータ処理のスレッド内のトランザクションの実行をサポートするための回路要素を有し得る。図7に示されているように、トランザクションは、トランザクションの始まりをマークするトランザクション開始命令TSTARTとトランザクションの終了をマークするトランザクション終了命令TCOMMITとの間に実行されるスレッドの命令を備える。トランザクション開始命令とトランザクション終了命令との間に、処理回路要素は、介在する命令を投機的に実行し、トランザクション終了命令に達するまで、それらの投機的に実行される命令の結果のコミットメントを防ぎ得る。トランザクション開始命令の実行に続く(ただし、トランザクション終了命令に達する前の)アボート・イベントの発生により、トランザクションがアボートされ、投機的結果が廃棄され得る。別のスレッドによって行われたメモリ・アクセスとの検出された競合、トランザクション内でサポートされないタイプの命令の実行、又はトランザクションの処理中の例外の発生など、トランザクションをアボートするためのいくつかの理由があり得る。トランザクショナル・メモリ手法の場合、各スレッドは、楽観的に、他のスレッドとの競合が発生しないと仮定してコードのクリティカル・セクションを処理することを開始し得、次いで、競合が検出されることなしにクリティカル・セクションの終了に達した場合、トランザクションの結果がコミットされ得る。競合がまれである場合、トランザクショナル・メモリ・サポートを使用することは、より多くのスレッドがコードのそれらのクリティカル・セクションをコンカレントに処理することを可能にすることによって、性能を改善することができる。
したがって、データ処理装置4におけるターゲット処理回路要素8は、アーキテクチャ・レベルにおけるトランザクションの実行をサポートする命令セット・アーキテクチャに従って命令の実行をサポートするための、様々なトランザクショナル・メモリ・サポート・リソース60を有し得る。トランザクショナル・メモリ・サポート回路要素60は、様々な形態をとり得、トランザクションの処理を支援するいくつかのリソースを含み得る。たとえば、トランザクショナル・メモリ・サポート回路要素60は、少なくとも1つのスレッドの少なくとも1つのトランザクションのための投機的に実行される命令の結果を記憶するための投機的結果記憶回路要素を含み得る。いくつかの場合には、異なるスレッドにおいて動作するトランザクションのために、投機的に実行される結果の複数のセットが記憶され得る。すべての投機的結果が投機的結果記憶回路要素に記憶されることは必須でない。たとえば、トランザクショナル・メモリ・サポート回路要素は、トランザクションをアボートすると復元される、トランザクション開始命令に応答してキャプチャされる状態を記憶するための復元状態記憶回路要素をも有し得る。したがって、トランザクションをアボートすると復元されるレジスタ状態値又は他のアーキテクチャ状態値は、プロセッサのアーキテクチャ・レジスタにおける現在の値が、(トランザクションのアボート時に復元状態で上書きされる)それらの投機的結果を効果的に示し得るので、投機的結果記憶回路要素に記憶される必要がない。投機的結果記憶回路要素は、たとえば、メモリに値を記憶するためのストア命令の結果を記憶し得る。トランザクションがコミットされるまで、投機的結果記憶回路要素におけるストア命令のための投機的結果を保持することによって、これは、その後正しくないとわかり得るか又は他のスレッドが正しく挙動しないことを引き起こし得る、データ値でメモリを汚染することを回避する。
別の例では、トランザクショナル・メモリ・サポート回路要素は、第1のスレッドのトランザクション内で行われる所与のアドレスへのデータ・アクセスと、(トランザクション内で又は非トランザクショナル・スレッド中でのいずれかで)別のスレッドによって行われた同じアドレスへのデータ・アクセスとの間の競合を検出するための、競合検出回路要素を備え得る。たとえば、トランザクション内の命令によってアクセスされるアドレスをトラッキングするためにアドレス・トラッキング回路要素が提供され得る。競合検出回路要素は、別のスレッドが、アドレス・トラッキング回路要素に記録されたアドレスのうちの1つにアクセスするとき、競合を検出し得る。競合が検出されたとき、競合検出回路要素は、アドレスがトラッキングされている第1のスレッドのトランザクションのアボートをトリガし得る。
トランザクショナル・メモリ・サポート回路要素は、トランザクションのアボートを引き起こし得る他のイベントを検出するための回路要素をも有し得る。たとえば、割込み又は例外を受信すると、トランザクションはアボートされ得る。また、トランザクショナル・メモリ・サポート回路要素がリソースを使い果たした場合(たとえば、投機的結果記憶回路要素に記憶されるべき投機的結果の数又はアドレス・トラッキング回路要素によってトラッキングされるアドレスの数が、提供される記憶域内で利用可能な容量を超える場合)、トランザクションがアボートされ得、したがって、トランザクションが競合なしに正しく進むことを保証することはもはや可能でない。また、いくつかのタイプの命令が、トランザクション内で処理されるには不適切であり得、トランザクション内で可能にされないタイプの命令に遭遇すると、トランザクションはアボートされ得る。トランザクションをアボートすると、再びトランザクションを実行することを試みるべきであるのか、ロックを使用することなど、非トランザクション・ベース機構を使用して代替コード経路を実行することを試みるべきであるのかを決定することは、ソフトウェア次第であり得る。
追跡モジュール12が、マイクロ・アーキテクチャ投機を追跡することが可能な追跡アーキテクチャをすでにサポートする場合、同じ機構が、トランザクションを使用するアーキテクチャ投機を追跡するためにも使用され得ることを予想し得る。たとえば、監視回路要素18が、ターゲット処理回路要素8がトランザクション開始命令を実行することを検出したとき、別のE要素が生成されて、これが、そこを越えると実行が投機的であるポイントを表すことが示され得る。トランザクションがアボートされた場合、そのE要素(及び、トランザクション内で実行される命令に関連する任意のその後生成されたE要素)は、追跡ストリームにおけるキャンセル要素を出力することによってキャンセルされ得る。アボートが発生することなく、トランザクションがトランザクション終了命令に達した場合、トランザクション全体がコミットされ得、追跡モジュール12は、トランザクションに関連するすべてのE要素をコミットするためにコミット要素を出力することができる。
しかしながら、達し得る投機の深度が、投機的実行を追跡するために処理回路要素8において提供される限られたマイクロ・アーキテクチャ・リソースに基づいて、一般に、ある最大数に限られる、マイクロ・アーキテクチャ投機とは異なり、トランザクショナル・メモリでは、トランザクション開始命令においてレジスタ状態がキャプチャされ、トランザクションは、トランザクション終了命令に達するまで潜在的に無制限の数の命令を含むことができるので、トランザクション中に達し得る投機深度(最も古い投機的要素が解決され得る前に出力され得る投機的追跡要素の数)に固定の限界がない。これは、明示的コミット要素が必要とされるかどうかをトラッキングするために最大投機深度24を使用する追跡モジュール12を用いて適切に追跡することが困難であり得る。たとえば、図7に示されているようなトランザクション開始命令とトランザクション内の最初の数個の分岐とに関してE要素が出力される場合、最大投機深度にすぐに達し得、次いで、追跡モジュールは、通常、次の分岐がコミットされるとき、これが、TSTART命令のための最も古い残りの投機的に出力された要素もコミットされるべきであることを暗示することを仮定することになる。しかしながら、トランザクションでは、これは、TSTART命令を表すE要素が、後の分岐が解決される準備ができている場合でも、依然として投機的であり得るので、正しくないことになる。
1つのソリューションは、トランザクションの終了に達する前に、より早い命令をコミットすることを暗示する必要がないように、トランザクション内のすべての投機ポイントがコミット・ウィンドウ内にあるままであり得る可能性を高くするために、最大投機深度を増加させることであり得る。しかしながら、最大投機深度についてどんな値が仮定されても、コードが、トランザクション内で最大投機深度よりも大きい数の投機ポイントを伴って実行され得る見込みが常にあり得る。最終的に、最大投機深度に達すると、追跡モジュールは、TSTART命令のE要素が解決され得るまで、さらなる投機的要素を出力することが可能でなくなり、したがって、トランザクション内の後続の処理に関するさらなる追跡情報を提供することが可能でなくなり、これにより、後続のアボートの原因を識別すること、又は、追跡分析器が、アボートが発生する前に、トランザクションを通して処理がどのくらい進んだかを推論することを可能にすることが困難にする。いずれの場合も、最大投機深度24を増加させることは、それが、より早い要素をコミットすることを明示的に示すために出力されなければならないコミット要素の数を増加させ得るので、非トランザクショナル・コードを追跡するときに、あまり効率的でない追跡リソース使用状況につながり得る。
これらの問題点は、上記で説明されたコミット・ウィンドウ移動要素を提供することによって対処され得、これは、最も古い残りの投機的要素がまだコミットされていないにもかかわらず、コミット・ウィンドウの開始が移動されることを可能にする。たとえば、トランザクションの開始をマークするTSTART命令に遭遇したとき、E要素が出力され得、コミット・ウィンドウ移動要素も、追跡出力回路要素20によって出力されて、コミット・ウィンドウが、TSTART命令に対応する投機的E要素の後の次の要素において実際に開始すると見なされるべきであることが示され得る。TSTART命令に対応する投機的要素を、その要素を実際にコミットすることなしにコミット・ウィンドウから除外することによって、これは、最大投機深度24を大幅に増加させる必要なしに、トランザクションを通して進行をトラッキングする、より有用な追跡情報が生成され得るように、後続のコミット要素が次の要素に作用することを可能にし、したがって、利用可能な追跡リソース(たとえば、バッファ14中のスペース又は追跡出力ポート16上の帯域幅)のより効率的な使用を可能にする。
図8は、コミット・ウィンドウ移動要素が含まれるときの追跡分析を示す図5及び図6と同様の実例を示す。この実例では、図2に示されているようにコミット・ウィンドウ移動要素の符号化が使用され、0のウィンドウ開始パラメータを指定する要素CWM(0)が、コミット・ウィンドウ・リセット要素を表す。現在の分析ポイント(下向き矢印)、コミット・ウィンドウ位置52(括弧)、及び解決された要素(アスタリスク)を示すために図5及び図6において使用される表記法に加えて、図8では、追跡ストリーム全体における最も古い残りの投機的要素70が、ボールド及び下線フォントを使用して示されている。最も古い残りの投機的要素70の位置及びコミット・ウィンドウ52の開始(最も古い投機的要素)の位置が、追跡モジュール内のステータス・レジスタ22において示され得、また、追跡ストリームを分析するときに追跡分析器6によってトラッキングされ得る。同様に、現在の投機深度50が、追跡モジュールによってステータス・レジスタ22内で、及び追跡分析器6によって任意の追跡分析ステータスにおいて、トラッキングされ得る。図8のステップ1~4は、図5の場合と同じであり、したがって、再び詳細に説明されない。ステップ2~4における最も古い残りの投機的要素70は、(要素がまだコミットされていないので)追跡ストリームの第1の要素である。図8の後続のステップは、以下のように進む。
5.追跡分析器6によって分析されるべき次の要素は、CWM(1)要素であり、これは、最も古い残りの投機的要素70がそれ自体コミットされていない間、コミット・ウィンドウ52が、最も古い残りの投機的要素に対して1つの要素位置だけ移動されるべきであり、したがって、今では追跡ストリームの第2から第4の要素にわたることを示す。コミット・ウィンドウ移動要素は、(依然として未解決の3つの投機的要素があるので)実際の投機深度を変更しないが、コミット・ウィンドウ投機深度51(コミット・ウィンドウ自体内の投機的要素の数)は、今では2である。コミット・ウィンドウ投機深度51は、追跡モジュールのステータス・レジスタ22における全体的投機深度50から、及び追跡分析器6によって対応する様式で、別々にトラッキングされ得る。コミット要素を出力するべきかどうかを決定するために、追跡モジュール12は、CWM(1)要素に続いて最も古い残りの投機的要素が今ではコミット・ウィンドウの外部にあるので、総投機深度を比較するのではなく、コミット・ウィンドウ投機深度51を最大投機深度24と比較し得る。
6.追跡ストリームにおいて分析される次の要素は、コミット要素である。ステップ5に続いて、コミット・ウィンドウの最も古い投機的要素は、全体として追跡ストリームの第2の要素であり、これは、それが解決されたことを示すために、今ではステップ6におけるアスタリスクで示される。最も古い残りの投機的要素70はコミットされないままである。総投機深度50及びコミット・ウィンドウ投機深度51は、それぞれ、2及び1に減分される。
7.別のE要素が検出され、これは、コミット・ウィンドウが拡張されるので、総投機深度50/コミット・ウィンドウ投機深度51をそれぞれ3及び2に増加させる。
8.分析される次の要素は、CWM(0)要素、すなわち、コミット・ウィンドウ・リセット要素であり、したがって、コミット・ウィンドウ52の開始が、最も古い残りの投機的要素70において開始するようにリセットされる。総投機深度50は、依然として3つの投機的要素があるにすぎないので、3のままであり、最も古い残りの投機的要素70が今では再びコミット・ウィンドウ内にあるので、コミット・ウィンドウ投機深度51も3になる。コミット・ウィンドウ内の3つの投機的要素は、示されている追跡ストリームの第1、第3及び第6の要素である。
9.検出される次の要素は、コミット・ウィンドウにおける最も古い投機的要素がコミットされることを示す、コミット(1)要素である。この場合、コミット・ウィンドウにおける最も古い投機的要素は、全体としてストリームの最も古い残りの投機的要素でもある。コミット・ウィンドウは、前方に移動し、最も古い残りの投機的要素70は、今では追跡ストリームの第3の要素になり、これは、依然として未解決である最も古い要素である。総投機深度50及びコミット・ウィンドウ投機深度51は、2に減分される。
5.追跡分析器6によって分析されるべき次の要素は、CWM(1)要素であり、これは、最も古い残りの投機的要素70がそれ自体コミットされていない間、コミット・ウィンドウ52が、最も古い残りの投機的要素に対して1つの要素位置だけ移動されるべきであり、したがって、今では追跡ストリームの第2から第4の要素にわたることを示す。コミット・ウィンドウ移動要素は、(依然として未解決の3つの投機的要素があるので)実際の投機深度を変更しないが、コミット・ウィンドウ投機深度51(コミット・ウィンドウ自体内の投機的要素の数)は、今では2である。コミット・ウィンドウ投機深度51は、追跡モジュールのステータス・レジスタ22における全体的投機深度50から、及び追跡分析器6によって対応する様式で、別々にトラッキングされ得る。コミット要素を出力するべきかどうかを決定するために、追跡モジュール12は、CWM(1)要素に続いて最も古い残りの投機的要素が今ではコミット・ウィンドウの外部にあるので、総投機深度を比較するのではなく、コミット・ウィンドウ投機深度51を最大投機深度24と比較し得る。
6.追跡ストリームにおいて分析される次の要素は、コミット要素である。ステップ5に続いて、コミット・ウィンドウの最も古い投機的要素は、全体として追跡ストリームの第2の要素であり、これは、それが解決されたことを示すために、今ではステップ6におけるアスタリスクで示される。最も古い残りの投機的要素70はコミットされないままである。総投機深度50及びコミット・ウィンドウ投機深度51は、それぞれ、2及び1に減分される。
7.別のE要素が検出され、これは、コミット・ウィンドウが拡張されるので、総投機深度50/コミット・ウィンドウ投機深度51をそれぞれ3及び2に増加させる。
8.分析される次の要素は、CWM(0)要素、すなわち、コミット・ウィンドウ・リセット要素であり、したがって、コミット・ウィンドウ52の開始が、最も古い残りの投機的要素70において開始するようにリセットされる。総投機深度50は、依然として3つの投機的要素があるにすぎないので、3のままであり、最も古い残りの投機的要素70が今では再びコミット・ウィンドウ内にあるので、コミット・ウィンドウ投機深度51も3になる。コミット・ウィンドウ内の3つの投機的要素は、示されている追跡ストリームの第1、第3及び第6の要素である。
9.検出される次の要素は、コミット・ウィンドウにおける最も古い投機的要素がコミットされることを示す、コミット(1)要素である。この場合、コミット・ウィンドウにおける最も古い投機的要素は、全体としてストリームの最も古い残りの投機的要素でもある。コミット・ウィンドウは、前方に移動し、最も古い残りの投機的要素70は、今では追跡ストリームの第3の要素になり、これは、依然として未解決である最も古い要素である。総投機深度50及びコミット・ウィンドウ投機深度51は、2に減分される。
上記の表に示されている4つのパラメータのうちの1つ又は複数を示すステータス情報パケットが、追跡モジュールによって周期的に(たとえば、ある数のパケット又はある時間期間の間隔で)出力され得る。いくつかの実例では、コミット・ウィンドウ投機深度51が、関心情報が追跡分析器6によって再構築されることを可能にするのに十分であり得るので、ステータス情報22における全体的投機深度50を明示的に表すことが必要でないことがある。
図9は、コミット・ウィンドウ移動要素のための例示的な使用事例を示すトランザクションを含む命令のシーケンスの実行の実例を示す。これは、可能な実装形態の一実例にすぎず、同じ追跡アーキテクチャをサポートする他のシステムが、わずかに異なるタイミングにおいて又は異なるイベントに応答して要素を生成するマイクロ・アーキテクチャ実装形態を有し得ることが諒解されよう。
0x1000:TSTART命令が、ターゲット処理回路要素8によって実行される。図9に示されている最初の4つの追跡要素は、追跡の開始をマークするための、図3の場合と同じである。TSTART命令はまた、TSTART命令が、そこを越えると実行が投機的であるポイントを表すので、E要素を生成するように追跡モジュール12をトリガする。また、追跡モジュール12は、トランザクションが、不確定な期間の間、投機的であるままであることが予想されることになり、トランザクションが全体としてコミットされ得る前に、後の要素をコミットすることが必要とされ得るので、CWM(1)要素を生成する。CWM(1)は、コミット・ウィンドウ投機深度51が0に戻るが、全体的投機深度50が1である(TSTARTに対応するE原子が、依然として投機的であるが、コミット・ウィンドウ52の外部にある)ことを意味する。コミット・ウィンドウは、現在、0個の投機的要素を含んでおり、したがって、コミット・ウィンドウ52の最も古い要素は、追跡モジュール12によって生成された次の投機的要素であることになる。
0x2000-0x2008:MOV、LDR及びCMP命令が実行され、これらのいずれもウェイポイント命令でなく、したがって、追跡要素が生成されない。
0x200C:分岐が成立しないと予測され、したがって、追跡モジュール12は、N要素を生成する。N要素は、3つの前の命令及びBEQ命令の実行を暗示する。全体的投機深度50及びコミット・ウィンドウ投機深度51は、それぞれ、2及び1に増分する。最も古い残りの投機的要素70は、依然として、0x1000において出力されたE要素であるが、コミット・ウィンドウの最も古い要素は、0x200Cにおいて出力されたN要素である。
0x2014:分岐が成立すると予測され、したがって、追跡モジュール12は、E要素を生成する。E要素は、B命令の実行と、0x200CにおけるBEQと0x2014におけるBとの間の介在する命令の実行とを暗示する。全体的投機深度50及びコミット・ウィンドウ投機深度51は、3及び2に増加する。
0x4000-0x4004:LDR及びCMP命令は、ウェイポイント命令でなく、したがって、追跡要素の生成をトリガしない。
0x4008:分岐が成立しないと予測され、したがって、追跡モジュール12は、N要素を生成する。N要素は、LDR及びCMP命令とBNE命令との実行を暗示する。全体的投機深度50及びコミット・ウィンドウ投機深度51は、4及び3に増加する。
アドレス0x200Cにおける分岐が、正しく予測されたと決定される:追跡モジュール12は、コミット・ウィンドウ投機深度51が最大投機深度(この実例では3)に等しいので、コミット要素を出力する必要がない。全体的投機深度50及びコミット・ウィンドウ投機深度51は、要素をコミットしたことにもかかわらず、同じであるままであり、なぜなら、追跡分析器6の観点から、このコミットメントは、次のP0要素が出力されるまで可視にならないからであり、したがって、このポイントにおいて、追跡分析器6は、依然として、コミット・ウィンドウにおいて3つの要素を投機的として知覚し、全体として追跡ストリーム内の4つの投機的要素を知覚する。同じ理由で、追跡分析器6は、依然として、コミット・ウィンドウ52の最も古い投機的要素を、0x200Cにおいて出力されたN要素として知覚する。全体としてストリームの最も古い残りの投機的要素70は不変(依然として0x1000において出力されたE要素)である。
0x400C:分岐が成立すると予測され、したがって、E要素が出力される。このE要素を検出したとき、追跡分析器6は、コミット・ウィンドウ投機深度51が、この要素に遭遇するより前に3の最大値にあったので、新しいE要素の出力が、0x200Cにおいて出力されたN要素がコミットされたと推論され得ることを暗黙的に示すと決定することになる。コミット・ウィンドウ投機深度51がすでに最大値にあったので、全体的投機深度50及びコミット・ウィンドウ投機深度51は、同じであるままである(効果的に、E要素に応答して通常は実施されるであろう増分が、アドレス0x200Cに関連するより早いN要素を暗黙的にコミットすることによって相殺(cancel out)された)。0x200CにおけるN要素がコミットされたと推論されたので、コミット・ウィンドウ52の最も古い要素は、0x2014において出力されたE要素になる。
0x8000:ADD命令はウェイポイント命令でなく、したがって、追跡要素が出力されない。
0x9000:TCOMMIT命令は、トランザクションがアボートなしに完了したことを示す。最も古い残りの投機的要素70(0x1000において出力されたE要素)において開始するように、コミット・ウィンドウをリセットするために、コミット・ウィンドウ・リセット要素CWM(0)が出力される。追跡モジュールは、次いで、今では最も古い残りの投機的要素70でもある、コミット・ウィンドウの最も古い要素をコミットするために、コミット(1)要素を出力する。全体的投機深度50及びコミット・ウィンドウ投機深度51は、3つの未解決の要素、すなわち、0x2014において出力されたE、0x4008において出力されたN、0x400Cにおいて出力されたEが依然としてあるので、CWM(1)要素及びコミット(1)要素の出力に続いて3になる。図9は、CWM(0)要素の出力に応答して、コミット・ウィンドウ投機深度51の(最大値を上回る)4への一時的増分を示すが、それは、コミット(1)要素の出力に続く減分によって直ちに相殺される。いくつかの追跡モジュール・マイクロ・アーキテクチャは、コミット要素が発行されたときにコミット・ウィンドウ投機深度51が直ちに相殺されることが知られている場合、コミット・ウィンドウ投機深度51をまったく増分しないことを選定することができることが諒解されよう。
すべての実行をコミットする:すべての分岐予測が正しいと決定され、すべての残りのE要素/N要素がコミットされることを示すためにコミット(3)要素が出力される。
要約すれば、コミット・ウィンドウ移動要素を使用することによって、トランザクション開始命令に関連する要素は、提供される診断情報を改善することができるトランザクションのより効果的な追跡を可能にするために、より若い要素がコミットされたときでも、しばらくの間投機的であるままであり得る。コミット・ウィンドウ移動要素は、(トランザクションだけでなく)他のタイプの投機のためにも使用され得ることが諒解されよう。
図10は、追跡モジュール12を使用して追跡要素を生成する方法を示す流れ図である。流れ図は、追跡モジュールが、監視回路要素18によって、処理回路要素8によって検出されたいくつかのイベントに応答することを示す。これらは、追跡され得るすべてのイベントであるとは限らず、他のイベントも追跡情報の出力につながり得ることが諒解されよう。
ステップ100において、監視回路要素は、処理回路要素によって実行される現在の命令が、P0要素を使用して追跡されるべきウェイポイント命令であるかどうかを決定する。たとえば、そのような命令は、分岐命令、TSTART命令又は他のタイプの命令であり得る。命令がP0要素を使用して追跡されるべきである場合、ステップ102において、監視回路要素は、その命令が、成立しないと予測される分岐命令であるかどうかを決定する。命令が、成立しないと予測される分岐である場合、ステップ104において、監視回路要素18は、追跡ストリームの次の要素としてN要素を出力するように追跡出力回路要素を制御する。命令が、分岐でないか、又は成立すると予測される分岐であるかのいずれかである場合、ステップ106において、追跡出力回路要素20によってE要素が出力される。
ステップ108において、監視回路要素が、処理回路要素8が、TSTART命令の実行又は所定のタイプのロード/ストア動作の実行など、潜在的に長い投機期間を示すイベントに遭遇したと決定した場合、(そのイベントに関連する任意のE要素又は他の投機的要素を出力すると)、ステップ110において、監視回路要素18は、コミット・ウィンドウ移動(CWM)要素をも出力するように追跡出力回路要素20を制御する。コミット・ウィンドウが移動されるべきである要素の数は、いくつの他の追跡要素が、CWM要素の出力を引き起こしたイベントに関連するか、又はいくつの前の要素が出力され、投機的であるままであるかに依存し得る。
ステップ112において、追跡モジュール12の監視回路要素18は、処理回路要素が、追跡ストリームの1つ又は複数の前に出力された投機的要素に対応する命令をコミットしたかどうかを決定する。コミットした場合、ステップ114において、監視回路要素は、コミット・ウィンドウにおける投機的要素の数(コミット・ウィンドウ投機深度51)が、現在、最大投機深度24よりも小さいかどうかを決定する。最大投機深度24よりも小さくない場合(コミット・ウィンドウ投機深度51が最大投機深度に等しいとき)、コミットされた要素が、次のP0要素の出力から追跡分析器によって推論され得るので、追跡ストリームにおいて要素が出力される必要がない。しかしながら、コミット・ウィンドウ52における投機的要素の数51が、最大投機深度24よりも小さい場合、ステップ116において、コミットされるべき要素の数を指定するコミット要素が出力される。
ステップ118において、監視回路要素は、処理回路要素が、追跡ストリームにおいて前に出力された投機的要素に対応する任意の投機的に実行される命令をキャンセルしたかどうかを検出し、キャンセルした場合、ステップ120において、監視回路要素18は、キャンセルされるべきであるコミット・ウィンドウの最も若い要素の数を指定する、追跡ストリームにおけるキャンセル要素を出力するように追跡出力回路要素20を制御する。
ステップ122において、監視回路要素は、処理回路要素が、その開始がCWM要素を出力されるようにトリガした、投機期間の終了に達したかどうかを検出する。たとえば、ステップ122において検出され得るイベントは、処理回路要素による、トランザクション終了(TCOMMIT)命令の実行又は投機されたロード/ストア命令のコミットメントを含むことができる。これらのイベントのうちの1つが検出された場合、ステップ124において、監視回路要素18は、コミット・ウィンドウ・リセット要素、たとえば、ウィンドウ開始パラメータとして0を指定するCWM要素を出力する追跡出力回路要素20を制御し、コミット・ウィンドウ・リセット要素は、追跡ストリームにおける最も古い残りの投機的要素70に戻ってコミット・ウィンドウ52に開始を移動するように追跡分析器をトリガすることになる。
追跡によってどのタイプの要素が出力されたかにかかわらず、ステップ104、106、110、114、116、120、124のいずれかに続いて、方法は、処理回路要素における別のイベントについてチェックするために、ステップ100に戻る。方法は、処理回路要素が、実行されるプログラムを通して1ステップずつ進むように、循環する。
図11は、追跡分析器6によって実施される、追跡モジュールによって生成された追跡要素のストリームを分析する方法を示す流れ図を示す。追跡分析プログラム32を実行するホスト処理回路要素30は、ターゲット処理回路要素によって実行されるターゲット・プログラムのコピー36を受信し、これを使用して、追跡記憶域34から受信された追跡要素のシーケンスを解釈する。ステップ150において、追跡分析器6は、まだ検討されていない追跡要素のシーケンスにおける次の要素を分析する。
ステップ152において、次の要素がP0要素、たとえば、上記で説明されたE要素又はN要素であるかどうかが決定される。そうである場合、ステップ154において、追跡分析器は、ターゲット・プログラムのコピー36から、どの命令がE要素又はN要素に対応するかを決定し、E要素又はN要素に基づいて、それらの命令の成果を推論する。たとえば、E要素又はN要素は、次のウェイポイント命令に先行する命令が実行されたことを暗示し、並びにターゲット・プログラム36における次のウェイポイント命令の成果を示し得る。ステップ156において、追跡分析器は、(コミット・ウィンドウにおける投機的要素の数を示す)コミット・ウィンドウ投機深度51が、追跡ストリームを生成した特定の追跡モジュールのために定義された最大投機深度24に現在等しいかどうかを決定する。等しくない場合、任意のより早い要素のコミットメントに関する推論がこの段階で行われないことがあり、方法は、ステップ150に戻る。しかしながら、コミット・ウィンドウ投機深度51が最大投機深度24に等しい場合、ステップ158において、追跡分析器はまた、コミット・ウィンドウ52における最も古い投機的要素がコミットされたと推論することができ、コミット・ウィンドウの次の最も古い投機的要素において開始するようにコミット・ウィンドウを前方に移動し得る。したがって、明示的コミット要素が追跡ストリーム中に含まれなかったにもかかわらず、より早い要素のコミットメントに関する推論が依然として行われ得る。最も古い投機的要素がコミットされるべきと推論されるとき、これは、ターゲット・プログラム36における1つ又は複数の命令の対応するブロックが、誤予測なしに正しく実行されたと決定され得ることを意味する。
ステップ160において、追跡分析器6は、追跡ストリームにおける次の要素がCWM(X)要素であるかどうかを決定する。CWM(X)要素である場合、ステップ162において、追跡分析器は、コミット・ウィンドウ開始位置が、追跡ストリーム全体の最も古い残りの投機的要素70の後のX番目の投機的要素に移動されることを示すために、その内部状態を更新する。X=0である場合、これは、事実上、コミット・ウィンドウ・リセットであり、コミット・ウィンドウは、今では、最も古い残りの投機的要素70自体において開始する。X>0である場合、コミット・ウィンドウ52は、最も古い残りの投機的要素70よりも後の要素において開始するように移動される。
ステップ164において、分析されるべき追跡ストリームにおける次の要素がコミット要素コミット(X)である場合、ステップ166において、追跡分析器は、Xがコミット要素によって指定されたパラメータである、コミット・ウィンドウ52におけるX個の最も古い投機的要素がコミットされたと決定し、また、X個の要素だけコミット・ウィンドウの開始を前方に移動する。したがって、追跡分析器は、追跡ストリームが生成されたとき、それらのX個の最も古い投機的要素に対応する命令のブロックがターゲット・プロセッサ8によって正常に実行されたと推論することができる。
一方、ステップ168において、追跡ストリームにおける次の要素がキャンセル(X)要素である場合、ステップ170において、追跡分析器は、コミット・ウィンドウにおける最も若いX個の投機的要素が、これらが、より早い誤投機に続いて正しく実行されなかった命令のブロックを表すので、キャンセルされるべきであると決定する。この場合も、キャンセルされるべきより若い投機的要素の数が、キャンセル要素において指定されたパラメータによって示される。
検出された要素のタイプにかかわらず、次いで、ターゲット処理回路要素8の挙動に関する推論が行われ、追跡ステータス情報(たとえば、投機深度、コミット・ウィンドウ位置など)に対する更新が行われ、次いで、方法は、シーケンスにおける次の要素を分析するために、ステップ150に戻る。
本発明の例示的な実施例が、添付の図面を参照しながら本明細書では詳細に説明されたが、本発明がそれらの正確な実施例に限定されないこと、並びに、様々な変更及び修正が、添付の特許請求の範囲及び趣旨によって規定される本発明の範囲から逸脱することなく、当業者によってその中で実施され得ることを理解されたい。
Claims (20)
- 処理回路要素による命令の処理を監視するための監視回路要素と、
前記処理回路要素による前記命令の前記処理の成果を示す要素のシーケンスを出力するための追跡出力回路要素と
を備える追跡モジュールであって、
前記追跡出力回路要素は、
前記処理回路要素が、要素の前記シーケンスのコミット・ウィンドウにおける少なくとも1つの最も古い投機的要素によって表される1つ又は複数の投機的に実行される命令をコミットしたことを示す、コミット要素であって、前記コミット・ウィンドウが、前記処理回路要素によって依然としてコミットされるべきである少なくとも1つの投機的に実行される命令を表す少なくとも1つの投機的要素を備える要素の前記シーケンスの一部分を備え、前記コミット要素は、前記コミット要素に続いて前記少なくとも1つの最も古い投機的要素が前記コミット・ウィンドウから除外されるべきであることをも示す、コミット要素と、
要素の前記シーケンスの最も古い残りの投機的要素によって表される1つ又は複数の投機的に実行される命令が、前記処理回路要素によってコミットされないままである間、前記コミット・ウィンドウが、どの投機的要素が前記コミット・ウィンドウの前記最も古い投機的要素であるかを変更するために、前記最も古い残りの投機的要素に対して移動するべきであることを示す、コミット・ウィンドウ移動要素と
を出力することが可能である、追跡モジュール。 - 前記処理回路要素が、前記コミット・ウィンドウにおける前記少なくとも1つの最も古い投機的要素によって表される1つ又は複数の投機的に実行される命令をコミットしたことに応答して、
前記コミット・ウィンドウにおける投機的要素の数が最大投機深度よりも小さいとき、前記追跡出力回路要素が、前記コミット要素を出力するように構成され、
前記コミット・ウィンドウにおける投機的要素の数が前記最大投機深度に等しいとき、前記追跡出力回路要素が、前記コミット要素の出力を抑制するように構成された、
請求項1に記載の追跡モジュール。 - 前記コミット・ウィンドウ移動要素が、前記コミット・ウィンドウ移動要素によって示される前記コミット・ウィンドウの位置の変更に続いて前記コミット・ウィンドウの前記最も古い投機的要素になるべきである前記投機的要素を示すウィンドウ開始インジケータを指定する、請求項1及び2のいずれか一項に記載の追跡モジュール。
- 前記ウィンドウ開始インジケータが、前記コミット・ウィンドウ移動要素によって示される前記コミット・ウィンドウの位置の前記変更に続いて前記コミット・ウィンドウの前記最も古い投機的要素よりも古くなるべきである、要素の前記シーケンスの前記最も古い残りの投機的要素を含む、投機的要素の数を識別する、請求項3に記載の追跡モジュール。
- 前記追跡出力回路要素は、前記監視回路要素が、前記処理回路要素がトランザクション開始命令を実行することを検出したことに応答して、前記コミット・ウィンドウ移動要素を出力するように構成され、前記トランザクション開始命令が、前記トランザクション開始命令とトランザクション終了命令との間に実行される1つ又は複数の命令を備えるトランザクションの開始を表し、前記トランザクションの前記命令の効果が、前記トランザクション開始命令と前記トランザクション終了命令との間にアボート・イベントが発生しない場合、前記トランザクション終了命令に達したときにコミットされるべきである、請求項1から4までのいずれか一項に記載の追跡モジュール。
- 前記追跡出力回路要素は、前記監視回路要素が、前記処理回路要素が所定のタイプのロード/ストア命令を実行することを検出したことに応答して、前記コミット・ウィンドウ移動要素を出力するように構成された、請求項1から5までのいずれか一項に記載の追跡モジュール。
- 前記追跡出力回路要素は、要素の前記シーケンスの前記最も古い残りの投機的要素が前記コミット・ウィンドウの前記最も古い投機的要素になるべきであることを示すコミット・ウィンドウ・リセット要素を出力することが可能である、請求項1から6までのいずれか一項に記載の追跡モジュール。
- 前記コミット・ウィンドウ・リセット要素は、要素の前記シーケンスの前記最も古い残りの投機的要素が前記コミット・ウィンドウの前記最も古い投機的要素になるべきであることを示すウィンドウ開始インジケータを指定する前記コミット・ウィンドウ移動要素を備える、請求項7に記載の追跡モジュール。
- 前記追跡出力回路要素は、前記監視回路要素が、前記処理回路要素がトランザクション終了命令を実行することを検出したことに応答して、前記コミット・ウィンドウ・リセット要素を出力するように構成され、前記トランザクション終了命令が、トランザクション開始命令と前記トランザクション終了命令との間に実行される1つ又は複数の命令を備えるトランザクションの終了を表し、前記トランザクションの前記命令の効果が、前記トランザクション開始命令と前記トランザクション終了命令との間にアボート・イベントが発生しない場合、前記トランザクション終了命令に達したときにコミットされるべきである、請求項7及び8のいずれか一項に記載の追跡モジュール。
- 前記追跡出力回路要素は、前記処理回路要素が所定のタイプのロード/ストア命令をコミットしたことに応答して、前記コミット・ウィンドウ・リセット要素を出力するように構成された、請求項7から9までのいずれか一項に記載の追跡モジュール。
- 前記追跡出力回路要素は、前記処理回路要素が、前記コミット・ウィンドウにおける少なくとも1つの最も若い投機的要素によって表される1つ又は複数の投機的に実行される命令の効果をキャンセルしたことを示すキャンセル要素を出力することが可能である、請求項1から10までのいずれか一項に記載の追跡モジュール。
- 前記監視回路要素が、
要素の前記シーケンスの前記最も古い残りの投機的要素と、
前記コミット・ウィンドウの前記最も古い投機的要素と
のうちの少なくとも1つを示すステータス情報を維持するように構成された、請求項1から11までのいずれか一項に記載の追跡モジュール。 - 前記追跡出力回路要素が、
要素の前記シーケンスの前記最も古い残りの投機的要素と、
前記コミット・ウィンドウの前記最も古い投機的要素と
のうちの少なくとも1つを示す追跡情報要素を出力することが可能である、請求項1から12までのいずれか一項に記載の追跡モジュール。 - 請求項1から13までのいずれか一項に記載の追跡モジュールと、前記処理回路要素とを備える、データ処理装置。
- 処理回路要素による命令の処理を追跡するための方法であって、
前記処理回路要素による前記命令の処理を監視することと、
前記処理回路要素による前記命令の前記処理の成果を示す要素のシーケンスを出力することと
を含み、
要素の前記シーケンスは、
前記処理回路要素が、要素の前記シーケンスのコミット・ウィンドウにおける少なくとも1つの最も古い投機的要素によって表される1つ又は複数の投機的に実行される命令をコミットしたことを示す、コミット要素であって、前記コミット・ウィンドウが、前記処理回路要素によって依然としてコミットされるべきである少なくとも1つの投機的に実行される命令を表す少なくとも1つの投機的要素を備える要素の前記シーケンスの一部分を備え、前記コミット要素は、前記コミット要素に続いて前記少なくとも1つの最も古い投機的要素が前記コミット・ウィンドウから除外されるべきであることをも示す、コミット要素と、
要素の前記シーケンスの最も古い残りの投機的要素によって表される1つ又は複数の投機的に実行される命令が、前記処理回路要素によってコミットされないままである間、前記コミット・ウィンドウが、どの投機的要素が前記コミット・ウィンドウの前記最も古い投機的要素であるかを変更するために、前記最も古い残りの投機的要素に対して移動するべきであることを示す、コミット・ウィンドウ移動要素と
を含む、方法。 - ターゲット処理回路要素による命令の処理の成果を示す要素のシーケンスを取得することと、
要素の前記シーケンスにおけるコミット要素を検出したことに応答して、
前記ターゲット処理回路要素が、要素の前記シーケンスのコミット・ウィンドウにおける少なくとも1つの最も古い投機的要素によって表される1つ又は複数の投機的に実行される命令をコミットしたと推論することであって、前記コミット・ウィンドウが、前記ターゲット処理回路要素によってコミットされると依然として推論されるべきである少なくとも1つの投機的に実行される命令を表す少なくとも1つの投機的要素を備える要素の前記シーケンスの一部分を備える、推論することと、
要素の前記シーケンスの後続の要素の分析のために前記コミット・ウィンドウから前記少なくとも1つの最も古い投機的要素を除外することと、
要素の前記シーケンスにおけるコミット・ウィンドウ移動要素を検出したことに応答して、要素の前記シーケンスの最も古い残りの投機的要素が前記ターゲット処理回路要素によってコミットされると依然として推論されるべきままである間、どの投機的要素が前記コミット・ウィンドウの前記最も古い投機的要素であるかを変更するために、前記最も古い残りの投機的要素に対して前記コミット・ウィンドウを移動することと
を含む、追跡分析方法。 - 請求項16に記載の方法を実施するようにデータ処理装置を制御するためのコンピュータ・プログラム。
- 請求項17に記載のコンピュータ・プログラムを記憶する記憶媒体。
- ホスト処理回路要素と、
請求項16に記載の方法を実施するように前記ホスト処理回路要素を制御するためのコンピュータ・プログラムを記憶するための記憶回路要素と
を備える装置。 - ターゲット処理回路要素による命令の処理の成果を示す要素のシーケンスを取得するための追跡入力と、
要素の前記シーケンスにおけるコミット要素の検出に応答して、前記ターゲット処理回路要素が、要素の前記シーケンスのコミット・ウィンドウにおける少なくとも1つの最も古い投機的要素によって表される1つ又は複数の投機的に実行される命令をコミットしたと推論することであって、前記コミット・ウィンドウが、前記ターゲット処理回路要素によってコミットされると依然として推論されるべきである少なくとも1つの投機的に実行される命令を表す少なくとも1つの投機的要素を備える要素の前記シーケンスの一部分を備える、推論することと、要素の前記シーケンスの後続の要素の分析のために前記コミット・ウィンドウから前記少なくとも1つの最も古い投機的要素を除外することとを行うための、追跡分析回路要素と
を備える追跡分析器であって、
要素の前記シーケンスにおけるコミット・ウィンドウ移動要素を検出したことに応答して、前記追跡分析回路要素は、要素の前記シーケンスの最も古い残りの投機的要素が前記ターゲット処理回路要素によってコミットされると依然として推論されるべきままである間、どの投機的要素が前記コミット・ウィンドウの前記最も古い投機的要素であるかを変更するために、前記最も古い残りの投機的要素に対して前記コミット・ウィンドウを移動するように構成された、追跡分析器。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB1801246.8 | 2018-01-25 | ||
GB1801246.8A GB2570466B (en) | 2018-01-25 | 2018-01-25 | Commit window move element |
PCT/GB2018/053575 WO2019145668A1 (en) | 2018-01-25 | 2018-12-10 | Commit window move element |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2021511587A JP2021511587A (ja) | 2021-05-06 |
JP7153731B2 true JP7153731B2 (ja) | 2022-10-14 |
Family
ID=61558054
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2020539701A Active JP7153731B2 (ja) | 2018-01-25 | 2018-12-10 | コミット・ウィンドウ移動要素 |
Country Status (9)
Country | Link |
---|---|
US (1) | US11048609B2 (ja) |
EP (1) | EP3743818B1 (ja) |
JP (1) | JP7153731B2 (ja) |
KR (1) | KR20200106915A (ja) |
CN (1) | CN111630498B (ja) |
GB (1) | GB2570466B (ja) |
IL (1) | IL275308B2 (ja) |
TW (1) | TWI798339B (ja) |
WO (1) | WO2019145668A1 (ja) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5930491A (en) | 1997-06-18 | 1999-07-27 | International Business Machines Corporation | Identification of related instructions resulting from external to internal translation by use of common ID field for each group |
JP2012003771A (ja) | 2010-06-21 | 2012-01-05 | Arm Ltd | 推測的に実行される命令のトレーシング |
US20160283247A1 (en) | 2015-03-25 | 2016-09-29 | Intel Corporation | Apparatuses and methods to selectively execute a commit instruction |
JP2018511119A (ja) | 2015-03-04 | 2018-04-19 | エイアールエム リミテッド | トランザクション実行に応じて追跡データを生成する装置及び方法 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080016325A1 (en) * | 2006-07-12 | 2008-01-17 | Laudon James P | Using windowed register file to checkpoint register state |
US9798590B2 (en) * | 2006-09-07 | 2017-10-24 | Intel Corporation | Post-retire scheme for tracking tentative accesses during transactional execution |
GB2481380B (en) * | 2010-06-21 | 2018-05-16 | Advanced Risc Mach Ltd | Correlating trace data streams |
GB2481384B (en) * | 2010-06-21 | 2018-10-10 | Advanced Risc Mach Ltd | Key allocation when tracing data processing systems |
WO2012050555A1 (en) * | 2010-10-11 | 2012-04-19 | Hewlett-Packard Development Company, L.P. | System and method for querying a data stream |
EP2862058B1 (en) * | 2012-06-15 | 2021-05-19 | Intel Corporation | A semaphore method and system with out of order loads in a memory consistency model that constitutes loads reading from memory in order |
KR101818967B1 (ko) * | 2012-06-15 | 2018-01-16 | 인텔 코포레이션 | 명확화 없는 비순차 load store 큐 |
US20160026486A1 (en) * | 2014-07-25 | 2016-01-28 | Soft Machines, Inc. | An allocation and issue stage for reordering a microinstruction sequence into an optimized microinstruction sequence to implement an instruction set agnostic runtime architecture |
GB2533416A (en) * | 2014-12-19 | 2016-06-22 | Advanced Risc Mach Ltd | Monitoring utilization of transactional processing resource |
GB2543554B (en) * | 2015-10-22 | 2019-01-23 | Advanced Risc Mach Ltd | Handling exceptional conditions for vector arithmetic instruction |
GB2554096B (en) * | 2016-09-20 | 2019-03-20 | Advanced Risc Mach Ltd | Handling of inter-element address hazards for vector instructions |
-
2018
- 2018-01-25 GB GB1801246.8A patent/GB2570466B/en active Active
- 2018-12-10 KR KR1020207021905A patent/KR20200106915A/ko unknown
- 2018-12-10 JP JP2020539701A patent/JP7153731B2/ja active Active
- 2018-12-10 WO PCT/GB2018/053575 patent/WO2019145668A1/en unknown
- 2018-12-10 CN CN201880087107.0A patent/CN111630498B/zh active Active
- 2018-12-10 EP EP18819360.1A patent/EP3743818B1/en active Active
- 2018-12-10 IL IL275308A patent/IL275308B2/en unknown
- 2018-12-10 US US16/645,584 patent/US11048609B2/en active Active
-
2019
- 2019-01-23 TW TW108102467A patent/TWI798339B/zh active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5930491A (en) | 1997-06-18 | 1999-07-27 | International Business Machines Corporation | Identification of related instructions resulting from external to internal translation by use of common ID field for each group |
JP2012003771A (ja) | 2010-06-21 | 2012-01-05 | Arm Ltd | 推測的に実行される命令のトレーシング |
JP2018511119A (ja) | 2015-03-04 | 2018-04-19 | エイアールエム リミテッド | トランザクション実行に応じて追跡データを生成する装置及び方法 |
US20160283247A1 (en) | 2015-03-25 | 2016-09-29 | Intel Corporation | Apparatuses and methods to selectively execute a commit instruction |
Also Published As
Publication number | Publication date |
---|---|
GB2570466B (en) | 2020-03-04 |
US11048609B2 (en) | 2021-06-29 |
KR20200106915A (ko) | 2020-09-15 |
US20200264963A1 (en) | 2020-08-20 |
TW201933100A (zh) | 2019-08-16 |
CN111630498B (zh) | 2023-09-08 |
WO2019145668A1 (en) | 2019-08-01 |
IL275308A (en) | 2020-07-30 |
IL275308B1 (en) | 2023-06-01 |
GB201801246D0 (en) | 2018-03-14 |
JP2021511587A (ja) | 2021-05-06 |
TWI798339B (zh) | 2023-04-11 |
GB2570466A (en) | 2019-07-31 |
CN111630498A (zh) | 2020-09-04 |
IL275308B2 (en) | 2023-10-01 |
EP3743818A1 (en) | 2020-12-02 |
EP3743818B1 (en) | 2022-03-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101423480B1 (ko) | 트랜잭셔널 메모리를 위한 최종 브랜치 레코드 표시자 | |
JP5415069B2 (ja) | スレッドレベルの投機実行を拡張するためのプリミティブ | |
EP2643751B1 (en) | Processing apparatus, trace unit and diagnostic apparatus | |
US9304863B2 (en) | Transactions for checkpointing and reverse execution | |
US7870369B1 (en) | Abort prioritization in a trace-based processor | |
CN107278296B (zh) | 用于响应于事务执行生成跟踪数据的装置和方法 | |
US9135015B1 (en) | Run-time code parallelization with monitoring of repetitive instruction sequences during branch mis-prediction | |
JP3579414B2 (ja) | 投機的な実行を用いたアウトオブオーダー・プロセッサにおける精密な例外を配達する機構 | |
JP7007371B2 (ja) | ベクトル命令のための要素間アドレス・ハザードの取扱い | |
CN111133418B (zh) | 在例外屏蔽更新指令之后允许未中止的事务处理 | |
CN107003895B (zh) | 事务内的指令采样 | |
US20140122805A1 (en) | Selective poisoning of data during runahead | |
JP7153731B2 (ja) | コミット・ウィンドウ移動要素 | |
JP7481328B2 (ja) | トランザクショナル・メモリのための装置及びデータ処理方法 | |
US9990269B2 (en) | Apparatus and method for controlling debugging of program instructions including a transaction | |
US7783863B1 (en) | Graceful degradation in a trace-based processor |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20211203 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20220909 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20221003 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 7153731 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |