JP7397858B2 - フェッチグループのシーケンスのための分岐予測ユニットへのアクセスの制御 - Google Patents

フェッチグループのシーケンスのための分岐予測ユニットへのアクセスの制御 Download PDF

Info

Publication number
JP7397858B2
JP7397858B2 JP2021513296A JP2021513296A JP7397858B2 JP 7397858 B2 JP7397858 B2 JP 7397858B2 JP 2021513296 A JP2021513296 A JP 2021513296A JP 2021513296 A JP2021513296 A JP 2021513296A JP 7397858 B2 JP7397858 B2 JP 7397858B2
Authority
JP
Japan
Prior art keywords
cti
fetch
count
branch prediction
sequential
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
Application number
JP2021513296A
Other languages
English (en)
Other versions
JP2022500749A (ja
Inventor
ヤラバルティ アディシャ
カラマティアノス ジョン
アール. ポレンバ マシュー
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Advanced Micro Devices Inc
Original Assignee
Advanced Micro Devices Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Advanced Micro Devices Inc filed Critical Advanced Micro Devices Inc
Publication of JP2022500749A publication Critical patent/JP2022500749A/ja
Application granted granted Critical
Publication of JP7397858B2 publication Critical patent/JP7397858B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3844Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • G06F1/3234Power saving characterised by the action undertaken
    • G06F1/3237Power saving characterised by the action undertaken by disabling clock generation or distribution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • G06F1/3234Power saving characterised by the action undertaken
    • G06F1/324Power saving characterised by the action undertaken by lowering clock frequency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • G06F1/3234Power saving characterised by the action undertaken
    • G06F1/3243Power saving in microcontroller unit
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • G06F1/3234Power saving characterised by the action undertaken
    • G06F1/3287Power saving characterised by the action undertaken by switching off individual functional units in the computer system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • G06F1/3234Power saving characterised by the action undertaken
    • G06F1/3296Power saving characterised by the action undertaken by lowering the supply or operating voltage
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30058Conditional branch instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/323Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for indirect branch instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3814Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Description

(政府の権利)
本発明は、米国エネルギー省(DOE)から授与された、ローレンス・リバモア国立研究所とのPathForwardプロジェクト(主契約番号:DE-AC52-07NA27344、サブ契約番号:B620717)の下で政府の支援を受けて行われたものである。米国政府は、本発明において一定の権利を有する。
電子デバイス内の多くのプロセッサ(マイクロプロセッサ等)は、プログラムコード内の命令を実行する効率を向上させるための動作を実行する機能ブロックを含む。例えば、一部のプロセッサは、命令実行の1つ以上の以前のインスタンスの記録に基づいて、命令実行のパス又ははフロー(すなわち、命令が実行のためにフェッチされるメモリ内のアドレスのシーケンス)を予測するために使用される予測機能ブロックを含む。一般的な予測機能ブロックの1つは、プログラムコード内のジャンプやリターン等の制御転送命令(Control transfer instructions:CTI)の解決を予測する分岐予測機能ブロックである。分岐予測機能ブロックは、「行われた(taken)」又は「行われていない(not-taken)」CTIの解決、行われたCTIのターゲット命令等のように、CTIが実行される場合のCTIの動作を監視及び記録する。また、プログラムコードの実行中にCTIに遭遇すると(例えば、フェッチされた命令においてCTIを検出すると)、以前に記憶されたCTIの動作を使用して、CTIの現在の実行の解決を予測する。プロセッサは、CTI自体が準備され実行されている間に、予測された解決に基づいて、CTIの後の予測されたパスに沿って実行される命令を投機的にフェッチし、準備する。かかるプロセッサは、処理を続行する前にCTIの解決の決定を待つか、CTIからのパスの固定された選択に投機的に従うプロセッサとは対照的に、CTIが実行される場合に従うパスとなる可能性がより高いCTIからのパスに投機的に従うことができ、その結果、遅延及び/又はリカバリ動作が少なくなる。
一部のプロセッサでは、任意のCTIの予測される解決がプログラムコード実行のパスを示すのにできるだけ早く利用可能になるのを確実にするために、フェッチされた命令を実行のために準備する初期段階において、全ての命令について分岐予測機能ブロックが自動的にアクセスされる。ただし、CTI命令は、通常、プログラムコードのごく一部しか形成しないので、分岐予測機能ブロックへの多くのアクセスは、CTIではない命令に対するものであり、したがって、動的エネルギーを浪費する。分岐予測機能ブロックへの各アクセスには消費電力等の観点に関連するコストがかかることから、分岐予測機能ブロックへの不必要なアクセスを回避することが望ましい。
いくつかの実施形態による、電子デバイスを示すブロック図である。 いくつかの実施形態による、プロセッサを示すブロック図である。 いくつかの実施形態による、分岐予測ユニットを示すブロック図である。 いくつかの実施形態による、分岐ターゲットバッファを示すブロック図である。 いくつかの実施形態による、シーケンシャルフェッチロジックを示すブロック図である。 いくつかの実施形態による、シーケンシャルフェッチテーブルを示すブロック図である。 いくつかの実施形態による、分岐予測ユニットへのアクセスを抑制するために制御転送命令に関連する記録を使用するプロセスを示すフローチャートである。 いくつかの実施形態による、分岐ターゲットバッファを用いて記録を記憶する場合に、制御転送命令に関連する記録を保持するために実行される動作を示すフローチャートである。 いくつかの実施形態による、対応する制御転送命令に続けて順次フェッチされる制御転送命令を含まないフェッチグループのカウントで分岐ターゲットバッファを更新する動作のタイムライン図である。 いくつかの実施形態による、記録を記憶するためにシーケンシャルフェッチテーブルが使用される場合に、制御転送命令に関連する記録を保持するために実行される動作を示すフローチャートである。 いくつかの実施形態による、対応するCTIに続けて順次フェッチされるCTIを含まないフェッチグループのカウントでシーケンシャルフェッチテーブルを更新する動作のタイムライン図である。 いくつかの実施形態による、CTIに続けて順次フェッチされるCTIを含まない特定の数のフェッチグループを決定し、特定の数を使用して分岐予測ユニットへのアクセスを抑制するプロセスを示すフローチャートである。
図面及び説明を通して、同様の符号は、同一の図面要素を指す。
以下の説明は、説明される実施形態を当業者が製造及び使用することを可能にするために提示され、特定の用途及びその要件に照らして提供される。説明される実施形態に対する様々な変更は、当業者には容易に明らかであり、本明細書で定義される一般的原理は、他の実施形態及び用途に適用されてもよい。したがって、説明される実施形態は、示される実施形態に限定されず、本明細書で開示される原理及び特徴と一致する最も広い範囲が与えられるべきである。
(用語)
以下の説明では、実施形態を説明するために様々な用語が使用される。次に、これらの用語のうち2つについて、簡単且つ一般的に説明する。用語は、明確性及び簡潔性のために、本明細書に詳述されない重要な追加的態様を有してもよい。したがって、説明は、用語を限定することを意図していないことに留意されたい。
機能ブロック:機能ブロックは、集積回路要素、ディスクリート回路要素等の1つ以上の相互に関連する回路要素のグループ、集合、及び/又は、セットを指す。回路要素は、回路要素が少なくとも1つの属性を共有するという点で「相互に関連」している。例えば、相互に関連する回路要素は、特定の集積回路チップ又はその一部に含まれてもよく、その上に製造されてもよく、他の方法で結合されてもよく、所定の機能(計算又は処理機能、メモリ機能等)の実行に関与してもよく、共通の制御要素によって制御されてもよい。機能ブロックは、単一の回路要素(例えば、単一の集積回路論理ゲート)から数百万又は数十億の回路要素(例えば、集積回路メモリ)までの任意の数の回路要素を含むことができる。
制御転送命令:制御転送命令(Control transfer instruction:CTI)は、プログラムコード内の命令であり、実行されると、命令実行の他の連続したフローにおいて、ジャンプ、移動又は不連続性を引き起こす又は引き起こす可能性がある。CTIには、ジャンプ、コール、リターン等の「無条件の(unconditional)」CTIが含まれ、これにより、命令の実行は、第1のメモリアドレスにおける命令であるCTIから、第2のメモリアドレスにおける命令(すなわち、ターゲット命令)に自動的にジャンプする。また、CTIは、条件付きジャンプ命令等の「条件付き(conditional)」CTIを含み、これは、より大きい、等しい、ゼロ以外等の条件を含むか、関連付けられるか、それに依存する。対応する条件が満たされると(例えば、true、false等)、条件付きCTIは、CTIから第2のメモリアドレスの命令への命令実行のジャンプをもたらすが、条件が満たされない場合には、命令の実行がCTIに続いて順次続けられる。例えば、条件付き分岐命令を、条件チェック命令及び条件付きCTI(又は、単一の複合命令)を使用して実装することができる。条件が満たされると、分岐が「行われ」、命令の実行がターゲット命令にジャンプし、条件が満たされないと分岐命令が「行われず」又は「不成立」となり、命令の順次実行が続けられる。ターゲット命令のアドレスは、条件付きCTI及び/又は無条件CTIに対して動的に指定されている場合がある。例えば、先行する命令によってCTIのターゲット命令のアドレスを計算してプロセッサレジスタ又は他の位置に記憶し、CTIの実行時に命令実行がジャンプする位置を決定するために使用することができる。
(概要)
説明される実施形態は、電子デバイス内のプロセッサを含む。プロセッサは、計算動作、メモリ操作、他の機能ブロック及びデバイスとの通信等を実行する、中央処理装置(CPU)コア、1つ以上のキャッシュメモリ、通信インターフェース等の機能ブロックを含む。プロセッサは、シーケンシャルフェッチロジック機能ブロックを含み、シーケンシャルフェッチロジック機能ブロックは、分岐予測情報を取得するためのプロセッサ内の分岐予測機能ブロックへのアクセスを、可能な場合に回避する動作を実行する。説明する実施形態では、特定のサイズ(例えば、32バイト、64バイト等)の命令のブロックであるフェッチグループが、キャッシュメモリ又はメインメモリからまとめてフェッチされ、プロセッサ内の命令実行パイプラインでの実行のために準備される。所定のフェッチグループがフェッチされ、実行の準備がされると、シーケンシャルフェッチロジックは、所定のフェッチグループに関連する記録をチェックし(かかる記録が存在する場合)、以前に制御転送命令(CTI)を含まないと決定された所定のフェッチグループに続けて、順次フェッチされるフェッチグループの数を決定する。例えば、いくつかの実施形態では、シーケンシャルフェッチロジックは、所定のフェッチグループ内のCTIに関連する記録をチェックして、フェッチグループの数を決定する。別の例として、いくつかの実施形態では、シーケンシャルフェッチロジックは、所定のフェッチグループ内のCTIのターゲット命令に関連する記録をチェックして、フェッチグループの数を決定する。このフェッチグループにはCTIがないため、フェッチグループが順次フェッチされ、分岐予測情報が必要ない。したがって、フェッチグループの各々がフェッチされ、実行のために準備されるので、シーケンシャルフェッチロジックは、分岐予測情報を取得するための分岐予測機能ブロックへのアクセスを抑制する。例えば、シーケンシャルフェッチロジックは、分岐予測情報を取得するための分岐予測機能ブロック内の分岐ターゲットバッファ(BTB)、分岐方向予測器等のチェックを抑制することができる。
いくつかの実施形態では、BTBは、各々のCTIに続けて順次フェッチされ、CTIを有しないフェッチグループの数を示す上記の記録のいくつか又は全てを記憶するために使用される。これらの実施形態では、CTIの解決情報と共に、BTBは、CTIに続けて順次フェッチされ、CTIを有しないフェッチグループ(存在する場合)の数に関する情報を含む。動作中、所定のフェッチグループで特定のタイプのCTIに遭遇すると(例えば、所定のフェッチグループ内で、特定のタイプのCTIを検出すると)、シーケンシャルフェッチロジック機能ブロックは、後続のCTIがリタイアする(すなわち、実行が完了し、プロセッサのアーキテクチャ状態にコミットする準備ができる)前に、所定のフェッチグループに続けて順次実行されるためにフェッチされるフェッチグループの数のカウントを保持する。次に、シーケンシャルフェッチロジックは、フェッチグループの数のカウントを、CTIに関連するBTB内のエントリに記憶する。次に、BTB内のエントリのカウントは、本明細書で説明するように、フェッチグループについて分岐予測情報を取得するための分岐予測機能ブロックへのアクセスを回避するのに使用される。
いくつかの実施形態では、シーケンシャルフェッチテーブル(SFT)を使用して、各CTIに続けて順次フェッチされ、CTIを有しないフェッチグループの数を示す上記の記録のいくつか又は全てを記憶する。これらの実施形態では、SFT内のエントリが、CTIのターゲット命令に関連付けられており、その結果、SFT内の記録の各々は、対応するCTIの特定のパス/解決に続けて順次フェッチされ、CTIを有しないフェッチグループの数の指標を含む。動作中、所定のフェッチグループでCTIのターゲット命令(すなわち、CTIから行われたパスか、行われていないパスかにかかわらず、CTIのターゲットである命令)のリタイアに遭遇すると、シーケンシャルフェッチロジック機能ブロックは、後続のCTIのリタイア前に、順次実行されるためにフェッチされるフェッチグループの数のカウントを保持する。次に、シーケンシャルフェッチロジックは、ターゲット命令に関連するSFT内のエントリに、フェッチグループの数のカウントを記憶する。次に、SFT内のエントリのカウントは、本明細書で説明するように、この数のフェッチグループについて分岐予測情報を取得するための分岐予測機能ブロックへのアクセスを回避するのに使用される。
いくつかの実施形態では、上記の記録を使用して、分岐予測情報を取得するための分岐予測機能ブロックへのアクセスを抑制する場合、シーケンシャルフェッチロジックは、対応する記録から(BTB、SFT又は他の位置から)フェッチグループの数を取得して、カウンタをフェッチグループの数と同じ数に設定する。後続のフェッチグループの各々がフェッチされ、実行の準備がされると、シーケンシャルフェッチロジックは、カウンタをデクリメントし、上記のように分岐予測機能ブロックへのアクセスを抑制する。カウンタがゼロに達した後、1つ以上の後続のフェッチグループがフェッチされ、実行の準備がされると、シーケンシャルフェッチロジックは、1つ以上の後続のフェッチグループ内の命令の分岐予測情報を取得するために実行される分岐予測機能ブロックへの対応するアクセスを許可する。言い換えると、シーケンシャルフェッチロジックは、カウンタを使用して、特定の数のフェッチグループの分岐予測機能ブロックへのアクセスを抑制し、その後、後続のフェッチグループによる分岐予測機能ブロックへのアクセスの実行を開始する。これらの実施形態のいくつかでは、シーケンシャルフェッチロジックは、カウンタがゼロより大きい限り、記録自体のチェックも停止する。また、記録が記憶されている機能ブロックの部分(BTB、SFT等)は、電源が切られるか、低電力モードに置かれるか(例えば、供給電圧を下げる等)、他の方法で電力消費を減らすように設定される(例えば、クロックゲート等)ことができる。
CTIを含まず、所定のCTIに続けて順次フェッチされるフェッチグループの数を示す記録を使用することによって、フェッチグループの分岐予測情報を取得するための分岐予測機能ブロックへのアクセスを抑制することにより、説明される実施形態は、分岐予測機能ブロックへの不要なアクセスを回避することができる。これは、プロセッサ、より一般的には、電子デバイスの消費電力を低減するのに役立つ。消費電力の低減により、電子機器の使用コストを抑え、電池の使用効率を高める等のように、電子機器に対するユーザーの満足度を高めることができる。
(電子デバイス)
図1は、いくつかの実施形態による、電子デバイス100を示すブロック図である。図1に示すように、電子デバイス100は、プロセッサ102及びメモリ104を含む。一般に、プロセッサ102及びメモリ104は、ハードウェアによって、すなわち、様々な回路要素及びデバイスを使用して実装される。例えば、プロセッサ102及びメモリ104は、1つ以上の個別の半導体チップを含む1つ以上の半導体チップ上に全体的に製造することができ、ディスクリート回路要素と組み合わせた半導体チップから製造することができ、ディスクリート回路要素のみから製造することができる。本明細書で説明するように、プロセッサ102及びメモリ104は、特定のフェッチグループの分岐予測機能ブロックへのアクセスを抑制するための動作を実行する。
プロセッサ102は、電子デバイス100において計算及び他の動作(例えば、制御動作、構成動作等)を実行する機能ブロックである。例えば、プロセッサ102は、1つ以上のマイクロプロセッサ、中央処理装置(CPU)コア、及び/又は、別の処理メカニズムであってもよいし、これらを含んでもよい。
メモリ104は、電子デバイス100のメモリ(例えば、「メイン」メモリ)の動作を実行する電子デバイス100の機能ブロックである。メモリ104は、第4世代ダブルデータレート同期DRAM(DDR4 SDRAM)等の揮発性メモリ回路、及び/又は、電子デバイス100の機能ブロックによって使用されるデータ及び命令を記憶するための他のタイプのメモリ回路と、メモリ回路に記憶されたデータ及び命令へのアクセスを処理し、他の制御又は構成動作を実行するための制御回路と、を含む。
電子デバイス100は、説明のために簡略化されている。しかしながら、いくつかの実施形態では、電子デバイス100は、追加の又は異なる機能ブロック、サブシステム、要素、及び/又は、通信パスを含む。例えば、電子デバイス100は、表示サブシステム、電力サブシステム、I/Oサブシステム等を含むことができる。一般に、電子デバイス100は、本明細書で説明する動作を実行するのに十分な機能ブロック等を含む。
電子デバイス100は、コンピュータ動作を実行する任意のデバイスであってもよいし、このような任意のデバイスに含まれてもよい。例えば、電子デバイス100は、デスクトップコンピュータ、ラップトップコンピュータ、ウェアラブルコンピューティングデバイス、タブレットコンピュータ、仮想現実若しくは拡張現実機器、スマートフォン、人工知能(AI)デバイス若しくは機械学習デバイス、サーバ、ネットワークアプライアンス、玩具、視聴覚機器、家電製品、車両等、及び/又は、これらの組み合わせであってもよいし、これらに含まれてもよい。
(プロセッサ)
上記のように、電子デバイス100は、プロセッサ102を備え、プロセッサ102は、マイクロプロセッサ、CPUコア、及び/又は、別の処理メカニズムであってもよい。図2は、いくつかの実施形態による、プロセッサ102を示すブロック図である。特定の機能ブロックが図2に示されているが、いくつかの実施形態では、異なる構成、接続性、数、及び/又は、タイプの機能ブロックがプロセッサ102に存在し得る。一般に、プロセッサ102は、本明細書に記載の動作を実行するのに十分な機能ブロックを含む。
図2に見られるように、プロセッサ102の機能ブロックは、フロントエンドサブシステム200、実行サブシステム202又はメモリサブシステム204の一部と見なすことができる。フロントエンドサブシステム200は、メモリサブシステム204内、又は、メモリサブシステム204と通信するキャッシュメモリ又はメインメモリから命令を取得するための動作を実行し、実行サブシステム202内の実行ユニット機能ブロックにディスパッチするための命令を準備する機能ブロックを含む。
フロントエンドサブシステム200は、フェッチされた命令の実行のためにデコード及び準備に関連する動作を実行する機能ブロックである命令デコード206を含む。命令デコード206は、L1命令キャッシュ216、L2キャッシュ218、L3キャッシュ(図示省略)、又は、メインメモリ(図示省略)から、Nバイトのフェッチグループ内の命令(例えば、32バイトのフェッチグループ内の4つの命令等)をフェッチするか、他の方法で受信する。次に、命令デコード206は、場合によっては並列に、フェッチグループ内の命令を個々のマイクロオペレーションにデコードする。次に、命令デコード206は、マイクロオペレーションを命令ディスパッチ208に送信し、マイクロオペレーションは、実行のために実行サブシステム202内の適切な実行ユニットに転送される。
また、フロントエンドサブシステム200は、次のフェッチグループがフェッチされるプログラムカウンタ又はメモリ内のアドレスを決定するための動作を実行する機能ブロックであるNEXT PC210を含む。NEXT PC210は、プログラムカウンタの初期値又は現在値に基づいて、プログラムカウンタの次の連続値(sequential value)を計算する。例えば、32バイトのフェッチグループが与えられると、NEXT PC210は、次のアドレス=現在のアドレス+32バイトを計算することができる。行われたCTIがプログラムフローを変更しない場合、フロントエンドサブシステム200は、メモリ内の対応するシーケンシャルアドレスからフェッチグループをフェッチするために、NEXT PC210によって計算されるプログラムカウンタの連続値を使用する。
さらに、フロントエンドサブシステム200は、分岐予測ユニット212を含む。分岐予測ユニット212は、フェッチグループ内のCTIの解決を予測し、プログラムカウンタ、したがって後続のフェッチグループがフェッチされるメモリ内のアドレスを変更するための動作を実行する機能ブロックである。言い換えれば、分岐予測ユニット212は、CTI動作の1つ以上の記録を使用して、CTIの「行われた」又は「行われていない」解決を予測し、行われたCTIの予測されたターゲットアドレスを提供する。分岐予測ユニット212によってCTIが行われると予測される場合、NEXT PC210によって提供される次以降のプログラムカウンタを、分岐予測ユニット212によって返されるターゲットアドレスを使用して置き換えることができる。
図3は、いくつかの実施形態による、分岐予測ユニット212を示すブロック図である。様々な機能ブロックを備える分岐予測ユニット212が図3に示されているが、分岐予測ユニット212は、この説明のために簡略化されている。いくつかの実施形態では、異なる機能ブロックが分岐予測ユニット212に存在する。例えば、いくつかの実施形態では、マルチレベル分岐予測、分岐パターン予測器、マルチレベル分岐ターゲットバッファ及び/若しくは方向予測器、並びに/又は、他の分岐予測メカニズム若しくは技術が使用され、対応する機能ブロックが分岐予測ユニット212に含まれる。一般に、分岐予測ユニット212は、本明細書で説明される動作を実行するのに十分な機能ブロックを含む。
図3に見られるように、分岐予測ユニット212の機能ブロックは、コントローラ300と、方向予測器302と、分岐ターゲットバッファ(BTB)304と、を含む。コントローラ300は、方向予測器302及び分岐ターゲットバッファ304の更新及びルックアップ、他の機能ブロックとの通信等の分岐予測ユニット212の動作を実行するための回路要素を含む。方向予測器302は、例えばルックアップテーブル、リスト等の記録を含み、記録は、CTIに関連するアドレスと、CTIの行われた又は行われていない解決の指標と、をそれぞれ記憶するいくつかのエントリを含む。例えば、アドレスAのCTIの場合、方向予測器302は、アドレスA又はそれに基づく値を、CTIの行われた又は行われていない解決の対応する予測(例えば、飽和カウンタ等)に関連付けるエントリを含むことができる。分岐ターゲットバッファ304は、例えばルックアップテーブル、リスト等の記録を含み、記録は、CTIに関連するアドレスと、CTIのターゲットアドレスの指標と、をそれぞれ記憶するいくつかのエントリを含む。例えば、アドレスAのCTIの場合、分岐ターゲットバッファ304は、アドレスA又はそれに基づく値を、CTIのターゲット命令の対応する絶対アドレス又は相対アドレスに関連付けるエントリを含むことができる。命令を実行している間、コントローラ300は、CTI命令の実際の結果に基づいて、対応するエントリを方向予測器302及び/又は分岐ターゲットバッファ304に記憶及び/又は更新することができ、それによって、CTI命令解決の上記予測で使用される値を記憶する。
いくつかの実施形態では、分岐ターゲットバッファ304は、分岐ターゲット情報に加えて、後続のCTIがリタイアする前に、CTIに続けて順次実行されるためにフェッチされたフェッチグループの数のカウントの記録を記憶するために使用される。これらの実施形態では、各エントリは、対応するCTIに関連するカウント(例えば、数、文字列等)が、かかるカウントが利用可能である場合に記憶される位置を含む。例えば、カウントは、この目的のためにエントリ内に予約された8ビットに記憶されてもよい。図4は、いくつかの実施形態による、分岐ターゲットバッファ304を示すブロック図である。分岐ターゲットバッファ304は、特定の情報を記憶するものとして示されているが、分岐ターゲットバッファ304は、この説明のために簡略化されている。いくつかの実施形態では、異なる構成の情報が、分岐ターゲットバッファ304内のエントリ内に記憶される。一般に、分岐ターゲットバッファ304は、本明細書で説明される動作を実行するのに十分な情報を記憶する。
図4に見られるように、分岐ターゲットバッファ304は、アドレス(ADDR)400と、分岐ターゲット402と、カウント404と、メタデータ406と、をそれぞれ含むいくつかのエントリ408を含む。アドレス400は、エントリが情報を保持するCTIのアドレス若しくはアドレスに基づく値、アドレスに対する値、又は、CTIに関連付けられたアドレス、を記憶するために使用される。分岐ターゲット402は、エントリが情報を保持するCTIのターゲット命令のアドレス又はアドレスに基づく値を記憶するために使用され、したがって、CTIが再び実行される場合にターゲット命令のアドレスを予測するために使用することができる。カウント404は、後続のCTIがリタイアする前にエントリが情報を保持しているCTIに続けて順次実行されるためにフェッチされたフェッチグループの数のカウントを記憶するために使用される。メタデータ406は、エントリ、カウント及び/又はCTIに関する情報(有効ビット、許可ビット等)を記憶するために使用される。
図2に戻ると、フロントエンドサブシステム200は、分岐予測情報を取得するための分岐予測機能ブロックへのアクセスを可能な場合に回避するための動作を実行する機能ブロックであるシーケンシャルフェッチロジック214をさらに含む。シーケンシャルフェッチロジック214は、フェッチグループに関連する記録を使用して、CTIを含まないと以前に決定された所定のフェッチグループ(又は、その内部の命令)に続けて順次フェッチされるフェッチグループの数を決定する。この数のフェッチグループの各々がその後フェッチされると、シーケンシャルフェッチロジック214は、分岐予測情報を取得するための分岐予測ユニット212へのアクセスを抑制する。
図5は、いくつかの実施形態による、シーケンシャルフェッチロジック214を示すブロック図である。様々な機能ブロックを備えるシーケンシャルフェッチロジック214が図5に示されているが、シーケンシャルフェッチロジック214は、この説明のために簡略化されている。いくつかの実施形態では、様々な異なる機能ブロックがシーケンシャルフェッチロジック214に存在する。例えば、シーケンシャルフェッチロジック214は、シーケンシャルフェッチテーブル502を含むものとして示されているが、いくつかの実施形態では、シーケンシャルフェッチロジック214は、シーケンシャルフェッチテーブルを含まないか、使用しない。代わりに、シーケンシャルフェッチロジック214は、対応する動作を実行するために、分岐ターゲットバッファ304内のエントリに記憶されたカウント情報を使用する。一般に、シーケンシャルフェッチロジック214は、本明細書で説明する動作を実行するのに十分な機能ブロックを含む。
図5に見られるように、シーケンシャルフェッチロジック214の機能ブロックは、コントローラ500及びシーケンシャルフェッチテーブル502を含む。コントローラ500は、シーケンシャルフェッチテーブル502(又は、分岐ターゲットバッファ304)の更新及びルックアップ、他の機能ブロックとの通信等のように、シーケンシャルフェッチロジック214の動作を実行するための回路要素を含む。シーケンシャルフェッチテーブル502は、例えばルックアップテーブル、リスト等の記録を含み、記録は、CTIのターゲット命令に関連するアドレスと、後続のCTIがリタイアする前に順次実行されるためにフェッチされたフェッチグループの数のカウントの記録と、をそれぞれ記憶するいくつかのエントリを含む。図6は、いくつかの実施形態による、シーケンシャルフェッチテーブル502を示すブロック図である。シーケンシャルフェッチテーブル502は、特定の情報を記憶するものとして示されているが、シーケンシャルフェッチテーブル502は、この説明のために簡略化されている。いくつかの実施形態では、異なる構成の情報が、シーケンシャルフェッチテーブル502のエントリに記憶される。一般に、シーケンシャルフェッチテーブル502は、本明細書で説明する動作を実行するのに十分な情報を記憶する。
図6に見られるように、シーケンシャルフェッチテーブル502は、CTIターゲットアドレス(ADDR)600と、カウント602と、メタデータ604と、をそれぞれ含む、いくつかのエントリ606を含む。CTIターゲットアドレス600は、エントリが情報を保持するCTIのターゲット命令のアドレス若しくはそれに基づく値、又は、CTIのターゲット命令に関連するアドレス、を記憶するために使用される。一般に、CTIの「ターゲット」命令は、CTIの実行時にプログラムフローがジャンプする命令であり、メモリ内のアドレスである。静的ターゲットジャンプ命令等の静的に定義されたターゲットを有する無条件CTIの場合にはターゲット命令が1つのみであるため、プログラムフローは、CTI命令からメモリ内の同じアドレスに常にジャンプする。ただし、条件付きCTIの場合には、少なくとも2つの(プログラムコード内の行われたパスと、行われていないパス上の)ターゲット命令が存在し、任意の数のターゲット命令が存在し得る。例えば、実行時にターゲット命令が指定される間接CTIは、行われていないパスがシーケンシャルであっても、行われるパス上に任意の数のターゲット命令を有することができる。シーケンシャルフェッチテーブル502は、CTIのターゲット命令に関連する記録を記憶するので、所定のCTIの潜在的なターゲット命令(したがって、所定のCTIからのパス)の各々は、関連する個別のエントリをシーケンシャルフェッチテーブル502内に有することができる。カウント602は、後続のCTIがリタイアする前に対応するCTIに続けて順次実行されるためにフェッチされたフェッチグループの数のカウントを記憶するために使用される。メタデータ604は、エントリ及び/又はカウントに関する情報(有効ビット、許可ビット等)を記憶するために使用される。
シーケンシャルフェッチテーブル502を用いて、フェッチグループの数を決定するための上記の記録を記憶する実施形態では、プログラムカウンタ、すなわち、所定のフェッチグループがフェッチされるアドレスを受信すると、コントローラ500は、関連するアドレスを有するエントリがシーケンシャルフェッチテーブル502に存在するかどうかを判別するために、シーケンシャルフェッチテーブル502内のルックアップを実行する。言い換えれば、ルックアップは、所定のフェッチグループ内のアドレスの範囲内の複数のアドレスに存在する命令のアドレス、すなわち、CTIのターゲット命令がシーケンシャルフェッチテーブル502内に存在するかどうかを決定する。存在する場合、コントローラ500は、カウント602から対応するカウントを取得し、分岐予測情報を取得するための分岐予測ユニット212へのアクセスを抑制するためのフェッチグループの数として当該カウントを使用する。そうでなく、一致するアドレスがシーケンシャルフェッチテーブル502に見つからない場合、コントローラ500は、分岐予測ユニット212へのアクセスを妨げない、すなわち、分岐予測情報の取得を正常に進行させる。
フェッチグループ内のCTIの分岐予測情報のルックアップを実行する一環として、分岐ターゲットバッファ304を使用して、フェッチグループの数を決定するための上記の記録を記憶する実施形態では、分岐予測ユニット212は、そのようなターゲットアドレスが存在する場合に、CTIの予測されたターゲット命令のアドレスを分岐ターゲットバッファ304から取得する。また、分岐予測ユニット212は、カウント404を分岐ターゲットバッファ304から取得し、カウント404は、シーケンシャルフェッチロジック214内のコントローラ500に返される。コントローラ500は、分岐予測情報を取得するための分岐予測ユニット212へのアクセスを抑制するためのフェッチグループの数としてカウントを使用する。そうでなく、一致するアドレス及び/又はカウントが分岐ターゲットバッファ304に見つからない場合、コントローラ500は、分岐予測ユニット212へのアクセスを妨げない、すなわち、分岐予測情報の取得を正常に進行させる。
いくつかの実施形態では、シーケンシャルフェッチテーブル502は、限られた数のエントリ(例えば、32エントリ、64エントリ等)のみを含み、したがって、プロセッサ102の動作中に満杯になる可能性がある。シーケンシャルフェッチテーブル502が満杯になると、新たな情報をシーケンシャルフェッチテーブル502に記憶するために、エントリ内の既存の情報を上書きする必要がある。いくつかの実施形態では、シーケンシャルフェッチテーブル502内のエントリは、1つ以上の置換ポリシー、ガイドライン等を使用してコントローラ500によって管理される。これらの実施形態では、上書きされるエントリを選択する場合、エントリは、置換ポリシー、ガイドライン等に従って選択される。例えば、コントローラ500は、最長未使用時間(LRU)置換ポリシーを使用して、シーケンシャルフェッチテーブル502内のエントリの情報を管理することができる。
シーケンシャルフェッチロジック214は、図2においては他の機能ブロックから分離された単一の機能ブロックとして示されているが、いくつかの実施形態では、シーケンシャルフェッチロジック214の一部又は全ては、図2に示される他の機能ブロックに含まれ得ることに留意されたい。これらの実施形態では、シーケンシャルフェッチロジック214に属する動作は、他の機能ブロック内の回路要素によって実行されてもよい。一般に、シーケンシャルフェッチロジック214は、図2に示すプロセッサ102内の回路要素の特定の位置に関する制限無しに、説明された動作を実行するために使用される様々な回路要素を含む。
図2に戻ると、実行サブシステム202は、整数実行ユニット222及び浮動小数点実行ユニット224(総称して「実行ユニット」)を含み、これらは、それぞれ整数命令及び浮動小数点命令を実行するための動作を実行する機能ブロックである。実行ユニットは、ハードウェアの名前変更、実行スケジューラ、算術論理演算ユニット(ALU)、浮動小数点の乗算及び加算ユニット(浮動小数点実行ユニット224内)、レジスタファイル等の要素を含む。
また、実行サブシステムは、リタイアキュー226を含む。リタイアキュー226は、実行された命令の結果が、対応する命令の実行を完了した後であるが、結果がプロセッサ102のアーキテクチャ状態にコミットされる(例えば、キャッシュ又はメモリに書き込まれ、他の動作で使用可能になる)前に保持される機能ブロックである。いくつかの実施形態では、特定の命令をプログラム順序外で実行することができ、リタイアキュー226は、順序外の命令の結果が他の順序外の命令に対して適切にリタイアされることを確実にするために使用される。
いくつかの実施形態では、リタイアキュー226は、後続のCTIがリタイアする前にCTIに続けて順次実行されるためにフェッチされるフェッチグループの数のカウントを保持するための動作の少なくとも一部を実行する。例えば、いくつかの実施形態では、フロントエンドサブシステム200(例えば、命令デコード206)は、実行サブシステム202で実行されるCTIと共に、命令がCTIである(又は、CTIではない)という指標を含む。例えば、フロントエンドサブシステム200は、実行サブシステム202を介した命令に付随するメタデータビット内に、指定されたフラグビットを設定することができる。CTIであることが示された命令に遭遇すると、リタイアキュー226は、CTIであることが示された後続の命令がリタイアする前にリタイアするフェッチグループ(又は、より一般的には個々の命令)のカウントを保持し始めることができる。次に、カウントは、本明細書で説明されるように、将来の使用のために記憶されるように、シーケンシャルフェッチロジック214に伝達され得る。いくつかの実施形態では、カウントは、対応する閾値を超えない限り、リタイアキュー226によって報告されない(又は、任意の記録を更新するために使用されない)。
メモリサブシステム204は、キャッシュの階層を含む。キャッシュの階層は、限られた数の命令及び/又はデータのコピーを、命令及び/又はデータを使用する機能ブロックの近くに記憶するための揮発性メモリ回路と、データへのアクセス等の動作を処理するための制御回路と、を含む機能ブロックである。階層は、2つのレベルを含み、第1のレベルにレベル1(L1)命令キャッシュ216及びL1データキャッシュ220が存在し、第2のレベルにL2キャッシュ218が存在する。メモリサブシステム204は、メモリ104に通信可能に結合され、外部L3キャッシュ(図示省略)に結合され得る。メモリ104は、命令及び/又はデータのための長期記憶装置として機能する不揮発性大容量記憶装置(例えば、ディスクドライブ又はソリッドステートドライブ)(図示省略)に結合することができる。
(分岐予測器へのアクセスを回避するための、制御転送命令に関連するシーケンシャルフェッチグループの記録の使用)
説明された実施形態では、電子デバイス内のプロセッサ(例えば、プロセッサ102)は、CTIに関連する記録を使用して、CTIに続けて順次フェッチされる、CTIを含まないフェッチグループの数を決定し、この数のフェッチグループのために対応する分岐予測情報を取得するための分岐予測ユニットへのアクセスを抑制する。図7は、いくつかの実施形態による、分岐予測ユニットへのアクセスを抑制するためにCTIに関連付する記録を使用するためのプロセスを示すフローチャートである。図7に示す動作は、いくつかの実施形態によって実行される動作の一般的な例として示されていることに留意されたい。他の実施形態により実行される動作は、異なる動作、及び/又は、異なる順序で実行される動作を含む。図7の例では、プロセッサ102と同様の内部構成を有する電子デバイス内のプロセッサが、様々な動作を実行するものとして説明されている。しかしながら、いくつかの実施形態では、異なる内部構成を有するプロセッサが、説明された動作を実行する。
図7に示す動作は、プロセッサが1つ以上のCTIの各々に関連付けられた記録を保持するときに開始され、各記録は、CTIを含まない特定の数のフェッチグループが、対応するCTIに続けて順次フェッチされることを示す(ステップ700)。この動作中、シーケンシャルフェッチロジックのコントローラ(例えば、シーケンシャルフェッチロジック214のコントローラ500)は、リタイアキュー(例えば、リタイアキュー226)から、CTI、及び、CTIに続けて順次フェッチされるフェッチグループの数の指標又は識別子を受信する。例えば、フェッチグループに4つの命令が含まれる実施形態を想定すると、リタイアキューがCTIに遭遇し、次のCTIがリタイアする前に129個の命令をカウントすると、リタイアキューは、CTIの識別情報と共に、値129又は別の値、例えば32(すなわち、129/4を、フェッチグループの数を表すために整数に切り捨てた)をシーケンシャルフェッチロジックに伝えることができる。(本明細書で使用される場合、CTIに「遭遇する」ことは、CTIに関連するプロセッサフラグに基づいて、リタイアする命令の中からCTIを検出すること、CTI及び/又は後続の命令若しくは結果値に関連する命令フローの動作又はパターンを検出すること等を含む。)次に、コントローラは、CTIに関連する記録を更新して、特定の数のフェッチグループを示す。
図8及び図10は、図7のステップ700について説明したように、1つ以上のCTIに関連する記録を保持するために実行される動作を示すフローチャートである。図8は、いくつかの実施形態による、記録を記憶するために分岐ターゲットバッファが使用される場合に、CTIに関連する記録を保持するために実行される動作を示すフローチャートである。図10は、いくつかの実施形態による、記録を記憶するためにシーケンシャルフェッチテーブルが使用される場合に、CTIに関連する記録を保持するために実行される動作を示すフローチャートである。図8及び図10に示す動作は、いくつかの実施形態により実行される動作の一般的な例として提示されることに留意されたい。他の実施形態により実行される動作は、異なる動作、異なる順序で実行される動作、及び/又は、異なる機能ブロックにより実行される動作を含む。
図8に示す動作は、リタイアキューが、特定のタイプのCTIのリタイアに遭遇して、後続のCTIがリタイアする前に順次リタイアされるフェッチグループの(又は、より一般的には、リタイアされた個々の命令の)数のカウントを保持し始めるときに開始する(ステップ800)。この動作の場合、リタイアキューは、特定のタイプのCTI命令のリタイアを監視し、次のCTI命令の前にリタイアする後続の命令のカウントを保持する。例えば、リタイアキューは、次のCTIがリタイアするまで、特定のタイプのCTI命令に続くリタイアされた命令毎にカウンタをインクリメントすることができる。
上記のように、図8に示す実施形態においては、記録を記憶するために分岐ターゲットバッファが使用されている。いくつかの実施形態では、分岐ターゲットバッファは、CTIの識別子(例えば、メモリ内のCTI命令のアドレス)又はCTIが含まれるフェッチグループによって索引付けされた分岐ターゲット記録を記憶する。このため、これらの実施形態では、分岐ターゲットバッファ内のエントリのカウント情報は、CTI又はフェッチグループにのみ関連付けられ、CTIの(おそらく多数の)ターゲット命令には関連付けられない。言い換えれば、単一のデータである上記のカウント情報は、CTIから各ターゲット命令を介する単一の決定パスのみを表す。したがって、分岐ターゲットバッファ内のこのような記録は、静的ターゲット命令の条件付きCTI、及び/又は、動的に指定されるターゲット命令を有するCTIの全ての可能な解決について、シーケンシャルフェッチグループのカウントを決定するために信頼性をもって使用することはできない。したがって、いくつかの実施形態では、「特定の」タイプのCTIは、無条件の静的ターゲット命令CTI、又は、条件付きCTIから行われないパスである。
次に、リタイアキューは、カウントをシーケンシャルフェッチロジックに伝達し、シーケンシャルフェッチロジックは、CTI又はフェッチグループに関連付けられた分岐ターゲットバッファ内のエントリに、フェッチグループの数のカウントを示す記録を記憶する(ステップ802)。この動作の場合、シーケンシャルフェッチロジックは、CTIのアドレス又はそれに基づく値を決定し、分岐ターゲットバッファ内の対応するエントリを決定する等して、記録が記憶される分岐ターゲットバッファ内のエントリを決定する。次に、シーケンシャルフェッチロジックは、決定されたエントリに、フェッチグループの数のカウントを示す記録を記憶する。例えば、分岐ターゲットバッファ内のエントリに8ビット値のスペースが含まれている場合、シーケンシャルフェッチロジックは、カウントを表す8ビット値をエントリに記憶する。エントリのサイズがカウントを記憶するのに不十分な場合(例えば、カウントが8ビットのカウント値255を超える場合)、デフォルト値又はゼロ値をエントリに記憶することができ、これにより、分岐予測器へのアクセスが特定のCTIについて実行される(抑制されない)ことが示される。或いは、最大値をエントリに記憶して、分岐予測器へのアクセスの少なくとも一部を回避するようにすることもできる。
図9は、いくつかの実施形態による、対応するCTIに続けて順次フェッチされるCTIを含まないフェッチグループのカウントで分岐ターゲットバッファを更新するための動作のタイムライン図である。図9に示すように、時間は左から右に進み、その間に、プログラムコードから別々の命令セットを含む多数のフェッチグループ(FG)がフェッチされ、実行されるために準備され(例えば、デコード、ディスパッチされる等)、実行され、リタイアされる。各フェッチグループは、多数の個々の命令(4、6等)を含み、フェッチグループ内の命令には3つのCTI命令がある。
図9では、フェッチグループ902内の2番目の命令である第1のCTI命令CTI1は、命令フローをフェッチグループ902の第1のアドレスからフェッチグループ904の第2の非シーケンシャルのアドレスにジャンプさせる、静的無条件分岐命令である。フェッチグループ902の2番目の命令からフェッチグループ904の1番目の命令への矢印によってこれが示されている。(特定のタイプのCTIの1つである)CTI1のリタイアを検出すると、リタイアキューは、後続のCTIがリタイアする前に順次リタイアされた(すなわち、構成要素である命令がリタイアされた)フェッチグループの数のカウントを保持する。これは、フェッチグループ910内の3番目の命令である静的ターゲットアドレスを有する、行われていない条件付きのCTI2である。CTI2がリタイアする前に3つのフェッチグループ(フェッチグループ904~908)がリタイアしたため、リタイアキューは、CTI1の識別情報(例えば、そのアドレス、プロセッサ命令タグ又は内部識別子等)及び3つのカウント値又は別の値(例えば、リタイアした命令の数(14等))をシーケンシャルフェッチロジックに伝える。図9の分岐ターゲットバッファの例におけるCTI1のエントリに示すように、CTI1の識別子及び値を受信すると、シーケンシャルフェッチロジックは、分岐ターゲットバッファの対応するエントリを更新する。図9の分岐ターゲットバッファ内に示されるCTI1及びCTI2は、CTI1及びCTI2のアドレス、又は、対応するフェッチグループに関連付けられたアドレス等のように、CTI1及びCTI2を表す又は識別する他の値であってもよいことに留意されたい。
CTI1のカウントの終わりとして機能した第2のCTI命令CTI2は、第2の/対応するカウントをリタイアキューに開始させる。上記のように、CTI2は行われないので、フェッチグループは(NEXT PC機能ブロックによって生成される)次のアドレスから順次フェッチされ、リタイアキューは、対応するカウントを、フェッチグループ916内の後続のCTIであるCTI3がリタイアするまで保持する(フェッチグループ916は、プログラムフローをフェッチグループ918に向ける)。CTI3がリタイアする前に、2つのフェッチグループ(フェッチグループ912~914)の全てがリタイアしたため、リタイアキューは、CTI2の識別子及び2つ又は別のカウント値(リタイアした命令の数、10等)をシーケンシャルフェッチロジックに伝える。CTI2の識別子及び値を受信すると、シーケンシャルフェッチロジックは、図9の分岐ターゲットバッファの例においてCTI2として示される、分岐ターゲットバッファ内の対応するエントリを更新する。CTI2は、条件付きCTIの行われていないパスのケースであり、したがって、特定のタイプのCTIの1つであることに留意されたい。いくつかの実施形態では、行われたパスは、同様に追跡及び記録されない。
図10に進むと、図10に示す動作は、リタイアキューが、CTIのターゲット命令のリタイアに遭遇して、後続のCTIがリタイアする前に順次リタイアされるフェッチグループ(又は、より一般的には、リタイアされた個々の命令)の数のカウントを保持し始めるときに開始する(ステップ1000)。この動作の場合、リタイアキューは、CTIを監視し、そして、CTIのターゲット命令(すなわち、CTIに続く次の命令)のリタイアを監視し、次のCTI命令の前にリタイアする後続の命令のカウントを保持する。例えば、リタイアキューは、次のCTIがリタイアするまで、特定のタイプのターゲット命令に続くリタイアされた命令毎にカウンタをインクリメントすることができる。
上記のように、シーケンシャルフェッチテーブルは、図10に示す実施形態において、記録を記憶するために使用される。いくつかの実施形態では、シーケンシャルフェッチテーブルは、CTIのターゲット命令に関連付けられた記録を記憶する。言い換えれば、これらの実施形態では、シーケンシャルフェッチテーブルは、CTIの可能なターゲット命令の各々に関連付けられた記録、したがって、CTIから行われたパスの各々を含むことができる。このため、これらの実施形態では、様々なタイプのCTIを処理することができる(すなわち、シーケンシャルフェッチカウントを記録することができる)。これは、カウント情報が分岐ターゲットバッファ内に記憶される実施形態とは異なることを想起されたい。分岐ターゲットバッファは、対応するターゲット命令ではなく、CTI又はフェッチグループに関連付けられたカウント情報を記憶するため、特定のタイプのCTIのみを処理することができる。
次に、リタイアキューは、カウントをシーケンシャルフェッチロジックに伝え、シーケンシャルフェッチロジックは、ターゲット命令に関連付けられたシーケンシャルフェッチテーブル内のエントリに、フェッチグループの数のカウントを示す記録を記憶する(ステップ1002)。この動作の場合、シーケンシャルフェッチロジックは、ターゲット命令のアドレス又はそれに基づく値を決定し、シーケンシャルフェッチテーブル内の対応するエントリを決定する等して、記録が記憶されるシーケンシャルフェッチテーブル内のエントリを決定する。次に、シーケンシャルフェッチロジックは、決定されたエントリに、フェッチグループの数のカウントを示す記録を記憶する。例えば、シーケンシャルフェッチテーブル内のエントリに8ビット値のスペースが含まれている場合、シーケンシャルフェッチロジックは、カウントを表す8ビット値をエントリに記憶する。エントリのサイズがカウントを記憶するのに不十分な場合(例えば、カウントが8ビットのカウント値255を超える場合)、デフォルト値又はゼロ値をエントリに記憶することができ、これにより、分岐予測器へのアクセスが特定のターゲット命令について実行される(回避されない)ことが示される。或いは、最大値をエントリに記憶することができ、これにより、分岐予測器へのアクセスの少なくとも一部を回避することが可能になる。
図11は、いくつかの実施形態による、対応するCTIに続けて順次フェッチされるCTIを含まないフェッチグループのカウントでシーケンシャルフェッチテーブルを更新する動作のタイムライン図である。図11に示すように、時間は左から右に進み、その間に、プログラムコードからの別々の命令セットを含むいくつかのフェッチグループ(FG)がフェッチされ、実行されるために準備され(例えば、デコード、ディスパッチされる等)、実行され、リタイアされる。各フェッチグループは、いくつかの個別の命令(4、6等)を含み、フェッチグループ内の命令には3つのCTI命令がある。
図11では、フェッチグループ1102内の2番目の命令である第1のCTI命令CTI1は、命令フローをフェッチグループ1102の第1のアドレスからフェッチグループ1104の第2の非シーケンシャルなアドレス(ADDR1)にジャンプさせる静的無条件分岐命令である。これは、フェッチグループ1102の2番目の命令からフェッチグループ1104の1番目の命令(ADDR1)への矢印によって示されている。フェッチグループ1104の1番目の命令であるADDR1でターゲット命令のリタイアを検出すると、リタイアキューは、後続のCTIがリタイアする前に順次リタイアされた(すなわち、構成要素である命令がリタイアされた)フェッチグループの数のカウントを保持する。後続のCTIは、フェッチグループ1112内の1番目の命令である静的ターゲットアドレスを有する、行われていない条件付きのCTI2である。CTI2がリタイアする前に3つのフェッチグループ(フェッチグループ1104~1108)の全てがリタイアしたため、リタイアキューは、ADDR1におけるターゲット命令の識別子(例えば、そのアドレス、プロセッサ命令タグ又は内部識別子等)、及び、3つのカウント値又は他の値(リタイアした命令の数、13等)をシーケンシャルフェッチロジックに伝える。ADDR1におけるターゲット命令の識別子及び値を受信すると、シーケンシャルフェッチロジックは、図11のシーケンシャルフェッチテーブルの例のADDR1のエントリに示すように、シーケンシャルフェッチテーブル内の対応するエントリを更新する。図11のシーケンシャルフェッチテーブルに示すADDR1及びADDR2は、アドレスADDR1及びADDR2、又は、対応するターゲット命令を表す若しくは識別する他の値であってもよいことに留意されたい。
ADDR2でのCTI2のターゲット命令のリタイアにより、リタイアキューは、第2の/対応するカウントを開始する。上記のように、CTI2が行われないので、ターゲット命令は、順番に次のアドレスADDR2にあり、フェッチグループは、ADDR2からフェッチされる。リタイアキューは、フェッチグループ1116内の後続のCTIであるCTI3(CTI3は、プログラムフローをフェッチグループ1118に向ける)がリタイアするまで、対応するカウントを保持する。CTI3がリタイアする前に2つのフェッチグループ(フェッチグループ1112~1114)の全てがリタイアしたため、リタイアキューは、ADDR2におけるターゲット命令の識別子(例えば、そのアドレス、プロセッサ命令タグ又は内部識別子等)、及び、2つのカウント値又は別の値(リタイアした命令の数、13等)をシーケンシャルフェッチロジックに伝える。ADDR2におけるターゲット命令の識別子及び値を受信すると、シーケンシャルフェッチロジックは、図11のシーケンシャルフェッチテーブルの例のADDR2のエントリに示すように、シーケンシャルフェッチテーブル内の対応するエントリを更新する。
いくつかの実施形態では、リタイアキューは、分岐ターゲットバッファ及び/又はシーケンシャルフェッチロジックにカウントを報告するための少なくとも1つの閾値を使用する。これらの実施形態では、カウントがフェッチグループの閾値数未満である場合、リタイアキューは、CTI及び/又はカウントをシーケンシャルフェッチロジックに報告しない。このようにして、リタイアキューは、カウントが記憶されている記録(すなわち、分岐ターゲットバッファ又はシーケンシャルフェッチテーブル)のエントリが慌ただしく上書きされることによるスラッシングを回避することができる。いくつかの実施形態では、閾値は動的であり、状況に応じて、実行時に設定/リセットすることができる。いくつかの実施形態では、記録内(分岐ターゲットバッファ等)のエントリは、対応するCTI又はターゲット命令と後続のCTIとの間で発生するフェッチグループの数が閾値数未満であった場合、カウントが無効としてマークされるか、デフォルト値(0等)に設定されてもよい。
リタイアキューは、図8~図11の例について、後続のCTIがリタイアする前に順次リタイアするフェッチグループ(又は、より一般的には、リタイアした個々の命令)の数のカウントを保持するものとして説明されているが、いくつかの実施形態では、異なる機能ブロックがカウントを保持する。一般に、説明された実施形態では、個々のCTI命令及び/又は特定のタイプのCTI命令を識別し、識別されたCTI命令間の命令の数をカウントすることができる任意の機能ブロックは、カウントを保持することができる。例えば、いくつかの実施形態では、デコードユニット及び/又は分岐予測ユニットは、カウントを保持するための動作の一部又は全てを実行するが、予測ミスの分岐に対しては、様々なロールバック及び回復動作が実行されてもよい。
図7に戻すと、シーケンシャルフェッチロジックは、プログラムコードを実行する場合に、所定のCTIに関連付けられた記録に基づいて、CTIを有しない特定の数のフェッチグループが、CTIに続けて順次実行されるためにフェッチされることを決定する(ステップ702)。ここで使用されるように、CTIに「関連付けられた」記録は、記録を記憶するために分岐ターゲットバッファが使用される実施形態では、CTI自体又は対応するフェッチグループに関連付けられた記録であってもよく、記録を記憶するためにシーケンシャルフェッチテーブルが使用される実施形態では、CTIのターゲット命令に関連付けられた記録であってもよい。一般に、CTI又はターゲット命令の何れかに遭遇すると(例えば、アドレス又は命令に関連付けられた他の情報に基づいてフェッチグループ内のCTI又はターゲット命令の何れかを検出すると)、シーケンシャルフェッチロジックは、順次フェッチされるCTIを有しないフェッチグループの数のカウントを適切な記録から取得する。上記のように、カウントは、フェッチグループの特定の数を示す数値、文字列又は他の値とすることができる。
次に、特定の数のフェッチグループの各々がフェッチされて実行の準備がされると、シーケンシャルフェッチロジックは、そのフェッチグループ内の命令の分岐予測情報を取得するための分岐予測ユニット(例えば、分岐予測ユニット212)への対応するアクセスを抑制する(ステップ704)。一般に、この動作中、シーケンシャルフェッチテーブルは、分岐予測ユニットへのアクセスを抑制、遮断又は他の方法で防止することによって、不必要な電力消費等を回避する。いくつかの実施形態では、分岐予測ユニットへのアクセスを抑制することに加えて、シーケンシャルフェッチロジックは、ステップ704の動作が完了するまで(ステップ702に示すように)カウントのチェックを実行することを回避し、シーケンシャルフェッチテーブル又は分岐予測ユニットの一部又は全て等の機能ブロックを低電力モードに置くことができる。
図12は、いくつかの実施形態による、CTIに続けて順次フェッチされるCTIを含まない特定の数のフェッチグループを決定し、特定の数を使用して分岐予測ユニットへのアクセスを抑制するためのプロセスを示すフローチャートである。図12に示す動作は、いくつかの実施形態によって行われる動作の一般的な例として示されていることに留意されたい。他の実施形態によって実行される動作は、異なる動作、異なる順序で実行される動作、及び/又は、異なる機能ブロックによって実行される動作を含む。図12の動作は、図7のステップ702~704に関して一般的な用語で説明されている。したがって、図12は、ステップ702~704のより詳細な説明を提供する。
図12の動作については、CTI命令(又は、より具体的には、そのターゲット命令)に関連付けられたシーケンシャルフェッチ記録(すなわち、CTIに続けて順次フェッチされるCTI命令を含まないフェッチグループの数を示す記録)は、図7、図10~図11について上述したように、シーケンシャルフェッチテーブルに記憶されることが想定されている。しかしながら、本明細書の他の箇所で説明されるように、シーケンシャルフェッチ記録が分岐ターゲットバッファに記憶される実施形態についても同様の動作が実行されることに留意されたい。(NEXT PC機能ブロックによって供給される)プログラムカウンタは、ステップ1200の前に、CTIのターゲット命令を含むフェッチグループがフェッチされることを示すことも想定されている。さらに、フェッチグループは、4つの命令が含まれていると想定されている。これらの値及び条件は、図12の例を示すために使用されているが、全ての実施形態で同じではない。
図12の動作は、シーケンシャルフェッチロジック(例えば、シーケンシャルフェッチロジック214)が、フェッチグループ内の命令のアドレス又は識別子に基づいて、フェッチグループに続けて順次フェッチされる特定の数のフェッチグループをシーケンシャルフェッチテーブルから取得するときに開始する(ステップ1200)。この動作では、シーケンシャルフェッチロジックは、プログラムカウンタを使用して、シーケンシャルフェッチテーブルのフェッチグループ内の4つの命令の何れかに一致又は「ヒット」があるかどうかをチェックする。例えば、シーケンシャルフェッチロジックは、プログラムカウンタ(すなわち、フェッチアドレス)からハッシュ値又は別のインデックス値を計算して、シーケンシャルフェッチテーブルのエントリの一部又は全てと比較することができる。別の例として、シーケンシャルフェッチロジックは、プログラムカウンタに基づいてフェッチグループ内の命令の全てのアドレスを計算して、計算されたアドレスの各々をシーケンシャルフェッチテーブルの各エントリと比較することができる。上記のように、フェッチグループ内の命令はCTIのターゲット命令であるため、シーケンシャルフェッチテーブルにおいて一致が検出され、ヒットが発生する。したがって、シーケンシャルフェッチロジックは、シーケンシャルフェッチテーブル内の一致するエントリから、特定の数のフェッチグループを読み出す。
次に、シーケンシャルフェッチロジックは、カウンタを、特定の数のフェッチグループと同数に設定する(ステップ1202)。例えば、シーケンシャルフェッチロジックは、専用のカウンタレジスタ又は他のメモリ位置に、特定の数のフェッチグループ又はその表現を記憶することができる。
フェッチグループの各々がフェッチされて実行の準備がされると、シーケンシャルフェッチロジックは、分岐予測ユニットへの対応するアクセスを抑制する(ステップ1204)。例えば、シーケンシャルフェッチロジックは、1つ以上の制御信号をアサートして、分岐予測ユニットの回路要素がアクセス動作を実行するのを抑制することができ、アドレス又は関連する値が分岐予測ユニットに送信されることを抑制することができ、クロックを停止し、回路要素の電源を切り、及び/又は、分岐予測ユニットへの対応するアクセスを抑制するための他の動作を実行することができる。この動作について、いくつかの実施形態では、分岐方向解決、分岐アドレス取得等のように、分岐予測ユニットへの2つ以上の別々の、場合によっては並列のアクセスの各々は、分岐予測ユニット内の各機能ブロックが関連する動作を実行することを上記技術の一部又は全てを使用して抑制することによって、全て抑制される。
図12には示されていないが、いくつかの実施形態では、カウンタがゼロ以外であるフェッチグループについても、シーケンシャルフェッチテーブルへのアクセスが抑制されている。これは、フェッチグループがCTIを含まないこと、したがって、CTIのターゲット命令が含まれないことは、このようなルックアップを不要とすることが既に知られているためである。いくつかの実施形態では、カウンタがゼロ以外である間、シーケンシャルフェッチテーブルは、低電力モードに置かれる。例えば、シーケンシャルフェッチテーブルは、制御クロックが停止され(例えば、クロックゲーティングを介して)、電力が削減され、イネーブル信号がデアサートされる場合がある。
シーケンシャルフェッチロジックは、各フェッチグループがフェッチされて実行の準備がされると、カウンタをデクリメントする(ステップ1206)。例えば、シーケンシャルフェッチロジックは、専用カウンタレジスタ又は他のメモリ位置のカウンタの値を1つ減らすことができ、カウンタを、次に低い値又はその表現に遷移させることができる。
カウンタがゼロに達するまで(ステップ1208)、シーケンシャルフェッチロジックは、分岐予測ユニットへのアクセスを抑制し続け(ステップ1204)、フェッチグループがフェッチされて実行の準備がされると、カウンタをデクリメントする(ステップ1206)。カウンタがゼロに達した後、すなわち、特定の数のフェッチグループの最後がフェッチされて実行の準備が整った後に、1つ以上の後続のフェッチグループがフェッチされて実行の準備がされると、シーケンシャルフェッチロジックは、分岐予測情報を取得するための分岐予測ユニットへの対応するアクセスを許可する(ステップ1210)。言い換えると、カウンタがゼロに等しい場合、シーケンシャルフェッチロジックは、分岐ターゲットや分岐方向予測等の通常の分岐予測動作の実行を許可する。このようにして、分岐予測ユニット(及び、場合によってはシーケンシャルフェッチテーブルアクセス)への不要なアクセスを回避するために、カウントがゼロ以外の場合に、シーケンシャルフェッチロジックは、分岐予測アクセス(及び、場合によってはシーケンシャルフェッチテーブルアクセス)をブロックする。
(マルチスレッドプロセッサ)
いくつかの実施形態では、電子デバイス100のプロセッサ102は、マルチスレッドプロセッサであり、したがって、命令実行の2つ以上の個別のスレッドをサポートする。一般に、マルチスレッドプロセッサは、個別のスレッド専用の機能ブロック及び/又はハードウェア構造を含むが、スレッド間で共有され、及び/又は、1つ以上のスレッドの各々の動作を実行する機能ブロック及び/又はハードウェア構造を含むこともできる。例えば、分岐予測ユニット及びシーケンシャルフェッチユニット等の機能ブロックは、全てのスレッドに対して、それぞれ分岐予測動作及び分岐予測ユニットアクセス抑制を実行することができる。別の例として、シーケンシャルフェッチテーブル(シーケンシャルフェッチテーブルを使用する実施形態において)は、全てのスレッド(又は、複数のスレッドのいくつかの組み合わせ)に使用される単一のシーケンシャルフェッチテーブルとして実装されてもよいし、各スレッドに対応する個別のシーケンシャルフェッチテーブルが存在するようにスレッド毎に実装されてもよい。これらの実施形態では、シーケンシャルフェッチテーブルの各々の記録は、関連付けられたスレッドについて維持され、他のスレッドのシーケンシャルフェッチテーブルに維持される記録と異なる場合がある。さらに別の例として、シーケンシャルフェッチロジックは、スレッド毎の分岐予測ユニットへのアクセスを抑制することができ、したがって、対応するスレッドの分岐予測ユニットへのアクセスを抑制するために、本明細書で説明するように使用される、スレッド毎に個別の独立したカウンタを維持することができる。
上記のように、いくつかの実施形態では、CTIに続けて順次フェッチされたCTIを含まないフェッチグループの分岐予測ユニットへのアクセスを抑制する一方で、シーケンシャルフェッチロジックは、シーケンシャルフェッチテーブルへのアクセスを抑制し、シーケンシャルフェッチテーブルを低電力モードに置く。これらの実施形態では、複数のスレッドがシーケンシャルフェッチテーブルに依存する場合(1つのシーケンシャルフェッチテーブルを使用して2つ以上のスレッドの記録を保持する場合)、シーケンシャルフェッチテーブルは、他のスレッドを処理するためにフルパワーモード/アクティブのままである(したがって、低電力モードに移行しない)。同じことが分岐予測ユニットにも当てはまる。単一のスレッドのみが分岐予測ユニットを使用している場合、アクセスが抑制されているときに、分岐予測ユニットを低電力モードにすることができる。ただし、分岐予測ユニットが2つ以上のスレッドで使用されている場合、分岐予測ユニットを、他のスレッドを処理するためにフルパワーモード/アクティブのままにすることができる。ただし、本明細書で説明するように、個別のスレッドに対して特定のアクセスが行われない。
いくつかの実施形態では、電子デバイス(例えば、電子デバイス100及び/又はその一部)は、非一時的なコンピュータ可読記憶媒体に記憶されたコード及び/又はデータを使用して、本明細書に説明される動作の一部又は全ての動作を実行する。より具体的には、電子デバイスは、説明される動作を実行する際に、コンピュータ可読記憶媒体からコード及び/又はデータを読み出して、コードを実行及び/又はデータを使用する。コンピュータ可読記憶媒体は、電子デバイスによって使用されるコード及び/又はデータを記憶する任意のデバイス、媒体、又は、これらの組み合わせであってもよい。例えば、コンピュータ可読記憶媒体は、フラッシュメモリ、ランダムアクセスメモリ(eDRAM、RAM、SRAM、DRAM、DDR、DDR2/DDR3/DDR4 SDRAM等)、読み出し専用メモリ(ROM)、及び/又は、磁気若しくは光学記憶媒体(例えば、ディスクドライブ、磁気テープ、CD、DVD)を含む、揮発性メモリ又は不揮発性メモリを含むことができるが、これらに限定されない。
いくつかの実施形態では、1つ以上のハードウェアモジュールが本明細書に説明される動作を行うように構成されている。例えば、ハードウェアモジュールは、1つ以上のプロセッサ/コア/中央処理装置(CPU)、特定用途向け集積回路(ASIC)チップ、フィールドプログラマブルゲートアレイ(FPGA)、計算ユニット、組み込みプロセッサ、グラフィックスプロセッサ(GPU)/グラフィックスコア、パイプライン、加速処理ユニット(APU)、機能ブロック、システム管理ユニット、電力コントローラ、及び/又は、他のプログラマブルロジックデバイスを含むことができるが、これらに限定されない。このようなハードウェアモジュールが起動されると、ハードウェアモジュールは、一部又は全ての動作を実行する。いくつかの実施形態では、ハードウェアモジュールは、命令(プログラムコード、ファームウェア等)を実行することによって動作を実行するように構成された1つ以上の汎用回路を含む。
いくつかの実施形態では、本明細書で説明される構造及びメカニズムのうち一部又は全て(例えば、プロセッサ102、メモリ104、及び/又は、これらの一部)を表すデータ構造は、電子デバイスによって読み出すことができ、構造及びメカニズムを含むハードウェアを製造するために直接的又は間接的に使用することができる、データベース又は他のデータ構造を含む非一時的なコンピュータ可読記憶媒体に記憶される。例えば、データ構造は、Verilog又はVHDL等の高水準設計言語(HDL)におけるハードウェア機能の動作レベルの記述又はレジスタ転送レベル(RTL)の記述であってもよい。記述は、合成ツールによって読み出されてもよく、合成ツールは、記述を合成して、上記の構造及びメカニズムを含むハードウェアの機能を表すゲート/回路要素のリストを含むネットリストを、合成ライブラリから生成してもよい。次に、ネットリストは、配置され、ルーティングされ、マスクに適用される幾何学的形状を記述するデータセットが生成されてもよい。次いで、上記の構造及びメカニズムに対応する1つ以上の半導体回路(例えば、集積回路)を製造するために、様々な半導体製造ステップでマスクが使用されてもよい。或いは、コンピュータがアクセス可能な記憶媒体上のデータベースは、必要に応じて、ネットリスト(合成ライブラリの有無にかかわらず)若しくはデータセット、又は、グラフィックスデータシステム(GDS)IIデータであってもよい。
本明細書では、変数又は不特定の値(すなわち、値の特定のインスタンスを持たない、値の一般的な説明)は、N等の文字で表される。同様の文字が本説明の他の箇所で使用され得るが、本明細書で使用されるように、各ケースの変数及び不特定の値は、必ずしも同じではなく、すなわち、一般的な変数及び不特定値の一部又は全てに対して異なる変数量及び値が存在し得る。言い換えると、本説明で変数及び不特定値を表すために使用されるN及び任意の他の文字は、必ずしも互いに関連するわけではない。
「等(et cetera)」又は「等(etc.)」という表現は、本明細書で使用される場合、「及び/又は」のケース、すなわち、「等」が関連付けられているリスト内の要素の「少なくとも1つ」に相当するものを提示することを意図している。例えば、「システムは、第1の動作、第2の動作等を実行する」という文において、システムは、第1の動作、第2の動作、及び、他の動作のうち少なくとも1つを実行する。さらに、「等」に関連付けられたリスト内の要素は、一組の例の中の単なる例であり、少なくともいくつかの例は、いくつかの実施形態では現れない場合がある。
実施形態の上記の説明は、例示及び説明のためにのみ提示されたものである。これらは、包括的であること、又は、実施形態を開示された形態に限定することを意図していない。したがって、当業者には、多くの変更及び変形が明らかであろう。さらに、上記の開示は、実施形態を限定することを意図していない。実施形態の範囲は、添付の特許請求の範囲によって定義される。

Claims (22)

  1. プログラムコード内の命令を実行する場合に制御転送命令(CTI)を処理する電子デバイスであって、
    プロセッサを備え、
    前記プロセッサは、
    分岐予測機能ブロックと、
    シーケンシャルフェッチロジック機能ブロックと、を含み、
    前記シーケンシャルフェッチロジック機能ブロックは、
    CTIに関連付けられた記録において、前記CTIがリタイアした後であって後続のCTIがリタイアする前にリタイアするフェッチグループの数のカウントを保持することであって、前記保持することは、リタイアキューから前記カウントを受信することを含み、前記リタイアキューは、各CTIが前記プロセッサ内で実行されている間に、各CTIに付随するメタデータ内のCTI識別情報に基づいて前記カウントを計算する、ことと、
    CTIの実行の準備をしている間に、前記記録に基づいて、CTIを含まない命令の特定の数のフェッチグループが、前記CTIに続けて順次実行されるためにフェッチされることを決定することと
    前記特定の数のフェッチグループの各々がフェッチされて実行の準備がされると、そのフェッチグループ内の命令の分岐予測情報を取得するための前記分岐予測機能ブロックへの対応するアクセスを抑制することと、
    を行うように構成されている、
    電子デバイス。
  2. 前記プロセッサは、
    前記分岐予測機能ブロックに関連付けられた分岐ターゲットバッファ(BTB)をさらに含み、
    前記シーケンシャルフェッチロジック機能ブロックは、
    特定のタイプのCTIを検出すると、後続のCTIがリタイアする前に順次リタイアしたフェッチグループの数のカウントを保持し、
    前記CTIに関連付けられた前記BTB内のエントリに、前記フェッチグループの数のカウントを示す記録を記憶する、
    請求項1の電子デバイス。
  3. 前記特定のタイプのCTIは、静的ターゲット命令を有する無条件CTI、又は、行われないパスが静的ターゲット命令に向けられる条件付きCTIを含む、
    請求項2の電子デバイス。
  4. 前記シーケンシャルフェッチロジック機能ブロックは、
    前記フェッチグループの数のカウントが閾値より大きい場合にのみ、前記CTIに関連付けられた前記BTB内のエントリに、前記フェッチグループの数のカウントを示す記録を記憶する、
    請求項2の電子デバイス。
  5. 前記プロセッサは、
    シーケンシャルフェッチテーブル(SFT)をさらに含み、
    前記シーケンシャルフェッチロジック機能ブロックは、
    CTIのターゲット命令がリタイアすると、後続のCTIがリタイアする前に順次リタイアしたフェッチグループの数のカウントを保持し、
    前記CTIの前記ターゲット命令に関連付けられた前記SFT内のエントリに、前記フェッチグループの数のカウントを示す記録を記憶する、
    請求項1の電子デバイス。
  6. 前記シーケンシャルフェッチロジック機能ブロックは、
    前記フェッチグループの数のカウントが閾値より大きい場合にのみ、前記CTIのターゲット命令に関連付けられた前記SFT内のエントリに、前記フェッチグループの数のカウントを示す記録を記憶する、
    請求項5の電子デバイス。
  7. 前記シーケンシャルフェッチロジック機能ブロックは、前記特定の数のフェッチグループの各々がフェッチされて実行の準備がされたときに、分岐予測情報を取得するための前記分岐予測機能ブロックへの対応するアクセスを抑制する場合に、
    カウンタをフェッチグループの前記特定の数と同じ値に設定し、
    フェッチグループの各々がフェッチされて実行の準備ができ、前記分岐予測機能ブロックへの対応するアクセスが抑制された場合に、前記カウンタをデクリメントし、
    前記カウンタがゼロになった後に、1つ以上の後続のフェッチグループがフェッチされて実行の準備がされると、前記1つ以上の後続のフェッチグループ内の命令の分岐予測情報を取得するために、前記分岐予測機能ブロックへの対応するアクセスが実行されるのを許可するように構成されている、
    請求項1の電子デバイス。
  8. 前記分岐予測機能ブロックは、
    分岐ターゲットバッファ(BTB)と、
    分岐方向予測器と、を含み、
    前記シーケンシャルフェッチロジック機能ブロックは、前記分岐予測機能ブロックへのアクセスを抑制する場合に、少なくとも前記BTB及び前記分岐方向予測器へのアクセスを抑制する、
    請求項1の電子デバイス。
  9. 前記特定の数のフェッチグループの各々がフェッチされて実行の準備がされる間、
    前記CTIに関連付けられた記録を記憶する1つ以上の機能ブロックへのアクセスが抑制され、
    前記1つ以上の機能ブロックが低電力モードに置かれている、
    請求項1の電子デバイス。
  10. 各フェッチグループは、前記プロセッサでの実行のために準備される同じ転送動作においてフェッチされる所定数の命令を含む、
    請求項1の電子デバイス。
  11. 前記分岐予測機能ブロックへの対応するアクセスを抑制することは、電力を消費する少なくとも1つの動作を抑制することによって、電力を節約することを含む、
    請求項1の電子デバイス。
  12. 分岐予測機能ブロックと、シーケンシャルフェッチロジック機能ブロックと、を含むプロセッサを有する電子デバイスにおいて、プログラムコード内の命令を実行する場合に制御転送命令(CTI)を処理するための方法であって、
    CTIに関連付けられた記録において、前記CTIがリタイアした後であって後続のCTIがリタイアする前にリタイアするフェッチグループの数のカウントを保持することであって、前記保持することは、リタイアキューから前記カウントを受信することを含み、前記リタイアキューは、各CTIが前記プロセッサ内で実行されている間に、各CTIに付随するメタデータ内のCTI識別情報に基づいて前記カウントを計算する、ことと、
    前記シーケンシャルフェッチロジック機能ブロックが、CTIの実行の準備をしている間に、前記記録に基づいて、CTIを含まない命令の特定の数のフェッチグループが、前記CTIに続けて順次実行されるためにフェッチされることを決定することと、
    前記シーケンシャルフェッチロジック機能ブロックが、前記特定の数のフェッチグループの各々がフェッチされて実行の準備がされると、そのフェッチグループ内の命令の分岐予測情報を取得するための前記分岐予測機能ブロックへの対応するアクセスを抑制することと、を含む、
    方法。
  13. 前記プロセッサは、前記分岐予測機能ブロックに関連付けられた分岐ターゲットバッファ(BTB)をさらに含み、
    前記プロセッサが、特定のタイプのCTIを検出すると、後続のCTIがリタイアする前に順次リタイアしたフェッチグループの数のカウントを保持することと、
    前記シーケンシャルフェッチロジック機能ブロックが、前記CTIに関連付けられた前記BTB内のエントリに、前記フェッチグループの数のカウントを示す記録を記憶することと、をさらに含む、
    請求項12の方法。
  14. 前記特定のタイプのCTIは、静的ターゲット命令を有する無条件CTI、又は、行われないパスが静的ターゲット命令に向けられる条件付きCTIを含む、
    請求項13の方法。
  15. 前記フェッチグループの数のカウントが閾値より大きい場合にのみ、前記CTIに関連付けられた前記BTB内のエントリに、前記フェッチグループの数のカウントを示す記録を記憶することをさらに含む、
    請求項13の方法。
  16. 前記プロセッサは、シーケンシャルフェッチテーブル(SFT)をさらに含み、
    前記プロセッサが、CTIのターゲット命令がリタイアすると、後続のCTIがリタイアする前に順次リタイアしたフェッチグループの数のカウントを保持することと、
    前記シーケンシャルフェッチロジック機能ブロックが、前記CTIの前記ターゲット命令に関連付けられた前記SFT内のエントリに、前記フェッチグループの数のカウントを示す記録を記憶することと、をさらに含む、
    請求項12の方法。
  17. 前記フェッチグループの数のカウントが閾値より大きい場合にのみ、前記CTIのターゲット命令に関連付けられた前記SFT内のエントリに、前記フェッチグループの数のカウントを示す記録を記憶することをさらに含む、
    請求項16の方法。
  18. 前記特定の数のフェッチグループの各々がフェッチされて実行の準備がされたときに、分岐予測情報を取得するための前記分岐予測機能ブロックへの対応するアクセスを抑制することは、
    前記シーケンシャルフェッチロジック機能ブロックが、カウンタをフェッチグループの前記特定の数と同じ数に設定することと、
    前記シーケンシャルフェッチロジック機能ブロックが、フェッチグループの各々がフェッチされて実行の準備ができ、前記分岐予測機能ブロックへの対応するアクセスが抑制された場合に、前記カウンタをデクリメントすることと、
    前記シーケンシャルフェッチロジック機能ブロックが、前記カウンタがゼロになった後に、1つ以上の後続のフェッチグループがフェッチされて実行の準備がされると、前記1つ以上の後続のフェッチグループ内の命令の分岐予測情報を取得するために、前記分岐予測機能ブロックへの対応するアクセスが実行されるのを許可することと、を含む、
    請求項12の方法。
  19. 前記分岐予測機能ブロックは、分岐ターゲットバッファ(BTB)と、分岐方向予測器と、を含み、前記分岐予測機能ブロックへのアクセスを抑制することは、少なくとも前記BTB及び前記分岐方向予測器へのアクセスを抑制することを含む、
    請求項12の方法。
  20. 各フェッチグループは、前記プロセッサでの実行のために準備される同じ転送動作においてフェッチされる所定数の命令を含む、
    請求項12の方法。
  21. 前記特定の数のフェッチグループの各々がフェッチされて実行の準備がされる間、
    前記シーケンシャルフェッチロジック機能ブロックが、CTIに関連付けられた記録を記憶する1つ以上の機能ブロックのアクセスを抑制することと、
    前記シーケンシャルフェッチロジック機能ブロックが、前記1つ以上の機能ブロックを低電力モードに置くことと、をさらに含む、
    請求項12の方法。
  22. 前記分岐予測機能ブロックへの対応するアクセスを抑制することは、電力を消費する少なくとも1つの動作を抑制することによって、電力を節約することを含む、
    請求項12の方法。
JP2021513296A 2018-09-10 2019-06-18 フェッチグループのシーケンスのための分岐予測ユニットへのアクセスの制御 Active JP7397858B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/127,093 2018-09-10
US16/127,093 US11513801B2 (en) 2018-09-10 2018-09-10 Controlling accesses to a branch prediction unit for sequences of fetch groups
PCT/US2019/037804 WO2020055471A1 (en) 2018-09-10 2019-06-18 Controlling accesses to a branch prediction unit for sequences of fetch groups

Publications (2)

Publication Number Publication Date
JP2022500749A JP2022500749A (ja) 2022-01-04
JP7397858B2 true JP7397858B2 (ja) 2023-12-13

Family

ID=69720752

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2021513296A Active JP7397858B2 (ja) 2018-09-10 2019-06-18 フェッチグループのシーケンスのための分岐予測ユニットへのアクセスの制御

Country Status (6)

Country Link
US (1) US11513801B2 (ja)
EP (1) EP3850480B1 (ja)
JP (1) JP7397858B2 (ja)
KR (1) KR20210043631A (ja)
CN (1) CN112673346A (ja)
WO (1) WO2020055471A1 (ja)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11099851B2 (en) * 2018-10-26 2021-08-24 International Business Machines Corporation Branch prediction for indirect branch instructions
US20220197662A1 (en) * 2020-12-22 2022-06-23 Niranjan Kumar Soundararajan Accessing A Branch Target Buffer Based On Branch Instruction Information
US12014178B2 (en) 2022-06-08 2024-06-18 Ventana Micro Systems Inc. Folded instruction fetch pipeline
US12014180B2 (en) 2022-06-08 2024-06-18 Ventana Micro Systems Inc. Dynamically foldable and unfoldable instruction fetch pipeline
US12008375B2 (en) 2022-06-08 2024-06-11 Ventana Micro Systems Inc. Branch target buffer that stores predicted set index and predicted way number of instruction cache
US12106111B2 (en) 2022-08-02 2024-10-01 Ventana Micro Systems Inc. Prediction unit with first predictor that provides a hashed fetch address of a current fetch block to its own input and to a second predictor that uses it to predict the fetch address of a next fetch block
US12020032B2 (en) 2022-08-02 2024-06-25 Ventana Micro Systems Inc. Prediction unit that provides a fetch block descriptor each clock cycle
US12118360B2 (en) * 2023-01-05 2024-10-15 Ventana Micro Systems Inc. Branch target buffer miss handling
CN118779008A (zh) * 2023-04-06 2024-10-15 华为技术有限公司 一种指令提取的方法及相关装置

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080082843A1 (en) 2006-09-28 2008-04-03 Sergio Schuler Dynamic branch prediction predictor

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5740417A (en) * 1995-12-05 1998-04-14 Motorola, Inc. Pipelined processor operating in different power mode based on branch prediction state of branch history bit encoded as taken weakly not taken and strongly not taken states
US6957327B1 (en) * 1998-12-31 2005-10-18 Stmicroelectronics, Inc. Block-based branch target buffer
US7725695B2 (en) * 2005-05-31 2010-05-25 Arm Limited Branch prediction apparatus for repurposing a branch to instruction set as a non-predicted branch
TW200723094A (en) * 2005-12-01 2007-06-16 Ind Tech Res Inst Dynamic branch prediction system and method
US9552032B2 (en) * 2012-04-27 2017-01-24 Nvidia Corporation Branch prediction power reduction
US9547358B2 (en) * 2012-04-27 2017-01-17 Nvidia Corporation Branch prediction power reduction
US9135012B2 (en) * 2012-06-14 2015-09-15 International Business Machines Corporation Instruction filtering
US9891922B2 (en) * 2012-06-15 2018-02-13 International Business Machines Corporation Selectively blocking branch prediction for a predetermined number of instructions
GB2515076B (en) * 2013-06-13 2020-07-15 Advanced Risc Mach Ltd A data processing apparatus and method for handling retrieval of instructions from an instruction cache

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080082843A1 (en) 2006-09-28 2008-04-03 Sergio Schuler Dynamic branch prediction predictor

Also Published As

Publication number Publication date
JP2022500749A (ja) 2022-01-04
EP3850480A1 (en) 2021-07-21
CN112673346A (zh) 2021-04-16
EP3850480B1 (en) 2024-06-05
KR20210043631A (ko) 2021-04-21
WO2020055471A1 (en) 2020-03-19
EP3850480A4 (en) 2022-05-25
US20200081716A1 (en) 2020-03-12
US11513801B2 (en) 2022-11-29

Similar Documents

Publication Publication Date Title
JP7397858B2 (ja) フェッチグループのシーケンスのための分岐予測ユニットへのアクセスの制御
JP5894120B2 (ja) ゼロサイクルロード
KR102546238B1 (ko) 다중 테이블 분기 타겟 버퍼
US10853075B2 (en) Controlling accesses to a branch prediction unit for sequences of fetch groups
US20090282225A1 (en) Store queue
US11550588B2 (en) Branch target filtering based on memory region access count
US10073789B2 (en) Method for load instruction speculation past older store instructions
US11119925B2 (en) Apparatus and method for managing capability metadata
US20130159679A1 (en) Providing Hint Register Storage For A Processor
US10719441B1 (en) Using predictions of outcomes of cache memory access requests for controlling whether a request generator sends memory access requests to a memory in parallel with cache memory access requests
US9223714B2 (en) Instruction boundary prediction for variable length instruction set
CN115427932A (zh) 为处理器中的微操作高速缓存过滤微操作
US20220261350A1 (en) Promoting Prefetched Data from a Cache Memory to Registers in a Processor
US10175982B1 (en) Storing taken branch information
KR20220113410A (ko) 페치 그룹들의 시퀀스들에 대한 분기 예측 유닛에의 액세스 제어

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20220520

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20230531

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20230606

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20230905

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20231030

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: 20231107

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20231201

R150 Certificate of patent or registration of utility model

Ref document number: 7397858

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150