(58)【調査した分野】(Int.Cl.,DB名)
インストラクションオペレーションを記憶するよう構成されたループバッファを備え、前記インストラクションオペレーションは、装置がループバッファモードにあるのを検出するのに応答して前記ループバッファからディスパッチされるものであり、
前記ループバッファに結合されたループバッファコントロールユニットを更に備え、該ループバッファコントロールユニットは、
ループ候補のスタートであるインストラクションへの「後方に行う分岐」を含むループ終了分岐を最初に検出することに応答して、ループ候補を識別し、
前記ループ終了分岐の識別子を記憶し、
前記ループ終了分岐を二度目に検出し、
前記ループ候補が無視されるべきループ候補として以前に識別されていない場合には、
前記ループバッファにおいて前記ループ候補のインストラクションを記憶し、
ループ候補のスタートから、前記ループ候補内の各直接的な「行う分岐」へ実行される複数のインストラクションを追跡し、及び
前記ループ候補のスタートから各直接的な「行う分岐」への実行される複数のインストラクションが前記ループ候補の少なくとも所与の繰り返し数について不変であることを検出するのに応答して前記ループバッファモードを開始する、
ように構成され、所定のループ候補が不適格であると決定することに応答して、前記ループバッファコントロールユニットは、所定のループ候補が無視されるべきであることの指示を記憶するように構成された、装置。
フェッチユニット及びインストラクションキャッシュを更に備え、前記装置は、前記ループバッファモードが開始されるのに応答して前記フェッチユニット及びインストラクションキャッシュの少なくとも一方をシャットダウンするように構成される、請求項1に記載の装置。
前記インストラクションオペレーションは、前記装置がループバッファモードにあるときに前記ループバッファからデコードユニットへディスパッチされる、請求項1に記載の装置。
マップ・ディスパッチユニットを更に備え、インストラクションオペレーションは、ループ候補が前記ループバッファに記憶されるときに前記ループバッファから前記マップ・ディスパッチユニットへディスパッチされる、請求項8に記載のプロセッサ。
前記ループバッファコントロールユニットは、前記ループ候補のスタートから「行う分岐」への複数のインストラクションが前記ループ候補のその後の繰り返しにおいて変化したことを検出するのに応答して前記ループ候補の監視及び追跡を終了するよう更に構成される、請求項9に記載のプロセッサ。
前記ループバッファコントロールユニットは、前記ループ候補が前記ループバッファに適合できないことを検出するのに応答して前記ループ候補の監視及び追跡を終了するよう更に構成される、請求項8に記載のプロセッサ。
前記ループ候補を前記ループバッファにキャッシュするのに応答して前記ループ候補を前記ループバッファからプロセッサパイプラインの次の段へディスパッチする段階を更に含む、請求項15に記載の方法。
【発明を実施するための形態】
【0010】
以下の説明において、ここに開示する方法及びメカニズムを完全に理解するために多数の特定の細部について述べる。しかしながら、当業者であれば、これらの特定の細部がなくても、種々の実施形態を具現化できることが明らかであろう。ある場合には、ここに述べる解決策を不明瞭にしないために、良く知られた構造、コンポーネント、信号、コンピュータプログラムインストラクション、及び技術は、詳細に示されていない。図示明瞭化及び簡単化のために、図示された要素は、必ずしも一定の縮尺率で描かれていない。例えば、幾つかの要素の寸法は、他の要素に対して誇張されている。
【0011】
本明細書は、「1つの実施形態」という表現を含む。異なる文脈に「1つの実施形態において」という句が現れたとき、それは、必ずしも、同じ実施形態を指していない。本開示と一貫した適当な仕方で特定の特徴、構造又は特性を組み合わせることができる。更に、本出願全体にわたって使用される「〜してもよい(may)」という語は、許すという意味(即ち、〜の潜在性があるという意味)で使用されるもので、強制の意味(即ち、〜しなければならないという意味)ではない。同様に、「含む(include)」、「含んでいる(including)」及び「含む(includes)」という語は、含むことを意味するが、それに限定されない。
【0012】
用語:次の段落は、本開示(特許請求の範囲を含む)に見られる用語の定義及び/又はコンテキストを与える。
【0013】
「備える(Comprising)」:この用語は、制約のないものである(open-ended)。特許請求の範囲に使用されたときに、この用語は、付加的な構造又はステップを排除するものではない。「ループバッファコントロールユニットを備えたプロセッサ(A processor comprising a loop buffer control unit…)」という請求項について考える。このような請求項は、プロセッサを、付加的なコンポーネント(例えば、キャッシュ、フェッチユニット、実行ユニット)を含むことから除外するものではない。
【0014】
「構成される(Configured To」:種々のユニット、回路、又は他のコンポーネントは、1つ以上のタスクを遂行するように「構成される」と記述され又は請求される。そのようなコンテキストにおいて、「構成される」は、ユニット/回路/コンポーネントが動作中に1つ以上のタスクを遂行する構造(例えば、回路)を含むことを指示することで構造を暗示するのに使用される。従って、ユニット/回路/コンポーネントは、特定のユニット/回路/コンポーネントが現在動作していなくても(例えば、オンでなくても)タスクを遂行するように構成されると言うことができる。「構成される」言語と共に使用されるユニット/回路/コンポーネントは、ハードウェア、例えば、回路、動作を具現化するために実行できるプログラムインストラクションを記憶するメモリ、等を含む。ユニット/回路/コンポーネントが1つ以上のタスクを遂行するように「構成される」との表現は、そのユニット/回路/コンポーネントに対し35U.S.C.§112、第6節を引用しないことが明確に意図される。更に、「構成される」は、問題となっているタスクを遂行できる仕方で動作するようにソフトウェア及び/又はファームウェア(例えば、FPGA又はソフトウェアを実行する汎用プロセッサ)により操作されるジェネリック構造(例えば、ジェネリック回路)を含む。又、「構成される」は、製造プロセス(例えば、半導体製造ファシリティ)を、1つ以上のタスクを具現化又は遂行する装置(例えば、集積回路)の製造に適応させることも含む。
【0015】
「基づく(Based On」:ここで使用されるこの用語は、決定に影響する1つ以上のファクタを記述するのに使用される。この用語は、決定に影響する付加的なファクタを排除するものではない。即ち、決定は、これらファクタのみに基づくか、又はこれらファクタに少なくとも一部分基づく。「Bに基づきAを決定する(determine A based on B)」という句について考える。Bは、Aの決定に影響するファクタであるが、そのような句は、Cに基づいてAを決定することも排除するものではない。他の場合には、Aは、Bのみに基づいて決定されてもよい。
【0016】
図1は、集積回路(IC)の一部分の一実施形態を示すブロック図である。ここに示す実施形態では、IC10は、プロセッサコンプレックス12と、メモリコントローラ22と、メモリ物理的インターフェイス回路(PHY)24、26とを備えている。IC10は、
図1に示されていない多数の他のコンポーネントも含むことに注意されたい。種々の実施形態では、IC10は、システムオンチップ(SoC)、特定用途向け集積回路(ASIC)、又は装置とも称される。
【0017】
プロセッサコンプレックス12は、中央処理ユニット(CPU)14及び16と、レベル2(L2)キャッシュ18と、バスインターフェイスユニット(BIU)20とを備えている。他の実施形態では、プロセッサコンプレックス12は、他の数のCPUを含んでもよい。又、CPU14及び16は、プロセッサ又はコアと称されてもよい。プロセッサコンプレックス12は、
図1に示されていない他のコンポーネントを含んでもよいことに注意されたい。
【0018】
CPU14及び16は、インストラクションセットアーキテクチャーで定義されたインストラクションを実行するための回路を含む。より詳細には、インストラクションより成る1つ以上のプログラムがCPU14及び16により実行される。種々の実施形態において任意のインストラクションセットアーキテクチャーを具現化することができる。例えば、1つの実施形態では、ARM
TMインストラクションセットアーキテクチャー(ISA)が具現化される。ARMインストラクションセットは、16ビット(又はサム(Thumb))及び32ビットインストラクションを含む。他の規範的ISAは、PowerPC
TMインストラクションセット、MIPS
TMインストラクションセット、SPARC
TMインストラクションセット、x86インストラクションセット(IA−32とも称される)、IA−64インストラクションセット、等を含む。
【0019】
1つの実施形態において、CPU14及び16により実行される各インストラクションは、PC値に関連している。又、読み取り及び書き込みのための幾つかのインストラクション内に1つ以上のアーキテクチャー的レジスタが指定される。これらアーキテクチャー的レジスタは、レジスタ再ネームユニットにより実際の物理的レジスタへマップされる。更に、幾つかのインストラクション(例えば、ARMサムインストラクション)は、インストラクションオペレーション(又はマイクロop)のシーケンスへと分割され、そしてそのシーケンスの各インストラクションオペレーションは、独特のマイクロop(又はuop)番号により参照される。
【0020】
CPU14及び16の各々は、レベル1(L1)キャッシュ(図示せず)も含み、そして各L1キャッシュは、L2キャッシュ18に結合される。他の実施形態では、付加的なキャッシュレベル(例えば、レベル3(L3)キャッシュ)が含まれる。1つの実施形態において、L2キャッシュ18は、CPU14及び16による低レイテンシーアクセスのためにインストラクション及びデータをキャッシュするように構成される。L2キャッシュ18は、任意の容量及び構成(例えば、直接マップ、セット連想)を含む。L2キャッシュ18は、BIU20を経てメモリコントローラ22に結合される。又、BIU20は、CPU14、16及びL2キャッシュ18を種々の他の装置及びブロックに結合するために種々の他のロジック構造も含む。
【0021】
メモリコントローラ22は、多数のメモリポートを含み、そしてメモリにインターフェイスするように構成された回路を含む。例えば、メモリコントローラ22は、同期DRAM(SDRAM)、倍データレート(DDR)SDRAM、DDR2 SDRAM、RambusDRAM(RDRAM)、等のダイナミックランダムアクセスメモリ(DRAM)へインターフェイスするように構成される。又、メモリコントローラ22は、メモリ物理的インターフェイス回路(PHY)24及び26にも結合される。メモリPHY24及び26は、メモリコントローラ22に結合される任意の数のメモリPHYを表わす。メモリPHY24及び26は、メモリ装置(図示せず)にインターフェイスするように構成される。
【0022】
他の実施形態は、
図1に示すコンポーネント及び/又は他のコンポーネントのサブセット又はスーパーセットを含むコンポーネントの他の組み合わせを含んでもよいことに注意されたい。所与のコンポーネントの1つのインスタンスが
図1に示されているが、他の実施形態は、所与のコンポーネントの2つ以上のインスタンスを含んでもよい。同様に、この詳細な説明全体を通じて、所与のコンポーネントが1つしか示されていなくても、その2つ以上のインスタンスが含まれてもよく、及び/又は1つのインスタンスしか含まない実施形態は、複数のインスタンスが示される場合にも使用できる。
【0023】
図2には、プロセッサコアの1つの実施形態が示されている。コア30は、プロセッサコアの一例であり、そしてコア30は、
図1のプロセッサコンプレックス12のようなプロセッサコンプレックス内に使用される。1つの実施形態において、
図1のCPU14、16の各々は、コア30のコンポーネント及びファンクションを含む。コア30は、フェッチ・デコード(FED)ユニット32と、マップ・ディスパッチユニット36と、メモリマネージメントユニット(MMU)40と、コアインターフェイスユニット(CIF)42と、実行ユニット44と、ロード・記憶ユニット(LSU)46とを備えている。コア30は、
図2には示されていない他のコンポーネント及びインターフェイスを含んでもよいことに注意されたい。
【0024】
FEDユニット32は、メモリからインストラクションを読み取りそしてそれをレベル1(L1)インストラクションキャッシュ34に入れるように構成された回路を含む。L1インストラクションキャッシュ34は、コア30により実行されるインストラクションを記憶するためのキャッシュメモリである。L1インストラクションキャッシュ34は、任意の容量及び構造(例えば、直接マップ、セット連想、完全連想、等)を有する。更に、L1インストラクションキャッシュ34は、任意のキャッシュラインサイズを有する。FEDユニット32は、分岐インストラクションを予想しそして予想した経路をフェッチダウンするように構成された分岐予想ハードウェアも含む。又、FEDユニット32は、リダイレクトされてもよい(例えば、予想ミス、例外、割り込み、フラッシュ、等を経て)。
【0025】
FEDユニット32は、インストラクションをインストラクションオペレーションへデコードするように構成される。更に、FEDユニット32は、複数のインストラクションをパラレルにデコードするようにも構成される。一般的に、インストラクションオペレーションは、実行ユニット44及びLSU46に含まれたハードウェアが実行できるオペレーションである。各インストラクションは、実行時に、インストラクションセットアーキテクチャーによりそのインストラクションに対して定義されたオペレーションの性能を生じる1つ以上のインストラクションオペレーションへ変換される。「インストラクションオペレーション」及び「uop」という語は、本開示全体にわたり交換可能に使用されることに注意されたい。他の実施形態では、FEDユニット32内に含まれるファンクションは、フェッチユニット、デコードユニット及び/又は他のユニットのような2つ以上の個別のユニットへ分割される。
【0026】
種々のISAにおいて、幾つかのインストラクションが単一のuopへデコードされる。FEDユニット32は、インストラクションの形式、ソースオペランド、等を識別するように構成され、そして各デコードされたインストラクションオペレーションは、インストラクションを幾つかのデコードされた情報と共に含む。各インストラクションが単一のuopへ変換される他の実施形態では、各uopは、単に、対応するインストラクション又はその一部分である(例えば、インストラクションの1つ以上のopcodeフィールド)。ある実施形態では、FEDユニット32は、インストラクションのuopを発生するために回路及び/又はマイクロコードの任意の組み合わせを含む。例えば、比較的簡単なuop発生(例えば、インストラクション当たり1つ又は2つのuop)がハードウェアで取り扱われる一方、より広範囲のuop発生(例えば、インストラクションに対して4つ以上のuop)がマイクロコードで取り扱われる。
【0027】
デコードされたuopは、マップ・ディスパッチユニット36に与えられる。マップ・ディスパッチユニット36は、uop及びアーキテクチャー的レジスタをコア30の物理的レジスタへマップするように構成される。マップ・ディスパッチユニット36は、uopからのソースレジスタアドレスを、再ネームソースレジスタを識別するソースオペランド番号へマップするためにレジスタ再ネーミングを具現化する。又、マップ・ディスパッチユニット36は、実行ユニット44及びLSU46内の予約ステーション(図示せず)へuopをディスパッチするようにも構成される。
【0028】
1つの実施形態において、マップ・ディスパッチユニット36は、リオーダーバッファ(ROB)38を含む。他の実施形態では、ROB38は、どこに配置されてもよい。uopは、ディスパッチされる前に、ROB38に書き込まれる。ROB38は、uopを順序正しくコミットできるまで保持するように構成される。各uopには、ROB38の特定エントリに対応するROBインデックス(RNUM)が指定される。RNUMは、コア30においてフライト中のオペレーションを追跡するのに使用される。マップ・ディスパッチユニット36は、
図2には示されない他のコンポーネント(例えば、マッパーアレイ、ディスパッチユニット、ディスパッチバッファ)も備えている。更に、他の実施形態では、マップ・ディスパッチユニット36内に含まれたファンクションは、マップユニット、ディスパッチユニット、及び/又は他のユニットのような2つ以上の個別のユニットに分割される。
【0029】
実行ユニット44は、任意の数及び形式の実行ユニット(例えば、整数、浮動小数点、ベクトル)を含む。各実行ユニット44は、1つ以上の予約ステーション(図示せず)も含む。CIP42は、LSU46、FEDユニット32、MMU40、及びL2キャッシュ(図示せず)に結合される。CIF42は、コア30とL2キャッシュとの間のインターフェイスを管理するように構成される。MMU40は、アドレス変換及びメモリマネージメントファンクションを遂行するように構成される。
【0030】
LSU46は、L1データキャッシュ48、記憶キュー50、及びロードキュー52を備えている。マップ・ディスパッチユニット36からLSU46内の予約ステーションへロード及び記憶オペレーションがディスパッチされる。記憶キュー50は、記憶オペレーションに対応するデータを記憶し、そしてロードキュー52は、ロード動作に関連したデータを記憶する。LSU46は、CIF42を経てL2キャッシュにも結合される。LSU46は、
図2に示されていない他のコンポーネント(例えば、予約ステーション、レジスタファイル、プリフェッチユニット、変換ルックアサイドバッファ)も含むことに注意されたい。
【0031】
図2に示したファンクションの分布は、プロセッサコアに使用される唯一の考えられるマイクロアーキテクチャーではないことを理解されたい。他のプロセッサコアは、他のコンポーネントを含んでもよく、図示されたコンポーネントの1つ以上を省略してもよく、及び/又はコンポーネント間の異なるファンクション配置を含んでもよい。
【0032】
図3は、プロセッサパイプラインの前端の一実施形態を示すブロック図である。1つの実施形態において、
図3に示す前端ロジックは、(
図2の)FEDユニット32のようなフェッチ・デコードユニット内に配置される。
図3に示すファンクションの分布は、プロセッサパイプライン内にループバッファを具現化する1つの考えられる構造に過ぎないことを理解されたい。ループバッファを具現化するためのロジックの他の適当な分布も考えられ、意図される。
【0033】
フェッチ前端60は、インストラクションをフェッチして前デコードし、次いで、その前デコードされたuopをループバッファ62及びデコーダ70A−Fへ搬送する(マルチプレクサ68を経て)ように構成される。1つの実施形態では、フェッチ前端60は、サイクル当たり6つの前デコードされたuopを出力するように構成される。他の実施形態では、フェッチ前端60は、サイクル当たり他の数の前デコードされたuopを出力するように構成される。
【0034】
ループバッファ62、マルチプレクサ68及びデコーダ70A−Fは、サイクル当たり6つのuopを処理し及び/又は記憶するために6つのレーンを有する。各レーンは、それが有効uopを含むかどうか指示するために有効ビットを含む。ループバッファ62、マルチプレクサ68、及びデコーダ70A−Fの「レーン」は、「スロット」又は「エントリ」とも称されることに注意されたい。他の実施形態では、ループバッファ62、マルチプレクサ68及びデコーダ70A−Fが、6より多くのレーン又は6より少ないレーンを有してもよく、そしてフェッチ前端60は、パイプラインの次の段で収容されるものと同数のuopをサイクル当たり出力するように構成されてもよい。
【0035】
フェッチ前端60は、インストラクションをuopへと拡張しそしてそれらのuopをループバッファ62及びマルチプレクサ68へフィードする。1つの実施形態において、フェッチ前端60によりフェッチされて前デコードのuopへとデコードされるインストラクションは、ARM ISAに基づく。各前デコードのuopは、インストラクションopcodeビット、インストラクション前デコードビット、及びuop番号を含む。インストラクションopcodeビットは、遂行されるべきオペレーションを指定する。前デコードビットは、インストラクションがマップされるところのuopの数を指示する。uop数は、マルチuopインストラクションシーケンスの中のどのuopを発生すべきか表わす。他の実施形態では、他のISAが使用され、又、インストラクションは、種々の仕方でデコードされフォーマットされる。
【0036】
プロセッサがループバッファモードにないときは、フェッチ前端60からのuop出力がマルチプレクサ68を経てデコーダ70A−Fへ搬送される。ループバッファコントロールユニット64からの選択信号がマルチプレクサ68に結合されて、どの経路がマルチプレクサ68を経てデコーダ70A−Fの入力に結合されるか決定する。プロセッサがループバッファモードにあるときには、uopがループバッファ62から読み出され、そしてデコーダ70A−Fへ変換される。uopは、デコーダ70A−Fの出力からプロセッサパイプラインの次の段へ搬送される。1つの実施形態において、プロセッサパイプラインの次の段は、
図2のマップ・ディスパッチユニット36のようなマップ・ディスパッチユニットである。
【0037】
ループバッファコントロールユニット64は、フェッチ及び前デコードされたインストラクション内のループを識別するように構成される。ループがある程度の確実性で識別されると、ループがループバッファ62にキャッシュされ、フェッチ前端60がシャットダウンされ、次いで、プロセッサパイプラインの残り部分がループバッファ62からフィードされる。1つの実施形態では、ループの1つの繰り返しがループバッファ62にキャッシュされ、そしてこのキャッシュされた繰り返しは、パイプラインを下るように繰り返しディスパッチされる。別の実施形態では、ループの複数の繰り返しがループバッファ62にキャッシュされる。
【0038】
キャッシングのためのループを識別するために、先ず、フェッチされたインストラクション間で後方へ行う分岐が検出される。「後方へ行う分岐(backwards taken branch)」とは、インストラクションシーケンスにおいて手前のインストラクションへ分岐する「行う分岐(taken branch)」として定義される。後方へ行う分岐が進むところのインストラクションは、ループのスタートと考えられる。1つの実施形態において、バッファするための候補と考えられるのは、ある形式のループだけである。例えば、1つの実施形態では、バッファするために考えられるループ候補については、ループの全ての繰り返しが不変でなければならない。換言すれば、ループ候補は、各繰り返しに対して同じインストラクションシーケンスを実行する。更に、ループのインストラクションシーケンスにおいて間接的な「行う分岐」(例えば、BX−分岐交換、BLX−リンクでの分岐交換)を伴うループは、バッファするために考慮すべきものから除外される。更に、ループ当たり1つの「後方へ行う分岐」しか許されない。ループにおける残りの分岐は、前方への分岐でなければならない。他の実施形態では、全ての形式のループがループ候補となるように全ての形式のループが考慮されるが、実施される唯一の基準は、ループの不変性である。例えば、ネスト状ループのようなループ候補では、2つ以上の「後方へ行う分岐」が許される。
【0039】
ループバッファコントロールユニット64は、ループバッファのための基準を満足するループを形成するインストラクションについてインストラクションストリームを監視する。ループバッファコントロールユニット64は、所与のループが何に似ているかの全ての情報を捕獲する。ある期間中に、ループ候補は、そのループ候補が同じままであることを確かめるために何回もの繰り返しにわたって追跡される。例えば、ループのスタートからループ内の1つ以上のインストラクションまでの距離が、第1の繰り返しにおいて記録され、そしてその後の繰り返しにおいて監視され、それらの距離が同じままであるかどうか決定する。
【0040】
ある実施形態では、ループ候補が不変であって上述した他の基準を満足する場合でも、ループ候補の他の特性のために、それがループバッファ62にキャッシュされる資格を奪うことがある。例えば、ループ候補のサイズがループバッファ62に適合するには大き過ぎる場合には、そのループ候補の資格が奪われる。又、ループ内の「行う分岐」の最大許容数は、分岐追跡テーブル66のサイズに等しい。「行う分岐」の数がこの数値を越えた場合には、ループバッファ62にキャッシングするための候補として考えられるものからループが除外される。1つの実施形態では、分岐追跡テーブル66は、ループ内の「行う分岐」に対して8つのエントリを含む。他の実施形態では、分岐追跡テーブル66は、ループ内の「行う分岐」に対するエントリが8より多くても少なくてもよい。ループ候補がループバッファ62にキャッシュされる資格が奪われると、この資格が奪われたループ候補のための「後方へ行う分岐」のインストラクションアドレスが記録される。それ故、この「後方へ行う分岐」が再び検出された場合には、ループ追跡ロジックは、この分岐を無視し、そして新たな「後方へ行う分岐」が検出されたときだけ再スタートする。
【0041】
1つの実施形態において、同じ「後方へ行う分岐」が2回以上検出されると、そのループの情報を捕獲するためのステートマシンがループバッファコントロールユニット64によりスタートされる。例えば、ループバッファコントロールユニット64は、分岐追跡テーブル66を使用して、ループ候補の「行う分岐」を追跡する。分岐追跡テーブル66は、ループのスタートから各「行う分岐」までの距離を追跡する。1つの実施形態では、その距離は、uopにおいて測定される。別の実施形態では、その距離は、インストラクションにおいて測定される。他の実施形態では、その距離は、他のメトリック、及び/又は2つ以上のメトリックの組み合わせを使用して測定される。ループのスタートから各「行う分岐」までの距離を測定することは、基礎となるコードを通る経路が変化していないことを決定する1つの方法である。
【0042】
ループのスタートから各分岐までに同じ数のuopがあるようにループの各繰り返しが実行される場合には、ループ候補が不変と考えられる。テーブル66の各分岐までの距離は、ループ候補が不変であるとの決定の前に、ある繰り返し数について追跡され、そしてキャッシュされねばならない。ループ候補の不変性を追跡するために割り当てられる時間量は、ループ繰り返し数及び/又は遭遇した分岐数に基づく。
【0043】
1つの実施形態において、ループ候補内で許される唯一の「行う分岐」は、同じターゲットを有する条件分岐である。この実施形態では、間接的分岐はサポートされない。というのは、間接的分岐は、ループの異なる繰り返しに対して異なるターゲットを有するからである。間接的分岐は、2つの個別の繰り返しにおいてコードを通る2つの異なる経路をとると考えられるが、ループは、依然、ループバッファコントロールユニット64により不変であるとみなされる。これが生じるのは、たとえループが2つの個別の繰り返しにおいて2つの異なる経路を見ても、距離が同じであると考えられるからである。これは、ループが不変であるとの偽の決定を招く。これらの偽の肯定を防止するため、間接的な分岐はサポートされない。それ故、この実施形態では、ループバッファコントロールユニット64は、各ループ繰り返しに対して同じターゲットを有するループ候補内の分岐だけを許す。
【0044】
別の実施形態では、間接的な分岐がサポートされ、ループ候補内で許容される。この実施形態では、分岐追跡テーブル66は、ループが不変であることを保証するために各「行う分岐」のターゲットを指示する情報も含む。ループ候補の各繰り返し中に、ターゲットが変化していないことを保証するために、ループの各分岐のターゲットが、テーブル66に記憶された値と比較される。更に別の実施形態では、ループのコンテンツが不変であることを保証するために、分岐追跡テーブル66に付加的な情報が含まれる。
【0045】
1つの実施形態において、デコーダ70A−Fは、分岐を検出し、そしてそれをループバッファコントロールユニット64へ知らせる。別の実施形態では、フェッチ前端60が分岐を検出し、そして検出の指示をユニット64へ搬送する。或いは又、更に別の実施形態では、ユニット64は、インストラクションストリームを分岐について監視し、そしてデコーダ70A−F又はフェッチ前端60とは独立して分岐を検出する。ユニット64は、ループのスタートからuopの数をカウントするuopカウンタ(図示せず)を含む。ループの第1の繰り返し時に、ユニット64は、ループにおいて分岐が検出されたときにuopカウンタの値を分岐追跡テーブル66に書き込む。分岐が検出されるたびにテーブル66のポインタもインクリメントされて、テーブル66の次のエントリへ進む。ループのその後の繰り返し時に、分岐が検出されたとき、uopカウンタの値が、テーブル66の対応エントリの値と比較される。テーブル66の各エントリは、各分岐に対してループのスタートからのuopの数を表わす値を含む。又、各エントリは、エントリがループの「行う分岐」に対応することを指示するために有効ビットも含む。他の実施形態では、テーブル66の各エントリは、他の情報、例えば、分岐識別子又はタグ、分岐のターゲット及び/又は他の情報を含む。
【0046】
1つの実施形態において、予測ミス分岐が検出されると、ループバッファコントロールユニット64へリセット信号が搬送される。又、フェッチ前端60にリダイレクトする後端からのイベント信号があるときに、ループバッファコントロールユニット64は、候補検出ロジックをフラッシュし、再スタートする。これらのシナリオでは、典型的に、ユニット64により追跡されているコードのストリームからプログラムが生じることになる。
【0047】
ある所定期間の後に、ユニット64は、ループ候補をループバッファ62にキャッシュしなければならないことを決定する。所定期間の長さは、種々のファクタの1つ以上に基づく。例えば、1つの実施形態では、所定期間は、ループの繰り返し数によって測定される。ループが不変である間の繰り返し数がスレッシュホールドより多い場合には、ループがループバッファ62にキャッシュされる。或いは又、期間は、検出された「行う分岐」の数に基づいてもよい。例えば、ループ候補が8つの「行う分岐」を含む場合には、40のそのような分岐のカウントを使用して、特定の繰り返し数(この例では、5)が生じたことを指示する。1つの実施形態では、所定期間は、ループの終了を予測するに足る時間を分岐プレディクタに与えることに基づく。そのような繰り返しを追跡する多数の方法が考えられ、意図される。
【0048】
図4には、フェッチ・デコードユニット内のループバッファの別の実施形態が示されている。1つの実施形態において、ループバッファ84は、
図4に示すように、プロセッサパイプラインにおいてデコーダ82A−Fの下流に配置される。これは、プロセッサパイプラインにおいてデコーダ70A−Fの前に配置されたループバッファ62(
図3)と対照的である。フェッチ前端80は、インストラクションをフェッチし、そしてそのフェッチしたインストラクションを、前デコードされたuopへ前デコードする。次いで、前デコードされたuopは、デコーダ82A−Fへ搬送される。1つの実施形態において、フェッチ前端80は、サイクル当たり6つの前デコードされたuopを発生して、デコーダ82A−Fの6つのレーンに搬送するように構成される。
【0049】
デコーダ82A−Fは、前デコードされたuopをデコードされたuopへデコードする。次いで、デコーダ82A−Fは、デコードされたuopを、マルチプレクサ90を経て、プロセッサパイプラインの次の段へ搬送する。又、デコーダ82A−Fは、ループ候補が識別されて、ループバッファ84へキャッシュされるための基準を満足したときに、uopをループバッファ84へ搬送する。マルチプレクサ90の出力は、プロセッサパイプラインの次の段へ結合される。1つの実施形態において、プロセッサパイプラインの次の段は、マップ・ディスパッチユニットである。
【0050】
ループバッファ84、ループバッファコントロールユニット86及び分岐追跡テーブル88は、
図3に示すプロセッサ前端に関して説明したものと同様のファンクションを遂行するように構成される。
図4における1つの重要な相違は、
図3においてループバッファ62が前デコードされたuopを記憶するのに対して、ループバッファ84がデコードされたuopを記憶することである。それ故、ループバッファ84は、多量のデータを収容するためにループバッファ62よりサイズが大きい。というのは、デコードされたuopは、典型的に、前デコードされたuopより多くの情報を有するからである。ループバッファ84は、
図3及び4に示した2つの位置に加えて、プロセッサパイプライン内の他の位置にも配置できることに注意されたい。例えば、ループバッファ84は、フェッチ前端内に配置されてもよいし、或いはループバッファ84は、マップ・ディスパッチユニット内に配置されてもよい。ループバッファがパイプラインのどこに配置されるかに基づき、ループバッファに記憶されるループのコンテンツは、パイプラインのその点で遂行されたインストラクション処理量に基づいて変化する。
【0051】
1つの実施形態において、ループ候補の最初の繰り返しでは、ループバッファコントロールユニット86は、ループのスタートからループの各「行う分岐」までの距離で分岐追跡テーブル88をポピュレートする。ループのその後の繰り返しで、コントロールユニット86は、各分岐が、ループのスタートから、テーブル88に記憶された対応距離と同じ距離であるかどうか決定する。ループ候補が、ある数の繰り返しに対して不変であった後に、そのループ候補は、ループバッファ84にキャッシュされ、そしてループバッファ84からパイプラインの残り部分へフィードされる。フェッチ前端80及びデコーダ82A−Fは、ループがループバッファ84からプロセッサパイプラインの残り部分へディスパッチされる間にパワーダウンされる。
【0052】
図5には、規範的ループの1つの実施形態が示されている。
図5に示すループ100のプログラムコードは、説明上使用されるものであることに注意されたい。他のループは、他の数のインストラクション及び分岐で、異なる構造にされてもよい。
【0053】
ループ100は、インストラクションアドレス0001においてインストラクション102で開始される。インストラクション102の後にインストラクション104が続き、これらのインストラクションは、ISAで定義された任意の形式の非分岐インストラクションである。分岐106は、インストラクション104に従い、そして分岐106は、インストラクションアドレス0025へ分岐する前方分岐である。
【0054】
テーブル120に示すように、インストラクション102、104及び分岐106は、各々、単一のuopへクラックされる。これは、単に説明上のものであり、プログラム又はループ内のインストラクションは、任意の数のuopに対応し、そしてテーブル120に示す例は、説明上のものに過ぎない。インストラクション当たりのuopを示すテーブル120は、プロセッサパイプラインにより使用又は記憶されるテーブルではなく、説明上、
図5に示されていることに注意されたい。
【0055】
分岐106は、ループ100において遭遇する第1の前方分岐であり、ループ100のスタートからのuopの数は、分岐追跡テーブル130に入力される。それ故、各々1つのuopのみをもつ2つのインストラクションに基づき、分岐追跡テーブル130に記憶された第1の値は、2である。分岐106は、インストラクションアドレス0025へジャンプし、これは、インストラクション108に対応する。インストラクション108は、任意の形式の非分岐インストラクションである。次いで、インストラクション108の後に、別の前方分岐、このケースでは、分岐インストラクション110が実行される。テーブル120において明らかなように、インストラクション108は、3つのuopへとクラックされる。それ故、分岐追跡テーブル130の第2エントリに書き込まれる値は、ループのスタートから分岐110までのuopの数として6である。
【0056】
分岐110は、インストラクションアドレス0077においてインストラクション112へジャンプする。インストラクション112には、インストラクション114が続き、次いで、分岐116が続く。分岐116は、「後方に行う分岐」であり、インストラクションシーケンスにおいて手前のアドレスへ分岐して戻る。インストラクション112は、テーブル120に示すように、2つのuopへとクラックし、そしてインストラクション114は、4つのuopへとクラックする。それ故、ループのスタートから分岐116へのuopでの距離は、13であり、この値は、分岐追跡テーブル130の第3エントリに記憶される。
【0057】
分岐116が初めて検出されたとき、これは、ループバッファコントロールユニット内のステートマシンをトリガーし、ループ100をループバッファ候補として追跡し始める。ループバッファコントロールユニットは、ループ100におけるuopの数、及びループ100における分岐の数を決定する。これらの値の両方が、ループハードウェアによりサポートされるスレッシュホールドより小さい場合には、分岐追跡テーブル130は、ループ100の次の繰り返しにおいてポピュレートされる。或いは又、分岐追跡テーブル130は、分岐116を検出した後にループ100の第1の繰り返しにおいてポピュレートされる。ループ100がループ候補についてループハードウェアにより要求される全ての基準を満足しない場合には、ループ追跡が中止される。ループ100が全ての基準を満足する場合には、ループ100のその後の繰り返しにおいて、分岐に遭遇したとき、テーブル130の対応値が読み出され、ループのスタートからのuopでの距離と比較される。
【0058】
他のループでは、テーブル130は、ループにおける分岐の数に基づいて他の数の有効エントリを含むことに注意されたい。又、他の実施形態では、分岐追跡テーブル130に記憶される距離は、uopに加えて、他の値で測定されてもよいことにも注意されたい。例えば、別の実施形態では、テーブル130に記憶される距離は、インストラクションで測定されてもよい。更に、他の実施形態では、分岐追跡テーブル130は、各エントリに他の情報フィールドを含んでもよい。例えば、エントリがループ候補における分岐に対応しそして有効な距離を含むかどうか指示するためにエントリごとに有効ビットがあってもよい。テーブル130及びループ100について
図5に示す例では、最初の3つのエントリだけが‘1’にセットされた有効ビットを有し、他のエントリにおける有効ビットの残りは、‘0’にセットされる。更に、他の実施形態では、分岐ターゲットアドレスが各エントリに記憶される。
【0059】
図6は、ループバッファコントロールユニット140の1つの実施形態のブロック図である。このユニット140は、現在BTBインストラクションの「後方に行う分岐」(BTB)インストラクションアドレスをラッチ144からのインストラクションアドレスと比較する。ラッチ144は、最も最近遭遇したBRBインストラクションアドレスを保持し、それが現在BTBインストラクションアドレスと比較される。ラッチ144及び比較器142は、「後方に行う分岐」(BTB)が検出されたことを指示する信号を受信する。又、ラッチ144及び比較器142は、検出されたBTBのインストラクションアドレスも受け取る。ラッチ144は、最も最近の「後方に行う分岐」(BTB)のアドレスのインストラクションを記憶する。次いで、BTBが次に検出されたときに、BTBのインストラクションアドレスが、ラッチ144に記憶された手前のBTBのインストラクションアドレスと比較される。或いは又、別の実施形態では、ラッチ144は、レジスタ又は他のメモリユニットである。比較器142は、インストラクションストリームにおいてループが検出されたとの指示を与える。
【0060】
1つの実施形態において、比較器142は、2つの出力、即ち等価性を指示する第1の出力と、非等価性を指示する第2の出力を有する。等価性を指示する第1の出力は、検出開始フラグ146、ORゲート160、及び繰り返しカウンタ150に結合される。比較器142からの等価性出力は、BTBが検出されたこと及びBTBが行において少なくとも2回送信されたことを指示する1つ以上のクロックサイクルのパルスである。比較器142からの等価性出力は、繰り返しカウンタ150をインクリメントし、そして繰り返しカウンタ150は、インストラクションストリームにおいて検出されたループ繰り返し数のカウントを与える。この実施形態では、行において同じBTBに2回遭遇し、それらの間に他のBTBがない場合には、これは、ループ候補に遭遇したことを指示する。それ故、ループ追跡回路は、ループ候補について更なる学習をスタートする。
【0061】
非等価性を指示する比較器142からの第2の出力は、ORゲート162に結合される。ORゲート162の出力は、検出開始フラグ146をリセットするように結合される。比較器142からの第2の出力は、現在検出されたBTBが以前に検出されたBTBとは異なるものであるときに高となる。これは、この実施形態の場合、以前のBTBがループ候補の部分でなかったことを指示する。
図6には示されていないが、比較器142からの第2の出力は、ループ検出がリセットされたことを指示するために他の位置にも結合される。
【0062】
uopカウンタ148は、ループ候補のスタート以来検出されたuopの数を追跡するように構成される。検出されたuopの数を指示する1つ以上の信号が、uopカウンタ148に結合される。uopカウンタ148へのこれら入力は、フェッチされ及び/又はデコードされたuopの数を指示する。1つの実施形態では、信号は、フェッチユニットから到来する。1つの実施形態では、フェッチユニットがクロック当たり6つのデコードされたuopを出力する場合に、uopカウンタ148に結合される高入力は、uopカウンタ148がそのカウントを6だけインクリメントするようにさせる。別の実施形態では、これらの信号は、デコーダユニットからuopカウンタ148へ結合される。
【0063】
又、uopカウンタ148は、分岐に対応する特定のuopに対してuopの数を決定するための他のロジックも含む。分岐に遭遇したとき、uopカウンタ148は、uopが位置していたレーンを指示する入力も受け取る。次いで、uopカウンタ148は、最も最近のサイクルのどれほど多くのuopが分岐uopの前方にあったか決定する。このように、uopカウンタ148は、検出された分岐に対応する特定の分岐uopに対してループのスタートからのuop数の正確なカウントを発生する。uopカウンタ148は、BTBが検出された場合(ループの終わりを意味する)、プロセッサの後端から予測ミス又はフラッシュがシグナリングされる場合、又は分岐距離において非等価性が検出されたことを比較器152が信号する場合に、リセットされる。
【0064】
繰り返しカウンタ150は、フェッチ及び/又はデコードされたループの繰り返し数を追跡するように構成される。繰り返しカウンタ150は、プロセッサの後端から予測ミス又はフラッシュがシグナリングされる場合、又はループの分岐の1つへの距離が分岐追跡テーブル(図示せず)の記憶値とは異なる場合に、リセットされる。これは、検出された分岐に対する現在uopカウンタ値が分岐追跡テーブル(BTT)に記憶された対応値に等しくない場合に非等価性を指示する信号を発生する比較器152によって指示される。比較器152は、分岐検出信号と、ループの現在分岐に対するBTTからの値とを受け取る。比較器152は、BTTの値を現在uopカウンタ値と比較し、そしてこの比較の結果を出力する。比較結果が非等価性である場合には、ループ検出ロジックがリセットされる。
【0065】
1つの実施形態において、比較器154は、繰り返しカウンタ150の出力をスレッシュホールド156と比較するように構成される。繰り返しカウンタ150がスレッシュホールド156に一致するか又はそれを越えると、比較器154は、プロセッサのためのループバッファモードを開始する信号を出力する。この実施形態では、ループ候補は、ループバッファモードが開始される前に複数の繰り返しにわたって追跡され、そして追跡に必要な繰り返しの数がスレッシュホールド156により指示される。種々の実施形態では、スレッシュホールド156は、プログラム可能な値である。1つの実施形態では、スレッシュホールドの値は、プロセッサの分岐予測メカニズムがループの終わりを検出するのに必要な時間又はサイクル数に基づく。ある実施形態では、分岐予想メカニズムは、プロセッサがループバッファモードにある間にシャットダウンされる。
【0066】
別の実施形態では、分岐の数がカウントされ、そして分岐の数がスレッシュホールドに到達すると、ループバッファモードが開始される。例えば、ループが5つの分岐を有し、分岐スレッシュホールドが40である場合には、ループ候補は、分岐スレッシュホールドに到達するのに8つの繰り返しを必要とする。他の実施形態では、ループバッファモードを開始する前にどれほど長時間ループ候補を追跡するか決定する別の方法が使用される。例えば、別の実施形態では、ある数の分岐又はある数の繰り返しに到達した場合に、プロセッサがループバッファモードに入る。
【0067】
ユニット140は、検出されたBTB、検出されたuopの数、及び検出された分岐のような種々の信号を受信するものとして示されているが、別の実施形態では、ユニット140は、プロセッサパイプラインを横断するuopを監視することによりこれらの信号を内部で発生することができる。又、
図6に示すファンクションの分布は、プロセッサパイプライン内にループバッファコントロールユニット具現化するためのロジックの唯一の考えられる分布ではないことを理解されたい。他の実施形態は、他のコンポーネント及びロジックを含み、そしてそれらコンポーネント及びロジックの適当な分布を有する。更に、個々のコンポーネントの各々は、実施形態に基づいて異なる仕方で構成される1つ以上の同様のコンポーネントと置き換えられる。例えば、
図6に示す実施形態では、ループ候補内で許されるのは、1つの「後方に行う分岐」だけである。しかしながら、他の実施形態では、ループ候補が2つ以上の「後方に行う分岐」を含み、そしてループバッファコントロールユニットのロジックが適宜に変更されてもよい。
【0068】
図7には、ループ候補を追跡するための方法の1つの実施形態が示されている。説明上、この実施形態のステップは、逐次の順序で示されている。以下に述べる方法の種々の実施形態において、ここに述べる要素の1つ以上は、同時に遂行されてもよいし、図示されたものとは異なる順序で遂行されてもよいし、又は完全に省略されてもよいことに注意されたい。必要に応じて、他の付加的な要素が遂行されてもよい。
【0069】
1つの実施形態では、ループ終了分岐がプロセッサパイプラインにおいて検出される(ブロック172)。種々の実施形態において、ループ終了分岐とは、サブルーチンコールを除外する直接的な「後方に行う分岐」として定義される。種々の実施形態において、ループ終了分岐は、プロセッサパイプラインのフェッチ段、デコーダ段、又は別の段において検出される。ループ終了分岐uopは、考えられるループバッファ候補の終わりとして識別されるようにマークされる。
【0070】
ループ終了分岐を検出するのに応答して、ループ終了分岐のインストラクションアドレスがループバッファコントロールユニットにラッチされ、検出開始フラグがセットされ、繰り返しカウンタが開始され、そしてuopカウンタが開始される(ブロック174)。繰り返しカウンタを使用して、ループの繰り返し数が追跡される。又、ある実施形態では、ループ候補の全ての繰り返しにおいて検出された分岐の数を追跡するために分岐カウンタがスタートされる。繰り返しカウンタの値及び/又は分岐カウンタの値を使用して、ループバッファモードをいつ開始すべきか決定する。ループバッファモードが開始されると、ループバッファにおいてループ候補がキャッシュされ、そしてフェッチ前端がシャットダウンされる。uopカウンタは、ループ候補内で検出される各分岐までの距離(uopの数)を決定するのに使用される。
【0071】
1つの実施形態において、uopカウンタにより維持されるカウントは、フェッチ及びデコード段の部分として発生される空きスロット(vacant slot)を含むことに注意されたい。この実施形態では、説明上、フェッチユニットがサイクル当たり6個のuopを出力するように構成されると仮定する。あるクロックサイクルについては、フェッチユニットは、色々な理由で全6個のuop出力を発生しない。それ故、デコーダユニットへ送られるuopの行は、有効uopの全行を含まない。uopカウンタは、これを考慮し、そしてたとえ行が6個の有効uopを含んでいなくても行ごとに6をカウントする。例えば、ループは、6行のuopを含み、そしてループ終了分岐は、発生されたuopの第6サイクルの最後の行の最後のスロットである。uopカウンタは、たとえ1つ以上の行に含まれる有効uopが6未満であっても、6つのサイクルに対してループが36uopを有することをカウントする。例えば、中間行は、2つの有効uopしか含まず、そしてその行の残りの4スロットは、空である。それ故、ループは、32個の有効uopを含むが、ループカウンタは、ループが36個のuopを含むことをカウントする。一般的に述べると、この実施形態では、uopカウンタは、たとえ幾つかのスロットが有効なuopを含まなくてもループ候補を記憶するためにループバッファにどれほど多くのスロットが必要であるか追跡する。
【0072】
カウンタ及び付加的な追跡ロジックを設定した後に、ループ候補が実行され、追跡される(ブロック176)。1つの実施形態では、ループ候補の追跡は、ループ候補において分岐を検出し、そして分岐追跡テーブルをループのスタートから各検出された分岐までの距離でポピュレーションすることを含む(ブロック178)。次いで、ループ候補の終わりにループ終了分岐が検出される(ブロック180)。ループ終了分岐が以前に検出された同じ分岐である場合には(条件ブロック182)、繰り返しカウンタがインクリメントされる(ブロック186)。
【0073】
ループ終了分岐が以前に検出された同じ分岐でない場合には(条件ブロック182)、ループ候補の追跡が停止され、そしてカウンタ、ラッチ、検出開始フラグ及び分岐追跡テーブルがリセットされる(ブロック184)。又、ループ候補の追跡は、除外されたインストラクションがループにおいて検出された場合に終了される。ブロック184の後に、方法170は、リセットされ、そしてループ終了分岐が検出されるのを待機する(ブロック172)。
【0074】
ブロック186の後に、uopカウンタがループバッファのサイズと比較され(条件ブロック188)、ループ候補がループバッファに適合するかどうか決定する。或いは又、別の実施形態では、方法170のこれらのステップが順序付けし直されてもよい。例えば、ループ終了分岐を検出する(ブロック180)前に、uopカウンタがループバッファのサイズを越えると決定された場合には(条件ブロック188)、ループ検出が打ち消される。
【0075】
uopカウンタがループバッファのサイズより小さい場合には(条件ブロック188)、ループ候補がループバッファに適合し、従って、次の条件がチェックされ、即ちループ候補における分岐の数が分岐追跡テーブル(BTT)のサイズより小さいかどうかチェックされる(条件ブロック190)。uopカウンタがループバッファのサイズより大きい場合には(条件ブロック188)、ループ候補は、ループバッファに適合するには大き過ぎ、追跡は終了される。方法170は、ブロック184へ戻り、カウンタ、ラッチ、検出開始フラグ、及び分岐追跡テーブルがリセットされる。
【0076】
ループ候補における分岐の数がBTTのサイズより小さい場合には(条件ブロック190)、ループ候補が依然考慮され、uopカウンタが再スタートされる(ブロック192)。次いで、ループの別の繰り返しが実行され追跡される(ブロック194)。ループの繰り返しを追跡することは、「行う分岐」と、ループのスタートから各「行う分岐」までのuopの数とを監視することを含む。ループのスタートから各「行う分岐」までの距離は、分岐追跡テーブルに記憶された値と比較される。
【0077】
ループの繰り返しが完了すると、ループ終了分岐を検出しなければならず、それが同じループ終了分岐であるかどうか決定される(条件ブロック196)。或いは又、ループ終了分岐が検出されない場合には、uopカウンタ及び分岐追跡テーブルの最後のエントリを監視し、そしてループ終了分岐が既に検出されていなければならないと決定することにより、ループ追跡が終了される。ループ終了分岐が検出されそしてそれが同じループ終了分岐である場合には(条件ブロック196)、ループのこの繰り返しに対してループコンテンツが不変であるかどうか決定する(条件ブロック198)。
【0078】
或いは又、条件ブロック198は、あるシナリオでは条件ブロック196の前にチェックされる。例えば、ループの分岐の1つが、ループのスタートから、分岐追跡テーブルに記憶された値と同じ距離にない場合には、ループ終了分岐を検出する前にループコンテンツが変化したと決定される。このケースでは、ループの追跡は、同じループ終了分岐を検出する前に終了される。
【0079】
ループのこの繰り返しに対してループコンテンツが不変である場合には(条件分岐198)、これは、同じループが実行されていることを指示し、次いで、繰り返しカウンタがインクリメントされる(ブロック200)。次いで、繰り返しカウンタがスレッシュホールドより上であるかどうか決定され、ループをバッファするに充分な時間ループが追跡されたかどうか決定する(条件ブロック202)。或いは又、別の実施形態では、分岐カウンタをスレッシュホールドと比較して、プロセッサがループバッファモードに入るべきであるかどうか決定する。
【0080】
繰り返しカウンタがスレッシュホールドより下である場合には(条件ブロック202)、方法170は、uopカウンタを再スタートさせる(ブロック192)。繰り返しカウンタがスレッシュホールドより上である場合には(条件ブロック202)、プロセッサがループバッファモードに入り、そしてループは、ループバッファにキャッシュされる(ブロック204)。ブロック204の後に、方法170が終了となる。この時点で、プロセッサの前端がターンオフされ、そしてuopがループバッファからディスパッチされる。ループが終了となると、プロセッサは、ループバッファモードを退出する信号を搬送し、プロセッサの前端が再びターンオンされる。この時点で、方法170が再スタートされ、そしてループバッファコントロールユニットは、ループ終了分岐についてインストラクションストリームを監視することに戻る(ブロック172)。
【0081】
図8は、システム210の1つの実施形態のブロック図である。図示されたように、システム210は、デスクトップコンピュータ220、ラップトップコンピュータ230、タブレットコンピュータ240、セルラーホン250、等のチップ、回路、コンポーネント、等を表わす。ここに示す実施形態では、システム210は、外部メモリ212に結合されたIC10(
図1)の少なくとも1つのインスタンスを含む。
【0082】
IC10は、1つ以上の周辺装置214及び外部メモリ212に結合される。又、電源216も設けられ、これは、IC10に供給電圧を、そしてメモリ212及び/又は周辺装置214に1つ以上の供給電圧を供給する。種々の実施形態において、電源216は、バッテリを表わす(例えば、スマートホン、ラップトップ又はタブレットコンピュータにおける充電型バッテリ)。ある実施形態では、IC10の2つ以上のインスタンスが含まれる(及び2つ以上の外部メモリ212も含まれる)。
【0083】
メモリ212は、ダイナミックランダムアクセスメモリ(DRAM)、同期DRAM(SDRAM)、倍データレート(DDR、DDR2、DDR3、等)SDRAM(mDDR3等のSDRAMの移動バージョン、及び/又はLPDDR2等のSDRAMの低電力バージョンを含む)、RAMBUS DRAM(RDRAM)、スタティックRAM(SRAM)、等の任意の形式のメモリである。1つ以上のメモリ装置が回路板に結合されて、シングルインラインメモリモジュール(SIMM)、デュアルインラインメモリモジュール(DIMM)、等のメモリモジュールを形成する。
【0084】
周辺装置214は、システム210の形式に基づいて望ましい回路を含む。例えば、一実施形態では、周辺装置214は、wifi、Bluetooth(登録商標)、セルラー、グローバルポジショニングシステム、等の、種々の形式のワイヤレス通信のための装置を含む。又、周辺装置214は、RAM記憶装置、ソリッドステート記憶装置、又はディスク記憶装置を含む付加的な記憶装置も含む。又、周辺装置214は、タッチディスプレイスクリーン又はマルチタッチディスプレイスクリーンを含むディスプレイスクリーン、キーボード又は他の入力装置、マイクロホン、スピーカ、等のユーザインターフェイス装置を含む。
【0085】
図9は、IC10(
図1)に含まれる回路を表わす1つ以上のデータ構造体を含むコンピュータ読み取り可能な媒体260のブロック図の一実施形態である。一般的に述べると、コンピュータ読み取り可能な媒体260は、磁気又は光学媒体のような非一時的記憶媒体、例えば、ディスク、CD−ROM、又はDVD−ROM;RAM(例えば、SDRAM、RDRAM、SRAM、等)の揮発性又は不揮発性メモリ;並びに送信媒体を経てアクセス可能な媒体、或いはネットワーク及び/又はワイヤレスリンクのような通信媒体を経て搬送される電気、電磁又はデジタル信号のような信号を含む。
【0086】
一般的に、コンピュータ読み取り可能な媒体260上の回路のデータ構造は、回路を含むハードウェアを製造するためにプログラムにより読み取られて直接的又は間接的に使用される。例えば、データ構造は、Verilog又はVHDLのような高レベル設計言語(HDL)におけるハードウェア機能の1つ以上の挙動レベル記述又はレジスタ転送レベル(RTL)記述を含む。これらの記述は、合成ライブラリからのゲートのリストを含む1つ以上のネットリストを発生するように記述を合成する合成ツールによって読み取られる。ネットリストは、回路を構成するハードウェアのファンクションも表わすゲートのセットを備えている。次いで、ネットリストは、マスクに適用される幾何学的形状を記述する1つ以上のデータセットを発生するように配置されルーティングされる。マスクは、その回路に対応する1つ以上の半導体回路を製造するために種々の半導体製造段階に使用される。或いは又、コンピュータ読み取り可能な媒体230のデータ構造は、必要に応じて、ネットリスト(合成ライブラリがあったりなかったりする)でもよいし、データセットでもよい。更に別の実施形態では、データ構造は、スキマティックプログラムの出力、或いはそこから導出されるネットリスト又はデータセットを含む。
【0087】
コンピュータ読み取り可能な媒体260は、IC10の表現を含むが、他の実施形態では、IC10の任意の部分(例えば、ループバッファ、ループバッファコントロールユニット)又は部分の組み合わせの表現を含む。
【0088】
以上に述べた実施形態は、非限定の具現化例に過ぎないことを強調しておく。当業者であれば、前記開示が完全に理解されれば、多数の変更や修正が明らかとなろう。そのような変更や修正は、全て、特許請求の範囲に包含されるものとする。