(57)【要約】プログラムコード内の命令を実行する場合に、制御転送命令（ＣＴＩ）を処理する電子デバイスについて説明する。電子デバイスは、分岐予測機能ブロック及びシーケンシャルフェッチロジック機能ブロックを含むプロセッサを有する。シーケンシャルフェッチロジック機能ブロックは、ＣＴＩに関連付けられた記録に基づいて、ＣＴＩを含まないと以前に決定された命令の特定の数のフェッチグループが、ＣＴＩに続けて順次実行されるためにフェッチされることを決定する。特定の数のフェッチグループの各々がフェッチされて実行の準備がされると、シーケンシャルフェッチロジックは、そのフェッチグループ内の命令の分岐予測情報を取得するための分岐予測機能ブロックへの対応するアクセスを抑制する。【選択図】図７
2022500749.tif 000002
【特許請求の範囲】
【請求項１】
プログラムコード内の命令を実行する場合に制御転送命令（ＣＴＩ）を処理する電子デバイスであって、
プロセッサを備え、
前記プロセッサは、
分岐予測機能ブロックと、
シーケンシャルフェッチロジック機能ブロックと、を含み、
前記シーケンシャルフェッチロジック機能ブロックは、
ＣＴＩに関連付けられた記録に基づいて、ＣＴＩを含まないと以前に決定された命令の特定の数のフェッチグループが、前記ＣＴＩに続けて順次実行されるためにフェッチされることを決定し、
前記特定の数のフェッチグループの各々がフェッチされて実行の準備がされると、そのフェッチグループ内の命令の分岐予測情報を取得するための前記分岐予測機能ブロックへの対応するアクセスを抑制する、
電子デバイス。
【請求項２】
前記プロセッサは、
前記分岐予測機能ブロックに関連付けられた分岐ターゲットバッファ（ＢＴＢ）をさらに含み、
前記シーケンシャルフェッチロジック機能ブロックは、
特定のタイプのＣＴＩを検出すると、後続のＣＴＩがリタイアする前に順次リタイアしたフェッチグループの数のカウントを保持し、
前記ＣＴＩに関連付けられた前記ＢＴＢ内のエントリに、前記フェッチグループの数のカウントを示す記録を記憶する、
請求項１の電子デバイス。
【請求項３】
前記特定のタイプのＣＴＩは、静的ターゲット命令を有する無条件ＣＴＩ、又は、行われないパスが静的ターゲット命令に向けられる条件付きＣＴＩを含む、
請求項２の電子デバイス。
【請求項４】
前記シーケンシャルフェッチロジック機能ブロックは、
前記フェッチグループの数のカウントが閾値より大きい場合にのみ、前記ＣＴＩに関連付けられた前記ＢＴＢ内のエントリに、前記フェッチグループの数のカウントを示す記録を記憶する、
請求項２の電子デバイス。
【請求項５】
前記プロセッサは、
シーケンシャルフェッチテーブル（ＳＦＴ）をさらに含み、
前記シーケンシャルフェッチロジック機能ブロックは、
ＣＴＩのターゲット命令がリタイアすると、後続のＣＴＩがリタイアする前に順次リタイアしたフェッチグループの数のカウントを保持し、
前記ＣＴＩの前記ターゲット命令に関連付けられた前記ＳＦＴ内のエントリに、前記フェッチグループの数のカウントを示す記録を記憶する、
請求項１の電子デバイス。
【請求項６】
前記シーケンシャルフェッチロジック機能ブロックは、
前記フェッチグループの数のカウントが閾値より大きい場合にのみ、前記ＣＴＩのターゲット命令に関連付けられた前記ＳＦＴ内のエントリに、前記フェッチグループの数のカウントを示す記録を記憶する、
請求項５の電子デバイス。
【請求項７】
前記シーケンシャルフェッチロジック機能ブロックは、前記特定の数のフェッチグループの各々がフェッチされて実行の準備がされたときに、分岐予測情報を取得するための前記分岐予測機能ブロックへの対応するアクセスを抑制する場合に、
カウンタをフェッチグループの前記特定の数と同じ値に設定し、
フェッチグループの各々がフェッチされて実行の準備ができ、前記分岐予測機能ブロックへの対応するアクセスが抑制された場合に、前記カウンタをデクリメントし、
前記カウンタがゼロになった後に、１つ以上の後続のフェッチグループがフェッチされて実行の準備がされると、前記１つ以上の後続のフェッチグループ内の命令の分岐予測情報を取得するために、前記分岐予測機能ブロックへの対応するアクセスが実行されるのを許可するように構成されている、
請求項１の電子デバイス。
【請求項８】
前記分岐予測機能ブロックは、
分岐ターゲットバッファ（ＢＴＢ）と、
分岐方向予測器と、を含み、
前記シーケンシャルフェッチロジック機能ブロックは、前記分岐予測機能ブロックへのアクセスを抑制する場合に、少なくとも前記ＢＴＢ及び前記分岐方向予測器へのアクセスを抑制する、
請求項１の電子デバイス。
【請求項９】
前記特定の数のフェッチグループの各々がフェッチされて実行の準備がされる間、
前記ＣＴＩに関連付けられた記録を記憶する１つ以上の機能ブロックへのアクセスが抑制され、
前記１つ以上の機能ブロックが低電力モードに置かれている、
請求項１の電子デバイス。
【請求項１０】
各フェッチグループは、前記プロセッサでの実行のために準備される同じ転送動作においてフェッチされる所定数の命令を含む、
請求項１の電子デバイス。
【請求項１１】
前記分岐予測機能ブロックへの対応するアクセスを抑制することは、電力を消費する少なくとも１つの動作を抑制することによって、電力を節約することを含む、
請求項１の電子デバイス。
【請求項１２】
分岐予測機能ブロックと、シーケンシャルフェッチロジック機能ブロックと、を含むプロセッサを有する電子デバイスにおいて、プログラムコード内の命令を実行する場合に制御転送命令（ＣＴＩ）を処理するための方法であって、
前記シーケンシャルフェッチロジック機能ブロックが、ＣＴＩに関連付けられた記録に基づいて、ＣＴＩを含まないと以前に決定された命令の特定の数のフェッチグループが、前記ＣＴＩに続けて順次実行されるためにフェッチされることを決定することと、
前記シーケンシャルフェッチロジック機能ブロックが、前記特定の数のフェッチグループの各々がフェッチされて実行の準備がされると、そのフェッチグループ内の命令の分岐予測情報を取得するための前記分岐予測機能ブロックへの対応するアクセスを抑制することと、を含む、
方法。
【請求項１３】
前記プロセッサは、前記分岐予測機能ブロックに関連付けられた分岐ターゲットバッファ（ＢＴＢ）をさらに含み、
前記プロセッサが、特定のタイプのＣＴＩを検出すると、後続のＣＴＩがリタイアする前に順次リタイアしたフェッチグループの数のカウントを保持することと、
前記シーケンシャルフェッチロジック機能ブロックが、前記ＣＴＩに関連付けられた前記ＢＴＢ内のエントリに、前記フェッチグループの数のカウントを示す記録を記憶することと、をさらに含む、
請求項１２の方法。
【請求項１４】
前記特定のタイプのＣＴＩは、静的ターゲット命令を有する無条件ＣＴＩ、又は、行われないパスが静的ターゲット命令に向けられる条件付きＣＴＩを含む、
請求項１３の方法。
【請求項１５】
前記フェッチグループの数のカウントが閾値より大きい場合にのみ、前記ＣＴＩに関連付けられた前記ＢＴＢ内のエントリに、前記フェッチグループの数のカウントを示す記録を記憶することをさらに含む、
請求項１３の方法。
【請求項１６】
前記プロセッサは、シーケンシャルフェッチテーブル（ＳＦＴ）をさらに含み、
前記プロセッサが、ＣＴＩのターゲット命令がリタイアすると、後続のＣＴＩがリタイアする前に順次リタイアしたフェッチグループの数のカウントを保持することと、
前記シーケンシャルフェッチロジック機能ブロックが、前記ＣＴＩの前記ターゲット命令に関連付けられた前記ＳＦＴ内のエントリに、前記フェッチグループの数のカウントを示す記録を記憶することと、をさらに含む、
請求項１２の方法。
【請求項１７】
前記フェッチグループの数のカウントが閾値より大きい場合にのみ、前記ＣＴＩのターゲット命令に関連付けられた前記ＳＦＴ内のエントリに、前記フェッチグループの数のカウントを示す記録を記憶することをさらに含む、
請求項１６の方法。
【請求項１８】
前記特定の数のフェッチグループの各々がフェッチされて実行の準備がされたときに、分岐予測情報を取得するための前記分岐予測機能ブロックへの対応するアクセスを抑制することは、
前記シーケンシャルフェッチロジック機能ブロックが、カウンタをフェッチグループの前記特定の数と同じ数に設定することと、
前記シーケンシャルフェッチロジック機能ブロックが、フェッチグループの各々がフェッチされて実行の準備ができ、前記分岐予測機能ブロックへの対応するアクセスが抑制された場合に、前記カウンタをデクリメントすることと、
前記シーケンシャルフェッチロジック機能ブロックが、前記カウンタがゼロになった後に、１つ以上の後続のフェッチグループがフェッチされて実行の準備がされると、前記１つ以上の後続のフェッチグループ内の命令の分岐予測情報を取得するために、前記分岐予測機能ブロックへの対応するアクセスが実行されるのを許可することと、を含む、
請求項１２の方法。
【請求項１９】
前記分岐予測機能ブロックは、分岐ターゲットバッファ（ＢＴＢ）と、分岐方向予測器と、を含み、前記分岐予測機能ブロックへのアクセスを抑制することは、少なくとも前記ＢＴＢ及び前記分岐方向予測器へのアクセスを抑制することを含む、
請求項１２の方法。
【請求項２０】
各フェッチグループは、前記プロセッサでの実行のために準備される同じ転送動作においてフェッチされる所定数の命令を含む、
請求項１２の方法。
【請求項２１】
前記特定の数のフェッチグループの各々がフェッチされて実行の準備がされる間、
前記シーケンシャルフェッチロジック機能ブロックが、ＣＴＩに関連付けられた記録を記憶する１つ以上の機能ブロックのアクセスを抑制することと、
前記シーケンシャルフェッチロジック機能ブロックが、前記１つ以上の機能ブロックを低電力モードに置くことと、をさらに含む、
請求項１２の方法。
【請求項２２】
前記分岐予測機能ブロックへの対応するアクセスを抑制することは、電力を消費する少なくとも１つの動作を抑制することによって、電力を節約することを含む、
請求項１２の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
（政府の権利）
本発明は、米国エネルギー省（ＤＯＥ）から授与された、ローレンス・リバモア国立研究所とのＰａｔｈＦｏｒｗａｒｄプロジェクト（主契約番号：ＤＥ−ＡＣ５２−０７ＮＡ２７３４４、サブ契約番号：Ｂ６２０７１７）の下で政府の支援を受けて行われたものである。米国政府は、本発明において一定の権利を有する。
【背景技術】
【０００２】
電子デバイス内の多くのプロセッサ（マイクロプロセッサ等）は、プログラムコード内の命令を実行する効率を向上させるための動作を実行する機能ブロックを含む。例えば、一部のプロセッサは、命令実行の１つ以上の以前のインスタンスの記録に基づいて、命令実行のパス又ははフロー（すなわち、命令が実行のためにフェッチされるメモリ内のアドレスのシーケンス）を予測するために使用される予測機能ブロックを含む。一般的な予測機能ブロックの１つは、プログラムコード内のジャンプやリターン等の制御転送命令（Control transfer instructions：ＣＴＩ）の解決を予測する分岐予測機能ブロックである。分岐予測機能ブロックは、「行われた（taken）」又は「行われていない（not-taken）」ＣＴＩの解決、行われたＣＴＩのターゲット命令等のように、ＣＴＩが実行される場合のＣＴＩの動作を監視及び記録する。また、プログラムコードの実行中にＣＴＩに遭遇すると（例えば、フェッチされた命令においてＣＴＩを検出すると）、以前に記憶されたＣＴＩの動作を使用して、ＣＴＩの現在の実行の解決を予測する。プロセッサは、ＣＴＩ自体が準備され実行されている間に、予測された解決に基づいて、ＣＴＩの後の予測されたパスに沿って実行される命令を投機的にフェッチし、準備する。かかるプロセッサは、処理を続行する前にＣＴＩの解決の決定を待つか、ＣＴＩからのパスの固定された選択に投機的に従うプロセッサとは対照的に、ＣＴＩが実行される場合に従うパスとなる可能性がより高いＣＴＩからのパスに投機的に従うことができ、その結果、遅延及び／又はリカバリ動作が少なくなる。
【０００３】
一部のプロセッサでは、任意のＣＴＩの予測される解決がプログラムコード実行のパスを示すのにできるだけ早く利用可能になるのを確実にするために、フェッチされた命令を実行のために準備する初期段階において、全ての命令について分岐予測機能ブロックが自動的にアクセスされる。ただし、ＣＴＩ命令は、通常、プログラムコードのごく一部しか形成しないので、分岐予測機能ブロックへの多くのアクセスは、ＣＴＩではない命令に対するものであり、したがって、動的エネルギーを浪費する。分岐予測機能ブロックへの各アクセスには消費電力等の観点に関連するコストがかかることから、分岐予測機能ブロックへの不必要なアクセスを回避することが望ましい。
【図面の簡単な説明】
【０００４】
【図１】いくつかの実施形態による、電子デバイスを示すブロック図である。
【図２】いくつかの実施形態による、プロセッサを示すブロック図である。
【図３】いくつかの実施形態による、分岐予測ユニットを示すブロック図である。
【図４】いくつかの実施形態による、分岐ターゲットバッファを示すブロック図である。
【図５】いくつかの実施形態による、シーケンシャルフェッチロジックを示すブロック図である。
【図６】いくつかの実施形態による、シーケンシャルフェッチテーブルを示すブロック図である。
【図７】いくつかの実施形態による、分岐予測ユニットへのアクセスを抑制するために制御転送命令に関連する記録を使用するプロセスを示すフローチャートである。
【図８】いくつかの実施形態による、分岐ターゲットバッファを用いて記録を記憶する場合に、制御転送命令に関連する記録を保持するために実行される動作を示すフローチャートである。
【図９】いくつかの実施形態による、対応する制御転送命令に続けて順次フェッチされる制御転送命令を含まないフェッチグループのカウントで分岐ターゲットバッファを更新する動作のタイムライン図である。
【図１０】いくつかの実施形態による、記録を記憶するためにシーケンシャルフェッチテーブルが使用される場合に、制御転送命令に関連する記録を保持するために実行される動作を示すフローチャートである。
【図１１】いくつかの実施形態による、対応するＣＴＩに続けて順次フェッチされるＣＴＩを含まないフェッチグループのカウントでシーケンシャルフェッチテーブルを更新する動作のタイムライン図である。
【図１２】いくつかの実施形態による、ＣＴＩに続けて順次フェッチされるＣＴＩを含まない特定の数のフェッチグループを決定し、特定の数を使用して分岐予測ユニットへのアクセスを抑制するプロセスを示すフローチャートである。
【発明を実施するための形態】
【０００５】
図面及び説明を通して、同様の符号は、同一の図面要素を指す。
【０００６】
以下の説明は、説明される実施形態を当業者が製造及び使用することを可能にするために提示され、特定の用途及びその要件に照らして提供される。説明される実施形態に対する様々な変更は、当業者には容易に明らかであり、本明細書で定義される一般的原理は、他の実施形態及び用途に適用されてもよい。したがって、説明される実施形態は、示される実施形態に限定されず、本明細書で開示される原理及び特徴と一致する最も広い範囲が与えられるべきである。
【０００７】
（用語）
以下の説明では、実施形態を説明するために様々な用語が使用される。次に、これらの用語のうち２つについて、簡単且つ一般的に説明する。用語は、明確性及び簡潔性のために、本明細書に詳述されない重要な追加的態様を有してもよい。したがって、説明は、用語を限定することを意図していないことに留意されたい。
【０００８】
機能ブロック：機能ブロックは、集積回路要素、ディスクリート回路要素等の１つ以上の相互に関連する回路要素のグループ、集合、及び／又は、セットを指す。回路要素は、回路要素が少なくとも１つの属性を共有するという点で「相互に関連」している。例えば、相互に関連する回路要素は、特定の集積回路チップ又はその一部に含まれてもよく、その上に製造されてもよく、他の方法で結合されてもよく、所定の機能（計算又は処理機能、メモリ機能等）の実行に関与してもよく、共通の制御要素によって制御されてもよい。機能ブロックは、単一の回路要素（例えば、単一の集積回路論理ゲート）から数百万又は数十億の回路要素（例えば、集積回路メモリ）までの任意の数の回路要素を含むことができる。
【０００９】
制御転送命令：制御転送命令（Control transfer instruction：ＣＴＩ）は、プログラムコード内の命令であり、実行されると、命令実行の他の連続したフローにおいて、ジャンプ、移動又は不連続性を引き起こす又は引き起こす可能性がある。ＣＴＩには、ジャンプ、コール、リターン等の「無条件の（unconditional）」ＣＴＩが含まれ、これにより、命令の実行は、第１のメモリアドレスにおける命令であるＣＴＩから、第２のメモリアドレスにおける命令（すなわち、ターゲット命令）に自動的にジャンプする。また、ＣＴＩは、条件付きジャンプ命令等の「条件付き（conditional）」ＣＴＩを含み、これは、より大きい、等しい、ゼロ以外等の条件を含むか、関連付けられるか、それに依存する。対応する条件が満たされると（例えば、ｔｒｕｅ、ｆａｌｓｅ等）、条件付きＣＴＩは、ＣＴＩから第２のメモリアドレスの命令への命令実行のジャンプをもたらすが、条件が満たされない場合には、命令の実行がＣＴＩに続いて順次続けられる。例えば、条件付き分岐命令を、条件チェック命令及び条件付きＣＴＩ（又は、単一の複合命令）を使用して実装することができる。条件が満たされると、分岐が「行われ」、命令の実行がターゲット命令にジャンプし、条件が満たされないと分岐命令が「行われず」又は「不成立」となり、命令の順次実行が続けられる。ターゲット命令のアドレスは、条件付きＣＴＩ及び／又は無条件ＣＴＩに対して動的に指定されている場合がある。例えば、先行する命令によってＣＴＩのターゲット命令のアドレスを計算してプロセッサレジスタ又は他の位置に記憶し、ＣＴＩの実行時に命令実行がジャンプする位置を決定するために使用することができる。
【００１０】
（概要）
説明される実施形態は、電子デバイス内のプロセッサを含む。プロセッサは、計算動作、メモリ操作、他の機能ブロック及びデバイスとの通信等を実行する、中央処理装置（ＣＰＵ）コア、１つ以上のキャッシュメモリ、通信インターフェース等の機能ブロックを含む。プロセッサは、シーケンシャルフェッチロジック機能ブロックを含み、シーケンシャルフェッチロジック機能ブロックは、分岐予測情報を取得するためのプロセッサ内の分岐予測機能ブロックへのアクセスを、可能な場合に回避する動作を実行する。説明する実施形態では、特定のサイズ（例えば、３２バイト、６４バイト等）の命令のブロックであるフェッチグループが、キャッシュメモリ又はメインメモリからまとめてフェッチされ、プロセッサ内の命令実行パイプラインでの実行のために準備される。所定のフェッチグループがフェッチされ、実行の準備がされると、シーケンシャルフェッチロジックは、所定のフェッチグループに関連する記録をチェックし（かかる記録が存在する場合）、以前に制御転送命令（ＣＴＩ）を含まないと決定された所定のフェッチグループに続けて、順次フェッチされるフェッチグループの数を決定する。例えば、いくつかの実施形態では、シーケンシャルフェッチロジックは、所定のフェッチグループ内のＣＴＩに関連する記録をチェックして、フェッチグループの数を決定する。別の例として、いくつかの実施形態では、シーケンシャルフェッチロジックは、所定のフェッチグループ内のＣＴＩのターゲット命令に関連する記録をチェックして、フェッチグループの数を決定する。このフェッチグループにはＣＴＩがないため、フェッチグループが順次フェッチされ、分岐予測情報が必要ない。したがって、フェッチグループの各々がフェッチされ、実行のために準備されるので、シーケンシャルフェッチロジックは、分岐予測情報を取得するための分岐予測機能ブロックへのアクセスを抑制する。例えば、シーケンシャルフェッチロジックは、分岐予測情報を取得するための分岐予測機能ブロック内の分岐ターゲットバッファ（ＢＴＢ）、分岐方向予測器等のチェックを抑制することができる。
【００１１】
いくつかの実施形態では、ＢＴＢは、各々のＣＴＩに続けて順次フェッチされ、ＣＴＩを有しないフェッチグループの数を示す上記の記録のいくつか又は全てを記憶するために使用される。これらの実施形態では、ＣＴＩの解決情報と共に、ＢＴＢは、ＣＴＩに続けて順次フェッチされ、ＣＴＩを有しないフェッチグループ（存在する場合）の数に関する情報を含む。動作中、所定のフェッチグループで特定のタイプのＣＴＩに遭遇すると（例えば、所定のフェッチグループ内で、特定のタイプのＣＴＩを検出すると）、シーケンシャルフェッチロジック機能ブロックは、後続のＣＴＩがリタイアする（すなわち、実行が完了し、プロセッサのアーキテクチャ状態にコミットする準備ができる）前に、所定のフェッチグループに続けて順次実行されるためにフェッチされるフェッチグループの数のカウントを保持する。次に、シーケンシャルフェッチロジックは、フェッチグループの数のカウントを、ＣＴＩに関連するＢＴＢ内のエントリに記憶する。次に、ＢＴＢ内のエントリのカウントは、本明細書で説明するように、フェッチグループについて分岐予測情報を取得するための分岐予測機能ブロックへのアクセスを回避するのに使用される。
【００１２】
いくつかの実施形態では、シーケンシャルフェッチテーブル（ＳＦＴ）を使用して、各ＣＴＩに続けて順次フェッチされ、ＣＴＩを有しないフェッチグループの数を示す上記の記録のいくつか又は全てを記憶する。これらの実施形態では、ＳＦＴ内のエントリが、ＣＴＩのターゲット命令に関連付けられており、その結果、ＳＦＴ内の記録の各々は、対応するＣＴＩの特定のパス／解決に続けて順次フェッチされ、ＣＴＩを有しないフェッチグループの数の指標を含む。動作中、所定のフェッチグループでＣＴＩのターゲット命令（すなわち、ＣＴＩから行われたパスか、行われていないパスかにかかわらず、ＣＴＩのターゲットである命令）のリタイアに遭遇すると、シーケンシャルフェッチロジック機能ブロックは、後続のＣＴＩのリタイア前に、順次実行されるためにフェッチされるフェッチグループの数のカウントを保持する。次に、シーケンシャルフェッチロジックは、ターゲット命令に関連するＳＦＴ内のエントリに、フェッチグループの数のカウントを記憶する。次に、ＳＦＴ内のエントリのカウントは、本明細書で説明するように、この数のフェッチグループについて分岐予測情報を取得するための分岐予測機能ブロックへのアクセスを回避するのに使用される。
【００１３】
いくつかの実施形態では、上記の記録を使用して、分岐予測情報を取得するための分岐予測機能ブロックへのアクセスを抑制する場合、シーケンシャルフェッチロジックは、対応する記録から（ＢＴＢ、ＳＦＴ又は他の位置から）フェッチグループの数を取得して、カウンタをフェッチグループの数と同じ数に設定する。後続のフェッチグループの各々がフェッチされ、実行の準備がされると、シーケンシャルフェッチロジックは、カウンタをデクリメントし、上記のように分岐予測機能ブロックへのアクセスを抑制する。カウンタがゼロに達した後、１つ以上の後続のフェッチグループがフェッチされ、実行の準備がされると、シーケンシャルフェッチロジックは、１つ以上の後続のフェッチグループ内の命令の分岐予測情報を取得するために実行される分岐予測機能ブロックへの対応するアクセスを許可する。言い換えると、シーケンシャルフェッチロジックは、カウンタを使用して、特定の数のフェッチグループの分岐予測機能ブロックへのアクセスを抑制し、その後、後続のフェッチグループによる分岐予測機能ブロックへのアクセスの実行を開始する。これらの実施形態のいくつかでは、シーケンシャルフェッチロジックは、カウンタがゼロより大きい限り、記録自体のチェックも停止する。また、記録が記憶されている機能ブロックの部分（ＢＴＢ、ＳＦＴ等）は、電源が切られるか、低電力モードに置かれるか（例えば、供給電圧を下げる等）、他の方法で電力消費を減らすように設定される（例えば、クロックゲート等）ことができる。
【００１４】
ＣＴＩを含まず、所定のＣＴＩに続けて順次フェッチされるフェッチグループの数を示す記録を使用することによって、フェッチグループの分岐予測情報を取得するための分岐予測機能ブロックへのアクセスを抑制することにより、説明される実施形態は、分岐予測機能ブロックへの不要なアクセスを回避することができる。これは、プロセッサ、より一般的には、電子デバイスの消費電力を低減するのに役立つ。消費電力の低減により、電子機器の使用コストを抑え、電池の使用効率を高める等のように、電子機器に対するユーザーの満足度を高めることができる。
【００１５】
（電子デバイス）
図１は、いくつかの実施形態による、電子デバイス１００を示すブロック図である。図１に示すように、電子デバイス１００は、プロセッサ１０２及びメモリ１０４を含む。一般に、プロセッサ１０２及びメモリ１０４は、ハードウェアによって、すなわち、様々な回路要素及びデバイスを使用して実装される。例えば、プロセッサ１０２及びメモリ１０４は、１つ以上の個別の半導体チップを含む１つ以上の半導体チップ上に全体的に製造することができ、ディスクリート回路要素と組み合わせた半導体チップから製造することができ、ディスクリート回路要素のみから製造することができる。本明細書で説明するように、プロセッサ１０２及びメモリ１０４は、特定のフェッチグループの分岐予測機能ブロックへのアクセスを抑制するための動作を実行する。
【００１６】
プロセッサ１０２は、電子デバイス１００において計算及び他の動作（例えば、制御動作、構成動作等）を実行する機能ブロックである。例えば、プロセッサ１０２は、１つ以上のマイクロプロセッサ、中央処理装置（ＣＰＵ）コア、及び／又は、別の処理メカニズムであってもよいし、これらを含んでもよい。
【００１７】
メモリ１０４は、電子デバイス１００のメモリ（例えば、「メイン」メモリ）の動作を実行する電子デバイス１００の機能ブロックである。メモリ１０４は、第４世代ダブルデータレート同期ＤＲＡＭ（ＤＤＲ４  ＳＤＲＡＭ）等の揮発性メモリ回路、及び／又は、電子デバイス１００の機能ブロックによって使用されるデータ及び命令を記憶するための他のタイプのメモリ回路と、メモリ回路に記憶されたデータ及び命令へのアクセスを処理し、他の制御又は構成動作を実行するための制御回路と、を含む。
【００１８】
電子デバイス１００は、説明のために簡略化されている。しかしながら、いくつかの実施形態では、電子デバイス１００は、追加の又は異なる機能ブロック、サブシステム、要素、及び／又は、通信パスを含む。例えば、電子デバイス１００は、表示サブシステム、電力サブシステム、Ｉ／Ｏサブシステム等を含むことができる。一般に、電子デバイス１００は、本明細書で説明する動作を実行するのに十分な機能ブロック等を含む。
【００１９】
電子デバイス１００は、コンピュータ動作を実行する任意のデバイスであってもよいし、このような任意のデバイスに含まれてもよい。例えば、電子デバイス１００は、デスクトップコンピュータ、ラップトップコンピュータ、ウェアラブルコンピューティングデバイス、タブレットコンピュータ、仮想現実若しくは拡張現実機器、スマートフォン、人工知能（ＡＩ）デバイス若しくは機械学習デバイス、サーバ、ネットワークアプライアンス、玩具、視聴覚機器、家電製品、車両等、及び／又は、これらの組み合わせであってもよいし、これらに含まれてもよい。
【００２０】
（プロセッサ）
上記のように、電子デバイス１００は、プロセッサ１０２を備え、プロセッサ１０２は、マイクロプロセッサ、ＣＰＵコア、及び／又は、別の処理メカニズムであってもよい。図２は、いくつかの実施形態による、プロセッサ１０２を示すブロック図である。特定の機能ブロックが図２に示されているが、いくつかの実施形態では、異なる構成、接続性、数、及び／又は、タイプの機能ブロックがプロセッサ１０２に存在し得る。一般に、プロセッサ１０２は、本明細書に記載の動作を実行するのに十分な機能ブロックを含む。
【００２１】
図２に見られるように、プロセッサ１０２の機能ブロックは、フロントエンドサブシステム２００、実行サブシステム２０２又はメモリサブシステム２０４の一部と見なすことができる。フロントエンドサブシステム２００は、メモリサブシステム２０４内、又は、メモリサブシステム２０４と通信するキャッシュメモリ又はメインメモリから命令を取得するための動作を実行し、実行サブシステム２０２内の実行ユニット機能ブロックにディスパッチするための命令を準備する機能ブロックを含む。
【００２２】
フロントエンドサブシステム２００は、フェッチされた命令の実行のためにデコード及び準備に関連する動作を実行する機能ブロックである命令デコード２０６を含む。命令デコード２０６は、Ｌ１命令キャッシュ２１６、Ｌ２キャッシュ２１８、Ｌ３キャッシュ（図示省略）、又は、メインメモリ（図示省略）から、Ｎバイトのフェッチグループ内の命令（例えば、３２バイトのフェッチグループ内の４つの命令等）をフェッチするか、他の方法で受信する。次に、命令デコード２０６は、場合によっては並列に、フェッチグループ内の命令を個々のマイクロオペレーションにデコードする。次に、命令デコード２０６は、マイクロオペレーションを命令ディスパッチ２０８に送信し、マイクロオペレーションは、実行のために実行サブシステム２０２内の適切な実行ユニットに転送される。
【００２３】
また、フロントエンドサブシステム２００は、次のフェッチグループがフェッチされるプログラムカウンタ又はメモリ内のアドレスを決定するための動作を実行する機能ブロックであるＮＥＸＴ  ＰＣ２１０を含む。ＮＥＸＴ  ＰＣ２１０は、プログラムカウンタの初期値又は現在値に基づいて、プログラムカウンタの次の連続値（sequential value）を計算する。例えば、３２バイトのフェッチグループが与えられると、ＮＥＸＴ  ＰＣ２１０は、次のアドレス＝現在のアドレス＋３２バイトを計算することができる。行われたＣＴＩがプログラムフローを変更しない場合、フロントエンドサブシステム２００は、メモリ内の対応するシーケンシャルアドレスからフェッチグループをフェッチするために、ＮＥＸＴ  ＰＣ２１０によって計算されるプログラムカウンタの連続値を使用する。
【００２４】
さらに、フロントエンドサブシステム２００は、分岐予測ユニット２１２を含む。分岐予測ユニット２１２は、フェッチグループ内のＣＴＩの解決を予測し、プログラムカウンタ、したがって後続のフェッチグループがフェッチされるメモリ内のアドレスを変更するための動作を実行する機能ブロックである。言い換えれば、分岐予測ユニット２１２は、ＣＴＩ動作の１つ以上の記録を使用して、ＣＴＩの「行われた」又は「行われていない」解決を予測し、行われたＣＴＩの予測されたターゲットアドレスを提供する。分岐予測ユニット２１２によってＣＴＩが行われると予測される場合、ＮＥＸＴ  ＰＣ２１０によって提供される次以降のプログラムカウンタを、分岐予測ユニット２１２によって返されるターゲットアドレスを使用して置き換えることができる。
【００２５】
図３は、いくつかの実施形態による、分岐予測ユニット２１２を示すブロック図である。様々な機能ブロックを備える分岐予測ユニット２１２が図３に示されているが、分岐予測ユニット２１２は、この説明のために簡略化されている。いくつかの実施形態では、異なる機能ブロックが分岐予測ユニット２１２に存在する。例えば、いくつかの実施形態では、マルチレベル分岐予測、分岐パターン予測器、マルチレベル分岐ターゲットバッファ及び／若しくは方向予測器、並びに／又は、他の分岐予測メカニズム若しくは技術が使用され、対応する機能ブロックが分岐予測ユニット２１２に含まれる。一般に、分岐予測ユニット２１２は、本明細書で説明される動作を実行するのに十分な機能ブロックを含む。
【００２６】
図３に見られるように、分岐予測ユニット２１２の機能ブロックは、コントローラ３００と、方向予測器３０２と、分岐ターゲットバッファ（ＢＴＢ）３０４と、を含む。コントローラ３００は、方向予測器３０２及び分岐ターゲットバッファ３０４の更新及びルックアップ、他の機能ブロックとの通信等の分岐予測ユニット２１２の動作を実行するための回路要素を含む。方向予測器３０２は、例えばルックアップテーブル、リスト等の記録を含み、記録は、ＣＴＩに関連するアドレスと、ＣＴＩの行われた又は行われていない解決の指標と、をそれぞれ記憶するいくつかのエントリを含む。例えば、アドレスＡのＣＴＩの場合、方向予測器３０２は、アドレスＡ又はそれに基づく値を、ＣＴＩの行われた又は行われていない解決の対応する予測（例えば、飽和カウンタ等）に関連付けるエントリを含むことができる。分岐ターゲットバッファ３０４は、例えばルックアップテーブル、リスト等の記録を含み、記録は、ＣＴＩに関連するアドレスと、ＣＴＩのターゲットアドレスの指標と、をそれぞれ記憶するいくつかのエントリを含む。例えば、アドレスＡのＣＴＩの場合、分岐ターゲットバッファ３０４は、アドレスＡ又はそれに基づく値を、ＣＴＩのターゲット命令の対応する絶対アドレス又は相対アドレスに関連付けるエントリを含むことができる。命令を実行している間、コントローラ３００は、ＣＴＩ命令の実際の結果に基づいて、対応するエントリを方向予測器３０２及び／又は分岐ターゲットバッファ３０４に記憶及び／又は更新することができ、それによって、ＣＴＩ命令解決の上記予測で使用される値を記憶する。
【００２７】
いくつかの実施形態では、分岐ターゲットバッファ３０４は、分岐ターゲット情報に加えて、後続のＣＴＩがリタイアする前に、ＣＴＩに続けて順次実行されるためにフェッチされたフェッチグループの数のカウントの記録を記憶するために使用される。これらの実施形態では、各エントリは、対応するＣＴＩに関連するカウント（例えば、数、文字列等）が、かかるカウントが利用可能である場合に記憶される位置を含む。例えば、カウントは、この目的のためにエントリ内に予約された８ビットに記憶されてもよい。図４は、いくつかの実施形態による、分岐ターゲットバッファ３０４を示すブロック図である。分岐ターゲットバッファ３０４は、特定の情報を記憶するものとして示されているが、分岐ターゲットバッファ３０４は、この説明のために簡略化されている。いくつかの実施形態では、異なる構成の情報が、分岐ターゲットバッファ３０４内のエントリ内に記憶される。一般に、分岐ターゲットバッファ３０４は、本明細書で説明される動作を実行するのに十分な情報を記憶する。
【００２８】
図４に見られるように、分岐ターゲットバッファ３０４は、アドレス（ＡＤＤＲ）４００と、分岐ターゲット４０２と、カウント４０４と、メタデータ４０６と、をそれぞれ含むいくつかのエントリ４０８を含む。アドレス４００は、エントリが情報を保持するＣＴＩのアドレス若しくはアドレスに基づく値、アドレスに対する値、又は、ＣＴＩに関連付けられたアドレス、を記憶するために使用される。分岐ターゲット４０２は、エントリが情報を保持するＣＴＩのターゲット命令のアドレス又はアドレスに基づく値を記憶するために使用され、したがって、ＣＴＩが再び実行される場合にターゲット命令のアドレスを予測するために使用することができる。カウント４０４は、後続のＣＴＩがリタイアする前にエントリが情報を保持しているＣＴＩに続けて順次実行されるためにフェッチされたフェッチグループの数のカウントを記憶するために使用される。メタデータ４０６は、エントリ、カウント及び／又はＣＴＩに関する情報（有効ビット、許可ビット等）を記憶するために使用される。
【００２９】
図２に戻ると、フロントエンドサブシステム２００は、分岐予測情報を取得するための分岐予測機能ブロックへのアクセスを可能な場合に回避するための動作を実行する機能ブロックであるシーケンシャルフェッチロジック２１４をさらに含む。シーケンシャルフェッチロジック２１４は、フェッチグループに関連する記録を使用して、ＣＴＩを含まないと以前に決定された所定のフェッチグループ（又は、その内部の命令）に続けて順次フェッチされるフェッチグループの数を決定する。この数のフェッチグループの各々がその後フェッチされると、シーケンシャルフェッチロジック２１４は、分岐予測情報を取得するための分岐予測ユニット２１２へのアクセスを抑制する。
【００３０】
図５は、いくつかの実施形態による、シーケンシャルフェッチロジック２１４を示すブロック図である。様々な機能ブロックを備えるシーケンシャルフェッチロジック２１４が図５に示されているが、シーケンシャルフェッチロジック２１４は、この説明のために簡略化されている。いくつかの実施形態では、様々な異なる機能ブロックがシーケンシャルフェッチロジック２１４に存在する。例えば、シーケンシャルフェッチロジック２１４は、シーケンシャルフェッチテーブル５０２を含むものとして示されているが、いくつかの実施形態では、シーケンシャルフェッチロジック２１４は、シーケンシャルフェッチテーブルを含まないか、使用しない。代わりに、シーケンシャルフェッチロジック２１４は、対応する動作を実行するために、分岐ターゲットバッファ３０４内のエントリに記憶されたカウント情報を使用する。一般に、シーケンシャルフェッチロジック２１４は、本明細書で説明する動作を実行するのに十分な機能ブロックを含む。
【００３１】
図５に見られるように、シーケンシャルフェッチロジック２１４の機能ブロックは、コントローラ５００及びシーケンシャルフェッチテーブル５０２を含む。コントローラ５００は、シーケンシャルフェッチテーブル５０２（又は、分岐ターゲットバッファ３０４）の更新及びルックアップ、他の機能ブロックとの通信等のように、シーケンシャルフェッチロジック２１４の動作を実行するための回路要素を含む。シーケンシャルフェッチテーブル５０２は、例えばルックアップテーブル、リスト等の記録を含み、記録は、ＣＴＩのターゲット命令に関連するアドレスと、後続のＣＴＩがリタイアする前に順次実行されるためにフェッチされたフェッチグループの数のカウントの記録と、をそれぞれ記憶するいくつかのエントリを含む。図６は、いくつかの実施形態による、シーケンシャルフェッチテーブル５０２を示すブロック図である。シーケンシャルフェッチテーブル５０２は、特定の情報を記憶するものとして示されているが、シーケンシャルフェッチテーブル５０２は、この説明のために簡略化されている。いくつかの実施形態では、異なる構成の情報が、シーケンシャルフェッチテーブル５０２のエントリに記憶される。一般に、シーケンシャルフェッチテーブル５０２は、本明細書で説明する動作を実行するのに十分な情報を記憶する。
【００３２】
図６に見られるように、シーケンシャルフェッチテーブル５０２は、ＣＴＩターゲットアドレス（ＡＤＤＲ）６００と、カウント６０２と、メタデータ６０４と、をそれぞれ含む、いくつかのエントリ６０６を含む。ＣＴＩターゲットアドレス６００は、エントリが情報を保持するＣＴＩのターゲット命令のアドレス若しくはそれに基づく値、又は、ＣＴＩのターゲット命令に関連するアドレス、を記憶するために使用される。一般に、ＣＴＩの「ターゲット」命令は、ＣＴＩの実行時にプログラムフローがジャンプする命令であり、メモリ内のアドレスである。静的ターゲットジャンプ命令等の静的に定義されたターゲットを有する無条件ＣＴＩの場合にはターゲット命令が１つのみであるため、プログラムフローは、ＣＴＩ命令からメモリ内の同じアドレスに常にジャンプする。ただし、条件付きＣＴＩの場合には、少なくとも２つの（プログラムコード内の行われたパスと、行われていないパス上の）ターゲット命令が存在し、任意の数のターゲット命令が存在し得る。例えば、実行時にターゲット命令が指定される間接ＣＴＩは、行われていないパスがシーケンシャルであっても、行われるパス上に任意の数のターゲット命令を有することができる。シーケンシャルフェッチテーブル５０２は、ＣＴＩのターゲット命令に関連する記録を記憶するので、所定のＣＴＩの潜在的なターゲット命令（したがって、所定のＣＴＩからのパス）の各々は、関連する個別のエントリをシーケンシャルフェッチテーブル５０２内に有することができる。カウント６０２は、後続のＣＴＩがリタイアする前に対応するＣＴＩに続けて順次実行されるためにフェッチされたフェッチグループの数のカウントを記憶するために使用される。メタデータ６０４は、エントリ及び／又はカウントに関する情報（有効ビット、許可ビット等）を記憶するために使用される。
【００３３】
シーケンシャルフェッチテーブル５０２を用いて、フェッチグループの数を決定するための上記の記録を記憶する実施形態では、プログラムカウンタ、すなわち、所定のフェッチグループがフェッチされるアドレスを受信すると、コントローラ５００は、関連するアドレスを有するエントリがシーケンシャルフェッチテーブル５０２に存在するかどうかを判別するために、シーケンシャルフェッチテーブル５０２内のルックアップを実行する。言い換えれば、ルックアップは、所定のフェッチグループ内のアドレスの範囲内の複数のアドレスに存在する命令のアドレス、すなわち、ＣＴＩのターゲット命令がシーケンシャルフェッチテーブル５０２内に存在するかどうかを決定する。存在する場合、コントローラ５００は、カウント６０２から対応するカウントを取得し、分岐予測情報を取得するための分岐予測ユニット２１２へのアクセスを抑制するためのフェッチグループの数として当該カウントを使用する。そうでなく、一致するアドレスがシーケンシャルフェッチテーブル５０２に見つからない場合、コントローラ５００は、分岐予測ユニット２１２へのアクセスを妨げない、すなわち、分岐予測情報の取得を正常に進行させる。
【００３４】
フェッチグループ内のＣＴＩの分岐予測情報のルックアップを実行する一環として、分岐ターゲットバッファ３０４を使用して、フェッチグループの数を決定するための上記の記録を記憶する実施形態では、分岐予測ユニット２１２は、そのようなターゲットアドレスが存在する場合に、ＣＴＩの予測されたターゲット命令のアドレスを分岐ターゲットバッファ３０４から取得する。また、分岐予測ユニット２１２は、カウント４０４を分岐ターゲットバッファ３０４から取得し、カウント４０４は、シーケンシャルフェッチロジック２１４内のコントローラ５００に返される。コントローラ５００は、分岐予測情報を取得するための分岐予測ユニット２１２へのアクセスを抑制するためのフェッチグループの数としてカウントを使用する。そうでなく、一致するアドレス及び／又はカウントが分岐ターゲットバッファ３０４に見つからない場合、コントローラ５００は、分岐予測ユニット２１２へのアクセスを妨げない、すなわち、分岐予測情報の取得を正常に進行させる。
【００３５】
いくつかの実施形態では、シーケンシャルフェッチテーブル５０２は、限られた数のエントリ（例えば、３２エントリ、６４エントリ等）のみを含み、したがって、プロセッサ１０２の動作中に満杯になる可能性がある。シーケンシャルフェッチテーブル５０２が満杯になると、新たな情報をシーケンシャルフェッチテーブル５０２に記憶するために、エントリ内の既存の情報を上書きする必要がある。いくつかの実施形態では、シーケンシャルフェッチテーブル５０２内のエントリは、１つ以上の置換ポリシー、ガイドライン等を使用してコントローラ５００によって管理される。これらの実施形態では、上書きされるエントリを選択する場合、エントリは、置換ポリシー、ガイドライン等に従って選択される。例えば、コントローラ５００は、最長未使用時間（ＬＲＵ）置換ポリシーを使用して、シーケンシャルフェッチテーブル５０２内のエントリの情報を管理することができる。
【００３６】
シーケンシャルフェッチロジック２１４は、図２においては他の機能ブロックから分離された単一の機能ブロックとして示されているが、いくつかの実施形態では、シーケンシャルフェッチロジック２１４の一部又は全ては、図２に示される他の機能ブロックに含まれ得ることに留意されたい。これらの実施形態では、シーケンシャルフェッチロジック２１４に属する動作は、他の機能ブロック内の回路要素によって実行されてもよい。一般に、シーケンシャルフェッチロジック２１４は、図２に示すプロセッサ１０２内の回路要素の特定の位置に関する制限無しに、説明された動作を実行するために使用される様々な回路要素を含む。
【００３７】
図２に戻ると、実行サブシステム２０２は、整数実行ユニット２２２及び浮動小数点実行ユニット２２４（総称して「実行ユニット」）を含み、これらは、それぞれ整数命令及び浮動小数点命令を実行するための動作を実行する機能ブロックである。実行ユニットは、ハードウェアの名前変更、実行スケジューラ、算術論理演算ユニット（ＡＬＵ）、浮動小数点の乗算及び加算ユニット（浮動小数点実行ユニット２２４内）、レジスタファイル等の要素を含む。
【００３８】
また、実行サブシステムは、リタイアキュー２２６を含む。リタイアキュー２２６は、実行された命令の結果が、対応する命令の実行を完了した後であるが、結果がプロセッサ１０２のアーキテクチャ状態にコミットされる（例えば、キャッシュ又はメモリに書き込まれ、他の動作で使用可能になる）前に保持される機能ブロックである。いくつかの実施形態では、特定の命令をプログラム順序外で実行することができ、リタイアキュー２２６は、順序外の命令の結果が他の順序外の命令に対して適切にリタイアされることを確実にするために使用される。
【００３９】
いくつかの実施形態では、リタイアキュー２２６は、後続のＣＴＩがリタイアする前にＣＴＩに続けて順次実行されるためにフェッチされるフェッチグループの数のカウントを保持するための動作の少なくとも一部を実行する。例えば、いくつかの実施形態では、フロントエンドサブシステム２００（例えば、命令デコード２０６）は、実行サブシステム２０２で実行されるＣＴＩと共に、命令がＣＴＩである（又は、ＣＴＩではない）という指標を含む。例えば、フロントエンドサブシステム２００は、実行サブシステム２０２を介した命令に付随するメタデータビット内に、指定されたフラグビットを設定することができる。ＣＴＩであることが示された命令に遭遇すると、リタイアキュー２２６は、ＣＴＩであることが示された後続の命令がリタイアする前にリタイアするフェッチグループ（又は、より一般的には個々の命令）のカウントを保持し始めることができる。次に、カウントは、本明細書で説明されるように、将来の使用のために記憶されるように、シーケンシャルフェッチロジック２１４に伝達され得る。いくつかの実施形態では、カウントは、対応する閾値を超えない限り、リタイアキュー２２６によって報告されない（又は、任意の記録を更新するために使用されない）。
【００４０】
メモリサブシステム２０４は、キャッシュの階層を含む。キャッシュの階層は、限られた数の命令及び／又はデータのコピーを、命令及び／又はデータを使用する機能ブロックの近くに記憶するための揮発性メモリ回路と、データへのアクセス等の動作を処理するための制御回路と、を含む機能ブロックである。階層は、２つのレベルを含み、第１のレベルにレベル１（Ｌ１）命令キャッシュ２１６及びＬ１データキャッシュ２２０が存在し、第２のレベルにＬ２キャッシュ２１８が存在する。メモリサブシステム２０４は、メモリ１０４に通信可能に結合され、外部Ｌ３キャッシュ（図示省略）に結合され得る。メモリ１０４は、命令及び／又はデータのための長期記憶装置として機能する不揮発性大容量記憶装置（例えば、ディスクドライブ又はソリッドステートドライブ）（図示省略）に結合することができる。
【００４１】
（分岐予測器へのアクセスを回避するための、制御転送命令に関連するシーケンシャルフェッチグループの記録の使用）
説明された実施形態では、電子デバイス内のプロセッサ（例えば、プロセッサ１０２）は、ＣＴＩに関連する記録を使用して、ＣＴＩに続けて順次フェッチされる、ＣＴＩを含まないフェッチグループの数を決定し、この数のフェッチグループのために対応する分岐予測情報を取得するための分岐予測ユニットへのアクセスを抑制する。図７は、いくつかの実施形態による、分岐予測ユニットへのアクセスを抑制するためにＣＴＩに関連付する記録を使用するためのプロセスを示すフローチャートである。図７に示す動作は、いくつかの実施形態によって実行される動作の一般的な例として示されていることに留意されたい。他の実施形態により実行される動作は、異なる動作、及び／又は、異なる順序で実行される動作を含む。図７の例では、プロセッサ１０２と同様の内部構成を有する電子デバイス内のプロセッサが、様々な動作を実行するものとして説明されている。しかしながら、いくつかの実施形態では、異なる内部構成を有するプロセッサが、説明された動作を実行する。
【００４２】
図７に示す動作は、プロセッサが１つ以上のＣＴＩの各々に関連付けられた記録を保持するときに開始され、各記録は、ＣＴＩを含まない特定の数のフェッチグループが、対応するＣＴＩに続けて順次フェッチされることを示す（ステップ７００）。この動作中、シーケンシャルフェッチロジックのコントローラ（例えば、シーケンシャルフェッチロジック２１４のコントローラ５００）は、リタイアキュー（例えば、リタイアキュー２２６）から、ＣＴＩ、及び、ＣＴＩに続けて順次フェッチされるフェッチグループの数の指標又は識別子を受信する。例えば、フェッチグループに４つの命令が含まれる実施形態を想定すると、リタイアキューがＣＴＩに遭遇し、次のＣＴＩがリタイアする前に１２９個の命令をカウントすると、リタイアキューは、ＣＴＩの識別情報と共に、値１２９又は別の値、例えば３２（すなわち、１２９／４を、フェッチグループの数を表すために整数に切り捨てた）をシーケンシャルフェッチロジックに伝えることができる。（本明細書で使用される場合、ＣＴＩに「遭遇する」ことは、ＣＴＩに関連するプロセッサフラグに基づいて、リタイアする命令の中からＣＴＩを検出すること、ＣＴＩ及び／又は後続の命令若しくは結果値に関連する命令フローの動作又はパターンを検出すること等を含む。）次に、コントローラは、ＣＴＩに関連する記録を更新して、特定の数のフェッチグループを示す。
【００４３】
図８及び図１０は、図７のステップ７００について説明したように、１つ以上のＣＴＩに関連する記録を保持するために実行される動作を示すフローチャートである。図８は、いくつかの実施形態による、記録を記憶するために分岐ターゲットバッファが使用される場合に、ＣＴＩに関連する記録を保持するために実行される動作を示すフローチャートである。図１０は、いくつかの実施形態による、記録を記憶するためにシーケンシャルフェッチテーブルが使用される場合に、ＣＴＩに関連する記録を保持するために実行される動作を示すフローチャートである。図８及び図１０に示す動作は、いくつかの実施形態により実行される動作の一般的な例として提示されることに留意されたい。他の実施形態により実行される動作は、異なる動作、異なる順序で実行される動作、及び／又は、異なる機能ブロックにより実行される動作を含む。
【００４４】
図８に示す動作は、リタイアキューが、特定のタイプのＣＴＩのリタイアに遭遇して、後続のＣＴＩがリタイアする前に順次リタイアされるフェッチグループの（又は、より一般的には、リタイアされた個々の命令の）数のカウントを保持し始めるときに開始する（ステップ８００）。この動作の場合、リタイアキューは、特定のタイプのＣＴＩ命令のリタイアを監視し、次のＣＴＩ命令の前にリタイアする後続の命令のカウントを保持する。例えば、リタイアキューは、次のＣＴＩがリタイアするまで、特定のタイプのＣＴＩ命令に続くリタイアされた命令毎にカウンタをインクリメントすることができる。
【００４５】
上記のように、図８に示す実施形態においては、記録を記憶するために分岐ターゲットバッファが使用されている。いくつかの実施形態では、分岐ターゲットバッファは、ＣＴＩの識別子（例えば、メモリ内のＣＴＩ命令のアドレス）又はＣＴＩが含まれるフェッチグループによって索引付けされた分岐ターゲット記録を記憶する。このため、これらの実施形態では、分岐ターゲットバッファ内のエントリのカウント情報は、ＣＴＩ又はフェッチグループにのみ関連付けられ、ＣＴＩの（おそらく多数の）ターゲット命令には関連付けられない。言い換えれば、単一のデータである上記のカウント情報は、ＣＴＩから各ターゲット命令を介する単一の決定パスのみを表す。したがって、分岐ターゲットバッファ内のこのような記録は、静的ターゲット命令の条件付きＣＴＩ、及び／又は、動的に指定されるターゲット命令を有するＣＴＩの全ての可能な解決について、シーケンシャルフェッチグループのカウントを決定するために信頼性をもって使用することはできない。したがって、いくつかの実施形態では、「特定の」タイプのＣＴＩは、無条件の静的ターゲット命令ＣＴＩ、又は、条件付きＣＴＩから行われないパスである。
【００４６】
次に、リタイアキューは、カウントをシーケンシャルフェッチロジックに伝達し、シーケンシャルフェッチロジックは、ＣＴＩ又はフェッチグループに関連付けられた分岐ターゲットバッファ内のエントリに、フェッチグループの数のカウントを示す記録を記憶する（ステップ８０２）。この動作の場合、シーケンシャルフェッチロジックは、ＣＴＩのアドレス又はそれに基づく値を決定し、分岐ターゲットバッファ内の対応するエントリを決定する等して、記録が記憶される分岐ターゲットバッファ内のエントリを決定する。次に、シーケンシャルフェッチロジックは、決定されたエントリに、フェッチグループの数のカウントを示す記録を記憶する。例えば、分岐ターゲットバッファ内のエントリに８ビット値のスペースが含まれている場合、シーケンシャルフェッチロジックは、カウントを表す８ビット値をエントリに記憶する。エントリのサイズがカウントを記憶するのに不十分な場合（例えば、カウントが８ビットのカウント値２５５を超える場合）、デフォルト値又はゼロ値をエントリに記憶することができ、これにより、分岐予測器へのアクセスが特定のＣＴＩについて実行される（抑制されない）ことが示される。或いは、最大値をエントリに記憶して、分岐予測器へのアクセスの少なくとも一部を回避するようにすることもできる。
【００４７】
図９は、いくつかの実施形態による、対応するＣＴＩに続けて順次フェッチされるＣＴＩを含まないフェッチグループのカウントで分岐ターゲットバッファを更新するための動作のタイムライン図である。図９に示すように、時間は左から右に進み、その間に、プログラムコードから別々の命令セットを含む多数のフェッチグループ（ＦＧ）がフェッチされ、実行されるために準備され（例えば、デコード、ディスパッチされる等）、実行され、リタイアされる。各フェッチグループは、多数の個々の命令（４、６等）を含み、フェッチグループ内の命令には３つのＣＴＩ命令がある。
【００４８】
図９では、フェッチグループ９０２内の２番目の命令である第１のＣＴＩ命令ＣＴＩ１は、命令フローをフェッチグループ９０２の第１のアドレスからフェッチグループ９０４の第２の非シーケンシャルのアドレスにジャンプさせる、静的無条件分岐命令である。フェッチグループ９０２の２番目の命令からフェッチグループ９０４の１番目の命令への矢印によってこれが示されている。（特定のタイプのＣＴＩの１つである）ＣＴＩ１のリタイアを検出すると、リタイアキューは、後続のＣＴＩがリタイアする前に順次リタイアされた（すなわち、構成要素である命令がリタイアされた）フェッチグループの数のカウントを保持する。これは、フェッチグループ９１０内の３番目の命令である静的ターゲットアドレスを有する、行われていない条件付きのＣＴＩ２である。ＣＴＩ２がリタイアする前に３つのフェッチグループ（フェッチグループ９０４〜９０８）がリタイアしたため、リタイアキューは、ＣＴＩ１の識別情報（例えば、そのアドレス、プロセッサ命令タグ又は内部識別子等）及び３つのカウント値又は別の値（例えば、リタイアした命令の数（１４等））をシーケンシャルフェッチロジックに伝える。図９の分岐ターゲットバッファの例におけるＣＴＩ１のエントリに示すように、ＣＴＩ１の識別子及び値を受信すると、シーケンシャルフェッチロジックは、分岐ターゲットバッファの対応するエントリを更新する。図９の分岐ターゲットバッファ内に示されるＣＴＩ１及びＣＴＩ２は、ＣＴＩ１及びＣＴＩ２のアドレス、又は、対応するフェッチグループに関連付けられたアドレス等のように、ＣＴＩ１及びＣＴＩ２を表す又は識別する他の値であってもよいことに留意されたい。
【００４９】
ＣＴＩ１のカウントの終わりとして機能した第２のＣＴＩ命令ＣＴＩ２は、第２の／対応するカウントをリタイアキューに開始させる。上記のように、ＣＴＩ２は行われないので、フェッチグループは（ＮＥＸＴ  ＰＣ機能ブロックによって生成される）次のアドレスから順次フェッチされ、リタイアキューは、対応するカウントを、フェッチグループ９１６内の後続のＣＴＩであるＣＴＩ３がリタイアするまで保持する（フェッチグループ９１６は、プログラムフローをフェッチグループ９１８に向ける）。ＣＴＩ３がリタイアする前に、２つのフェッチグループ（フェッチグループ９１２〜９１４）の全てがリタイアしたため、リタイアキューは、ＣＴＩ２の識別子及び２つ又は別のカウント値（リタイアした命令の数、１０等）をシーケンシャルフェッチロジックに伝える。ＣＴＩ２の識別子及び値を受信すると、シーケンシャルフェッチロジックは、図９の分岐ターゲットバッファの例においてＣＴＩ２として示される、分岐ターゲットバッファ内の対応するエントリを更新する。ＣＴＩ２は、条件付きＣＴＩの行われていないパスのケースであり、したがって、特定のタイプのＣＴＩの１つであることに留意されたい。いくつかの実施形態では、行われたパスは、同様に追跡及び記録されない。
【００５０】
図１０に進むと、図１０に示す動作は、リタイアキューが、ＣＴＩのターゲット命令のリタイアに遭遇して、後続のＣＴＩがリタイアする前に順次リタイアされるフェッチグループ（又は、より一般的には、リタイアされた個々の命令）の数のカウントを保持し始めるときに開始する（ステップ１０００）。この動作の場合、リタイアキューは、ＣＴＩを監視し、そして、ＣＴＩのターゲット命令（すなわち、ＣＴＩに続く次の命令）のリタイアを監視し、次のＣＴＩ命令の前にリタイアする後続の命令のカウントを保持する。例えば、リタイアキューは、次のＣＴＩがリタイアするまで、特定のタイプのターゲット命令に続くリタイアされた命令毎にカウンタをインクリメントすることができる。
【００５１】
上記のように、シーケンシャルフェッチテーブルは、図１０に示す実施形態において、記録を記憶するために使用される。いくつかの実施形態では、シーケンシャルフェッチテーブルは、ＣＴＩのターゲット命令に関連付けられた記録を記憶する。言い換えれば、これらの実施形態では、シーケンシャルフェッチテーブルは、ＣＴＩの可能なターゲット命令の各々に関連付けられた記録、したがって、ＣＴＩから行われたパスの各々を含むことができる。このため、これらの実施形態では、様々なタイプのＣＴＩを処理することができる（すなわち、シーケンシャルフェッチカウントを記録することができる）。これは、カウント情報が分岐ターゲットバッファ内に記憶される実施形態とは異なることを想起されたい。分岐ターゲットバッファは、対応するターゲット命令ではなく、ＣＴＩ又はフェッチグループに関連付けられたカウント情報を記憶するため、特定のタイプのＣＴＩのみを処理することができる。
【００５２】
次に、リタイアキューは、カウントをシーケンシャルフェッチロジックに伝え、シーケンシャルフェッチロジックは、ターゲット命令に関連付けられたシーケンシャルフェッチテーブル内のエントリに、フェッチグループの数のカウントを示す記録を記憶する（ステップ１００２）。この動作の場合、シーケンシャルフェッチロジックは、ターゲット命令のアドレス又はそれに基づく値を決定し、シーケンシャルフェッチテーブル内の対応するエントリを決定する等して、記録が記憶されるシーケンシャルフェッチテーブル内のエントリを決定する。次に、シーケンシャルフェッチロジックは、決定されたエントリに、フェッチグループの数のカウントを示す記録を記憶する。例えば、シーケンシャルフェッチテーブル内のエントリに８ビット値のスペースが含まれている場合、シーケンシャルフェッチロジックは、カウントを表す８ビット値をエントリに記憶する。エントリのサイズがカウントを記憶するのに不十分な場合（例えば、カウントが８ビットのカウント値２５５を超える場合）、デフォルト値又はゼロ値をエントリに記憶することができ、これにより、分岐予測器へのアクセスが特定のターゲット命令について実行される（回避されない）ことが示される。或いは、最大値をエントリに記憶することができ、これにより、分岐予測器へのアクセスの少なくとも一部を回避することが可能になる。
【００５３】
図１１は、いくつかの実施形態による、対応するＣＴＩに続けて順次フェッチされるＣＴＩを含まないフェッチグループのカウントでシーケンシャルフェッチテーブルを更新する動作のタイムライン図である。図１１に示すように、時間は左から右に進み、その間に、プログラムコードからの別々の命令セットを含むいくつかのフェッチグループ（ＦＧ）がフェッチされ、実行されるために準備され（例えば、デコード、ディスパッチされる等）、実行され、リタイアされる。各フェッチグループは、いくつかの個別の命令（４、６等）を含み、フェッチグループ内の命令には３つのＣＴＩ命令がある。
【００５４】
図１１では、フェッチグループ１１０２内の２番目の命令である第１のＣＴＩ命令ＣＴＩ１は、命令フローをフェッチグループ１１０２の第１のアドレスからフェッチグループ１１０４の第２の非シーケンシャルなアドレス（ＡＤＤＲ１）にジャンプさせる静的無条件分岐命令である。これは、フェッチグループ１１０２の２番目の命令からフェッチグループ１１０４の１番目の命令（ＡＤＤＲ１）への矢印によって示されている。フェッチグループ１１０４の１番目の命令であるＡＤＤＲ１でターゲット命令のリタイアを検出すると、リタイアキューは、後続のＣＴＩがリタイアする前に順次リタイアされた（すなわち、構成要素である命令がリタイアされた）フェッチグループの数のカウントを保持する。後続のＣＴＩは、フェッチグループ１１１２内の１番目の命令である静的ターゲットアドレスを有する、行われていない条件付きのＣＴＩ２である。ＣＴＩ２がリタイアする前に３つのフェッチグループ（フェッチグループ１１０４〜１１０８）の全てがリタイアしたため、リタイアキューは、ＡＤＤＲ１におけるターゲット命令の識別子（例えば、そのアドレス、プロセッサ命令タグ又は内部識別子等）、及び、３つのカウント値又は他の値（リタイアした命令の数、１３等）をシーケンシャルフェッチロジックに伝える。ＡＤＤＲ１におけるターゲット命令の識別子及び値を受信すると、シーケンシャルフェッチロジックは、図１１のシーケンシャルフェッチテーブルの例のＡＤＤＲ１のエントリに示すように、シーケンシャルフェッチテーブル内の対応するエントリを更新する。図１１のシーケンシャルフェッチテーブルに示すＡＤＤＲ１及びＡＤＤＲ２は、アドレスＡＤＤＲ１及びＡＤＤＲ２、又は、対応するターゲット命令を表す若しくは識別する他の値であってもよいことに留意されたい。
【００５５】
ＡＤＤＲ２でのＣＴＩ２のターゲット命令のリタイアにより、リタイアキューは、第２の／対応するカウントを開始する。上記のように、ＣＴＩ２が行われないので、ターゲット命令は、順番に次のアドレスＡＤＤＲ２にあり、フェッチグループは、ＡＤＤＲ２からフェッチされる。リタイアキューは、フェッチグループ１１１６内の後続のＣＴＩであるＣＴＩ３（ＣＴＩ３は、プログラムフローをフェッチグループ１１１８に向ける）がリタイアするまで、対応するカウントを保持する。ＣＴＩ３がリタイアする前に２つのフェッチグループ（フェッチグループ１１１２〜１１１４）の全てがリタイアしたため、リタイアキューは、ＡＤＤＲ２におけるターゲット命令の識別子（例えば、そのアドレス、プロセッサ命令タグ又は内部識別子等）、及び、２つのカウント値又は別の値（リタイアした命令の数、１３等）をシーケンシャルフェッチロジックに伝える。ＡＤＤＲ２におけるターゲット命令の識別子及び値を受信すると、シーケンシャルフェッチロジックは、図１１のシーケンシャルフェッチテーブルの例のＡＤＤＲ２のエントリに示すように、シーケンシャルフェッチテーブル内の対応するエントリを更新する。
【００５６】
いくつかの実施形態では、リタイアキューは、分岐ターゲットバッファ及び／又はシーケンシャルフェッチロジックにカウントを報告するための少なくとも１つの閾値を使用する。これらの実施形態では、カウントがフェッチグループの閾値数未満である場合、リタイアキューは、ＣＴＩ及び／又はカウントをシーケンシャルフェッチロジックに報告しない。このようにして、リタイアキューは、カウントが記憶されている記録（すなわち、分岐ターゲットバッファ又はシーケンシャルフェッチテーブル）のエントリが慌ただしく上書きされることによるスラッシングを回避することができる。いくつかの実施形態では、閾値は動的であり、状況に応じて、実行時に設定／リセットすることができる。いくつかの実施形態では、記録内（分岐ターゲットバッファ等）のエントリは、対応するＣＴＩ又はターゲット命令と後続のＣＴＩとの間で発生するフェッチグループの数が閾値数未満であった場合、カウントが無効としてマークされるか、デフォルト値（０等）に設定されてもよい。
【００５７】
リタイアキューは、図８〜図１１の例について、後続のＣＴＩがリタイアする前に順次リタイアするフェッチグループ（又は、より一般的には、リタイアした個々の命令）の数のカウントを保持するものとして説明されているが、いくつかの実施形態では、異なる機能ブロックがカウントを保持する。一般に、説明された実施形態では、個々のＣＴＩ命令及び／又は特定のタイプのＣＴＩ命令を識別し、識別されたＣＴＩ命令間の命令の数をカウントすることができる任意の機能ブロックは、カウントを保持することができる。例えば、いくつかの実施形態では、デコードユニット及び／又は分岐予測ユニットは、カウントを保持するための動作の一部又は全てを実行するが、予測ミスの分岐に対しては、様々なロールバック及び回復動作が実行されてもよい。
【００５８】
図７に戻すと、シーケンシャルフェッチロジックは、プログラムコードを実行する場合に、所定のＣＴＩに関連付けられた記録に基づいて、ＣＴＩを有しない特定の数のフェッチグループが、ＣＴＩに続けて順次実行されるためにフェッチされることを決定する（ステップ７０２）。ここで使用されるように、ＣＴＩに「関連付けられた」記録は、記録を記憶するために分岐ターゲットバッファが使用される実施形態では、ＣＴＩ自体又は対応するフェッチグループに関連付けられた記録であってもよく、記録を記憶するためにシーケンシャルフェッチテーブルが使用される実施形態では、ＣＴＩのターゲット命令に関連付けられた記録であってもよい。一般に、ＣＴＩ又はターゲット命令の何れかに遭遇すると（例えば、アドレス又は命令に関連付けられた他の情報に基づいてフェッチグループ内のＣＴＩ又はターゲット命令の何れかを検出すると）、シーケンシャルフェッチロジックは、順次フェッチされるＣＴＩを有しないフェッチグループの数のカウントを適切な記録から取得する。上記のように、カウントは、フェッチグループの特定の数を示す数値、文字列又は他の値とすることができる。
【００５９】
次に、特定の数のフェッチグループの各々がフェッチされて実行の準備がされると、シーケンシャルフェッチロジックは、そのフェッチグループ内の命令の分岐予測情報を取得するための分岐予測ユニット（例えば、分岐予測ユニット２１２）への対応するアクセスを抑制する（ステップ７０４）。一般に、この動作中、シーケンシャルフェッチテーブルは、分岐予測ユニットへのアクセスを抑制、遮断又は他の方法で防止することによって、不必要な電力消費等を回避する。いくつかの実施形態では、分岐予測ユニットへのアクセスを抑制することに加えて、シーケンシャルフェッチロジックは、ステップ７０４の動作が完了するまで（ステップ７０２に示すように）カウントのチェックを実行することを回避し、シーケンシャルフェッチテーブル又は分岐予測ユニットの一部又は全て等の機能ブロックを低電力モードに置くことができる。
【００６０】
図１２は、いくつかの実施形態による、ＣＴＩに続けて順次フェッチされるＣＴＩを含まない特定の数のフェッチグループを決定し、特定の数を使用して分岐予測ユニットへのアクセスを抑制するためのプロセスを示すフローチャートである。図１２に示す動作は、いくつかの実施形態によって行われる動作の一般的な例として示されていることに留意されたい。他の実施形態によって実行される動作は、異なる動作、異なる順序で実行される動作、及び／又は、異なる機能ブロックによって実行される動作を含む。図１２の動作は、図７のステップ７０２〜７０４に関して一般的な用語で説明されている。したがって、図１２は、ステップ７０２〜７０４のより詳細な説明を提供する。
【００６１】
図１２の動作については、ＣＴＩ命令（又は、より具体的には、そのターゲット命令）に関連付けられたシーケンシャルフェッチ記録（すなわち、ＣＴＩに続けて順次フェッチされるＣＴＩ命令を含まないフェッチグループの数を示す記録）は、図７、図１０〜図１１について上述したように、シーケンシャルフェッチテーブルに記憶されることが想定されている。しかしながら、本明細書の他の箇所で説明されるように、シーケンシャルフェッチ記録が分岐ターゲットバッファに記憶される実施形態についても同様の動作が実行されることに留意されたい。（ＮＥＸＴ  ＰＣ機能ブロックによって供給される）プログラムカウンタは、ステップ１２００の前に、ＣＴＩのターゲット命令を含むフェッチグループがフェッチされることを示すことも想定されている。さらに、フェッチグループは、４つの命令が含まれていると想定されている。これらの値及び条件は、図１２の例を示すために使用されているが、全ての実施形態で同じではない。
【００６２】
図１２の動作は、シーケンシャルフェッチロジック（例えば、シーケンシャルフェッチロジック２１４）が、フェッチグループ内の命令のアドレス又は識別子に基づいて、フェッチグループに続けて順次フェッチされる特定の数のフェッチグループをシーケンシャルフェッチテーブルから取得するときに開始する（ステップ１２００）。この動作では、シーケンシャルフェッチロジックは、プログラムカウンタを使用して、シーケンシャルフェッチテーブルのフェッチグループ内の４つの命令の何れかに一致又は「ヒット」があるかどうかをチェックする。例えば、シーケンシャルフェッチロジックは、プログラムカウンタ（すなわち、フェッチアドレス）からハッシュ値又は別のインデックス値を計算して、シーケンシャルフェッチテーブルのエントリの一部又は全てと比較することができる。別の例として、シーケンシャルフェッチロジックは、プログラムカウンタに基づいてフェッチグループ内の命令の全てのアドレスを計算して、計算されたアドレスの各々をシーケンシャルフェッチテーブルの各エントリと比較することができる。上記のように、フェッチグループ内の命令はＣＴＩのターゲット命令であるため、シーケンシャルフェッチテーブルにおいて一致が検出され、ヒットが発生する。したがって、シーケンシャルフェッチロジックは、シーケンシャルフェッチテーブル内の一致するエントリから、特定の数のフェッチグループを読み出す。
【００６３】
次に、シーケンシャルフェッチロジックは、カウンタを、特定の数のフェッチグループと同数に設定する（ステップ１２０２）。例えば、シーケンシャルフェッチロジックは、専用のカウンタレジスタ又は他のメモリ位置に、特定の数のフェッチグループ又はその表現を記憶することができる。
【００６４】
フェッチグループの各々がフェッチされて実行の準備がされると、シーケンシャルフェッチロジックは、分岐予測ユニットへの対応するアクセスを抑制する（ステップ１２０４）。例えば、シーケンシャルフェッチロジックは、１つ以上の制御信号をアサートして、分岐予測ユニットの回路要素がアクセス動作を実行するのを抑制することができ、アドレス又は関連する値が分岐予測ユニットに送信されることを抑制することができ、クロックを停止し、回路要素の電源を切り、及び／又は、分岐予測ユニットへの対応するアクセスを抑制するための他の動作を実行することができる。この動作について、いくつかの実施形態では、分岐方向解決、分岐アドレス取得等のように、分岐予測ユニットへの２つ以上の別々の、場合によっては並列のアクセスの各々は、分岐予測ユニット内の各機能ブロックが関連する動作を実行することを上記技術の一部又は全てを使用して抑制することによって、全て抑制される。
【００６５】
図１２には示されていないが、いくつかの実施形態では、カウンタがゼロ以外であるフェッチグループについても、シーケンシャルフェッチテーブルへのアクセスが抑制されている。これは、フェッチグループがＣＴＩを含まないこと、したがって、ＣＴＩのターゲット命令が含まれないことは、このようなルックアップを不要とすることが既に知られているためである。いくつかの実施形態では、カウンタがゼロ以外である間、シーケンシャルフェッチテーブルは、低電力モードに置かれる。例えば、シーケンシャルフェッチテーブルは、制御クロックが停止され（例えば、クロックゲーティングを介して）、電力が削減され、イネーブル信号がデアサートされる場合がある。
【００６６】
シーケンシャルフェッチロジックは、各フェッチグループがフェッチされて実行の準備がされると、カウンタをデクリメントする（ステップ１２０６）。例えば、シーケンシャルフェッチロジックは、専用カウンタレジスタ又は他のメモリ位置のカウンタの値を１つ減らすことができ、カウンタを、次に低い値又はその表現に遷移させることができる。
【００６７】
カウンタがゼロに達するまで（ステップ１２０８）、シーケンシャルフェッチロジックは、分岐予測ユニットへのアクセスを抑制し続け（ステップ１２０４）、フェッチグループがフェッチされて実行の準備がされると、カウンタをデクリメントする（ステップ１２０６）。カウンタがゼロに達した後、すなわち、特定の数のフェッチグループの最後がフェッチされて実行の準備が整った後に、１つ以上の後続のフェッチグループがフェッチされて実行の準備がされると、シーケンシャルフェッチロジックは、分岐予測情報を取得するための分岐予測ユニットへの対応するアクセスを許可する（ステップ１２１０）。言い換えると、カウンタがゼロに等しい場合、シーケンシャルフェッチロジックは、分岐ターゲットや分岐方向予測等の通常の分岐予測動作の実行を許可する。このようにして、分岐予測ユニット（及び、場合によってはシーケンシャルフェッチテーブルアクセス）への不要なアクセスを回避するために、カウントがゼロ以外の場合に、シーケンシャルフェッチロジックは、分岐予測アクセス（及び、場合によってはシーケンシャルフェッチテーブルアクセス）をブロックする。
【００６８】
（マルチスレッドプロセッサ）
いくつかの実施形態では、電子デバイス１００のプロセッサ１０２は、マルチスレッドプロセッサであり、したがって、命令実行の２つ以上の個別のスレッドをサポートする。一般に、マルチスレッドプロセッサは、個別のスレッド専用の機能ブロック及び／又はハードウェア構造を含むが、スレッド間で共有され、及び／又は、１つ以上のスレッドの各々の動作を実行する機能ブロック及び／又はハードウェア構造を含むこともできる。例えば、分岐予測ユニット及びシーケンシャルフェッチユニット等の機能ブロックは、全てのスレッドに対して、それぞれ分岐予測動作及び分岐予測ユニットアクセス抑制を実行することができる。別の例として、シーケンシャルフェッチテーブル（シーケンシャルフェッチテーブルを使用する実施形態において）は、全てのスレッド（又は、複数のスレッドのいくつかの組み合わせ）に使用される単一のシーケンシャルフェッチテーブルとして実装されてもよいし、各スレッドに対応する個別のシーケンシャルフェッチテーブルが存在するようにスレッド毎に実装されてもよい。これらの実施形態では、シーケンシャルフェッチテーブルの各々の記録は、関連付けられたスレッドについて維持され、他のスレッドのシーケンシャルフェッチテーブルに維持される記録と異なる場合がある。さらに別の例として、シーケンシャルフェッチロジックは、スレッド毎の分岐予測ユニットへのアクセスを抑制することができ、したがって、対応するスレッドの分岐予測ユニットへのアクセスを抑制するために、本明細書で説明するように使用される、スレッド毎に個別の独立したカウンタを維持することができる。
【００６９】
上記のように、いくつかの実施形態では、ＣＴＩに続けて順次フェッチされたＣＴＩを含まないフェッチグループの分岐予測ユニットへのアクセスを抑制する一方で、シーケンシャルフェッチロジックは、シーケンシャルフェッチテーブルへのアクセスを抑制し、シーケンシャルフェッチテーブルを低電力モードに置く。これらの実施形態では、複数のスレッドがシーケンシャルフェッチテーブルに依存する場合（１つのシーケンシャルフェッチテーブルを使用して２つ以上のスレッドの記録を保持する場合）、シーケンシャルフェッチテーブルは、他のスレッドを処理するためにフルパワーモード／アクティブのままである（したがって、低電力モードに移行しない）。同じことが分岐予測ユニットにも当てはまる。単一のスレッドのみが分岐予測ユニットを使用している場合、アクセスが抑制されているときに、分岐予測ユニットを低電力モードにすることができる。ただし、分岐予測ユニットが２つ以上のスレッドで使用されている場合、分岐予測ユニットを、他のスレッドを処理するためにフルパワーモード／アクティブのままにすることができる。ただし、本明細書で説明するように、個別のスレッドに対して特定のアクセスが行われない。
【００７０】
いくつかの実施形態では、電子デバイス（例えば、電子デバイス１００及び／又はその一部）は、非一時的なコンピュータ可読記憶媒体に記憶されたコード及び／又はデータを使用して、本明細書に説明される動作の一部又は全ての動作を実行する。より具体的には、電子デバイスは、説明される動作を実行する際に、コンピュータ可読記憶媒体からコード及び／又はデータを読み出して、コードを実行及び／又はデータを使用する。コンピュータ可読記憶媒体は、電子デバイスによって使用されるコード及び／又はデータを記憶する任意のデバイス、媒体、又は、これらの組み合わせであってもよい。例えば、コンピュータ可読記憶媒体は、フラッシュメモリ、ランダムアクセスメモリ（ｅＤＲＡＭ、ＲＡＭ、ＳＲＡＭ、ＤＲＡＭ、ＤＤＲ、ＤＤＲ２／ＤＤＲ３／ＤＤＲ４  ＳＤＲＡＭ等）、読み出し専用メモリ（ＲＯＭ）、及び／又は、磁気若しくは光学記憶媒体（例えば、ディスクドライブ、磁気テープ、ＣＤ、ＤＶＤ）を含む、揮発性メモリ又は不揮発性メモリを含むことができるが、これらに限定されない。
【００７１】
いくつかの実施形態では、１つ以上のハードウェアモジュールが本明細書に説明される動作を行うように構成されている。例えば、ハードウェアモジュールは、１つ以上のプロセッサ／コア／中央処理装置（ＣＰＵ）、特定用途向け集積回路（ＡＳＩＣ）チップ、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、計算ユニット、組み込みプロセッサ、グラフィックスプロセッサ（ＧＰＵ）／グラフィックスコア、パイプライン、加速処理ユニット（ＡＰＵ）、機能ブロック、システム管理ユニット、電力コントローラ、及び／又は、他のプログラマブルロジックデバイスを含むことができるが、これらに限定されない。このようなハードウェアモジュールが起動されると、ハードウェアモジュールは、一部又は全ての動作を実行する。いくつかの実施形態では、ハードウェアモジュールは、命令（プログラムコード、ファームウェア等）を実行することによって動作を実行するように構成された１つ以上の汎用回路を含む。
【００７２】
いくつかの実施形態では、本明細書で説明される構造及びメカニズムのうち一部又は全て（例えば、プロセッサ１０２、メモリ１０４、及び／又は、これらの一部）を表すデータ構造は、電子デバイスによって読み出すことができ、構造及びメカニズムを含むハードウェアを製造するために直接的又は間接的に使用することができる、データベース又は他のデータ構造を含む非一時的なコンピュータ可読記憶媒体に記憶される。例えば、データ構造は、Ｖｅｒｉｌｏｇ又はＶＨＤＬ等の高水準設計言語（ＨＤＬ）におけるハードウェア機能の動作レベルの記述又はレジスタ転送レベル（ＲＴＬ）の記述であってもよい。記述は、合成ツールによって読み出されてもよく、合成ツールは、記述を合成して、上記の構造及びメカニズムを含むハードウェアの機能を表すゲート／回路要素のリストを含むネットリストを、合成ライブラリから生成してもよい。次に、ネットリストは、配置され、ルーティングされ、マスクに適用される幾何学的形状を記述するデータセットが生成されてもよい。次いで、上記の構造及びメカニズムに対応する１つ以上の半導体回路（例えば、集積回路）を製造するために、様々な半導体製造ステップでマスクが使用されてもよい。或いは、コンピュータがアクセス可能な記憶媒体上のデータベースは、必要に応じて、ネットリスト（合成ライブラリの有無にかかわらず）若しくはデータセット、又は、グラフィックスデータシステム（ＧＤＳ）ＩＩデータであってもよい。
【００７３】
本明細書では、変数又は不特定の値（すなわち、値の特定のインスタンスを持たない、値の一般的な説明）は、Ｎ等の文字で表される。同様の文字が本説明の他の箇所で使用され得るが、本明細書で使用されるように、各ケースの変数及び不特定の値は、必ずしも同じではなく、すなわち、一般的な変数及び不特定値の一部又は全てに対して異なる変数量及び値が存在し得る。言い換えると、本説明で変数及び不特定値を表すために使用されるＮ及び任意の他の文字は、必ずしも互いに関連するわけではない。
【００７４】
「等（et cetera）」又は「等（etc.）」という表現は、本明細書で使用される場合、「及び／又は」のケース、すなわち、「等」が関連付けられているリスト内の要素の「少なくとも１つ」に相当するものを提示することを意図している。例えば、「システムは、第１の動作、第２の動作等を実行する」という文において、システムは、第１の動作、第２の動作、及び、他の動作のうち少なくとも１つを実行する。さらに、「等」に関連付けられたリスト内の要素は、一組の例の中の単なる例であり、少なくともいくつかの例は、いくつかの実施形態では現れない場合がある。
【００７５】
実施形態の上記の説明は、例示及び説明のためにのみ提示されたものである。これらは、包括的であること、又は、実施形態を開示された形態に限定することを意図していない。したがって、当業者には、多くの変更及び変形が明らかであろう。さらに、上記の開示は、実施形態を限定することを意図していない。実施形態の範囲は、添付の特許請求の範囲によって定義される。
【図１】
2022500749.tif 000003
【図２】
2022500749.tif 000004
【図３】
2022500749.tif 000005
【図４】
2022500749.tif 000006
【図５】
2022500749.tif 000007
【図６】
2022500749.tif 000008
【図７】
2022500749.tif 000009
【図８】
2022500749.tif 000010
【図９】
2022500749.tif 000011
【図１０】
2022500749.tif 000012
【図１１】
2022500749.tif 000013
【図１２】
2022500749.tif 000014
【国際調査報告】
2022500749.tif 000015
2022500749.tif 000016