(57)【要約】【課題】インストラクションストリームのループ候補を追跡する方法、装置及びプロセッサを提供する。【解決手段】ロードバッファコントロールユニットは、「後方に行う分岐」を検出し、そしてループ候補の追跡を開始する。コントロールユニットは、ループ候補の「行う分岐」を追跡し、そしてループのスタートから各「行う分岐」への距離を追跡する。各「行う分岐」への距離がループの複数の繰り返しにわたり同じままである場合には、そのループがループバッファに記憶される。次いで、ループは、ループバッファからディスパッチされ、そしてプロセッサの前端は、ループが終了するまでパワーダウンされる。【選択図】図２
2014013565.tif 000002
【特許請求の範囲】
【請求項１】
インストラクションオペレーションを記憶するよう構成されたループバッファを備え、前記インストラクションオペレーションは、装置がループバッファモードにあるのを検出するのに応答して前記ループバッファからディスパッチされるものであり、
前記ループバッファに結合されたループバッファコントロールユニットを更に備え、該ループバッファコントロールユニットは、
複数のインストラクションを含むループ候補のスタートから、前記ループ候補内の各「行う分岐」への距離を追跡し、及び
前記ループ候補のスタートから各「行う分岐」への距離が前記ループ候補の少なくとも所与の繰り返し数について不変であることを検出するのに応答して前記ループバッファモードを開始する、
ように構成された、装置。
【請求項２】
フェッチユニット及びインストラクションキャッシュを更に備え、前記装置は、前記ループバッファモードが開始されるのに応答して前記フェッチユニット及びインストラクションキャッシュの少なくとも一方をシャットダウンするように構成される、請求項１に記載の装置。
【請求項３】
前記インストラクションオペレーションは、前記装置がループバッファモードにあるときに前記ループバッファからデコードユニットへディスパッチされる、請求項１に記載の装置。
【請求項４】
前記ループ候補のスタートから各「行う分岐」への距離は、インストラクションオペレーションで測定される、請求項１に記載の装置。
【請求項５】
前記所与の繰り返し数は、スレッシュホールドより大きな繰り返し数に対応する、請求項１に記載の装置。
【請求項６】
前記スレッシュホールドは、分岐プレディクタがループ候補の終了を予想するのに必要な時間量に基づく、請求項５に記載の装置。
【請求項７】
分岐追跡テーブルを更に備え、該分岐追跡テーブルは、ループ候補の各「行う分岐」のエントリを含み、各エントリは、前記ループ候補のスタートから各「行う分岐」への距離に対応する値を含む、請求項１に記載の装置。
【請求項８】
ループバッファと、
前記ループバッファに結合されたループバッファコントロールユニットと、
を備え、前記ループバッファコントロールユニットは、
「後方に行う分岐」を検出するのに応答してループ候補を監視し、
前記ループ候補のスタートから前記ループ候補内の１つ以上のインストラクションへの１つ以上の距離を追跡し、
前記１つ以上の距離が第１の複数の検出された「行う分岐」に対して不変であることを検出するのに応答して前記ループ候補を前記ループバッファに記憶させる、
ように構成された、プロセッサ。
【請求項９】
追跡される１つ以上のインストラクションは、１つ以上の「行う分岐」である、請求項８に記載のプロセッサ。
【請求項１０】
前記ループ候補のスタートは、前記「後方に行う分岐」の後のインストラクションとして識別される、請求項８に記載のプロセッサ。
【請求項１１】
１つの「後方に行う分岐」のみがループ候補において許される、請求項８に記載のプロセッサ。
【請求項１２】
マップ・ディスパットユニットを更に備え、前記インストラクションオペレーションは、ループ候補が前記ループバッファに記憶されるときに前記ループバッファから前記マップ・ディスパットユニットへディスパッチされる、請求項８に記載のプロセッサ。
【請求項１３】
前記ループバッファコントロールユニットは、前記ループ候補のスタートから「行う分岐」への距離が前記ループ候補のその後の繰り返しにおいて変化したことを検出するのに応答して前記ループ候補の監視及び追跡を終了するよう更に構成される、請求項９に記載のプロセッサ。
【請求項１４】
前記ループバッファコントロールユニットは、前記ループ候補が前記ループバッファに適合できないことを検出するのに応答して前記ループ候補の監視及び追跡を終了するよう更に構成される、請求項８に記載のプロセッサ。
【請求項１５】
ループ終了分岐を検出し、
インストラクションオペレーションカウンタ及び繰り返しカウンタを開始し、
ループ候補の複数のインストラクションを追跡し、
前記ループ終了分岐を２度目に検出するのに応答して前記インストラクションオペレーションカウンタをループバッファのサイズと比較し、
前記ループ終了分岐を２度目に検出したときに前記インストラクションオペレーションカウンタが前記ループバッファのサイズより大きいと決定するのに応答して前記ループ候補の追跡を終了し、
前記インストラクションオペレーションカウンタが前記ループバッファのサイズより大きくないと決定するのに応答して前記ループ候補の追跡を継続し且つ前記繰り返しカウンタをインクリメントし、及び
前記繰り返しカウンタがスレッシュホールドを越えるのに応答して前記ループ候補を前記ループバッファにキャッシュする、
という段階を含む方法。
【請求項１６】
前記ループ候補のスタートから前記ループ候補の第１の繰り返し数における前記ループ候補の各「行う分岐」への距離を監視し、及び
前記ループ候補のスタートから前記ループ候補のいずれかの「行う分岐」への距離が前記ループ候補の第１の繰り返し数のいずれかにおいて変化したとの決定に応答して前記ループ候補の追跡を終了する、
という段階を更に含む請求項１５に記載の方法。
【請求項１７】
前記ループ候補を前記ループバッファにキャッシュするのに応答してフェッチユニットをシャットダウンする段階を更に含む、請求項１５に記載の方法。
【請求項１８】
前記ループ候補を前記ループバッファにキャッシュするのに応答して前記ループ候補を前記ループバッファからプロセッサパイプラインの次の段へディスパッチする段階を更に含む、請求項１５に記載の方法。
【請求項１９】
前記プロセッサパイプラインの次の段は、デコードユニットである、請求項１８に記載の方法。
【請求項２０】
前記プロセッサパイプラインの次の段は、マップ・ディスパッチユニットである、請求項１８に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般的に、プロセッサに関するもので、より詳細には、インストラクションストリーム内のループの特性を識別及び学習するための方法及びメカニズムに関する。
【背景技術】
【０００２】
近年のプロセッサは、一般的に、パイプライン形態の複数の段として構成される。典型的なパイプラインは、多くの場合に、インストラクションをフェッチし、インストラクションをデコードし、インストラクションをマッピングし、インストラクションを実行し、次いで、レジスタのような別のユニットに結果を書き込むための個別のユニットを備えている。マイクロプロセッサのインストラクションフェッチユニットは、プロセッサパイプラインの次の段へインストラクションの一定の流れを与える役割を果たす。典型的に、フェッチユニットは、パイプラインの残り部分にインストラクションを常時供給する状態に保つためにインストラクションキャッシュを使用する。フェッチユニット及びインストラクションキャッシュは、必要なファンクションを遂行する間に著しい量の電力を消費する傾向がある。近代的なマイクロプロセッサの目標は、特に、バッテリ作動装置に使用されるマイクロプロセッサの場合に、電力消費をできるだけ減少することである。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
多くのソフトウェアアプリケーションでは、特定のファンクション又はタスクを遂行するために同じソフトウェアステップが何回も繰り返される。それらの状況では、たとえ同じインストラクションループが実行され続けるとしても、フェッチユニットは、インストラクションをフェッチし電力を消費し続ける。ループを検出してループバッファにキャッシュできる場合には、フェッチユニットをシャットダウンし、ループの実行中に電力消費を減少することができる。しかしながら、ループが複数の分岐を含むときにプログラムコード内のインストラクションのループを検出して学習することは困難である。又、ループバッファにループをキャッシングする前にループが不変であるかどうか正確に決定することも課題である。
【課題を解決するための手段】
【０００４】
インストラクションストリーム内のループを検出し及び追跡する装置、プロセッサ及び方法が開示される。プロセッサパイプラインは、ループバッファ、及びループバッファコントロールユニットを備えている。ループバッファコントロールユニットは、インストラクションストリームにおいてループ終了分岐を検出する。１つの実施形態において、ループバッファコントロールユニットがループ終了分岐を検出したときに、そのコントロールユニットは、ループ終了分岐のインストラクションアドレスをラッチし、ループ検出フラグがセットされ、そしてループ繰り返しカウンタ及びｕｏｐカウンタがスタートされる。
【０００５】
同じループ終了分岐が次に検出されたときに、コントロールユニットは、ｕｏｐカウンタの値をループバッファのサイズと比較する。ｕｏｐカウンタの値がループバッファのサイズより大きい場合には、このループ候補は、ループバッファに記憶することができず、従って、ループの追跡が終了される。ｕｏｐカウンタがループバッファのサイズより小さい場合には、ループのコンテンツが、ループの複数の繰り返しについて追跡される。ループの繰り返しごとに、ループのコンテンツが繰り返し中に同じままである場合には、ループ繰り返しカウンタがインクリメントされ、ループの追跡が続けられる。
【０００６】
一実施形態において、ループの各繰り返し中にループの「行う分岐(taken branch)」が追跡される。ループのスタートから各行う分岐までの距離は、ループの第１の繰り返し中に分岐追跡テーブルに記憶され、そしてループのその後の繰り返し中に、分岐が検出されたときのｕｏｐカウンタの値が、分岐追跡テーブルに記憶された対応値と比較される。ループのスタートからループの分岐までの距離が不変である場合には、ループの追跡が続けられる。ループ繰り返しカウンタの値が所定のスレッシュホールドを越えると、ループは、ループバッファにキャッシュされる。ループは、ループバッファから読み取られ、そしてフェッチユニットは、ループが終了するまでシャットダウンされる。
【０００７】
これら及び他の特徴並びに効果は、ここに開示する解決策についての以下の詳細な説明から、当業者に明らかとなろう。
【０００８】
方法及びメカニズムの前記及び更に別の効果は、添付図面を参照した以下の詳細な説明により良く理解できるであろう。
【図面の簡単な説明】
【０００９】
【図１】集積回路の一部分の一実施形態を示す。
【図２】プロセッサコアの一実施形態を示すブロック図である。
【図３】プロセッサパイプラインの前端の一実施形態を示すブロック図である。
【図４】フェッチ及びデコードユニット内のループバッファの別の実施形態のブロック図である。
【図５】サンプルループの一実施形態である。
【図６】ループバッファコントロールユニットの一実施形態である。
【図７】ループ候補を追跡するための方法の一実施形態を示す一般化されたフローチャートである。
【図８】システムの一実施形態のブロック図である。
【図９】コンピュータ読み取り可能な媒体の一実施形態のブロック図である。
【発明を実施するための形態】
【００１０】
以下の説明において、ここに開示する方法及びメカニズムを完全に理解するために多数の特定の細部について述べる。しかしながら、当業者であれば、これらの特定の細部がなくても、種々の実施形態を具現化できることが明らかであろう。ある場合には、ここに述べる解決策を不明瞭にしないために、良く知られた構造、コンポーネント、信号、コンピュータプログラムインストラクション、及び技術は、詳細に示されていない。図示明瞭化及び簡単化のために、図示された要素は、必ずしも一定の縮尺率で描かれていない。例えば、幾つかの要素の寸法は、他の要素に対して誇張されている。
【００１１】
本明細書は、「１つの実施形態」という表現を含む。異なる文脈に「１つの実施形態において」という句が現れたとき、それは、必ずしも、同じ実施形態を指していない。本開示と一貫した適当な仕方で特定の特徴、構造又は特性を組み合わせることができる。更に、本出願全体にわたって使用される「〜してもよい(may)」という語は、許すという意味（即ち、〜の潜在性があるという意味）で使用されるもので、強制の意味（即ち、〜しなければならないという意味）ではない。同様に、「含む(include)」、「含んでいる(including)」及び「含む(includes)」という語は、含むことを意味するが、それに限定されない。
【００１２】
用語：次の段落は、本開示（特許請求の範囲を含む）に見られる用語の定義及び／又はコンテキストを与える。
【００１３】
「備える(Comprising)」：この用語は、制約のないものである(open-ended)。特許請求の範囲に使用されたときに、この用語は、付加的な構造又はステップを排除するものではない。「ループバッファコントロールユニットを備えたプロセッサ(A processor comprising a loop buffer control unit…)」という請求項について考える。このような請求項は、プロセッサを、付加的なコンポーネント（例えば、キャッシュ、フェッチユニット、実行ユニット）を含むことから除外するものではない。
【００１４】
「構成される(Configured To」：種々のユニット、回路、又は他のコンポーネントは、１つ以上のタスクを遂行するように「構成される」と記述され又は請求される。そのようなコンテキストにおいて、「構成される」は、ユニット／回路／コンポーネントが動作中に１つ以上のタスクを遂行する構造（例えば、回路）を含むことを指示することで構造を暗示するのに使用される。従って、ユニット／回路／コンポーネントは、特定のユニット／回路／コンポーネントが現在動作していなくても（例えば、オンでなくても）タスクを遂行するように構成されると言うことができる。「構成される」言語と共に使用されるユニット／回路／コンポーネントは、ハードウェア、例えば、回路、動作を具現化するために実行できるプログラムインストラクションを記憶するメモリ、等を含む。ユニット／回路／コンポーネントが１つ以上のタスクを遂行するように「構成される」との表現は、そのユニット／回路／コンポーネントに対し３５Ｕ.Ｓ.Ｃ.§１１２、第６節を引用しないことが明確に意図される。更に、「構成される」は、問題となっているタスクを遂行できる仕方で動作するようにソフトウェア及び／又はファームウェア（例えば、ＦＰＧＡ又はソフトウェアを実行する汎用プロセッサ）により操作されるジェネリック構造（例えば、ジェネリック回路）を含む。又、「構成される」は、製造プロセス（例えば、半導体製造ファシリティ）を、１つ以上のタスクを具現化又は遂行する装置（例えば、集積回路）の製造に適応させることも含む。
【００１５】
「基づく(Based On」：ここで使用されるこの用語は、決定に影響する１つ以上のファクタを記述するのに使用される。この用語は、決定に影響する付加的なファクタを排除するものではない。即ち、決定は、これらファクタのみに基づくか、又はこれらファクタに少なくとも一部分基づく。「Ｂに基づきＡを決定する(determine A based on B)」という句について考える。Ｂは、Ａの決定に影響するファクタであるが、そのような句は、Ｃに基づいてＡを決定することも排除するものではない。他の場合には、Ａは、Ｂのみに基づいて決定されてもよい。
【００１６】
図１は、集積回路（ＩＣ）の一部分の一実施形態を示すブロック図である。ここに示す実施形態では、ＩＣ１０は、プロセッサコンプレックス１２と、メモリコントローラ２２と、メモリ物理的インターフェイス回路（ＰＨＹ）２４、２６とを備えている。ＩＣ１０は、図１に示されていない多数の他のコンポーネントも含むことに注意されたい。種々の実施形態では、ＩＣ１０は、システムオンチップ（ＳｏＣ）、特定用途向け集積回路（ＡＳＩＣ）、又は装置とも称される。
【００１７】
プロセッサコンプレックス１２は、中央処理ユニット（ＣＰＵ）１４及び１６と、レベル２（Ｌ２）キャッシュ１８と、バスインターフェイスユニット（ＢＩＵ）２０とを備えている。他の実施形態では、プロセッサコンプレックス１２は、他の数のＣＰＵを含んでもよい。又、ＣＰＵ１４及び１６は、プロセッサ又はコアと称されてもよい。プロセッサコンプレックス１２は、図１に示されていない他のコンポーネントを含んでもよいことに注意されたい。
【００１８】
ＣＰＵ１４及び１６は、インストラクションセットアーキテクチャーで定義されたインストラクションを実行するための回路を含む。より詳細には、インストラクションより成る１つ以上のプログラムがＣＰＵ１４及び１６により実行される。種々の実施形態において任意のインストラクションセットアーキテクチャーを具現化することができる。例えば、１つの実施形態では、ＡＲＭTMインストラクションセットアーキテクチャー（ＩＳＡ）が具現化される。ＡＲＭインストラクションセットは、１６ビット（又はサム(Thumb)）及び３２ビットインストラクションを含む。他の規範的ＩＳＡは、ＰｏｗｅｒＰＣTMインストラクションセット、ＭＩＰＳTMインストラクションセット、ＳＰＡＲＣTMインストラクションセット、ｘ８６インストラクションセット（ＩＡ−３２とも称される）、ＩＡ−６４インストラクションセット、等を含む。
【００１９】
１つの実施形態において、ＣＰＵ１４及び１６により実行される各インストラクションは、ＰＣ値に関連している。又、読み取り及び書き込みのための幾つかのインストラクション内に１つ以上のアーキテクチャー的レジスタが指定される。これらアーキテクチャー的レジスタは、レジスタ再ネームユニットにより実際の物理的レジスタへマップされる。更に、幾つかのインストラクション（例えば、ＡＲＭサムインストラクション）は、インストラクションオペレーション（又はマイクロｏｐ）のシーケンスへと分割され、そしてそのシーケンスの各インストラクションオペレーションは、独特のマイクロｏｐ（又はｕｏｐ）番号により参照される。
【００２０】
ＣＰＵ１４及び１６の各々は、レベル１（Ｌ１）キャッシュ（図示せず）も含み、そして各Ｌ１キャッシュは、Ｌ２キャッシュ１８に結合される。他の実施形態では、付加的なキャッシュレベル（例えば、レベル３（Ｌ３）キャッシュ）が含まれる。１つの実施形態において、Ｌ２キャッシュ１８は、ＣＰＵ１４及び１６による低レイテンシーアクセスのためにインストラクション及びデータをキャッシュするように構成される。Ｌ２キャッシュ１８は、任意の容量及び構成（例えば、直接マップ、セット連想）を含む。Ｌ２キャッシュ１８は、ＢＩＵ２０を経てメモリコントローラ２２に結合される。又、ＢＩＵ２０は、ＣＰＵ１４、１６及びＬ２キャッシュ１８を種々の他の装置及びブロックに結合するために種々の他のロジック構造も含む。
【００２１】
メモリコントローラ２２は、多数のメモリポートを含み、そしてメモリにインターフェイスするように構成された回路を含む。例えば、メモリコントローラ２２は、同期ＤＲＡＭ（ＳＤＲＡＭ）、倍データレート（ＤＤＲ）ＳＤＲＡＭ、ＤＤＲ２  ＳＤＲＡＭ、ＲａｍｂｕｓＤＲＡＭ（ＲＤＲＡＭ）、等のダイナミックランダムアクセスメモリ（ＤＲＡＭ）へインターフェイスするように構成される。又、メモリコントローラ２２は、メモリ物理的インターフェイス回路（ＰＨＹ）２４及び２６にも結合される。メモリＰＨＹ２４及び２６は、メモリコントローラ２２に結合される任意の数のメモリＰＨＹを表わす。メモリＰＨＹ２４及び２６は、メモリ装置（図示せず）にインターフェイスするように構成される。
【００２２】
他の実施形態は、図１に示すコンポーネント及び／又は他のコンポーネントのサブセット又はスーパーセットを含むコンポーネントの他の組み合わせを含んでもよいことに注意されたい。所与のコンポーネントの１つのインスタンスが図１に示されているが、他の実施形態は、所与のコンポーネントの２つ以上のインスタンスを含んでもよい。同様に、この詳細な説明全体を通じて、所与のコンポーネントが１つしか示されていなくても、その２つ以上のインスタンスが含まれてもよく、及び／又は１つのインスタンスしか含まない実施形態は、複数のインスタンスが示される場合にも使用できる。
【００２３】
図２には、プロセッサコアの１つの実施形態が示されている。コア３０は、プロセッサコアの一例であり、そしてコア３０は、図１のプロセッサコンプレックス１２のようなプロセッサコンプレックス内に使用される。１つの実施形態において、図１のＣＰＵ１４、１６の各々は、コア３０のコンポーネント及びファンクションを含む。コア３０は、フェッチ・デコード（ＦＥＤ）ユニット３２と、マップ・ディスパッチユニット３６と、メモリマネージメントユニット（ＭＭＵ）４０と、コアインターフェイスユニット（ＣＩＦ）４２と、実行ユニット４４と、ロード・記憶ユニット（ＬＳＵ）４６とを備えている。コア３０は、図２には示されていない他のコンポーネント及びインターフェイスを含んでもよいことに注意されたい。
【００２４】
ＦＥＤユニット３２は、メモリからインストラクションを読み取りそしてそれをレベル１（Ｌ１）インストラクションキャッシュ３４に入れるように構成された回路を含む。Ｌ１インストラクションキャッシュ３４は、コア３０により実行されるインストラクションを記憶するためのキャッシュメモリである。Ｌ１インストラクションキャッシュ３４は、任意の容量及び構造（例えば、直接マップ、セット連想、完全連想、等）を有する。更に、Ｌ１インストラクションキャッシュ３４は、任意のキャッシュラインサイズを有する。ＦＥＤユニット３２は、分岐インストラクションを予想しそして予想した経路をフェッチダウンするように構成された分岐予想ハードウェアも含む。又、ＦＥＤユニット３２は、リダイレクトされてもよい（例えば、予想ミス、例外、割り込み、フラッシュ、等を経て）。
【００２５】
ＦＥＤユニット３２は、インストラクションをインストラクションオペレーションへデコードするように構成される。更に、ＦＥＤユニット３２は、複数のインストラクションをパラレルにデコードするようにも構成される。一般的に、インストラクションオペレーションは、実行ユニット４４及びＬＳＵ４６に含まれたハードウェアが実行できるオペレーションである。各インストラクションは、実行時に、インストラクションセットアーキテクチャーによりそのインストラクションに対して定義されたオペレーションの性能を生じる１つ以上のインストラクションオペレーションへ変換される。「インストラクションオペレーション」及び「ｕｏｐ」という語は、本開示全体にわたり交換可能に使用されることに注意されたい。他の実施形態では、ＦＥＤユニット３２内に含まれるファンクションは、フェッチユニット、デコードユニット及び／又は他のユニットのような２つ以上の個別のユニットへ分割される。
【００２６】
種々のＩＳＡにおいて、幾つかのインストラクションが単一のｕｏｐへデコードされる。ＦＥＤユニット３２は、インストラクションの形式、ソースオペランド、等を識別するように構成され、そして各デコードされたインストラクションオペレーションは、インストラクションを幾つかのデコードされた情報と共に含む。各インストラクションが単一のｕｏｐへ変換される他の実施形態では、各ｕｏｐは、単に、対応するインストラクション又はその一部分である（例えば、インストラクションの１つ以上のｏｐｃｏｄｅフィールド）。ある実施形態では、ＦＥＤユニット３２は、インストラクションのｕｏｐを発生するために回路及び／又はマイクロコードの任意の組み合わせを含む。例えば、比較的簡単なｕｏｐ発生（例えば、インストラクション当たり１つ又は２つのｕｏｐ）がハードウェアで取り扱われる一方、より広範囲のｕｏｐ発生（例えば、インストラクションに対して４つ以上のｕｏｐ）がマイクロコードで取り扱われる。
【００２７】
デコードされたｕｏｐは、マップ・ディスパッチユニット３６に与えられる。マップ・ディスパッチユニット３６は、ｕｏｐ及びアーキテクチャー的レジスタをコア３０の物理的レジスタへマップするように構成される。マップ・ディスパッチユニット３６は、ｕｏｐからのソースレジスタアドレスを、再ネームソースレジスタを識別するソースオペランド番号へマップするためにレジスタ再ネーミングを具現化する。又、マップ・ディスパッチユニット３６は、実行ユニット４４及びＬＳＵ４６内の予約ステーション（図示せず）へｕｏｐをディスパッチするようにも構成される。
【００２８】
１つの実施形態において、マップ・ディスパッチユニット３６は、リオーダーバッファ（ＲＯＢ）３８を含む。他の実施形態では、ＲＯＢ３８は、どこに配置されてもよい。ｕｏｐは、ディスパッチされる前に、ＲＯＢ３８に書き込まれる。ＲＯＢ３８は、ｕｏｐを順序正しくコミットできるまで保持するように構成される。各ｕｏｐには、ＲＯＢ３８の特定エントリに対応するＲＯＢインデックス（ＲＮＵＭ）が指定される。ＲＮＵＭは、コア３０においてフライト中のオペレーションを追跡するのに使用される。マップ・ディスパッチユニット３６は、図２には示されない他のコンポーネント（例えば、マッパーアレイ、ディスパッチユニット、ディスパッチバッファ）も備えている。更に、他の実施形態では、マップ・ディスパッチユニット３６内に含まれたファンクションは、マップユニット、ディスパッチユニット、及び／又は他のユニットのような２つ以上の個別のユニットに分割される。
【００２９】
実行ユニット４４は、任意の数及び形式の実行ユニット（例えば、整数、浮動小数点、ベクトル）を含む。各実行ユニット４４は、１つ以上の予約ステーション（図示せず）も含む。ＣＩＰ４２は、ＬＳＵ４６、ＦＥＤユニット３２、ＭＭＵ４０、及びＬ２キャッシュ（図示せず）に結合される。ＣＩＦ４２は、コア３０とＬ２キャッシュとの間のインターフェイスを管理するように構成される。ＭＭＵ４０は、アドレス変換及びメモリマネージメントファンクションを遂行するように構成される。
【００３０】
ＬＳＵ４６は、Ｌ１データキャッシュ４８、記憶キュー５０、及びロードキュー５２を備えている。マップ・ディスパッチユニット３６からＬＳＵ４６内の予約ステーションへロード及び記憶オペレーションがディスパッチされる。記憶キュー５０は、記憶オペレーションに対応するデータを記憶し、そしてロードキュー５２は、ロード動作に関連したデータを記憶する。ＬＳＵ４６は、ＣＩＦ４２を経てＬ２キャッシュにも結合される。ＬＳＵ４６は、図２に示されていない他のコンポーネント（例えば、予約ステーション、レジスタファイル、プリフェッチユニット、変換ルックアサイドバッファ）も含むことに注意されたい。
【００３１】
図２に示したファンクションの分布は、プロセッサコアに使用される唯一の考えられるマイクロアーキテクチャーではないことを理解されたい。他のプロセッサコアは、他のコンポーネントを含んでもよく、図示されたコンポーネントの１つ以上を省略してもよく、及び／又はコンポーネント間の異なるファンクション配置を含んでもよい。
【００３２】
図３は、プロセッサパイプラインの前端の一実施形態を示すブロック図である。１つの実施形態において、図３に示す前端ロジックは、（図２の）ＦＥＤユニット３２のようなフェッチ・デコードユニット内に配置される。図３に示すファンクションの分布は、プロセッサパイプライン内にループバッファを具現化する１つの考えられる構造に過ぎないことを理解されたい。ループバッファを具現化するためのロジックの他の適当な分布も考えられ、意図される。
【００３３】
フェッチ前端６０は、インストラクションをフェッチして前デコードし、次いで、その前デコードされたｕｏｐをループバッファ６２及びデコーダ７０Ａ−Ｆへ搬送する（マルチプレクサ６８を経て）ように構成される。１つの実施形態では、フェッチ前端６０は、サイクル当たり６つの前デコードされたｕｏｐを出力するように構成される。他の実施形態では、フェッチ前端６０は、サイクル当たり他の数の前デコードされたｕｏｐを出力するように構成される。
【００３４】
ループバッファ６２、マルチプレクサ６８及びデコーダ７０Ａ−Ｆは、サイクル当たり６つのｕｏｐを処理し及び／又は記憶するために６つのレーンを有する。各レーンは、それが有効ｕｏｐを含むかどうか指示するために有効ビットを含む。ループバッファ６２、マルチプレクサ６８、及びデコーダ７０Ａ−Ｆの「レーン」は、「スロット」又は「エントリ」とも称されることに注意されたい。他の実施形態では、ループバッファ６２、マルチプレクサ６８及びデコーダ７０Ａ−Ｆが、６より多くのレーン又は６より少ないレーンを有してもよく、そしてフェッチ前端６０は、パイプラインの次の段で収容されるものと同数のｕｏｐをサイクル当たり出力するように構成されてもよい。
【００３５】
フェッチ前端６０は、インストラクションをｕｏｐへと拡張しそしてそれらのｕｏｐをループバッファ６２及びマルチプレクサ６８へフィードする。１つの実施形態において、フェッチ前端６０によりフェッチされて前デコードのｕｏｐへとデコードされるインストラクションは、ＡＲＭ  ＩＳＡに基づく。各前デコードのｕｏｐは、インストラクションｏｐｃｏｄｅビット、インストラクション前デコードビット、及びｕｏｐ番号を含む。インストラクションｏｐｃｏｄｅビットは、遂行されるべきオペレーションを指定する。前デコードビットは、インストラクションがマップされるところのｕｏｐの数を指示する。ｕｏｐ数は、マルチｕｏｐインストラクションシーケンスの中のどのｕｏｐを発生すべきか表わす。他の実施形態では、他のＩＳＡが使用され、又、インストラクションは、種々の仕方でデコードされフォーマットされる。
【００３６】
プロセッサがループバッファモードにないときは、フェッチ前端６０からのｕｏｐ出力がマルチプレクサ６８を経てデコーダ７０Ａ−Ｆへ搬送される。ループバッファコントロールユニット６４からの選択信号がマルチプレクサ６８に結合されて、どの経路がマルチプレクサ６８を経てデコーダ７０Ａ−Ｆの入力に結合されるか決定する。プロセッサがループバッファモードにあるときには、ｕｏｐがループバッファ６２から読み出され、そしてデコーダ７０Ａ−Ｆへ変換される。ｕｏｐは、デコーダ７０Ａ−Ｆの出力からプロセッサパイプラインの次の段へ搬送される。１つの実施形態において、プロセッサパイプラインの次の段は、図２のマップ・ディスパッチユニット３６のようなマップ・ディスパッチユニットである。
【００３７】
ループバッファコントロールユニット６４は、フェッチ及び前デコードされたインストラクション内のループを識別するように構成される。ループがある程度の確実性で識別されると、ループがループバッファ６２にキャッシュされ、フェッチ前端６０がシャットダウンされ、次いで、プロセッサパイプラインの残り部分がループバッファ６２からフィードされる。１つの実施形態では、ループの１つの繰り返しがループバッファ６２にキャッシュされ、そしてこのキャッシュされた繰り返しは、パイプラインを下るように繰り返しディスパッチされる。別の実施形態では、ループの複数の繰り返しがループバッファ６２にキャッシュされる。
【００３８】
キャッシングのためのループを識別するために、先ず、フェッチされたインストラクション間で後方へ行う分岐が検出される。「後方へ行う分岐(backwards taken branch)」とは、インストラクションシーケンスにおいて手前のインストラクションへ分岐する「行う分岐(taken branch)」として定義される。後方へ行う分岐が進むところのインストラクションは、ループのスタートと考えられる。１つの実施形態において、バッファするための候補と考えられるのは、ある形式のループだけである。例えば、１つの実施形態では、バッファするために考えられるループ候補については、ループの全ての繰り返しが不変でなければならない。換言すれば、ループ候補は、各繰り返しに対して同じインストラクションシーケンスを実行する。更に、ループのインストラクションシーケンスにおいて間接的な「行う分岐」（例えば、ＢＸ−分岐交換、ＢＬＸ−リンクでの分岐交換）を伴うループは、バッファするために考慮すべきものから除外される。更に、ループ当たり１つの「後方へ行う分岐」しか許されない。ループにおける残りの分岐は、前方への分岐でなければならない。他の実施形態では、全ての形式のループがループ候補となるように全ての形式のループが考慮されるが、実施される唯一の基準は、ループの不変性である。例えば、ネスト状ループのようなループ候補では、２つ以上の「後方へ行う分岐」が許される。
【００３９】
ループバッファコントロールユニット６４は、ループバッファのための基準を満足するループを形成するインストラクションについてインストラクションストリームを監視する。ループバッファコントロールユニット６４は、所与のループが何に似ているかの全ての情報を捕獲する。ある期間中に、ループ候補は、そのループ候補が同じままであることを確かめるために何回もの繰り返しにわたって追跡される。例えば、ループのスタートからループ内の１つ以上のインストラクションまでの距離が、第１の繰り返しにおいて記録され、そしてその後の繰り返しにおいて監視され、それらの距離が同じままであるかどうか決定する。
【００４０】
ある実施形態では、ループ候補が不変であって上述した他の基準を満足する場合でも、ループ候補の他の特性のために、それがループバッファ６２にキャッシュされる資格を奪うことがある。例えば、ループ候補のサイズがループバッファ６２に適合するには大き過ぎる場合には、そのループ候補の資格が奪われる。又、ループ内の「行う分岐」の最大許容数は、分岐追跡テーブル６６のサイズに等しい。「行う分岐」の数がこの数値を越えた場合には、ループバッファ６２にキャッシングするための候補として考えられるものからループが除外される。１つの実施形態では、分岐追跡テーブル６６は、ループ内の「行う分岐」に対して８つのエントリを含む。他の実施形態では、分岐追跡テーブル６６は、ループ内の「行う分岐」に対するエントリが８より多くても少なくてもよい。ループ候補がループバッファ６２にキャッシュされる資格が奪われると、この資格が奪われたループ候補のための「後方へ行う分岐」のインストラクションアドレスが記録される。それ故、この「後方へ行う分岐」が再び検出された場合には、ループ追跡ロジックは、この分岐を無視し、そして新たな「後方へ行う分岐」が検出されたときだけ再スタートする。
【００４１】
１つの実施形態において、同じ「後方へ行う分岐」が２回以上検出されると、そのループの情報を捕獲するためのステートマシンがループバッファコントロールユニット６４によりスタートされる。例えば、ループバッファコントロールユニット６４は、分岐追跡テーブル６６を使用して、ループ候補の「行う分岐」を追跡する。分岐追跡テーブル６６は、ループのスタートから各「行う分岐」までの距離を追跡する。１つの実施形態では、その距離は、ｕｏｐにおいて測定される。別の実施形態では、その距離は、インストラクションにおいて測定される。他の実施形態では、その距離は、他のメトリック、及び／又は２つ以上のメトリックの組み合わせを使用して測定される。ループのスタートから各「行う分岐」までの距離を測定することは、基礎となるコードを通る経路が変化していないことを決定する１つの方法である。
【００４２】
ループのスタートから各分岐までに同じ数のｕｏｐがあるようにループの各繰り返しが実行される場合には、ループ候補が不変と考えられる。テーブル６６の各分岐までの距離は、ループ候補が不変であるとの決定の前に、ある繰り返し数について追跡され、そしてキャッシュされねばならない。ループ候補の不変性を追跡するために割り当てられる時間量は、ループ繰り返し数及び／又は遭遇した分岐数に基づく。
【００４３】
１つの実施形態において、ループ候補内で許される唯一の「行う分岐」は、同じターゲットを有する条件分岐である。この実施形態では、間接的分岐はサポートされない。というのは、間接的分岐は、ループの異なる繰り返しに対して異なるターゲットを有するからである。間接的分岐は、２つの個別の繰り返しにおいてコードを通る２つの異なる経路をとると考えられるが、ループは、依然、ループバッファコントロールユニット６４により不変であるとみなされる。これが生じるのは、たとえループが２つの個別の繰り返しにおいて２つの異なる経路を見ても、距離が同じであると考えられるからである。これは、ループが不変であるとの偽の決定を招く。これらの偽の肯定を防止するため、間接的な分岐はサポートされない。それ故、この実施形態では、ループバッファコントロールユニット６４は、各ループ繰り返しに対して同じターゲットを有するループ候補内の分岐だけを許す。
【００４４】
別の実施形態では、間接的な分岐がサポートされ、ループ候補内で許容される。この実施形態では、分岐追跡テーブル６６は、ループが不変であることを保証するために各「行う分岐」のターゲットを指示する情報も含む。ループ候補の各繰り返し中に、ターゲットが変化していないことを保証するために、ループの各分岐のターゲットが、テーブル６６に記憶された値と比較される。更に別の実施形態では、ループのコンテンツが不変であることを保証するために、分岐追跡テーブル６６に付加的な情報が含まれる。
【００４５】
１つの実施形態において、デコーダ７０Ａ−Ｆは、分岐を検出し、そしてそれをループバッファコントロールユニット６４へ知らせる。別の実施形態では、フェッチ前端６０が分岐を検出し、そして検出の指示をユニット６４へ搬送する。或いは又、更に別の実施形態では、ユニット６４は、インストラクションストリームを分岐について監視し、そしてデコーダ７０Ａ−Ｆ又はフェッチ前端６０とは独立して分岐を検出する。ユニット６４は、ループのスタートからｕｏｐの数をカウントするｕｏｐカウンタ（図示せず）を含む。ループの第１の繰り返し時に、ユニット６４は、ループにおいて分岐が検出されたときにｕｏｐカウンタの値を分岐追跡テーブル６６に書き込む。分岐が検出されるたびにテーブル６６のポインタもインクリメントされて、テーブル６６の次のエントリへ進む。ループのその後の繰り返し時に、分岐が検出されたとき、ｕｏｐカウンタの値が、テーブル６６の対応エントリの値と比較される。テーブル６６の各エントリは、各分岐に対してループのスタートからのｕｏｐの数を表わす値を含む。又、各エントリは、エントリがループの「行う分岐」に対応することを指示するために有効ビットも含む。他の実施形態では、テーブル６６の各エントリは、他の情報、例えば、分岐識別子又はタグ、分岐のターゲット及び／又は他の情報を含む。
【００４６】
１つの実施形態において、予測ミス分岐が検出されると、ループバッファコントロールユニット６４へリセット信号が搬送される。又、フェッチ前端６０にリダイレクトする後端からのイベント信号があるときに、ループバッファコントロールユニット６４は、候補検出ロジックをフラッシュし、再スタートする。これらのシナリオでは、典型的に、ユニット６４により追跡されているコードのストリームからプログラムが生じることになる。
【００４７】
ある所定期間の後に、ユニット６４は、ループ候補をループバッファ６２にキャッシュしなければならないことを決定する。所定期間の長さは、種々のファクタの１つ以上に基づく。例えば、１つの実施形態では、所定期間は、ループの繰り返し数によって測定される。ループが不変である間の繰り返し数がスレッシュホールドより多い場合には、ループがループバッファ６２にキャッシュされる。或いは又、期間は、検出された「行う分岐」の数に基づいてもよい。例えば、ループ候補が８つの「行う分岐」を含む場合には、４０のそのような分岐のカウントを使用して、特定の繰り返し数（この例では、５）が生じたことを指示する。１つの実施形態では、所定期間は、ループの終了を予測するに足る時間を分岐プレディクタに与えることに基づく。そのような繰り返しを追跡する多数の方法が考えられ、意図される。
【００４８】
図４には、フェッチ・デコードユニット内のループバッファの別の実施形態が示されている。１つの実施形態において、ループバッファ８４は、図４に示すように、プロセッサパイプラインにおいてデコーダ８２Ａ−Ｆの下流に配置される。これは、プロセッサパイプラインにおいてデコーダ７０Ａ−Ｆの前に配置されたループバッファ６２（図３）と対照的である。フェッチ前端８０は、インストラクションをフェッチし、そしてそのフェッチしたインストラクションを、前デコードされたｕｏｐへ前デコードする。次いで、前デコードされたｕｏｐは、デコーダ８２Ａ−Ｆへ搬送される。１つの実施形態において、フェッチ前端８０は、サイクル当たり６つの前デコードされたｕｏｐを発生して、デコーダ８２Ａ−Ｆの６つのレーンに搬送するように構成される。
【００４９】
デコーダ８２Ａ−Ｆは、前デコードされたｕｏｐをデコードされたｕｏｐへデコードする。次いで、デコーダ８２Ａ−Ｆは、デコードされたｕｏｐを、マルチプレクサ９０を経て、プロセッサパイプラインの次の段へ搬送する。又、デコーダ８２Ａ−Ｆは、ループ候補が識別されて、ループバッファ８４へキャッシュされるための基準を満足したときに、ｕｏｐをループバッファ８４へ搬送する。マルチプレクサ９０の出力は、プロセッサパイプラインの次の段へ結合される。１つの実施形態において、プロセッサパイプラインの次の段は、マップ・ディスパッチユニットである。
【００５０】
ループバッファ８４、ループバッファコントロールユニット８６及び分岐追跡テーブル８８は、図３に示すプロセッサ前端に関して説明したものと同様のファンクションを遂行するように構成される。図４における１つの重要な相違は、図３においてループバッファ６２が前デコードされたｕｏｐを記憶するのに対して、ループバッファ８４がデコードされたｕｏｐを記憶することである。それ故、ループバッファ８４は、多量のデータを収容するためにループバッファ６２よりサイズが大きい。というのは、デコードされたｕｏｐは、典型的に、前デコードされたｕｏｐより多くの情報を有するからである。ループバッファ８４は、図３及び４に示した２つの位置に加えて、プロセッサパイプライン内の他の位置にも配置できることに注意されたい。例えば、ループバッファ８４は、フェッチ前端内に配置されてもよいし、或いはループバッファ８４は、マップ・ディスパッチユニット内に配置されてもよい。ループバッファがパイプラインのどこに配置されるかに基づき、ループバッファに記憶されるループのコンテンツは、パイプラインのその点で遂行されたインストラクション処理量に基づいて変化する。
【００５１】
１つの実施形態において、ループ候補の最初の繰り返しでは、ループバッファコントロールユニット８６は、ループのスタートからループの各「行う分岐」までの距離で分岐追跡テーブル８８をポピュレートする。ループのその後の繰り返しで、コントロールユニット８６は、各分岐が、ループのスタートから、テーブル８８に記憶された対応距離と同じ距離であるかどうか決定する。ループ候補が、ある数の繰り返しに対して不変であった後に、そのループ候補は、ループバッファ８４にキャッシュされ、そしてループバッファ８４からパイプラインの残り部分へフィードされる。フェッチ前端８０及びデコーダ８２Ａ−Ｆは、ループがループバッファ８４からプロセッサパイプラインの残り部分へディスパッチされる間にパワーダウンされる。
【００５２】
図５には、規範的ループの１つの実施形態が示されている。図５に示すループ１００のプログラムコードは、説明上使用されるものであることに注意されたい。他のループは、他の数のインストラクション及び分岐で、異なる構造にされてもよい。
【００５３】
ループ１００は、インストラクションアドレス０００１においてインストラクション１０２で開始される。インストラクション１０２の後にインストラクション１０４が続き、これらのインストラクションは、ＩＳＡで定義された任意の形式の非分岐インストラクションである。分岐１０６は、インストラクション１０４に従い、そして分岐１０６は、インストラクションアドレス００２５へ分岐する前方分岐である。
【００５４】
テーブル１２０に示すように、インストラクション１０２、１０４及び分岐１０６は、各々、単一のｕｏｐへクラックされる。これは、単に説明上のものであり、プログラム又はループ内のインストラクションは、任意の数のｕｏｐに対応し、そしてテーブル１２０に示す例は、説明上のものに過ぎない。インストラクション当たりのｕｏｐを示すテーブル１２０は、プロセッサパイプラインにより使用又は記憶されるテーブルではなく、説明上、図５に示されていることに注意されたい。
【００５５】
分岐１０６は、ループ１００において遭遇する第１の前方分岐であり、ループ１００のスタートからのｕｏｐの数は、分岐追跡テーブル１３０に入力される。それ故、各々１つのｕｏｐのみをもつ２つのインストラクションに基づき、分岐追跡テーブル１３０に記憶された第１の値は、２である。分岐１０６は、インストラクションアドレス００２５へジャンプし、これは、インストラクション１０８に対応する。インストラクション１０８は、任意の形式の非分岐インストラクションである。次いで、インストラクション１０８の後に、別の前方分岐、このケースでは、分岐インストラクション１１０が実行される。テーブル１２０において明らかなように、インストラクション１０８は、３つのｕｏｐへとクラックされる。それ故、分岐追跡テーブル１３０の第２エントリに書き込まれる値は、ループのスタートから分岐１１０までのｕｏｐの数として６である。
【００５６】
分岐１１０は、インストラクションアドレス００７７においてインストラクション１１２へジャンプする。インストラクション１１２には、インストラクション１１４が続き、次いで、分岐１１６が続く。分岐１１６は、「後方に行う分岐」であり、インストラクションシーケンスにおいて手前のアドレスへ分岐して戻る。インストラクション１１２は、テーブル１２０に示すように、２つのｕｏｐへとクラックし、そしてインストラクション１１４は、４つのｕｏｐへとクラックする。それ故、ループのスタートから分岐１１６へのｕｏｐでの距離は、１３であり、この値は、分岐追跡テーブル１３０の第３エントリに記憶される。
【００５７】
分岐１１６が初めて検出されたとき、これは、ループバッファコントロールユニット内のステートマシンをトリガーし、ループ１００をループバッファ候補として追跡し始める。ループバッファコントロールユニットは、ループ１００におけるｕｏｐの数、及びループ１００における分岐の数を決定する。これらの値の両方が、ループハードウェアによりサポートされるスレッシュホールドより小さい場合には、分岐追跡テーブル１３０は、ループ１００の次の繰り返しにおいてポピュレートされる。或いは又、分岐追跡テーブル１３０は、分岐１１６を検出した後にループ１００の第１の繰り返しにおいてポピュレートされる。ループ１００がループ候補についてループハードウェアにより要求される全ての基準を満足しない場合には、ループ追跡が中止される。ループ１００が全ての基準を満足する場合には、ループ１００のその後の繰り返しにおいて、分岐に遭遇したとき、テーブル１３０の対応値が読み出され、ループのスタートからのｕｏｐでの距離と比較される。
【００５８】
他のループでは、テーブル１３０は、ループにおける分岐の数に基づいて他の数の有効エントリを含むことに注意されたい。又、他の実施形態では、分岐追跡テーブル１３０に記憶される距離は、ｕｏｐに加えて、他の値で測定されてもよいことにも注意されたい。例えば、別の実施形態では、テーブル１３０に記憶される距離は、インストラクションで測定されてもよい。更に、他の実施形態では、分岐追跡テーブル１３０は、各エントリに他の情報フィールドを含んでもよい。例えば、エントリがループ候補における分岐に対応しそして有効な距離を含むかどうか指示するためにエントリごとに有効ビットがあってもよい。テーブル１３０及びループ１００について図５に示す例では、最初の３つのエントリだけが‘１’にセットされた有効ビットを有し、他のエントリにおける有効ビットの残りは、‘０’にセットされる。更に、他の実施形態では、分岐ターゲットアドレスが各エントリに記憶される。
【００５９】
図６は、ループバッファコントロールユニット１４０の１つの実施形態のブロック図である。このユニット１４０は、現在ＢＴＢインストラクションの「後方に行う分岐」（ＢＴＢ）インストラクションアドレスをラッチ１４４からのインストラクションアドレスと比較する。ラッチ１４４は、最も最近遭遇したＢＲＢインストラクションアドレスを保持し、それが現在ＢＴＢインストラクションアドレスと比較される。ラッチ１４４及び比較器１４２は、「後方に行う分岐」（ＢＴＢ）が検出されたことを指示する信号を受信する。又、ラッチ１４４及び比較器１４２は、検出されたＢＴＢのインストラクションアドレスも受け取る。ラッチ１４４は、最も最近の「後方に行う分岐」（ＢＴＢ）のアドレスのインストラクションを記憶する。次いで、ＢＴＢが次に検出されたときに、ＢＴＢのインストラクションアドレスが、ラッチ１４４に記憶された手前のＢＴＢのインストラクションアドレスと比較される。或いは又、別の実施形態では、ラッチ１４４は、レジスタ又は他のメモリユニットである。比較器１４２は、インストラクションストリームにおいてループが検出されたとの指示を与える。
【００６０】
１つの実施形態において、比較器１４２は、２つの出力、即ち等価性を指示する第１の出力と、非等価性を指示する第２の出力を有する。等価性を指示する第１の出力は、検出開始フラグ１４６、ＯＲゲート１６０、及び繰り返しカウンタ１５０に結合される。比較器１４２からの等価性出力は、ＢＴＢが検出されたこと及びＢＴＢが行において少なくとも２回送信されたことを指示する１つ以上のクロックサイクルのパルスである。比較器１４２からの等価性出力は、繰り返しカウンタ１５０をインクリメントし、そして繰り返しカウンタ１５０は、インストラクションストリームにおいて検出されたループ繰り返し数のカウントを与える。この実施形態では、行において同じＢＴＢに２回遭遇し、それらの間に他のＢＴＢがない場合には、これは、ループ候補に遭遇したことを指示する。それ故、ループ追跡回路は、ループ候補について更なる学習をスタートする。
【００６１】
非等価性を指示する比較器１４２からの第２の出力は、ＯＲゲート１６２に結合される。ＯＲゲート１６２の出力は、検出開始フラグ１４６をリセットするように結合される。比較器１４２からの第２の出力は、現在検出されたＢＴＢが以前に検出されたＢＴＢとは異なるものであるときに高となる。これは、この実施形態の場合、以前のＢＴＢがループ候補の部分でなかったことを指示する。図６には示されていないが、比較器１４２からの第２の出力は、ループ検出がリセットされたことを指示するために他の位置にも結合される。
【００６２】
ｕｏｐカウンタ１４８は、ループ候補のスタート以来検出されたｕｏｐの数を追跡するように構成される。検出されたｕｏｐの数を指示する１つ以上の信号が、ｕｏｐカウンタ１４８に結合される。ｕｏｐカウンタ１４８へのこれら入力は、フェッチされ及び／又はデコードされたｕｏｐの数を指示する。１つの実施形態では、信号は、フェッチユニットから到来する。１つの実施形態では、フェッチユニットがクロック当たり６つのデコードされたｕｏｐを出力する場合に、ｕｏｐカウンタ１４８に結合される高入力は、ｕｏｐカウンタ１４８がそのカウントを６だけインクリメントするようにさせる。別の実施形態では、これらの信号は、デコーダユニットからｕｏｐカウンタ１４８へ結合される。
【００６３】
又、ｕｏｐカウンタ１４８は、分岐に対応する特定のｕｏｐに対してｕｏｐの数を決定するための他のロジックも含む。分岐に遭遇したとき、ｕｏｐカウンタ１４８は、ｕｏｐが位置していたレーンを指示する入力も受け取る。次いで、ｕｏｐカウンタ１４８は、最も最近のサイクルのどれほど多くのｕｏｐが分岐ｕｏｐの前方にあったか決定する。このように、ｕｏｐカウンタ１４８は、検出された分岐に対応する特定の分岐ｕｏｐに対してループのスタートからのｕｏｐ数の正確なカウントを発生する。ｕｏｐカウンタ１４８は、ＢＴＢが検出された場合（ループの終わりを意味する）、プロセッサの後端から予測ミス又はフラッシュがシグナリングされる場合、又は分岐距離において非等価性が検出されたことを比較器１５２が信号する場合に、リセットされる。
【００６４】
繰り返しカウンタ１５０は、フェッチ及び／又はデコードされたループの繰り返し数を追跡するように構成される。繰り返しカウンタ１５０は、プロセッサの後端から予測ミス又はフラッシュがシグナリングされる場合、又はループの分岐の１つへの距離が分岐追跡テーブル（図示せず）の記憶値とは異なる場合に、リセットされる。これは、検出された分岐に対する現在ｕｏｐカウンタ値が分岐追跡テーブル（ＢＴＴ）に記憶された対応値に等しくない場合に非等価性を指示する信号を発生する比較器１５２によって指示される。比較器１５２は、分岐検出信号と、ループの現在分岐に対するＢＴＴからの値とを受け取る。比較器１５２は、ＢＴＴの値を現在ｕｏｐカウンタ値と比較し、そしてこの比較の結果を出力する。比較結果が非等価性である場合には、ループ検出ロジックがリセットされる。
【００６５】
１つの実施形態において、比較器１５４は、繰り返しカウンタ１５０の出力をスレッシュホールド１５６と比較するように構成される。繰り返しカウンタ１５０がスレッシュホールド１５６に一致するか又はそれを越えると、比較器１５４は、プロセッサのためのループバッファモードを開始する信号を出力する。この実施形態では、ループ候補は、ループバッファモードが開始される前に複数の繰り返しにわたって追跡され、そして追跡に必要な繰り返しの数がスレッシュホールド１５６により指示される。種々の実施形態では、スレッシュホールド１５６は、プログラム可能な値である。１つの実施形態では、スレッシュホールドの値は、プロセッサの分岐予測メカニズムがループの終わりを検出するのに必要な時間又はサイクル数に基づく。ある実施形態では、分岐予想メカニズムは、プロセッサがループバッファモードにある間にシャットダウンされる。
【００６６】
別の実施形態では、分岐の数がカウントされ、そして分岐の数がスレッシュホールドに到達すると、ループバッファモードが開始される。例えば、ループが５つの分岐を有し、分岐スレッシュホールドが４０である場合には、ループ候補は、分岐スレッシュホールドに到達するのに８つの繰り返しを必要とする。他の実施形態では、ループバッファモードを開始する前にどれほど長時間ループ候補を追跡するか決定する別の方法が使用される。例えば、別の実施形態では、ある数の分岐又はある数の繰り返しに到達した場合に、プロセッサがループバッファモードに入る。
【００６７】
ユニット１４０は、検出されたＢＴＢ、検出されたｕｏｐの数、及び検出された分岐のような種々の信号を受信するものとして示されているが、別の実施形態では、ユニット１４０は、プロセッサパイプラインを横断するｕｏｐを監視することによりこれらの信号を内部で発生することができる。又、図６に示すファンクションの分布は、プロセッサパイプライン内にループバッファコントロールユニット具現化するためのロジックの唯一の考えられる分布ではないことを理解されたい。他の実施形態は、他のコンポーネント及びロジックを含み、そしてそれらコンポーネント及びロジックの適当な分布を有する。更に、個々のコンポーネントの各々は、実施形態に基づいて異なる仕方で構成される１つ以上の同様のコンポーネントと置き換えられる。例えば、図６に示す実施形態では、ループ候補内で許されるのは、１つの「後方に行う分岐」だけである。しかしながら、他の実施形態では、ループ候補が２つ以上の「後方に行う分岐」を含み、そしてループバッファコントロールユニットのロジックが適宜に変更されてもよい。
【００６８】
図７には、ループ候補を追跡するための方法の１つの実施形態が示されている。説明上、この実施形態のステップは、逐次の順序で示されている。以下に述べる方法の種々の実施形態において、ここに述べる要素の１つ以上は、同時に遂行されてもよいし、図示されたものとは異なる順序で遂行されてもよいし、又は完全に省略されてもよいことに注意されたい。必要に応じて、他の付加的な要素が遂行されてもよい。
【００６９】
１つの実施形態では、ループ終了分岐がプロセッサパイプラインにおいて検出される（ブロック１７２）。種々の実施形態において、ループ終了分岐とは、サブルーチンコールを除外する直接的な「後方に行う分岐」として定義される。種々の実施形態において、ループ終了分岐は、プロセッサパイプラインのフェッチ段、デコーダ段、又は別の段において検出される。ループ終了分岐ｕｏｐは、考えられるループバッファ候補の終わりとして識別されるようにマークされる。
【００７０】
ループ終了分岐を検出するのに応答して、ループ終了分岐のインストラクションアドレスがループバッファコントロールユニットにラッチされ、検出開始フラグがセットされ、繰り返しカウンタが開始され、そしてｕｏｐカウンタが開始される（ブロック１７４）。繰り返しカウンタを使用して、ループの繰り返し数が追跡される。又、ある実施形態では、ループ候補の全ての繰り返しにおいて検出された分岐の数を追跡するために分岐カウンタがスタートされる。繰り返しカウンタの値及び／又は分岐カウンタの値を使用して、ループバッファモードをいつ開始すべきか決定する。ループバッファモードが開始されると、ループバッファにおいてループ候補がキャッシュされ、そしてフェッチ前端がシャットダウンされる。ｕｏｐカウンタは、ループ候補内で検出される各分岐までの距離（ｕｏｐの数）を決定するのに使用される。
【００７１】
１つの実施形態において、ｕｏｐカウンタにより維持されるカウントは、フェッチ及びデコード段の部分として発生される空きスロット(vacant slot)を含むことに注意されたい。この実施形態では、説明上、フェッチユニットがサイクル当たり６個のｕｏｐを出力するように構成されると仮定する。あるクロックサイクルについては、フェッチユニットは、色々な理由で全６個のｕｏｐ出力を発生しない。それ故、デコーダユニットへ送られるｕｏｐの行は、有効ｕｏｐの全行を含まない。ｕｏｐカウンタは、これを考慮し、そしてたとえ行が６個の有効ｕｏｐを含んでいなくても行ごとに６をカウントする。例えば、ループは、６行のｕｏｐを含み、そしてループ終了分岐は、発生されたｕｏｐの第６サイクルの最後の行の最後のスロットである。ｕｏｐカウンタは、たとえ１つ以上の行に含まれる有効ｕｏｐが６未満であっても、６つのサイクルに対してループが３６ｕｏｐを有することをカウントする。例えば、中間行は、２つの有効ｕｏｐしか含まず、そしてその行の残りの４スロットは、空である。それ故、ループは、３２個の有効ｕｏｐを含むが、ループカウンタは、ループが３６個のｕｏｐを含むことをカウントする。一般的に述べると、この実施形態では、ｕｏｐカウンタは、たとえ幾つかのスロットが有効なｕｏｐを含まなくてもループ候補を記憶するためにループバッファにどれほど多くのスロットが必要であるか追跡する。
【００７２】
カウンタ及び付加的な追跡ロジックを設定した後に、ループ候補が実行され、追跡される（ブロック１７６）。１つの実施形態では、ループ候補の追跡は、ループ候補において分岐を検出し、そして分岐追跡テーブルをループのスタートから各検出された分岐までの距離でポピュレーションすることを含む（ブロック１７８）。次いで、ループ候補の終わりにループ終了分岐が検出される（ブロック１８０）。ループ終了分岐が以前に検出された同じ分岐である場合には（条件ブロック１８２）、繰り返しカウンタがインクリメントされる（ブロック１８６）。
【００７３】
ループ終了分岐が以前に検出された同じ分岐でない場合には（条件ブロック１８２）、ループ候補の追跡が停止され、そしてカウンタ、ラッチ、検出開始フラグ及び分岐追跡テーブルがリセットされる（ブロック１８４）。又、ループ候補の追跡は、除外されたインストラクションがループにおいて検出された場合に終了される。ブロック１８４の後に、方法１７０は、リセットされ、そしてループ終了分岐が検出されるのを待機する（ブロック１７２）。
【００７４】
ブロック１８６の後に、ｕｏｐカウンタがループバッファのサイズと比較され（条件ブロック１８８）、ループ候補がループバッファに適合するかどうか決定する。或いは又、別の実施形態では、方法１７０のこれらのステップが順序付けし直されてもよい。例えば、ループ終了分岐を検出する（ブロック１８０）前に、ｕｏｐカウンタがループバッファのサイズを越えると決定された場合には（条件ブロック１８８）、ループ検出が打ち消される。
【００７５】
ｕｏｐカウンタがループバッファのサイズより小さい場合には（条件ブロック１８８）、ループ候補がループバッファに適合し、従って、次の条件がチェックされ、即ちループ候補における分岐の数が分岐追跡テーブル（ＢＴＴ）のサイズより小さいかどうかチェックされる（条件ブロック１９０）。ｕｏｐカウンタがループバッファのサイズより大きい場合には（条件ブロック１８８）、ループ候補は、ループバッファに適合するには大き過ぎ、追跡は終了される。方法１７０は、ブロック１８４へ戻り、カウンタ、ラッチ、検出開始フラグ、及び分岐追跡テーブルがリセットされる。
【００７６】
ループ候補における分岐の数がＢＴＴのサイズより小さい場合には（条件ブロック１９０）、ループ候補が依然考慮され、ｕｏｐカウンタが再スタートされる（ブロック１９２）。次いで、ループの別の繰り返しが実行され追跡される（ブロック１９４）。ループの繰り返しを追跡することは、「行う分岐」と、ループのスタートから各「行う分岐」までのｕｏｐの数とを監視することを含む。ループのスタートから各「行う分岐」までの距離は、分岐追跡テーブルに記憶された値と比較される。
【００７７】
ループの繰り返しが完了すると、ループ終了分岐を検出しなければならず、それが同じループ終了分岐であるかどうか決定される（条件ブロック１９６）。或いは又、ループ終了分岐が検出されない場合には、ｕｏｐカウンタ及び分岐追跡テーブルの最後のエントリを監視し、そしてループ終了分岐が既に検出されていなければならないと決定することにより、ループ追跡が終了される。ループ終了分岐が検出されそしてそれが同じループ終了分岐である場合には（条件ブロック１９６）、ループのこの繰り返しに対してループコンテンツが不変であるかどうか決定する（条件ブロック１９８）。
【００７８】
或いは又、条件ブロック１９８は、あるシナリオでは条件ブロック１９６の前にチェックされる。例えば、ループの分岐の１つが、ループのスタートから、分岐追跡テーブルに記憶された値と同じ距離にない場合には、ループ終了分岐を検出する前にループコンテンツが変化したと決定される。このケースでは、ループの追跡は、同じループ終了分岐を検出する前に終了される。
【００７９】
ループのこの繰り返しに対してループコンテンツが不変である場合には（条件分岐１９８）、これは、同じループが実行されていることを指示し、次いで、繰り返しカウンタがインクリメントされる（ブロック２００）。次いで、繰り返しカウンタがスレッシュホールドより上であるかどうか決定され、ループをバッファするに充分な時間ループが追跡されたかどうか決定する（条件ブロック２０２）。或いは又、別の実施形態では、分岐カウンタをスレッシュホールドと比較して、プロセッサがループバッファモードに入るべきであるかどうか決定する。
【００８０】
繰り返しカウンタがスレッシュホールドより下である場合には（条件ブロック２０２）、方法１７０は、ｕｏｐカウンタを再スタートさせる（ブロック１９２）。繰り返しカウンタがスレッシュホールドより上である場合には（条件ブロック２０２）、プロセッサがループバッファモードに入り、そしてループは、ループバッファにキャッシュされる（ブロック２０４）。ブロック２０４の後に、方法１７０が終了となる。この時点で、プロセッサの前端がターンオフされ、そしてｕｏｐがループバッファからディスパッチされる。ループが終了となると、プロセッサは、ループバッファモードを退出する信号を搬送し、プロセッサの前端が再びターンオンされる。この時点で、方法１７０が再スタートされ、そしてループバッファコントロールユニットは、ループ終了分岐についてインストラクションストリームを監視することに戻る（ブロック１７２）。
【００８１】
図８は、システム２１０の１つの実施形態のブロック図である。図示されたように、システム２１０は、デスクトップコンピュータ２２０、ラップトップコンピュータ２３０、タブレットコンピュータ２４０、セルラーホン２５０、等のチップ、回路、コンポーネント、等を表わす。ここに示す実施形態では、システム２１０は、外部メモリ２１２に結合されたＩＣ１０（図１）の少なくとも１つのインスタンスを含む。
【００８２】
ＩＣ１０は、１つ以上の周辺装置２１４及び外部メモリ２１２に結合される。又、電源２１６も設けられ、これは、ＩＣ１０に供給電圧を、そしてメモリ２１２及び／又は周辺装置２１４に１つ以上の供給電圧を供給する。種々の実施形態において、電源２１６は、バッテリを表わす（例えば、スマートホン、ラップトップ又はタブレットコンピュータにおける充電型バッテリ）。ある実施形態では、ＩＣ１０の２つ以上のインスタンスが含まれる（及び２つ以上の外部メモリ２１２も含まれる）。
【００８３】
メモリ２１２は、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、同期ＤＲＡＭ（ＳＤＲＡＭ）、倍データレート（ＤＤＲ、ＤＤＲ２、ＤＤＲ３、等）ＳＤＲＡＭ（ｍＤＤＲ３等のＳＤＲＡＭの移動バージョン、及び／又はＬＰＤＤＲ２等のＳＤＲＡＭの低電力バージョンを含む）、ＲＡＭＢＵＳ  ＤＲＡＭ（ＲＤＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、等の任意の形式のメモリである。１つ以上のメモリ装置が回路板に結合されて、シングルインラインメモリモジュール（ＳＩＭＭ）、デュアルインラインメモリモジュール（ＤＩＭＭ）、等のメモリモジュールを形成する。
【００８４】
周辺装置２１４は、システム２１０の形式に基づいて望ましい回路を含む。例えば、一実施形態では、周辺装置２１４は、ｗｉｆｉ、Ｂｌｕｅｔｏｏｔｈ（登録商標）、セルラー、グローバルポジショニングシステム、等の、種々の形式のワイヤレス通信のための装置を含む。又、周辺装置２１４は、ＲＡＭ記憶装置、ソリッドステート記憶装置、又はディスク記憶装置を含む付加的な記憶装置も含む。又、周辺装置２１４は、タッチディスプレイスクリーン又はマルチタッチディスプレイスクリーンを含むディスプレイスクリーン、キーボード又は他の入力装置、マイクロホン、スピーカ、等のユーザインターフェイス装置を含む。
【００８５】
図９は、ＩＣ１０（図１）に含まれる回路を表わす１つ以上のデータ構造体を含むコンピュータ読み取り可能な媒体２６０のブロック図の一実施形態である。一般的に述べると、コンピュータ読み取り可能な媒体２６０は、磁気又は光学媒体のような非一時的記憶媒体、例えば、ディスク、ＣＤ−ＲＯＭ、又はＤＶＤ−ＲＯＭ；ＲＡＭ（例えば、ＳＤＲＡＭ、ＲＤＲＡＭ、ＳＲＡＭ、等）の揮発性又は不揮発性メモリ；並びに送信媒体を経てアクセス可能な媒体、或いはネットワーク及び／又はワイヤレスリンクのような通信媒体を経て搬送される電気、電磁又はデジタル信号のような信号を含む。
【００８６】
一般的に、コンピュータ読み取り可能な媒体２６０上の回路のデータ構造は、回路を含むハードウェアを製造するためにプログラムにより読み取られて直接的又は間接的に使用される。例えば、データ構造は、Ｖｅｒｉｌｏｇ又はＶＨＤＬのような高レベル設計言語（ＨＤＬ）におけるハードウェア機能の１つ以上の挙動レベル記述又はレジスタ転送レベル（ＲＴＬ）記述を含む。これらの記述は、合成ライブラリからのゲートのリストを含む１つ以上のネットリストを発生するように記述を合成する合成ツールによって読み取られる。ネットリストは、回路を構成するハードウェアのファンクションも表わすゲートのセットを備えている。次いで、ネットリストは、マスクに適用される幾何学的形状を記述する１つ以上のデータセットを発生するように配置されルーティングされる。マスクは、その回路に対応する１つ以上の半導体回路を製造するために種々の半導体製造段階に使用される。或いは又、コンピュータ読み取り可能な媒体２３０のデータ構造は、必要に応じて、ネットリスト（合成ライブラリがあったりなかったりする）でもよいし、データセットでもよい。更に別の実施形態では、データ構造は、スキマティックプログラムの出力、或いはそこから導出されるネットリスト又はデータセットを含む。
【００８７】
コンピュータ読み取り可能な媒体２６０は、ＩＣ１０の表現を含むが、他の実施形態では、ＩＣ１０の任意の部分（例えば、ループバッファ、ループバッファコントロールユニット）又は部分の組み合わせの表現を含む。
【００８８】
以上に述べた実施形態は、非限定の具現化例に過ぎないことを強調しておく。当業者であれば、前記開示が完全に理解されれば、多数の変更や修正が明らかとなろう。そのような変更や修正は、全て、特許請求の範囲に包含されるものとする。
【符号の説明】
【００８９】
１０：集積回路（ＩＣ）
１２：プロセッサコンプレックス
１４、１６：ＣＰＵ
１８：レベル２（Ｌ２）キャッシュ
２０：バスインターフェイスユニット（ＢＩＵ）
２２：メモリコントローラ
２４、２６：メモリ物理的インターフェイス回路（ＰＨＹ）
３０：コア
３２：フェッチ・デコード（ＦＥＤ）ユニット
３４：レベル１（Ｌ１）インストラクションキャッシュ
３５：ループバッファ
３６：マップ・ディスパッチユニット
３８：リオーダーバッファ（ＲＯＢ）
４０：メモリマネージメントユニット（ＭＭＵ）
４２：コアインターフェイスユニット（ＣＩＦ）
４４：実行ユニット
４６：ロード・記憶ユニット（ＬＳＵ）
４８：Ｌ１データキャッシュ
５０：記憶キュー
５２：ロードキュー
２１２：外部メモリ
２１４：周辺装置
２１６：電源
２６０：コンピュータ読み取り可能な媒体
【図１】
2014013565.tif 000003
【図２】
2014013565.tif 000004
【図３】
2014013565.tif 000005
【図４】
2014013565.tif 000006
【図５】
2014013565.tif 000007
【図６】
2014013565.tif 000008
【図７】
2014013565.tif 000009
【図８】
2014013565.tif 000010
【図９】
2014013565.tif 000011
【外国語明細書】
2014013565000001.pdf