(57)【要約】【課題】ループの複数の反復をループバッファにパックするための方法、装置、及びプロセッサを提供する。【解決手段】プロセッサによって実行される命令ストリームの中に、バッファリングのための判定基準に合致するループ候補が検出される。ループがループバッファへ書き込まれていてループの終わりが検出されたとき、ループバッファがまだ半分まで埋まっていない場合には、ループの反復がもう１つループバッファへ書き込まれる。この様にして、プロセッサがループバッファモードにあるときのループバッファからのサイクル当たり命令オペレーション処理量が最大化されるように短いループがループバッファへ複数回書き込まれる。【選択図】図９
2014002736.tif 000002
【特許請求の範囲】
【請求項１】
ループバッファと、
前記ループバッファへ連結されているループバッファコントロールユニットであって、
命令ストリームの中にループを検出するように、及び、
前記ループの２つ又はそれ以上の反復を前記ループバッファへ書き込ませるように、構成されているループバッファコントロールユニットと、を備えている装置。
【請求項２】
前記ループバッファコントロールユニットは、更に、
前記ループバッファが少なくとも半分まで埋まっていないと判定したことに応えて、前記ループの反復をもう１つ前記ループバッファへ書き込ませるように、及び、
前記ループバッファが少なくとも半分まで埋まっていると判定したことに応えて、前記ループの追加の反復が前記ループバッファへ書き込まれることを防ぐように、構成されている、請求項１に記載の装置。
【請求項３】
前記ループバッファコントロールユニットは、前記ループバッファが半分まで埋まっているかどうかを、前記ループバッファに対する書き込みポインタの位置に基づいて判定するように構成されている、請求項２に記載の装置。
【請求項４】
前記ループバッファコントロールユニットは、更に、
或る所与の反復内の後方分岐枝が前記ループバッファの行の最も右側のエントリへ書き込まれなかったと判定したことに応えて、前記ループの反復をもう１つ前記ループバッファへ書き込ませるように、及び、
前記所与の反復からの後方分岐枝が前記ループバッファの行の最も右側のエントリへ書き込まれたと判定したことに応えて、前記ループの追加の反復が前記ループバッファへ書き込まれることを防ぐように、構成されている、請求項１に記載の装置。
【請求項５】
前記ループバッファへ書き込まれる前記ループの反復の数は、前記装置がループバッファモードにあるときの前記ループバッファからのサイクル当たり命令オペレーション処理量を最大化することに基づいて確定される、請求項１に記載の装置。
【請求項６】
前記ループの第１反復の第１命令オペレーションを前記ループバッファの第１行の第１スロットへ書き込むように構成されているアライナを更に備えている、請求項１に記載の装置。
【請求項７】
前記ループバッファは、前記装置がループバッファモードに入ったことに応えて、前記ループの２つ又はそれ以上の反復の命令オペレーションをディスパッチするように構成されている、請求項１に記載の装置。
【請求項８】
ループバッファと、
前記ループバッファへ連結されているループバッファコントロールユニットであって、命令ストリームの中にループを検出するように構成されているループバッファコントロールユニットと、を備えているプロセッサにおいて、
前記ループバッファコントロールユニットが、
前記ループの複数の反復を格納するように、及び、
前記プロセッサがループバッファモードに入ったことに応えて、前記ループの前記複数の反復の命令をディスパッチするように、構成されている、プロセッサ。
【請求項９】
前記ループの前記複数の反復のそれぞれの反復は同一である、請求項８に記載のプロセッサ。
【請求項１０】
前記ループの始まりを識別してマークするように構成されているフェッチユニットを更に備えている、請求項８に記載のプロセッサ。
【請求項１１】
前記フェッチユニットは、ループ反復境界を識別するように構成されているアライナを備えている、請求項１０に記載のプロセッサ。
【請求項１２】
前記アライナは、更に、前記プロセッサがループバッファモードに入ったことに応えて、前記ループの先の反復の後方分岐枝を検出した後にストールを生じさせるように構成されている、請求項１１に記載のプロセッサ。
【請求項１３】
前記アライナは、更に、前記ループの最終反復の後方分岐枝が前記ループバッファへ書き込まれたことを検出した後にストールを生じさせるように構成されている、請求項１２に記載のプロセッサ。
【請求項１４】
前記アライナは、更に、
前記ループの第１反復の後方分岐枝を、第１クロックサイクルの第１スロットへ割り当てるように、及び、
前記ループの第２反復の第１命令オペレーションを、前記第１クロックサイクルの前記第１スロットに隣接している第２スロットへ割り当てるように、構成されている、請求項１３に記載のプロセッサ。
【請求項１５】
命令ストリームの中にループ候補を検出する段階と、
前記ループ候補がループバッファにバッファするための判定基準に合致していると判定する段階と、
前記ループ候補の第１反復を前記ループバッファへ書き込む段階と、
前記ループ候補の前記第１反復のループ終結分枝を検出したことに応えて、前記ループバッファが少なくとも半分まで埋まっているかどうかを判定する段階と、
前記ループバッファが少なくとも半分まで埋まっていないと判定したことに応えて、前記ループ候補の第２反復を前記ループバッファへ書き込む段階と、を備えている方法。
【請求項１６】
前記方法は、
前記ループ候補の前記第２反復のループ終結分枝を検出したことに応えて、前記ループバッファが半分まで埋まっているかどうかを判定する段階と、
前記ループバッファが少なくとも半分まで埋まっていると判定したことに応えて、前記ループ候補の前記第１反復及び前記第２反復を前記ループバッファからディスパッチする段階と、を更に備えている、請求項１５に記載の方法。
【請求項１７】
前記方法は、前記ループ候補の前記１反復及び前記第２反復を前記ループバッファからディスパッチしたことに応えて、フェッチユニットをシャットダウンする段階を更に備えている、請求項１６に記載の方法。
【請求項１８】
前記ループバッファに格納されている有効行の数に等しい第１値を格納する段階を更に備えている、請求項１７に記載の方法。
【請求項１９】
前記ループ候補の前記１反復及び前記第２反復を前記ループバッファからディスパッチする段階は、読み出しポインタに前記ループバッファの前記第１値に等しい行数を進ませる段階を備えている、請求項１８に記載の方法。
【請求項２０】
前記読み出しポインタが前記ループバッファの前記第１値に等しい行数を進んだことに応えて、前記読み出しポインタを前記ループバッファの第１行へリセットする段階を更に備えている、請求項１９に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概括的にはプロセッサに、厳密にはループの複数の反復をループバッファにパックするための方法及び機構に関する。
【背景技術】
【０００２】
今日のプロセッサシステムは、パイプライン式に複数段に構築される傾向にある。典型的なパイプラインは、多くの場合、命令をフェッチするためのユニット、命令をデコードするためのユニット、命令をマップするためのユニット、命令を実行するためのユニット、そして結果をレジスタの様な別のユニットへ書き込むためのユニット、という別々のユニットを含んでいる。マイクロプロセッサの命令フェッチユニットは、命令の一定したストリームをプロセッサパイプラインの次段へ提供する役割を担っている。典型的には、フェッチユニットは、パイプラインの残部が継続的に命令を供給され続けるようにするために、命令キャッシュを利用している。フェッチユニット及び命令キャッシュは、それらに求められる機能を遂行している間に相当量のパワーを消費する傾向がある。パワー消費量を可能な限り削減することが、現代のマイクロプロセッサの目標であり、バッテリによりパワー供給される移動式デバイス内で利用されているマイクロプロセッサについては特にそうである。
【０００３】
多くのソフトウェアアプリケーションでは、或る特定の機能又はタスクを遂行するのに同じソフトウェア段階が何度も繰り返されることがある。これらの状況では、フェッチユニットは、命令の同じループが連続して実行されているにもかかわらず命令をフェッチし続けパワーを消費し続けることになる。ループを検出してループバッファにキャッシュできるならば、ループが実行している間フェッチユニットをシャットダウンさせてパワー消費を抑えることができよう。しかしながら、ループバッファを使用させながらプロセッサパイプラインの命令処理量を最大化するのは困難を伴う。この結果、プロセッサは十分とはいえない効率で動作することになってしまう。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ループバッファからのサイクル当たり命令処理量を最大化するための装置、プロセッサ、及び方法が開示されている。サイクル当たり命令処理量を最大化するために、ループバッファにはループの複数の反復がパックされることになる。１つの実施形態では、プロセッサパイプラインのフロントエンドは、フェッチユニット、ループバッファ、及びループバッファコントロールユニットを含んでいてもよい。ループバッファコントロールユニットは、ループ候補を監視及び追跡し、どのループ候補をバッファにキャッシュするべきかを判定するものである。
【０００５】
１つの実施形態では、ループ候補がキャッシュのための判定基準に合致している場合、ループバッファコントロールユニットは、フェッチユニットに、ループの始まりがループバッファの第１スロットへ書き込まれる必要がある、という合図を返してもよい。フェッチユニットでは、当該ループ候補の後方分岐枝が、識別され、マークされる。そして、次の命令が、ループの始まりとして識別され、マークされることになる。フェッチユニットが、ループバッファコントロールユニットから、当該ループ候補をループバッファにキャッシュするべきであるという信号を受信すると、フェッチユニットは、後方分岐枝の後に作為的にストールするようにしてもよい。そうして、次のクロックサイクルで、フェッチユニットは、ループの始まりと識別されている命令をループバッファの第１スロットの中へ出力することになる。更に、ループバッファへ書き込み中のループの最後の反復の終わりに、後方分岐枝に遭遇すると、フェッチユニットは後方分岐枝がループバッファへ書き込まれた後に、作為的にストールするようにしてもよい。
【０００６】
１つの実施形態では、ループ反復の後方分岐枝がループバッファへ書き込まれると、ループバッファが少なくとも半分まで埋まっているかどうかが判定されてもよい。ループバッファが半分まで埋まっていなければ、ループの反復がもう１つループバッファへ書き込まれることになる。ループバッファが半分まで埋まっていれば、ループバッファへの書き込みは終結されてもよい。ループバッファへの書き込みが完了した後、ループの（単数又は複数の）反復がループバッファからプロセッサパイプラインの次段へディスパッチされることになる。
【０００７】
これら及び他の特徴及び利点は、ここに提示されている手法についての次の詳細な説明が考察されれば当業者には明らかとなるであろう。
【０００８】
本方法及び機構の上記及び更なる利点は、次に続く詳細な説明を添付図面と関連付けて参照することによって更に深く理解されることであろう。
【図面の簡単な説明】
【０００９】
【図１】集積回路の一部分の１つの実施形態を示している。
【図２】プロセッサコアの１つの実施形態を示しているブロック線図である。
【図３】プロセッサパイプラインのフロントエンドの１つの実施形態を示しているブロック線図である。
【図４】フェッチ及びデコードユニット内のループバッファの別の実施形態のブロック線図である。
【図５】アライナの１つの実施形態である。
【図６】ループバッファにキャッシュされているループの１つの実施形態を示している。
【図７】ループバッファにキャッシュされているループの複数の反復の１つの実施形態を示している。
【図８】ループバッファにキャッシュされているループの複数の反復の別の実施形態を示している。
【図９】ループ候補を追跡するための方法の１つの実施形態を示している一般化された流れ線図である。
【図１０】システムの１つの実施形態のブロック線図である。
【図１１】コンピュータ可読媒体の１つの実施形態のブロック線図である。
【発明を実施するための形態】
【００１０】
次に続く説明では、ここに提示されている方法及び機構をくまなく理解できるように数多くの特定の詳細事項が述べられている。とはいえ、様々な実施形態はこれらの特定の詳細事項無しに実践され得ることが当業者には認識されるはずである。場合に依っては、ここに記載されている手法が曖昧になるのを避けるために、周知の構造、構成要素、信号、コンピュータプログラム命令、及び技法は、詳細に示されていないこともある。説明を簡潔に分かり易くするために、図中に示されている要素は必ずしも縮尺を合わせて描かれているわけではないことが理解されよう。例えば、一部の要素の寸法は他の要素に対比して誇張されていることがあるかもしれない。
【００１１】
本明細書は、「１つの実施形態」という言い方を含んでいる。「１つの実施形態では」という語句が異なった文脈で登場している場合、それは必ずしも同じ実施形態を指すとは限らない。特定の機構、構造、又は特性は、本開示との矛盾のない何れかの適したやり方で組み合わされてもよい。また、本願全体を通しての使用に際し、英語の「ｍａｙ」の対訳である「〜してもよい、〜かもしれない、〜できるであろう」という語は、必須の意味（即ち、せねばならないを意味する）というよりむしろ許容の意味（即ち、可能性があることを意味する）に使用されている。同様に、英語の「ｉｎｃｌｕｄｅ」、「ｉｎｃｌｕｄｉｎｇ」、及び「ｉｎｃｌｕｄｅｓ」の対訳である「〜を含む、〜を含める」という語は、〜に限定される、ではなく、〜を含んでいる、という意味である。
【００１２】
用語遣い。次に続く段落は、本開示（付随の特許請求の範囲を含む）に見られる用語についての定義及び／又は文脈を提供している。
【００１３】
英語の「ｃｏｍｐｒｉｓｉｎｇ」の対訳である「備えている」。この用語は、開放型である。本用語が付随の特許請求の範囲で使用されている場合、それは追加の構造又は段階を排除しない。「ループバッファコントロールユニットを備えているプロセッサは・・・」と叙述している請求項を考えてみよう。その様な請求項は、当該プロセッサが追加の構成要素（例えば、キャッシュ、フェッチユニット、実行ユニット）を含むことを排除しない。
【００１４】
英語の「Ｃｏｎｆｉｇｕｒｅｄ  ｔｏ」の対訳である「〜するように構成されている」。各種ユニット、回路、又は他の構成要素は、単数又は複数のタスクを遂行「するように構成されている」、と記載又は請求されていることがあるかもしれない。その様な文脈では、「〜するように構成されている」は、ユニット／回路／構成要素がオペレーション中に単数又は複数のタスクを遂行する構造（例えば回路構成）を含んでいる、ということを指し示すことによって、構造を含意するべく使用されている。そういうものとして、ユニット／回路／構成要素は、当該の特定されたユニット／回路／構成要素が現在作動状態ではなくても（例えばオンになっていなくても）、タスクを遂行するように構成されているといえる。一般に、「〜するように構成されている」という言い回しが使用されているユニット／回路／構成要素には、ハードウェア、例えば、回路、オペレーションを実施するべく実行可能なプログラム命令を格納しているメモリ、など、が含まれる。ユニット／回路／構成要素が１つ又はそれ以上のタスクを遂行「するように構成されている」と叙述されているからといって、それが当該ユニット／回路／構成要素について、３５Ｕ．Ｓ．Ｃ．第１１２条、第６項を発動するものではないことを明示しておく。加えて、「〜するように構成されている」には、ジェネリック構造（例えばジェネリック回路構成）が、問題になっている（単数又は複数の）タスクを遂行することのできるやり方で動作するように、ソフトウェア及び／又はファームウェア（例えば、ＦＰＧＡ又はソフトウェアを実行する汎用プロセッサ）によって操作されていることを含めることができる。「〜するように構成されている」には、製造プロセス（例えば半導体製作設備）を、１つ又はそれ以上のタスクを実施又は遂行するように適合されたデバイス（例えば半導体集積回路）を製作するように、適合させることも含まれよう。
【００１５】
英語の「Ｂａｓｅｄ  ｏｎ」の対訳である「〜に基づいて」。ここでの使用に際し、本用語は、判定に影響を及ぼす１つ又はそれ以上の要因を記述するのに使用されている。この用語は、判定に影響を及ぼし得る追加の要因を排除しない。つまり、判定は、唯一それらの要因に基づいていることもあれば、少なくとも部分的にそれらの要因に基づいていることもあろう。「Ｂに基づいてＡと判定する」という語句を考えてみよう。ＢはＡという判定に影響を及ぼす要因ではあろうが、その様な語句は、Ａという判定がＣにも基づいていることを排除しない。他の場合には、Ａは唯一Ｂに基づいて判定されることもあろう。
【００１６】
図１を参照すると、集積回路（ＩＣ）の一部分の１つの実施形態を説明するブロック線図が示されている。図示の実施形態では、ＩＣ１０は、プロセッサ複合体１２、メモリコントローラ２２、及びメモリ物理インターフェース回路（ＰＨＹ）２４と２６、を含んでいる。ＩＣ１０は、更に、図１に示されていない多くの他の構成要素を含んでいてもよいことを指摘しておく。様々な実施形態では、ＩＣ１０は、システムオンチップ（ＳｏＣ）、特定用途向け集積回路（ＡＳＩＣ）、又は装置、と呼称されることもある。
【００１７】
プロセッサ複合体１２は、中央処理ユニット（ＣＰＵ）１４と１６、レベル２（Ｌ２）キャッシュ１８、及びバスインターフェースユニット（ＢＩＵ）２０を含んでいてもよい。他の実施形態では、プロセッサ複合体１２は、他の個数のＣＰＵを含んでいてもよい。ＣＰＵ１４及び１６は、プロセッサ又はコアと呼称されることもある。プロセッサ複合体１２は、図１に示されていない他の構成要素を含んでいてもよいことを指摘しておく。
【００１８】
ＣＰＵ１４及び１６は、命令セットアーキテクチャに定義されている命令を実行する回路構成を含んでいてもよい。具体的には、命令を備える１つ又はそれ以上のプログラムがＣＰＵ１４及び１６によって実行されることになる。様々な実施形態では、何れの命令セットアーキテクチャが実装されていてもよい。例えば、１つの実施形態では、ＡＲＭ（商標）命令セットアーキテクチャ（ＩＳＡ）が実装されていてもよい。ＡＲＭ命令セットには、１６ビット（又はＴｈｕｍｂ）命令及び３２ビット命令が含まれよう。他の代表的なＩＳＡには、ＰｏｗｅｒＰＣ（商標）命令セット、ＭＩＰＳ（商標）命令セット、ＳＰＡＲＣ（商標）命令セット、ｘ８６命令セット（ＩＡ−３２とも呼称される）、ＩＡ−６４命令セット、など、が含まれよう。
【００１９】
１つの実施形態では、ＣＰＵ１４及び１６によって実行されるそれぞれの命令は、プログラムカウンタ（ＰＣ）値と関連付けられていてもよい。更に、幾つかの命令内には、読み出し及び書き込みのための１つ又はそれ以上のアーキテクチャ上のレジスタが指定されていてもよい。これらのアーキテクチャ上のレジスタは、レジスタリネームユニットによって実際の物理レジスタへマップされていてもよい。また、幾つかの命令（例えば、ＡＲＭ  Ｔｈｕｍｂ命令）は、命令オペレーション（又はマイクロｏｐ）のシーケンスへ分解されていてもよく、当該シーケンスのそれぞれの命令オペレーションは、固有マイクロｏｐ（又はｕｏｐ）番号によって参照されていてもよい。
【００２０】
ＣＰＵ１４と１６のそれぞれは、更に、レベル１（Ｌ１）キャッシュ（図示せず）を含んでいてもよく、各Ｌ１キャッシュはＬ２キャッシュ１８へ連結されていてもよい。他の実施形態は、追加のキャッシュレベル（例えば、レベル３（Ｌ３）キャッシュ）を含んでいてもよい。１つの実施形態では、Ｌ２キャッシュ１８は、ＣＰＵ１４及び１６による低待ち時間アクセスのために、命令及びデータをキャッシュするように構成されていてもよい。Ｌ２キャッシュ１８は、何れの容量及び構成（例えば、ダイレクトマップ型、セット・アソシエイティブ型）を備えていてもよい。Ｌ２キャッシュ１８は、メモリコントローラ２２へＢＩＵ２０を介して連結されていてもよい。ＢＩＵ２０は、更に、ＣＰＵ１４及び１６とＬ２キャッシュ１８を様々な他のデバイス及びブロックへ連結する様々な他の論理構造を含んでいてもよい。
【００２１】
メモリコントローラ２２は、何れの個数のメモリポートを含んでいてもよく、メモリへインターフェースするように構成されている回路構成を含んでいてもよい。例えば、メモリコントローラ２２は、シンクロナスＤＲＡＭ（ＳＤＲＡＭ）、ダブルデータレート（ＤＤＲ）ＳＤＲＡＭ、ＤＤＲ２  ＳＤＲＡＭ、ランバスＤＲＡＭ（ＲＤＲＡＭ）、などの様な、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）へインターフェースするように構成されていてもよい。メモリコントローラ２２は、更に、メモリ物理インターフェース回路（ＰＨＹ）２４及び２６へ連結されていてもよい。メモリＰＨＹ２４及び２６は、メモリコントローラ２２へ連結されている任意の個数のメモリＰＨＹを代表している。メモリＰＨＹ２４及び２６は、メモリデバイス（図示せず）へインターフェースするように構成されていてもよい。
【００２２】
他の実施形態は、図１に示されている構成要素及び／又は他の構成要素のサブセット又はスーパーセットを含め、構成要素の他の組合せを含んでいてもよいことを指摘しておく。所与の構成要素の１つのインスタンスが図１に示されているが、他の実施形態は、所与の構成要素の２つ又はそれ以上のインスタンスを含んでいてもよい。同様に、この詳細な説明全体を通して、所与の構成要素のインスタンスについては、たとえ１つのインスタンスしか示されていなくても２つ又はそれ以上のインスタンスが含まれていてもよく、及び／又は、たとえ複数のインスタンスが示されていてもインスタンスを１つしか含んでいない実施形態が使用されてもよい。
【００２３】
次に図２を参照すると、プロセッサコアの１つの実施形態が示されている。コア３０は、プロセッサコアの１つの例であり、コア３０は、図１のプロセッサ複合体１２の様なプロセッサ複合体内で利用されていてもよい。１つの実施形態では、図１のＣＰＵ１４と１６のそれぞれは、コア３０の構成要素と機能性を含んでいてもよい。コア３０は、フェッチ及びデコード（ＦＥＤ）ユニット３２、マップ及びディスパッチユニット３６、メモリ管理ユニット（ＭＭＵ）４０、コアインターフェースユニット（ＣＩＦ）４２、実行ユニット４４、及びロード−格納ユニット（ＬＳＵ）４６を含んでいてもよい。コア３０は図２に示されていない他の構成要素及びインターフェースを含んでいてもよいことを指摘しておく。
【００２４】
ＦＥＤユニット３２は、メモリからの命令を読み出し、それらをレベル１（Ｌ１）命令キャッシュ３３に入れるように構成されている回路構成を含んでいてもよい。Ｌ１命令キャッシュ３３は、コア３０に実行させる命令を格納するためのキャッシュメモリであってもよい。Ｌ１命令キャッシュ３３は、何れの容量及び構成（例えば、ダイレクトマップ型、セット・アソシエイティブ型、など）を有していてもよい。また、Ｌ１命令キャッシュ３３は、何れのキャッシュラインサイズを有していてもよい。ＦＥＤユニット３２は、更に、分枝命令を予測して予測された経路を下ってフェッチしてゆくように構成されている分枝予測ハードウェアを含んでいてもよい。ＦＥＤユニット３２は、更に、リダイレクトされることもあろう（例えば、予測ミス、例外、割り込み、フラッシュ、など、による）。
【００２５】
１つの実施形態では、ＦＥＤユニット３２は、命令をオペレーションへ多段階でデコードするように構成されていてもよい。加えて、ＦＥＤユニット３２は、更に、複数の命令を並行してデコードするように構成されていてもよい。より具体的には、命令は、Ｌ１命令キャッシュ３３から引き出され、プリデコーデッド命令へとデコードされてもよく、そして、アライナ３４が、プリデコーデッド命令をループバッファ３５及び／又はデコーダーユニット（図示せず）の正しいレーンへ配信するように構成されていてもよい。デコーダユニットは、プリデコーデッド命令を命令オペレーションへ変換するべくデコーディングの残りを遂行するように構成されていてもよい。
【００２６】
概して、命令オペレーションは、実行ユニット４４及びＬＳＵ４６に含まれているハードウェアが実行することのできるオペレーションとされる。それぞれの命令は、実行されると当該命令についての命令セットアーキテクチャに従って定義されているオペレーションの遂行をもたらす１つ又はそれ以上の命令オペレーションへ翻訳される。「命令オペレーション」及び「ｕｏｐ」という用語は本開示全体を通して置き換え可能に使用されることもあることを指摘しておく。他の実施形態では、ＦＥＤユニット３２内に含まれている機能性は、フェッチユニット、デコードユニット、及び／又は他のユニットの様な、２つ又はそれ以上の別々のユニットに分割されていてもよい。
【００２７】
様々なＩＳＡでは、幾つかの命令が単一のｕｏｐへデコードされていることもある。ＦＥＤユニット３２は、命令の型式、ソースオペランド、など、を識別するように構成されていてもよく、それぞれのデコードされた命令オペレーションは、命令を幾らかのデコード情報と併せて備えていてもよい。それぞれの命令が単一のｕｏｐに翻訳される他の実施形態では、それぞれのｕｏｐは、単純に、対応する命令又はその一部分（例えば、命令の単数又は複数のｏｐコードフィールド）であってもよい。幾つかの実施形態では、ＦＥＤユニット３２は、命令についてｕｏｐを生成するための回路構成及び／又はマイクロコードの何らかの組合せを含んでいてもよい。例えば、比較的単純なｕｏｐ生成（例えば命令当たり１又は２ｕｏｐ）はハードウェアで扱えるのに対し、より拡張的なｕｏｐ生成（例えば命令当たり３ｕｏｐより多い）はマイクロコードで扱われることになろう。
【００２８】
デコードされたｕｏｐは、マップ／ディスパッチユニット３６へ提供されてもよい。マップ／ディスパッチユニット３６は、ｕｏｐ及びアーキテクチャ上のレジスタをコア３０の物理レジスタへマップするように構成されていてもよい。マップ／ディスパッチユニット３６は、レジスタリネーミングを実施していて、ｕｏｐからのソースレジスタアドレスをリネーム後のソースレジスタを識別するソースオペランド番号へマップしていてもよい。マップ／ディスパッチユニット３６は、更に、ｕｏｐを実行ユニット４４及びＬＳＵ４６内のリザベーションステーション（図示せず）へディスパッチするように構成されていてもよい。
【００２９】
１つの実施形態では、マップ／ディスパッチユニット３６は、リオーダバッファ（ＲＯＢ）３８を含んでいてもよい。他の実施形態では、ＲＯＢ３８は、どこか他のところに配置されていてもよい。ｕｏｐは、ディスパッチされるより前に、ＲＯＢ３８へ書き込まれてもよい。ＲＯＢ３８は、ｕｏｐを、それらが順番にコミットされてゆくまで保留するように構成されていてもよい。それぞれのｕｏｐには、ＲＯＢ３８内の特定のエントリに対応するＲＯＢインデクス（ＲＮＵＭ）が割り当てられてもよい。ＲＮＵＭは、コア３０内でインフライトのオペレーションを追跡記録するのに使用することができよう。マップ／ディスパッチユニット３６は、更に、図２に示されていない他の構成要素（例えば、マッパアレイ、ディスパッチユニット、ディスパッチバッファ）を含んでいてもよい。また、他の実施形態では、マップ／ディスパッチユニット３６内に含まれている機能性は、マップユニット、ディスパッチユニット、及び／又は他のユニットの様な、２つ又はそれ以上の別々のユニットへ分割されていてもよい。
【００３０】
実行ユニット４４は、何れの個数及び何れの型式（例えば、整数、浮動小数点、ベクトル）の実行ユニットを含んでいてもよい。実行ユニット４４のそれぞれは、１つ又はそれ以上のリザベーションステーション（図示せず）を更に含んでいてもよい。ＣＩＦ４２は、ＬＳＵ４６、ＦＥＤユニット３２、ＭＭＵ４０、及びＬ２キャッシュ（図示せず）、へ連結されていてもよい。ＣＩＦ４２は、コア３０とＬ２キャッシュの間のインターフェースを管理するように構成されていてもよい。ＭＭＵ４０は、アドレス翻訳機能とメモリ管理機能を遂行するように構成されていてもよい。
【００３１】
ＬＳＵ４６は、Ｌ１データキャッシュ４８、格納待ち行列５０、及びロード待ち行列５２を含んでいてもよい。ロードオペレーション及び格納オペレーションは、マップ／ディスパッチユニット３６から、ＬＳＵ４６内のリザベーションステーションへディスパッチされてもよい。格納待ち行列５０は格納オペレーションに対応するデータを格納し、ロード待ち行列５２はロードオペレーションと関連付けられるデータを格納するものである。ＬＳＵ４６は、更に、Ｌ２キャッシュへＣＩＦ４２を介して連結されていてもよい。ＬＳＵ４６は、更に、図２に示されていない他の構成要素（例えば、リザベーションステーション、レジスタファイル、プリフェッチユニット、翻訳ルックアサイドバッファ）を含んでいてもよいことを指摘しておく。
【００３２】
図２に示されている機能性の配分がプロセッサコアについて利用できる唯一可能なマイクロアーキテクチャというわけではないものと理解されたい。他のプロセッサコアは、他の構成要素を含んでいることもあろうし、示されている構成要素の１つ又はそれ以上を省いていることもあろうし、及び／又は、構成要素の間で異なった機能性の配列を含んでいることもあろう。
【００３３】
次に図３を参照すると、プロセッサパイプラインのフロントエンドの１つの実施形態のブロック線図が示されている。１つの実施形態では、図３に示されているフロントエンド論理は、（図２の）ＦＥＤユニット３２の様なフェッチ及びデコードユニット内に置かれていてもよい。図３に示されている機能性の配分は、ループバッファをプロセッサパイプライン内に実装する場合の単なる一つの実施可能な構造であるものと理解されたい。他にもループバッファを実装するための適した論理配分が実施可能であり、企図されている。
【００３４】
フェッチフロントエンド６０は、命令をフェッチしてプリデコードし、次いでプリデコーデッドｕｏｐをループバッファ６２及びデコーダ７０Ａ−Ｆへ（マルチプレクサ６８経由で）送配する、ように構成されていてもよい。１つの実施形態では、フェッチフロントエンド６０は、サイクル当たり６つのプリデコーデッドｕｏｐを出力するように構成されていてもよい。他の実施形態では、フェッチフロントエンド６０は、サイクル当たり他の個数のプリデコーデッドｕｏｐを出力するように構成されていてもよい。
【００３５】
ループバッファ６２、マルチプレクサ６８、及びデコーダ７０Ａ−Ｆは、サイクル当たり６つのｕｏｐの処理及び／又は格納につき６つのレーンを有していてもよい。それぞれのレーンは、レーンが有効ｕｏｐを収容しているかどうかを指し示す有効ビットを含んでいてもよい。ループバッファ６２、マルチプレクサ６８、及びデコーダ７０Ａ−Ｆの「レーン」は、「スロット」又は「エントリ」と呼称されることもあることを指摘しておく。他の実施形態では、ループバッファ６２、マルチプレクサ６８、及びデコーダ７０Ａ−Ｆは、６つより多い又は６つ少ないレーンを含んでいてもよく、フェッチフロントエンド６０は、パイプラインの次段が対応でき得る限り多くのサイクル当たりｕｐｏを出力するように構成されていてもよい。
【００３６】
フェッチフロントエンド６０は、命令キャッシュ（図示せず）から生の命令データを掴み、データの中に命令境界を検出し、命令を命令キャッシュバッファ（図示せず）及び／又はアライナ（図示せず）にバッファし、命令を６つまでのｕｏｐのセットへ拡張し、これらのｕｏｐについて適切なペイロードを生成するものであってもよい。６つまでのｕｏｐのセットそれぞれは「デコードグループ」と呼称されることもある。他の実施形態では、デコードグループは他の個数のｕｏｐを含んでいてもよい。デコードグループは、それぞれのクロックサイクル中に、ループバッファ６２及びマルチプレクサ６８のレーンへ配信されることになろう。ここでの使用に際し、「レーン」とは、それぞれのクロックサイクル中にｕｏｐを処理及び／又は格納するように構成されている論理を含む経路と定義することができよう。
【００３７】
フェッチフロントエンド６０は、命令をｕｏｐへ拡張し、これらのｕｏｐをループバッファ６２及びマルチプレクサ６８へ送給している。１つの実施形態では、フェッチフロントエンド６０によってフェッチされてプリデコーデッドｕｏｐへとプリデコードされる命令は、ＡＲＭ  ＩＳＡに基づいていてもよい。それぞれのプリデコーデッドｕｏｐは、命令ｏｐコードビット、命令プリデコードビット、及びｕｏｐ番号、を含んでいてもよい。命令ｏｐコードビットは、遂行されることになるオペレーションを特定している。プリデコードビットは、命令のマップ先のｕｏｐの数を指し示している。ｕｏｐ番号は、複数ｕｏｐからなる命令シーケンス中のどのｕｐｏが生成されるべきかを表している。他の実施形態では、他のＩＳＡが利用されていてもよく、命令は、各種方式でデコード及びフォーマットされることであろう。
【００３８】
プロセッサがループバッファモードにないとき、フェッチフロントエンド６０によって生成されたプリデコーデッドｕｏｐはデコーダ７０Ａ−Ｆへマルチプレクサ６８を介して送配されることになる。どの経路がマルチプレクサ６８を経由してデコーダ７０Ａ−Ｆの入力へ連結されているかを判定するために、ループバッファコントロールユニット６４からの選択信号がマルチプレクサ６８へ連結されていてもよい。プロセッサがループバッファモードにあるときは、プリデコーデッドｕｏｐは、ループバッファ６２から読み出され、デコーダ７０Ａ−Ｆへ送配される。プリデコーデッドｕｏｐは、デコードされ、次いでデコーダ７０Ａ−Ｆの出力からプロセッサパイプラインの次段へ送配されることになる。１つの実施形態では、プロセッサパイプラインの次段は、図２のマップ／ディスパッチユニット３６の様なマップ／ディスパッチユニットであってもよい。
【００３９】
ループバッファコントロールユニット６４は、フェッチされプリデコードされた命令内にループを識別するように構成されていてもよい。ループが或る程度の確実度で識別されたら、次いでループバッファコントロールユニット６４は、当該ループをループバッファ６２にキャッシュさせ、フェッチフロントエンド６０をシャットダウンさせて、プロセッサパイプラインの残部がループバッファ６２から送給を受けられるようにしてもよい。ループの複数の反復がループバッファ６２にキャッシュされてもよく、これらのキャッシュされた反復が繰り返しパイプラインを下ってディスパッチされてゆくことになろう。ループバッファコントロールユニット６４は、ループの反復をループバッファ６２へ書き込むとき、ループバッファ６２内でどの行が書き込まれるかを判定するのに書き込みポインタを利用してもよい。同様に、ループバッファ６２からの読み出し時には、ポインタを利用して読み出し中の現在の行を指させるようにしてもよい。
【００４０】
キャッシュするループを識別するため、先ず、フェッチされた命令の中で、後方分岐枝が検出されることになる。「後方分岐枝（backward taken branch）」とは、命令シーケンス中の先の命令へ枝分かれしている分岐枝と定義することができよう。後方分岐枝が行き着く先の命令がループの始まりと考えられよう。１つの実施形態では、一部の特定の型式のループだけがバッファリングの候補として考慮されてもよい。例えば１つの実施形態では、バッファリングが考慮されるループ候補としては、ループの反復の全てが不変でなくてはならない。
【００４１】
ループバッファコントロールユニット６４は、ループバッファリングのための判定基準に合致するループを形成している命令を求めて、命令ストリームを監視することになろう。ループバッファコントロールユニット６４は、所与のループ候補がどの様に見えるかについての情報を全て捕捉してもよい。或る一定の期間中、ループ候補は複数の反復に亘って追跡されて、当該ループ候補が同じであり続けるかどうかが確かめられてもよい。例えば、ループの始まりからループ内の１つ又はそれ以上の命令までの距離が最初の反復で記録され、それが以降の反復で監視されて、これらの距離が同じままであるかどうかが判定されてもよい。
【００４２】
幾つかの実施形態では、ループ候補が不変であり、以上に掲げられた他の判定基準に合致していたとしても、ループ候補の他の特性が、当該ループ候補がループバッファ６２にキャッシュされる資格を奪うこともある。例えば、ループ候補のサイズが大きすぎてループバッファ６２に納まりきらなければ、当該ループ候補は失格となろう。更に、分枝追跡表６６のサイズに等しいループ内最大許容分岐枝数があるかもしれない。分岐枝の数がこの数を超過していれば、その結果、ループは、ループバッファ６２にキャッシュされる候補としての考慮から除外されてしまう。１つの実施形態では、分枝追跡表６６は、ループ内の分岐枝について８つのエントリを含んでいてもよい。他の実施形態では、分枝追跡表６６は、ループ内の分岐枝について８つより多い又は８つより少ないエントリを有していてもよい。
【００４３】
１つの実施形態では、同じ後方分岐枝が２回以上検出されたら、次に、当該ループについて情報を捕捉する状態マシンがループバッファコントロールユニット６４によって始動させられることになる。例えば、ループバッファコントロールユニット６４は、ループ候補の分岐枝を追跡するのに分枝追跡表６６を利用してもよい。分枝追跡表６６は、ループの始まりからそれぞれの分岐枝までの距離を追跡記録している。
【００４４】
ループのそれぞれの反復が、ループの始まりから各分枝までｕｏｐの数が同じであるように実行しているなら、その結果、当該ループ候補は不変であると見なされよう。表６６中のそれぞれの分枝までの距離は、ループ候補が不変であってキャッシュされるべきであると判定される以前に、或る一定の反復数の間、追跡されることであろう。ループ候補の不変性を追跡するために割り当てられる時間の量は、ループ反復数及び／又は遭遇される分枝数に基づくものであろう。
【００４５】
次に図４を見ると、フェッチ及びデコードユニット内のループバッファの別の実施形態が示されている。１つの実施形態では、ループバッファ８４は、図４に示されている様にプロセッサパイプライン内でデコーダ８２Ａ−Ｆから下流に置かれていてもよい。これは、プロセッサパイプライン内でデコーダ７０Ａ−Ｆから上流に置かれている（図３の）ループバッファ６２とは対照的である。１つの実施形態では、ループバッファ８４は、行と列（又はレーン）へ編成されていてもよい。１つの実施形態では、ループバッファ８４は、１６の行と６つの列を有していてもよい。他の実施形態では、ループバッファ８４は、他の個数の行と列を含んでいてもよい。
【００４６】
フェッチフロントエンド８０は、命令をフェッチし、フェッチされた命令をプリデコーデッドｕｏｐへとプリデコードするようになっていてもよい。次いで、プリデコーデッドｕｏｐは、デコーダ８２Ａ−Ｆへ送配されることになる。１つの実施形態では、フェッチフロントエンド８０は、サイクル当たり６つのプリデコーデッドｕｏｐを生成し、デコーダ８２Ａ−Ｆの６つのレーンへ送配する、ように構成されていてもよい。デコーダ８２Ａ−Ｆは、プリデコーデッドｕｏｐをデコーデッドｕｏｐへとデコードする。次いで、デコーダ８２Ａ−Ｆは、デコーデッドｕｏｐを、プロセッサパイプラインの次段へマルチプレクサ９０を介して送配する。更に、デコーダ８２Ａ−Ｆは、ループ候補が識別され、ループバッファ８４の中へキャッシュさせるための判定基準に合致した場合、ｕｏｐをループバッファ８４へ送配する。マルチプレクサ９０の出力は、プロセッサパイプラインの次段へ連結されていてもよい。１つの実施形態では、プロセッサパイプラインの次段は、マップ／ディスパッチユニットであってもよい。
【００４７】
ループバッファ８４、ループバッファコントロールユニット８６、及び分枝追跡表８８は、図３に示されているプロセッサフロントエンドに関連して説明されている機能と同様の機能を遂行するように構成されていてもよい。図４での１つの重要な違いは、ループバッファ８４は、図３でループバッファ６２がプリデコーデッドｕｏｐを格納しているのとは対照的に、デコーデッドｕｏｐを格納していることである。それ故、デコーデッドｕｏｐは典型的にプリデコーデッドｕｏｐより多くの情報を有しているがために、ループバッハ８４はより大量のデータに対応できるようにループバッファ６２より大きいサイズとなろう。ループバッファ８４は、更に、図３及び図４に示されている２つの場所に加えて、プロセッサパイプライン内の他の場所に置かれていてもよいことを指摘しておく。例えば、ループバッファ８４はフェッチフロントエンド内に置かれていてもよいし、或いは、代わりに、ループバッファ８４はマップ／ディスパッチユニット内に置かれていてもよい。ループバッファがパイプライン内のどこに置かれているかに依存して、ループバッファに格納されているループの内容は、パイプライン内の当該地点におけるそれまでに遂行されてきた命令処理の量に基づいて異なることであろう。
【００４８】
１つの実施形態では、ループ候補の最初の反復で、ループバッファコントロールユニット８６は、分枝追跡表８８に、ループの始まりからループの各分岐枝までの距離を投入してもよい。ループの次の反復で、コントロールユニット８６は、それぞれの分枝が、ループの始まりからの距離について表８８に格納されている対応する距離と同じであるかどうかを判定する。ループ候補が或る一定の反復数の間不変であれば、その結果、当該ループ候補はループバッファ８４にキャッシュされ、ループバッファ８４からパイプラインの残部へ送給されることになる。ループがループバッファ８４からプロセッサパイプラインの残部へディスパッチされている間、フェッチフロントエンド８０とデコーダ８２Ａ−Ｆはパワー供給を落とされてもよい。
【００４９】
次に図５を参照すると、アライナの１つの実施形態が示されている。アライナ１００は、フェッチユニットの部分であってもよく、アライナ１００は、命令待ち行列１０２と命令クロスバー１０４を含んでいてもよい。命令キャッシュ（図示せず）の中の命令データ内に命令境界が検出されると、次いでそれら命令は命令待ち行列１０２へ送配される。命令待ち行列１０２は、何れの容量及び構成を有していてもよい。アライナ１００は、デコーダユニットがそれぞれのクロックサイクル中に適切な数のプリデコーデッド命令を供給される状態を維持するように構成されていてもよく、ここに、適切な数はプロセッサアーキテクチャに基づく。例えば、１つの実施形態では、デコーダが６つあるとして、すると、アライナ１００は、クロックサイクル当たり６つまでのプリデコーデッドｕｏｐを生成し、６つのデコーダへ送配する、ように構成されていてもよい。他の実施形態では、アライナ１００は、クロックサイクル当たり他の個数のプリデコーデッドｕｏｐを生成するように構成されていてもよい。
【００５０】
それぞれクロックサイクルで、アライナ１００は、命令待ち行列１０２の中で命令シーケンスの次の６つのｕｏｐに対応している命令に注目する。アライナ１００は、これらの命令を、適切なデコーダスロットへ、命令クロスバー１０４を介して割り当てる。アライナ１００は、更に、ループ反復の境界（例えば、反復境界１０３）を識別するように構成されていてもよい。例えば、ループ候補がキャッシュのための判定基準に合致している場合、直近の反復の後方分岐枝（ＢＴＢ）、即ち命令Ｃ、が識別されることになろう。
【００５１】
図５に示されている例では、命令待ち行列１０２中に示されている命令は、命令Ａ、Ｂ、Ｃ（ＢＴＢ）、Ｄ、Ｅ、及びＦを含んでいる。命令ＤはＢＴＢの次に続いているので、Ｄはループの始まりとしてマークされることになる。それぞれの命令は、１つ又はそれ以上のｕｏｐへと割られ、命令のマップ先のｕｏｐの数は、命令が命令キャッシュの中へ充填されるときにプリデコードされる。ループをループバッファ（図示せず）にキャッシュさせるべきであると判定されたとき、ループバッファコントロールユニット（図示せず）は、アライナ１００に信号を送ってループのＢＴＢ後にストールさせてもよい。
【００５２】
図５に示されている様に、アライナ１００は、クロックサイクル「Ｎ」中に、ｕｏｐを３つだけデコーダスロットへ書き込んでいる。これら３つのｕｏｐは、Ａ、Ｂ、及びＣ（ＢＴＢ）である。命令Ａ、Ｂ、及びＣのそれぞれは、本例では、単一のｕｏｐ命令である。クロックサイクル「Ｎ」を見て分かる通り、スロット３−５はＢＴＢ（命令Ｃ）がスロット２へ割り当てられたために空である。アライナ１００は、ＢＴＢがデコーダスロットへ割り当てられた後にストールし、従って残りのスロットは、クロックサイクル「Ｎ」の間は埋まらない。次のクロックサイクルで、アライナ１００は、ループの始まりをスロット０へ割り当てる。命令Ｄがループの始まりであり、命令Ｄは本例では３ｕｏｐ命令であるので、よって、対応する３つのｕｏｐ（Ｄ−０、Ｄ−１、及びＤ−２）がクロックサイクル「Ｎ＋１」のデコーダスロット０−２へ割り当てられている。命令Ｅに対応する２つのｕｏｐがクロックサイクル「Ｎ＋１」のスロット３及び４を占め、命令Ｆに対応するｕｏｐがスロット５へ割り当てられることになる。
【００５３】
クロックサイクル「Ｎ」及び「Ｎ＋１」に示されているｕｏｐは、デコーダユニットとループバッファの両方へ送配されてもよい。ループがループバッファへ書き込まれている間も、ループはパイプラインの次段（例えばデコーダ）へ送給され続ける。ループの１つ又はそれ以上の反復がループバッファへ書き込まれた後、今度はパイプラインのバックエンドがループバッファによる送給を受け、フロントエンドはパワー供給を落とされる。
【００５４】
アライナ１００は、更に、同じ方式で、ループバッファへ書き込まれるループの最後の反復の終わりにストールしてもよい。ＢＴＢがどのスロットへ割り当てられようと、そのスロットは、ループバッファの当該行内で書き込まれる最後のスロットということになる。例えば、最終ループ反復をループバッファへ書き込む最後のクロックサイクル中にＢＴＢがスロット１へ書き込まれれば、残りのスロット（スロット２−５）は空で残ることになる。この様にすると、次のクロックサイクルでのループバッファの第１行のスロット０に置かれているループの第１反復の第１ｕｏｐから開始してループが読み出されてゆくときの引き継ぎがすっきりする。
【００５５】
次に図６を参照すると、ループバッファの中へパックされているループの単一反復の１つの実施形態が示されている。ループは、本例では、７ｕｏｐループとされ、それぞれのｕｏｐはループバッファ１１０の中に「ループ１」と標示されている。これはループの一例にすぎず、他のループは他の個数のｕｏｐを含んでいてもよいことを指摘しておく。更に、指摘しておくこととして、ループバッファ１１０はプロセッサパイプライン内の様々な場所の何れに置かれていてもよく、図３及び図４にはそれらの場所の２つの例が示されている。ループバッファ１１０は、６つのレーン（０−５と標示）を含んでいることが示されているが、他のループバッファは他の個数のレーンを有していてもよいことを指摘しておく。更に、ループバッファ１１０の「レーン」は、「スロット」又は「列」と呼称されることもあることを指摘しておく。
【００５６】
ループ１の最初の６つのｕｏｐは、ループバッファ１１０の第１行へ書き込まれている。後方分岐枝に対応している最後のｕｏｐは、ループバッファ１１０の第２行の第１エントリを埋めている。このループの場合、ループをプロセッサパイプラインの次段へディスパッチするには２サイクルかかることになり、平均サイクル当たりｕｏｐ出力は３．５（２クロックサイクルで７ｕｏｐ）ということになる。これは、サイクル当たり６ｕｏｐというサイクル当たり最大可能ｕｏｐ処理量より遙かに少ない。サイクル当たりｕｏｐ処理量を改善するためには、ループ反復を１つより多くループバッファ１１０へ書き込んだ方がよく、それについて以下に更に詳細に説明してゆく。
【００５７】
他の実施形態では、ループバッファ１１０は、６つとは別の他の個数のレーンを含んでいてもよい。例えば、別の実施形態では、ループバッファ１１０は、８つのレーンを有していてもよい。この実施形態では、９ｕｏｐのループなら、この９ｕｏｐのループがループバッファ１１０からディスパッチされた場合、効率の悪いサイクル当たりｕｏｐ処理量になってしまうことであろう。この例では、９つのｕｏｐが２クロックサイクルおきにディスパッチされるので、サイクル当たり命令は平均４．５となろう。これでは、この実施形態の８つというサイクル当たり最大可能ｕｏｐ処理量を遙かに下回ることになる。
【００５８】
様々な実施形態では、異なったフォーマットの命令が、ループバッファ１１０に格納されることもあろう。利用されている異なったフォーマットには、命令、命令オペレーション、プリデコーデッドｕｏｐ、デコーデッドｕｏｐ、ｕｏｐ、ｏｐ、又は他のフォーマットが含まれよう。処理量を一般的に記述するのに、「サイクル当たり命令」、「サイクル当たり命令オペレーション」、及び「サイクル当たりｕｏｐ」という用語が使用されているが、これらの用語は各種命令フォーマットの何れをも指すものと理解されたい。
【００５９】
次に図７を見ると、ループバッファの中へパックされているループの複数の反復の１つの実施形態が示されている。１つの実施形態では、ループは長さが７ｕｏｐとされている。ループバッファ１１０へ書き込まれているループの第１反復は、ループのそれぞれのｕｏｐについて「ループ１」の標示が付されており、ループバッファ１１０内の第１行と第２行のレーン０の中に示されている。「ループ２」と標示されているループの第２反復は、ループの第１反復が終わったところから再び始めてループバッファ１１０へ書き込まれることになる。「ループ２」の第１ｕｏｐは、同じ行の「ループ１」の最後のｕｏｐに隣接するエントリに入れられよう。また、ループの第２反復の最初の５つのｕｏｐは、ループバッファ１１０の第２行のレーン１−５へ書き込まれ、第２反復の最後の２つのｕｏｐは、ループバッファ１１０の第３行へ書き込まれることになる。このパターンは、ループバッファ１１０へ書き込まれるループの次の５つの反復についても継続する。ループバッファ１１０へ書き込まれているそれぞれのループ反復は、他のループ反復と同一である。換言すると、それぞれのループ反復は、ループバッファ１１０へ書き込まれている他のループ反復と全く同じｕｏｐを収容しており、他のループ反復のどれとも見分けがつかない。
【００６０】
図７に示されている様に、ループバッファ１１０は、１６行のエントリを有しており、中間点１１２は第８行の後である。１つの実施形態では、ループの或る反復がループバッファ１１０へ書き込まれているとき、ループの最後のｕｏｐ（即ち後方分岐枝）がループバッファ１１０へ書き込まれたら、そのときループバッファコントロールユニットは中間点１１２に達したかどうかをチェックして確かめてもよい。中間点１１２に達していたなら、その結果、ループの反復をそれ以上ループバッファ１１０へ書き込ませないようにしてもよい。中間点１１２に達していなければ、ループの反復がもう１つループバッファ１１０へ書き込まれることになる。
【００６１】
図７に示されている例では、プロセッサがループバッファモードにあるときのループバッファ１１０からの平均サイクル当たりｕｏｐ出力は、大凡５．４サイクル当たりｕｏｐ処理量（９サイクルで４９ｕｏｐ）となろう。これは、図６に示されている例の、３．５ｕｏｐという平均サイクル当たりｕｏｐ処理量に比べると改善である。
【００６２】
次に図８を参照すると、ループの複数の反復をループバッファ１１０の中へ書き込む場合の別の実施形態が示されている。図７に示されている例に類似しているこの実施形態では、ループの複数の反復がループバッファ１１０へ書き込まれている。しかしながら、この実施形態では、ループ反復の終わりに達すると、或る別の条件がチェックされることになる。チェックされる条件は、ループ反復の最終ｕｏｐがループバッファ１１０の最終レーン（即ちレーン５）へ書き込まれたかどうか、ということであってもよい。この条件に合致していれば、ループの反復のループバッファ１１０への書き込みは停止されることになろう。この条件に合致していなければ、中間点１１２に達しているかどうかが判定されてもよい。中間点１１２に達していれば、その結果、ループバッファ１１０への書き込みは停止されよう。中間点１１２に達していなければ、その結果、ループの反復がもう１つループバッファ１１０へ書き込まれることになろう。
【００６３】
これらの条件に基づき、７ｕｏｐループの６つの反復が、ループバッファ１１０へ書き込まれてゆく。ループの第６反復がループへ書き込まれてしまったところで、当該第６反復の最後のｕｏｐは第７行のレーン５へ書き込まれている。従って、ループバッファ１１０からのサイクル当たりｕｏｐ出力は最大化されており、よって反復がそれ以上ループバッファ１１０へ書き込まれる必要はない。書き込みは、中間点１１２にまだ達していないにもかかわらず停止されることになる。
【００６４】
他の実施形態では、反復をループバッファへ書き込むより前に、ループバッファへ書き込まれることになる反復の数が求められてもよいことを指摘しておく。例えば、ループの検出及び命令の監視には、ループの反復に含まれている命令又はｕｏｐの数を数えることが含まれていてもよい。加えて、ループバッファ内の利用可能な空間が、既知であるか又は求められてもよい。ループ反復と利用可能なバッファストレージのサイズに基づいて、どれだけの数の反復をループバッファへ書き込むかについて計算が行われてもよい。様々な実施形態では、書き込まれることになる反復の数は、バッファからの最大命令処理量が実現されるように選定されてもよい。他の実施形態では、どれだけの数のループ反復をバッファへ書き込むかに関し、追加の制約が設けられていてもよい。例えば、バッファの或る既定部分（例えば半分）より多くは書き込まない、とされていてもよい。数多くのその様な代わりのやり方が実施可能であり、企図されている。
【００６５】
これらの条件を利用することで、プロセッサがループバッファモードにあるときのループバッファ１１０からの高いサイクル当たりｕｏｐ処理量を実現することができよう。他の実施形態では、他のサイズのループについて、これらの条件が利用されていてもよい。例えば、９ｕｏｐのサイズを有するループであれば、結果的に、２つの反復がループバッファ１１０へ書き込まれることになる。ループバッファ１１０の最初の３行分が埋まったところで、９ｕｏｐループの反復はそれ以上ループバッファ１１０へ書き込まれないようにしておく。こうすれば、サイクル当たり６ｕｏｐという最大可能処理量を実現させることができよう。
【００６６】
他の実施形態では、ループの反復をもう１つループバッファ１１０へ書き込むべきか否かを判定するのに他の条件が利用されていてもよい。例えば、別の実施形態では、反復の最後のｕｏｐが行の最も右側２つのスロットのどちらかへ書き込まれれば、その結果、ループバッファ１１０への書き込みが終結されてもよい。更に別の実施形態では、ループ反復がループバッファ１１０へ書き込まれた後に処理量が計算され、次いで、当該処理量が閾値と比較されてもよい。処理量が閾値を上回っていれば、その結果、ループバッファ１１０への書き込みは終結されることになろう。前記処理量が閾値を下回っていれば、ループ反復がもう１つループバッファ１１０へ書き込まれることになろう。これら及び他の条件は、更に別の実施形態では、独立に使用されていてもよいし又は何れかの適したやり方で組み合わされていてもよい。
【００６７】
図９を参照すると、ループの複数の反復をループバッファにパックするための方法１２０の１つの実施形態が示されている。考察上、この実施形態の諸段階は逐次的に順を追って示されている。以下に説明されている方法の様々な実施形態では、記載されている要素の１つ又はそれ以上は、同時に遂行されてもよいし、示されている順序とは異なった順序で遂行されてもよいし、又はまるごと省略されてもよい、ということに留意されたい。更に、所望に応じて他の追加の要素が遂行されてもよい。
【００６８】
１つの実施形態では、ループ候補が命令ストリームの中に検出される（ブロック１２２）。次いで、ループバッファコントロールユニットが、当該ループ候補はループバッファリングのための判定基準に合致していると判定する（ブロック１２４）。ループバッファコントロールユニットは、次いで、当該ループ候補についてループバッファモードを開始する（ブロック１２６）。ループバッファモードが開始されると、ループ終結分枝ｕｏｐがマークされて、それがループの終わりと識別されることになる。ループ終結分枝は、サブルーチンコールを除いた直進後方分岐枝（direct backward taken branch）と定義することができよう。更に、ループ終結分枝の後の次のｕｏｐであるループの最初のｕｏｐがループの始まりとしてマークされることになる。フェッチユニットのアライナはループ終結分枝の後にストールして、ループ内の最初のｕｏｐがループバッファの第１行のスロット０へ書き込まれるようにする（ブロック１２８）。
【００６９】
次に、ループの反復１つ分がループバッファへ書き込まれる（ブロック１３０）。ループの反復がループバッファへ書き込まれてゆくと、反復の終わりにループ終結分枝が検出される（ブロック１３２）。ループ終結分枝の検出に応えて、ループバッファコントロールユニットは、ループバッファが既に半分埋まっているかどうかをチェックして確認する（条件ブロック１３４）。１つの実施形態では、ループバッファコントロールユニットは、ループバッファに対する書き込みポインタを監視し、書き込みポインタがループバッファの中間点を通り越したかどうかを確認してもよい。
【００７０】
ループバッファが半分まで埋まっていない場合（条件ブロック１３４）、ループの反復がもう１つループバッファへ書き込まれる（ブロック１３０）。この反復について、ループの第１ｕｏｐ（即ちループの始まり）は、ループの先の反復のループ終結分枝の後の次の隣接するスロットへ書き込まれるものであり、当該スロットは、ループ終結分枝が行の最も右側のスロット以外の何れかのスロットに位置しているなら、ループバッファの同じ行ということになろう。これは、ループの第１反復がどの様にループバッファへ書き込まれるかとは対照をなす。第１反復については、アライナは、先の反復由来の終結分枝の後にストールして、第１反復の第１ｕｏｐがループバッファの第１行の第１（又は最も左側）のスロットへ書き込まれるようにする。
【００７１】
ループバッファが半分より多く埋まっている場合（条件ブロック１３４）、ループバッファコントロールユニットは、ループの反復をそれ以上ループバッファへ書き込むことを打ち切るようにフロントエンドへ合図する（ブロック１３６）。ループの最後の反復について、フェッチユニットのアライナは、ループ終結分枝をディスパッチした後に停止を命ぜられてもよい。この様にすれば、プロセッサがループバッファモードへ移行したときのｕｏｐをループバッファからディスパッチする段階への引き継ぎがすっきりする。加えて、プロセッサがループバッファモードに入ると、命令待ち行列の中のｕｏｐ及びプロセッサパイプラインのフロントエンドの更に上流の命令がフラッシュされてもよい。ブロック１３６の後、ループバッファは、ループの１つ又はそれ以上の反復を、プロセッサパイプラインの次段へディスパッチする（ブロック１３８）。ループがループバッファからディスパッチされている間、プロセッサのフロントエンドはシャットダウンされることになろう。
【００７２】
１つの実施形態では、ループバッファへ書き込まれてしまった行の数が格納されることになる。ループバッファコントロールユニットは、格納済みの有効行の数を使用して、ループバッファから読み出されるべき有効行がもう無い状態になるのは何時かを判定することができよう。例えば、ｕｏｐの行がプロセッサパイプラインの次段へディスパッチされるとき、読み出しポインタは、ループバッファの行を進んでゆき、そうして格納済みの有効行の数によって指し示される通りにループバッファ内にそれ以上有効行が無くなった時点でリセットされてループバッファの一番上へ戻されるようになっていてもよい。
【００７３】
ブロック１３８の後、方法１２０は、ループが終結した時点で終わる。ループが終結した後、フロントエンドは引き返され、フェッチユニットは命令をプロセッサパイプラインの残部へ供給する。
【００７４】
次に図１０を参照すると、システム１４０の１つの実施形態のブロック線図が示されている。示されている様に、システム１４０は、デスクトップコンピュータ１５０、ラップトップコンピュータ１６０、タブレットコンピュータ１７０、セルフォン１８０、又はそれ以外、のチップ、回路構成、構成要素、など、を表している。図示の実施形態では、システム１４０は、外部メモリ１４２へ連結されている（図１の）ＩＣ１０という少なくとも１つのインスタンスを含んでいる。
【００７５】
ＩＣ１０は、１つ又はそれ以上の周辺機器１４４及び外部メモリ１４２へ連結されている。ＩＣ１０への供給電圧並びにメモリ１４２及び／又は周辺機器１４４への１つ又はそれ以上の供給電圧を供給する電源１４６も提供されている。様々な実施形態では、電源１４６はバッテリ（例えば、スマートフォン、ラップトップコンピュータ、又はタブレットコンピュータ内の充電式バッテリ）を表していよう。幾つかの実施形態では、ＩＣ１０のインスタンスは１つより多く含まれていてもよい（同様に、１つより多い外部メモリ１４２が含まれていてもよい）。
【００７６】
メモリ１４２は、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、シンクロナスＤＲＡＭ（ＳＤＲＡＭ）、ダブルデータレート（ＤＤＲ、ＤＤＲ２、ＤＤＲ３、など）ＳＤＲＡＭ（ｍＤＤ３などの様なＳＤＲＡＭのモバイルバージョン及び／又はＬＰＤＤＲ２などの様なＳＤＲＡＭの低パワーバージョンを含む）、ＲＡＭＢＵＳ  ＤＲＡＭ（ＲＤＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、など、の様な何れの型式のメモリであってもよい。１つ又はそれ以上のメモリデバイスは、回路板へ連結されて、シングルインラインメモリモジュール（ＳＩＭＭ）、デュアルインラインメモリモジュール（ＤＩＭＭ）、など、の様なメモリモジュールを形成していてもよい。
【００７７】
周辺機器１４４は、システム１４０の型式に依存して、何れの所望の回路構成を含んでいてもよい。例えば、１つの実施形態では、周辺機器１４４には、ｗｉｆｉ、ブルートゥース、セルラー、全地球測位システム、など、の様な、様々な型式のワイヤレス通信用のデバイスを含めることができる。周辺機器１４４には、ＲＡＭストレージ、ソリッドステートストレージ、又はディスクストレージ、を含め、追加のストレージも含まれる。周辺機器１４４には、タッチディスプレイスクリーンやマルチタッチディスプレイスクリーンを含むディスプレイスクリーン、キーボード又は他の入力デバイス、マイクロフォン、スピーカ、など、の様なユーザーインターフェースデバイスを含めることができる。
【００７８】
次に図１１を見ると、（図１の）ＩＣ１０に含まれている回路構成を表す１つ又はそれ以上のデータ構造を含んでいるコンピュータ可読媒体１９０のブロック線図の１つの実施形態が示されている。一般的にいうと、コンピュータ可読媒体１９０には、磁気式媒体又は光学式媒体である例えばディスクやＣＤ−ＲＯＭ又はＤＶＤ−ＲＯＭ、ＲＡＭ（例えば、ＳＤＲＡＭ、ＲＤＲＡＭ、ＳＲＡＭ、など）、ＲＯＭ、など、の様な揮発性又は不揮発性のメモリ媒体、並びに、伝送媒体を介してアクセスできる媒体又はネットワーク及び／又はワヤレスリンクの様な通信媒体を介して送配される電気信号、電磁信号、又はデジタル信号の様な信号を介してアクセスできる媒体、の様な何れかの非一時的記憶媒体を含めることができる。
【００７９】
概して、コンピュータ可読媒体１９０上の回路構成の（単数又は複数の）データ構造は、プログラムによって読み出され、直接又は間接に、回路構成を備えるハードウェアを製作するのに使用されるものである。例えば、（単数又は複数の）データ構造は、ハードウェアの機能性についてのＶｅｒｉｌｏｇ又はＶＨＤＬの様な高級設計言語（ＨＤＬ）による１つ又はそれ以上の動作レベル記述又はレジスタ転送レベル（ＲＴＬ）記述を含んでいてもよい。当該（単数又は複数の）記述は、合成ツールによって読み出され、当該合成ツールが記述を合成して、合成ライブラリからのゲートのリストを備える１つ又はそれ以上のネットリストを作製することであろう。（単数又は複数の）ネットリストは、回路構成を備えるハードウェアの機能性を表してもいるゲートのセットを備えている。（単数又は複数の）ネットリストは、次に、マスクに適用させる幾何学形状を記述する１つ又はそれ以上のデータセットを作製するように配置され、経路指定されることであろう。その後、マスクは、様々な半導体製作工程で回路構成に対応する単数又は複数の半導体回路を作製するのに使用されることになろう。代わりに、コンピュータ可読媒体２３０上の（単数又は複数の）データ構造は、所望に応じ、（単数又は複数の）ネットリスト（合成ライブラリ有り又は合成ライブラリ無し）であってもよいし、又は（単数又は複数の）データセットであってもよい。更に別の代わりのやり方では、データ構造は、スキマティックプログラムの出力又はそこから導出された（単数又は複数の）ネットリスト又は（単数又は複数の）データセットを備えていてもよい。
【００８０】
コンピュータ可読媒体１９０はＩＣ１０という表現を含んでいるが、他の実施形態は、ＩＣ１０の何れかの部分又は複数部分の組合せ（例えば、ループバッファ、ループバッファコントロールユニット、アライナ）の表現を含んでいてもよい。
【００８１】
以上に説明されている実施形態は実施形の非限定的な例であることを強調しておかなくてはならない。以上の開示が十分に理解されたからには、当業者には数多くの変型及び修正が自明となることであろう。付随の特許請求の範囲は、その様な変型及び修正全てを網羅すると解釈されるべきものとする。
【符号の説明】
【００８２】
１０  集積回路
１２  プロセッサ複合体
１４、１６  中央処理ユニット（ＣＰＵ）
１８  レベル２（Ｌ２）キャッシュ
２０  バスインターフェースユニット（ＢＩＵ）
２２  メモリコントローラ
２４、２６  メモリ物理インターフェース回路（ＰＨＹ）
３０  コア
３２  フェッチ及びデコード（ＦＥＤ）ユニット
３３  Ｌ１命令キャッシュ
３４  アライナ
３５  ループバッファ
３６  マップ及びディスパッチユニット
３８  リオーダバッファ（ＲＯＢ）
４０  メモリ管理ユニット（ＭＭＵ）
４２  コアインターフェースユニット（ＣＩＦ）
４４  実行ユニット
４６  ロード−格納ユニット（ＬＳＵ）
４８  Ｌ１データキャッシュ
５０  格納待ち行列
５２  ロード待ち行列
６０  フェッチフロントエンド
６２  ループバッファ
６４  ループバッファコントロールユニット
６６  分枝追跡表
７０Ａ−Ｆ  デコーダ
８０  フェッチフロントエンド
８２Ａ−Ｆ  デコーダ
８４  ループバッファ
８６  ループバッファコントロールユニット
８８  分枝追跡表
１００  アライナ
１０２  命令待ち行列
１０３  反復境界
１０４  命令クロスバー
１１０  ループバッファ
１１２  中間点
１４０  システム
１４２  外部メモリ
１４４  周辺機器
１４６  電源
１５０  デスクトップコンピュータ
１６０  ラップトップコンピュータ
１７０  タブレットコンピュータ
１８０  セルフォン
１９０  コンピュータ可読媒体
【図１】
2014002736.tif 000003
【図２】
2014002736.tif 000004
【図３】
2014002736.tif 000005
【図４】
2014002736.tif 000006
【図５】
2014002736.tif 000007
【図６】
2014002736.tif 000008
【図７】
2014002736.tif 000009
【図８】
2014002736.tif 000010
【図９】
2014002736.tif 000011
【図１０】
2014002736.tif 000012
【図１１】
2014002736.tif 000013
【外国語明細書】
2014002736000001.pdf