(57)【要約】      （修正有）【課題】性能の大幅な劣化を招くことなく、動的命令スケジューリング機構の構成をより簡易な構成とし、以て、消費電力をより低減させることが可能なプロセッサを提案する。【解決手段】依存情報を用いた命令グループ化による手法を採用する。  マスターキュー（１２０）とスレーブキュー（１２２）を備えたプロセッサにおいて、マスターキュー内の命令が選択され、発行のためにアクセスされる際、スレーブキューに命令が格納されていることを示すフラグ（１２４）が立っていた場合、ラッチ（１２６）を介して次のサイクルでスレーブキュー内の命令が発行される。ウェイクアップ時に連想マッチを行うためのＣＡＭはマスターキュー側にのみ備えられている。【選択図】図４
2007328484.tif 000002
【特許請求の範囲】
【請求項１】
実行すべき命令間の依存関係に関する情報を利用し、前記命令を動的にグルーピングし、グルーピングした命令群を命令キューの同一エントリーにディスパッチする制御回路、
を備えたプロセッサ。
【請求項２】
請求項１記載のプロセッサにおいて、
前記命令キューは、マスターキューと、スレーブキューと、を備え、
前記制御回路は、実行すべき命令間の依存関係に関する情報を利用し、前記命令をグルーピングし、グルーピングした命令群に含まれる一方の命令をマスターキューに書き込み、他方の命令をスレーブキューに格納する制御回路と、
を備えたプロセッサ。
【請求項３】
請求項１又は２記載のプロセッサにおいて、
前記命令キューは複数のバンクに分割されており、
前記制御回路は、前記グルーピングした命令群を、前記複数のバンクにそれぞれ格納することを特徴とするプロセッサ。
【請求項４】
命令キューを含む命令パイプラインを備えたプロセッサにおいて、
１エントリーにｎ個の命令を格納可能な前記命令キューと、
実行対象であるプログラムから命令を取り出し、それらの中から、連続して実行可能なｎ個以下の命令群を取り出し、このｎ個以下の命令群を前記命令キューの１エントリーに格納する制御回路と、
を含み、
前記命令キューは、
ｎ本のキュー群と、
前記ｎ本のキューの内、いずれか１本のマスターキューに対して設けられたＣＡＭと、
を備えることを特徴とするプロセッサ。ここで、前記ｎは２以上の整数である。
【請求項５】
命令キューを含む命令パイプラインを備えたプロセッサにおいて、
１エントリーにｎ個の命令を格納可能な前記命令キューと、
実行対象であるプログラムから命令を取り出し、それらの中から、連続して実行可能なｎ個以下の命令群を取り出し、このｎ個以下の命令群を前記命令キューの１エントリーに格納する制御回路と、
を含み、
前記命令キューは、
ｎ本のキュー群と、
前記ｎ本の各キューの１／ｎの部分を集めて論理的に構成した論理マスターキューと、
前記論理マスターキューに対して設けられたＣＡＭと、
を備えることを特徴とするプロセッサ。ここで、前記ｎは２以上の整数である。
【請求項６】
請求項４又は５記載のプロセッサにおいて、
各レジスタのレディ状態を表すフラグと、前記各レジスタ毎にそのレジスタのプロデューサ命令が前記命令キュー中で存在する位置を記憶するキューフィールドと、を備えるステートテーブル、
を含み、
前記制御回路は、前記ステートテーブルに基づき、前記命令キューに格納しようとする命令のソースレジスタの一方が、レディ状態にあるという第１の条件を満たし、他方のソースレジスタがレディ状態でなくそのプロデューサ命令が前記命令キュー中に存在するという第２の条件を満たす場合は、前記プロデューサ命令が存在する同一エントリーに、前記格納しようとしている命令を格納することを特徴とするプロセッサ。
【請求項７】
請求項４又は５記載のプロセッサにおいて、
各レジスタのレディ状態を表すフラグと、前記各レジスタ毎にそのレジスタのプロデューサ命令が前記命令キュー中で存在する位置を記憶するキューフィールドと、を備えるステートテーブル、
を含み、
前記制御回路は、前記ステートテーブルに基づき、前記命令キューに格納しようとする命令のソースレジスタの一方が、レディ状態でなくそのプロデューサ命令が前記命令キュー中に存在するという第３の条件を満たし、他方のソースレジスタが前記プロデューサ命令のいずれかのソースレジスタと一致するという第４の条件を満たす場合は、前記プロデューサ命令が存在する同一エントリーに、前記格納しようとしている命令を格納することを特徴とするプロセッサ。
【請求項８】
請求項４又は５記載のプロセッサにおいて、
前記制御回路は、ソースレジスタが全てレディ状態にある命令群を、前記命令キュー中の同一のエントリーに格納することを特徴とするプロセッサ。
【請求項９】
請求項４又は５記載のプロセッサにおいて、
前記命令キューは、２個以上の命令が格納されているか否かを表すスレーブキューバリッドフラグを各エントリー毎に有し、さらに、
前記命令キュー中の命令を、そのエントリーから取り出して実行する実行手段であって、前記マスターキュー又は前記論理マスターキューから命令を取り出した後、前記スレーブキューバリッドフラグが２個以上の命令を格納していることを表す場合には、引き続き、そのエントリーから残りの命令を取り出して実行する実行手段、
を備えることを特徴とするプロセッサ。
【請求項１０】
請求項４又は５記載のプロセッサにおいて、
前記命令キューがｎ本のバンクに分割され、消費電力が削減されていることを特徴とするプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、汎用プロセッサにおける改良された動的命令スケジューリングに関する。特に命令間の依存情報を用いた命令のグループ化によって消費電力を削減した動的命令スケジューリングに関する。
【背景技術】
【０００２】
動的命令スケジューリング機構
近年、汎用のマイクロプロセッサにおいては、多命令同時実行や、アウト・オブ・オーダー実行可能なものが多い。
【０００３】
これは、汎用のマイクロプロセッサにおいては、従来のバイナリコード資産を高速に実行する場合を考慮し、高速処理のために実行時に並列性を抽出することが要求された結果である。
【０００４】
さて、このような、多命令同時実行、アウト・オブ・オーダー実行を行うためのメカニズムを動的命令スケジューリング機構と呼ぶ。
【０００５】
消費電力
動的命令スケジューリング機構の問題点として、ハードウェア構成が複雑になり、消費電力が大幅に増加してしまうことが従来から知られている。この問題点は、特にバッテリ駆動の携帯機器において大きな問題となっている。
【０００６】
また、現在ではハイエンドシステムにおいても消費電力増大にともなう発熱量の増大が深刻化しており、複雑な動的命令スケジューリング機構を用いることが難しくなっている。このため、多命令同時実行や、アウト・オブ・オーダー実行機構のハードウェアの簡単化、低消費電力化は、非常に重要な課題とされている。
【０００７】
このように、現在、動的命令スケジューリング機構を簡単化し低消費電力化を図ることは強く要望されている。
【０００８】
従来の動的命令スケジューリング機構
構成
動的命令スケジューリング機構は、主に、命令キューと、命令スケジューリング機構と、から構成される。
【０００９】
（１）命令キュー
命令キューは、命令が実行可能になるまで命令の情報を保持する手段であり、命令ウィンドウとも呼ばれる。
【００１０】
（２）制御手段
制御手段は、命令スケジューリング動作を実行する手段であり、上記命令キューに所定の命令を格納し、また発行可能な命令を選択し、発行する手段である。
【００１１】
このような動的命令スケジューリング機構の一例を示す構成図が図１３に示されている。
【００１２】
ここで示す例では、４ｗｉｄｔｈのスーパースカラープロセッサの例が示されている。この場合、図１３に示すように、命令キュー１０に命令を書き込む書き込みポート１０ａが４個備えられている。また、命令キュー１０には命令を読み出す読み出しポート１０ｂも４個備えられている。
【００１３】
さらに、制御手段１２から、命令キュー１０に対しては、発行する命令を選択する選択線１２ａが４本出ている。
【００１４】
このような構成によって、図１３に示す動的命令スケジューリング機構を有するスーパースカラープロセッサは１サイクルで４個の命令を命令キュー１０に書き込むことができ、また、１サイクルで４個の命令を選択（Select）することができる。また、１サイクルで４個の命令を発行（Issue）することができる。これらの書き込み、選択、発行は、制御手段１２が実行する。
【００１５】
命令キュー１０のエントリー数は任意の数を取りうる。例えば、１６個でも３２個でも、また６４個でもよい。
【００１６】
動作
典型的なＲＩＳＣパイプラインの動作の概念図が図１４に示されている。以下、典型的な動的命令スケジューリング機構の動作を図１３、図１４に基づき説明する。
【００１７】
まず、命令をフェッチ（Fetch）し、そのデコード（Decode）が行われる（図１４参照）。そして、命令はレジスタ・リネーミングステージ（Rename）を経て命令キュー１０にイン・オーダーに格納（ディスパッチ：Dispatch）される。命令キュー１０は、ＩＱ（Instrtuction Queue）と呼ばれる場合もある。この格納は制御手段１２が行う。
【００１８】
次に、命令キュー１０内の各命令のソース・オペランドが揃い次第、アウト・オブ・オーダーに発行されて演算が行われる。この発行も制御手段１２が行う。演算は、実行ステージのＡＬＵ等の演算手段が行う。
【００１９】
図１３、図１４に基づき、命令に関する処理をより詳細に説明しよう。
【００２０】
まず、制御手段１２は、この命令キュー１０内でオペランドが揃った命令を起こす動作を実行する。ここでオペランドが揃うとは、演算対象が全て準備された状態（利用可能な状態）を言う。また、命令を起こすとは、その命令を実行可能な状態に置くことを言い、その動作はウェイクアップ（WakeUp）と呼ばれる。実行可能な状態をレディ（Ready）と呼び、「命令がレディになった」等と表現する。具体的には、レディになった状態を示すフラグ等を立てることによってウェイクアップが行われる。
【００２１】
次に、制御手段１２は、実行可能な命令（すなわちレディ状態の命令）の中から、発行する命令を選択する。この選択はセレクト（Select）と呼ばれる。制御手段１２は、選択した命令を発行（Issue）し、必要なレジスタファイルの読み出し等が行われる。
【００２２】
次に、発行（Issue）によって命令が実行ステージに送られると、実行ステージにおいて演算が実行され、結果を格納するためにデータキャッシュのアクセスが行われる。最後にコミット処理が実行される（図１４参照）。
【００２３】
命令のスケジューリング
さて、命令のスケジューリングは、命令のウェイクアップと、セレクトという２個のフェーズからなる。いずれも制御手段１２が行う。
【００２４】
ウェイクアップでは、その前提としてオペランドのレディ状態の設定が行われる。
【００２５】
まず、発行された命令のデスティネーションタグが命令キュー１０にブロードキャストされ、命令キュー１０内の全ての待機しているエントリー（まだ発行されていない命令が格納されているエントリー）に対して、そのエントリーにストアされているソース・レジスタ（すなわちその命令が用いるソースオペランド）のタグとの連想マッチが行われる。この連想マッチングで、タグが一致したソースはレディであるとマークされる。
【００２６】
このようにして、命令のソースが全てレディとマークされた場合、その命令はウェイクアップされて「レディ」となる。具体的には、制御手段１２がマークを確認した上でレディ状態に設定する。
【００２７】
その結果、その命令はセレクトの対象となる。このセレクト（選択）では、選択可能な命令（最大でＮ）の中からＷ命令が選ばれる。ここで、Ｎは命令キュー１０のエントリー数であり、Ｗはプロセッサの発行幅である。すなわち、そのプロセッサは最大Ｗ個の命令を発行することができる。この選択も発行も制御手段１２が実行する。
【００２８】
図１３の例では、４個の読み出しポート１０ｂが備えられているので、上記Ｗ（発行幅）は「４」である。
【００２９】
命令キュー１０の構成は一般的にはフル・アソシアティブである。そして、各サイクル毎に、新しい命令を発行するためのウェイクアップとセレクトとが実行されうる。潜在的には、どのエントリーに対してもこのウェイクアップとセレクトとを実行することが可能である。したがって、命令キュー１０へのアクセスは各サイクル毎に行われる。
【００３０】
具体的には、
・命令のディスパッチ（命令の書き込み）
・ウェイクアップのためのタグのブロードキャスト
・セレクト・発行（命令の読み出し）
の各時点において命令キュー１０へのアクセスが生じる。このアクセスが、プロセッサの主要な電力消費要因であると一般的に言われている。
【００３１】
さて、命令レベル並列度(ILP: Instruction Level Parallelism) を可能な限り抽出して、プロセッサを高性能化するためには、大容量の命令キュー、及び多数の同時命令発行が必須のものである。
【００３２】
しかし、一般的に命令キューのキューサイズや命令キューのポート数をむやみに増加させたのでは、消費電力が急激に増大してしまうことが広く知られている。これは、命令キューのエントリーの数に比例して連想記憶メモリーの連想マッチングの比較対象が増え、ポート数が増えれば、指数関数的により一層制御回路が複雑なものとなり、消費電力も指数関数的に増大すると考えられる。
【００３３】
そこで、従来より、これら命令キューや命令スケジューリング機構を対象として、
（ａ）回路の複雑化を抑え消費電力を削減する技術
（ｂ）サイクルタイムを短縮するための技術
が数多く提案されている。例えば後述する非特許文献１や非特許文献２にこれらの技術が開示されている。
【００３４】
しかしながら、消費電力を削減するための抜本的な手法、特に性能をそれほど落とさずに消費電力を抑制する手法は未だ知られていない。
【００３５】
このように、従来から、動的命令スケジューリング機構の大容量・多ポート化による複雑さや消費電力の増大の問題への対処を目的とした手法が多く提案されている。
【００３６】
例えば、非特許文献３では、命令キューにとどまっている命令の消費電力を考慮し、キャッシュミスなどによるレイテンシの長い命令については、巨大な命令待ちバッファ（Ｗａｉｔｉｎｇ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｂｕｆｆｅｒ：  ＷＩＢ）  に待避させる命令キューの設計を提案している。
【００３７】
また、非特許文献４では、命令キューをサイズの小さなセグメントに分割し、パイプライン的に動作させることによって大幅な性能向上を達成するアーキテクチャを提案している。
【００３８】
また、後述する本発明のように複数命令をグループ化するという視点から、命令をＭａｃｒｏ−ｏｐ  と呼ばれる単位にグループ化し、ウェイクアップとセレクトのステージをパイプライン化することにより動的命令スケジューリング機構の複雑度を低減する研究が行われている（非特許文献１４）。この非特許文献１４では、命令をグループ化するという視点は本発明と類似するが、実行レイテンシが単一サイクルである命令をなくすことによって依存のある命令のバックツーバックな実行を可能にすることを目的としている点が本発明と大きく異なっている。
【００３９】
先行特許文献の例
例えば、下記特許文献１には、命令バッファに格納された命令を取り出せる順番で取り出し、なるべく早く実行する技術が開示されている。
【００４０】
また、下記特許文献２では、命令の１次発行キューと、２次発行キューを用いて命令を処理する技術が開示されている。
【００４１】
【特許文献１】特開２００１−３３７８２２号公報（特許第３５５８００１号）
【特許文献２】特開２００１−２９７０００号公報（特許第３５４０７４３号）
【非特許文献１】P. Michaud and A. Seznec: “Data-flow prescheduling for large instruction windows in out-of-order processors.”,HPCA, pp. 27・6 (2001).
【非特許文献２】R. Canal and A. Gonzalez: “Reducing the complexity of the issue logic.”, ICS, pp. 312・20 (2001).
【非特許文献３】A. R. Lebeck, T. Li, E. Rotenberg, J.Koppanalil and J. Patwardhan:“A large, fast instruction window for tolerating cache misses.”, ISCA, pp. 59・0 (2002).
【非特許文献４】S. E. Raasch, N. L. Binkert and S. K. Reinhardt: “A scalable instruction queue design using dependence chains.”, ISCA, pp. 318・(2002).
【非特許文献５】D. Folegnani and A. Gonzalez: “Energy-effective issue logic.”, ISCA, pp. 230・39 (2001).
【非特許文献６】S. A. Taylor, M. Quinn, D. Brown, N. Dohm, S. Hildebrandt, J. Huggins and C. Ramey: “Functional verification of a multiple-issue, out-of-order, superscalar alpha processor - the dec alpha 21264 microprocessor.”, DAC, pp. 638・43 (1998).
【非特許文献７】M. Goshima, K. Nishino, T. Kitamura, Y. Nakashima, S. Tomita and S. ichiro Mori: “A high-speed dynamic instruction scheduling scheme for superscalar processors.”, MICRO, pp. 225・36 (2001).
【非特許文献８】A. Buyuktosunoglu, T. Karkhanis, D. H. Albonesi and P. Bose: “Energy efficient co-adaptive instruction fetch and issue.”, ISCA, pp. 147・56 (2003).
【非特許文献９】I. Kim and M. H. Lipasti: “Half-price architecture.”, ISCA, pp. 28・8 (2003).
【非特許文献１０】J. J. Sharkey, D. V. Ponomarev, K. Ghose and O. Ergin:“Instruction packing: reducing power and delay of the dynamic scheduling logic.”, ISLPED, pp. 30・5 (2005).
【非特許文献１１】T. M. Austin, E. Larson and D. Ernst: “Simplescalar: An infrastructure for computer system modeling.”, IEEE Computer, 35, 2, pp. 59・7 (2002).
【非特許文献１２】D. Brooks, V. Tiwari and M. Martonosi: “Wattch: a framework for architectural-level power analysis and optimizations.”, ISCA, pp. 83・4 (2000).
【非特許文献１３】The Standard Performance Evaluation Corporation (SPEC). http://www.specbench.org.
【非特許文献１４】I. Kim and M. H. Lipasti: “Macro-op scheduling: Relaxing scheduling loop constraints.”, MICRO, pp. 277・90 (2003).
【発明の開示】
【発明が解決しようとする課題】
【００４２】
このように、動的命令スケジューリング機構の低消費電力化は、現在、解決すべき課題として多くの技術者が取り組んでいる課題であるが、未だ有効な手法は知られていない。特に性能を落とさずに低消費電力化が図れる技術はほとんど知られていない。
【００４３】
本発明はこのような課題に鑑みなされたものであり、その目的は、性能の大幅な劣化を招くことなく、動的命令スケジューリング機構の構成をより簡易な構成とし、以て、消費電力をより低減させることが可能な仕組みを提案することである。
【課題を解決するための手段】
【００４４】
本発明は、上記目的を達成するために、命令キュー及び命令スケジューリング機構の消費電力削減手法の一つとして、依存情報を用いた命令グループ化による手法をその原理とする。このように、依存情報を用いて命令をグループ化し、そのグループを一つの命令発行単位として扱うことで、命令キューやスケジューリング機構のサイズ／ポート数の増加を抑えつつ、より多くの命令の保持、及び発行を行うものである。
【００４５】
本発明によれば、従来の動的命令スケジューリング機構よりも少ないハードウェア量で、ほぼ同等、あるいはそれ以上の性能が得られ、また消費電力を大きく削減できる。
【００４６】
本発明は、具体的には、以下のような手段を採用する。
【００４７】
（１）本発明は、上記課題を解決するために、実行すべき命令間の依存関係に関する情報を利用し、前記命令を動的にグルーピングし、グルーピングした命令群を命令キューの同一エントリーにディスパッチする制御回路、を備えたプロセッサである。
【００４８】
このようにグルーピングを行うことによって、一つのエントリーに複数の命令を格納し、それらを１個の命令として扱うことができるので、命令キューのポート数を削減し、消費電力の低減を図ることができる。また、選択線を通じた選択動作のための消費電力を削減することができる。
【００４９】
（２）また、本発明は、上記（１）記載のプロセッサにおいて、前記命令キューは、マスターキューと、スレーブキューと、を備え、前記制御回路は、実行すべき命令間の依存関係に関する情報を利用し、前記命令をグルーピングし、グルーピングした命令群に含まれる一方の命令をマスターキューに書き込み、他方の命令をスレーブキューに格納する制御回路と、を備えたプロセッサである。
【００５０】
このような構成によって、同一エントリーのマスターキューとスレーブキューにそれｉ１この命令、合計２個の命令を格納することができる。
【００５１】
（３）また、本発明は、上記（１）又は（２）記載のプロセッサにおいて、前記命令キューは複数のバンクに分割されており、前記制御回路は、前記グルーピングした命令群を、前記複数のバンクにそれぞれ格納することを特徴とするプロセッサである。
【００５２】
特に、本発明においては、上記選択するための機構や、ＣＡＭを複数個用いる必要がなくキューを分割すること（すなわち、マルチバンク化）が性能を落とさずに可能であり、キューの消費電力を削減することができる。
【００５３】
（４）本発明は、上記課題を解決するために、命令キューを含む命令パイプラインを備えたプロセッサにおいて、１エントリーにｎ個の命令を格納可能な前記命令キューと、実行対象であるプログラムから命令を取り出し、それらの中から、連続して実行可能なｎ個以下の命令群を取り出し、このｎ個以下の命令群を前記命令キューの１エントリーに格納する制御回路と、を含み、前記命令キューは、ｎ本のキュー群と、前記ｎ本のキューの内、いずれか１本のマスターキューに対して設けられたＣＡＭと、を備えることを特徴とするプロセッサである。ここで、前記ｎは２以上の整数である。
【００５４】
なお、本発明では、ｎ本のキューに分散したエントリをまとめて１エントリと考えている。つまり、１本のキューに１命令を格納する構成を採用し、ｎ本のキュー中に分散したエントリをまとめて１個のエントリと考えている。このまとめた１個のエントリには、合計ｎ個の命令が格納されるのである。この点は、下記（５）でも同様である。
【００５５】
このような構成によって、複数の命令を同一エントリーに格納しつつ、ＣＡＭを１本分のみ備えているので、消費電力の低減を図ることができる。
【００５６】
（５）本発明は、上記課題を解決するために、命令キューを含む命令パイプラインを備えたプロセッサにおいて、１エントリーにｎ個の命令を格納可能な前記命令キューと、  実行対象であるプログラムから命令を取り出し、それらの中から、連続して実行可能なｎ個以下の命令群を取り出し、このｎ個以下の命令群を前記命令キューの１エントリーに格納する制御回路と、を含み、前記命令キューは、ｎ本のキュー群と、前記ｎ本の各キューの１／ｎの部分を集めて論理的に構成した論理マスターキューと、前記論理マスターキューに対して設けられたＣＡＭと、を備えることを特徴とするプロセッサである。ここで、前記ｎは２以上の整数である。
【００５７】
このような構成によっても、複数の命令を同一エントリーに格納しつつ、ＣＡＭを１本分のみ備えているので、消費電力の低減を図ることができる。特に、マスターキューが分散しているので、一度に複数個の命令をマスターキューに書き込むことが容易となる。
【００５８】
（６）また、本発明は、上記（４）又は（５）記載のプロセッサにおいて、各レジスタのレディ状態を表すフラグと、前記各レジスタ毎にそのレジスタのプロデューサ命令が前記命令キュー中で存在する位置を記憶するキューフィールドと、を備えるステートテーブル、を含み、前記制御回路は、前記ステートテーブルに基づき、前記命令キューに格納しようとする命令のソースレジスタの一方が、レディ状態にあるという第１の条件を満たし、他方のソースレジスタがレディ状態でなくそのプロデューサ命令が前記命令キュー中に存在するという第２の条件を満たす場合は、前記プロデューサ命令が存在する同一エントリーに、前記格納しようとしている命令を格納することを特徴とするプロセッサである。
【００５９】
このような構成によって、互いに依存関係のある命令を同一エントリーに格納することができる。
【００６０】
（７）また、本発明は、上記（４）又は（５）記載のプロセッサにおいて、各レジスタのレディ状態を表すフラグと、前記各レジスタ毎にそのレジスタのプロデューサ命令が前記命令キュー中で存在する位置を記憶するキューフィールドと、を備えるステートテーブル、を含み、前記制御回路は、前記ステートテーブルに基づき、前記命令キューに格納しようとする命令のソースレジスタの一方が、レディ状態でなくそのプロデューサ命令が前記命令キュー中に存在するという第３の条件を満たし、他方のソースレジスタが前記プロデューサ命令のいずれかのソースレジスタと一致するという第４の条件を満たす場合は、前記プロデューサ命令が存在する同一エントリーに、前記格納しようとしている命令を格納することを特徴とするプロセッサである。
【００６１】
このような構成によっても、互いに依存関係のある命令を同一エントリーに格納することができる。
【００６２】
（８）また、本発明は、上記（４）又は（５）記載のプロセッサにおいて、前記制御回路は、ソースレジスタが全てレディ状態にある命令群を、前記命令キュー中の同一のエントリーに格納することを特徴とするプロセッサである。
【００６３】
（９）また、本発明は、上記（４）又は（５）記載のプロセッサにおいて、前記命令キューは、２個以上の命令が格納されているか否かを表すスレーブキューバリッドフラグを各エントリー毎に有し、さらに、前記命令キュー中の命令を、そのエントリーから取り出して実行する実行手段であって、前記マスターキュー又は前記論理マスターキューから命令を取り出した後、前記スレーブキューバリッドフラグが２個以上の命令を格納していることを表す場合には、引き続き、そのエントリーから残りの命令を取り出して実行する実行手段、を備えることを特徴とするプロセッサ。
【００６４】
このような構成によって、同一エントリーに格納された命令群を連続して実行することができる。
【００６５】
（１０）また、本発明は、上記（４）又は（５）記載のプロセッサにおいて、前記命令キューがｎ本のバンクに分割され、消費電力が削減されていることを特徴とするプロセッサである。
【００６６】
特に、本発明においては、キューを選択するための機構やＣＡＭを複数個用いる必要がなくキューを分割すること（すなわち、マルチバンク化）が性能を落とさずに可能であり、キューの消費電力を削減することができる。
【発明の効果】
【００６７】
本発明では、動的命令スケジューリング機構の消費電力削減を目的として命令のグループ化による動的命令スケジューリング機構の消費電力削減手法を提案した。この発明は、グループ化した命令を単一の発行単位として扱うことによって、動的命令スケジューリング機構の複雑さを低減するものである。
【００６８】
本発明の好適な実施の形態において性能を評価した結果、従来の動的命令スケジューリング機構を有するプロセッサと比較して、エントリー数が小さいときには高い性能を達成しつつ、動的命令スケジューリング機構の消費電力を大幅に削減可能であることがわかった。さらに、十分に大きいエントリー数に対してもほとんど性能を低下させることなく、同様に動的命令スケジューリング機構の消費電力を大幅に削減可能であることがわかった。
【００６９】
本発明で提案する命令のグループ化による動的命令スケジューリング機構の消費電力削減手法は、動的にグループ化可能な命令を検出することで、例えば汎用プロセッサのように、さまざまな特徴を持つプログラムを実行するような場合にも対応できることも利点として挙げられる。
【発明を実施するための最良の形態】
【００７０】
以下、本発明の好適な実施の形態を図面に基づき説明する。
【００７１】
本実施の形態では、複数の命令をグループ化し、一つの発行単位として扱うことによって動的命令スケジューリング機構のサイズ／ポート数を低減する手法を提案する。ディスパッチステージにおいて複数の命令をグループ化し、発行時までのステージにおいてグループ化された命令を１命令として扱う。
【００７２】
なお、グループ化は、グルーピングと同一の意味であり、グループ分けと称する場合もある。
【００７３】
４命令発行可能なプロセッサの動的命令スケジューリング機構の概念図を図１３で示したが、同様のプロセッサにおいて２命令をグループ化した場合のイメージ図（すなわち本発明を適用した場合のイメージ図）を図１に示す。
【００７４】
図１は、動的命令スケジューリング機構の概念図であり、図１３の動的命令スケジューリング機構と同様に、命令キュー１１０と、制御手段１１２と、から構成されている。
【００７５】
命令キュー１１０は、同時に２命令を書き込み／読み出しできる命令キュー２本から構成されている。それぞれには書き込みポート１１０ａが設けられている。したがって、書き込みポート１１０ａは２本用意されている。同様に読み出しポート１１０ｂも２本用意されている。これらのポート１１０ａ、１１０ｂは、命令２本分の太さを有している。
【００７６】
また、制御手段１１２は、命令キュー１１０に対する選択、発行等の処理のために制御線１１２ａを２本を有している。
【００７７】
この図１に示すように、命令格納部に所定の条件を満たした２命令がグループ化して格納される。２個の命令を格納するために、命令格納部は２個の命令分用意されている。その前半部の命令キュー１１０をマスターキュー１２０と呼ぶ。また、後半部をスレーブキュー１２２と呼ぶ。但し、命令キュー１１０としてはＣＡＭはマスターキュー１２０に対するＣＡＭのみを有している。
【００７８】
マスターキュー１２０に格納されている命令を主命令と呼び、この主命令と所定の依存関係にある命令であって、スレーブキューに格納される命令を従属命令と呼ぶ。
【００７９】
そして、グループ化した２個の命令（すなわち、主命令と従属命令）を１命令としてウェイクアップ、セレクト、そして発行処理の対象とした。これらの処理は実質的には２命令をウェイクアップ、セレクト、そして発行する処理となる。これらの処理は、マスターキュー１２０に対して設けられているＣＡＭを用いて制御手段１１２が実行する。
【００８０】
このように本実施の形態においては、図１３に示す命令キュー１０と同様に、４命令を同時に書き込み可能な命令キュー１１０であるが、必要とされるポート数が半減できることになり、命令キューの複雑さは低減され、大幅な消費電力削減につながるのである。
【００８１】
なお、本実施の形態では、２本のキューに分散したエントリをまとめて１エントリと考えている。つまり、１本のキューに１命令を格納する構成を採用し、２本のキュー中に分散したエントリをまとめて１エントリと考える。したがって、このまとめたエントリには、合計２個の命令が格納されるのである。これは本実施の形態全体について言えることである。なお、ここでは、２本のキュー、２本の命令の例を示したが、一般的にｎ本（ｎは２以上の整数）のキュー、ｎ個の命令としても同様である。
【００８２】
一方、その結果、制御が簡素化されているため、性能を維持するには本実施の形態では種々の工夫をしている。以下、これらの種々の工夫を命令のグループ分けと共に説明する。
【００８３】
なお、本実施の形態では、ウェイクアップ、レディ条件の検知等を主命令に対する処理のみを行っている。したがって、制御回路は１個の命令分（主命令）だけ備えればよく、この点からも消費電力を減少させることができる。
【００８４】
このように、本実施の形態においては、多くの命令に対してグループ化ができれば消費電力の大幅な低減を図りつつ、命令処理能力の維持を図ることが可能である。
【００８５】
すなわち、本実施の形態の動的命令スケジューリング機構を採用する場合、従来の動的命令スケジューリング機構と同等のスループットを確保するためには、できる限り多くの命令をグループ化する必要がある。
【００８６】
例えば、上で述べた例のように、本来、４命令を同時に発行可能なプロセッサにおいて上述した新しい動的命令スケジューリング機構を採用した場合、全くグループ化することができなかったときは最大で２命令しか同一サイクルに発行することができなくなる。
【００８７】
したがって、どのような命令をグループ化するか、及びグループ化された命令を一つの発行単位として扱うためのマイクロアーキテクチャの拡張をどのようにするべきかは、本実施の形態の最も重要な点の一つである。
【００８８】
本実施の形態では、一方の命令発行の次サイクルに確実に他方の命令が発行可能となる命令の組をグループ化する。つまり、一方の命令とは「主命令」であり、他方の命令とは「従属命令」である。
【００８９】
したがって、２命令を発行するためには先に発行される方の命令（主命令）のみをウェイクアップ・セレクトし、この命令が発行された１サイクル後に他方の命令（従属命令）を発行すればよい。このような制御は、制御手段１１２が実行する。
【００９０】
また、グループ化制御回路１１３は、グループ化する２命令の検出を行う。その検出のためのハードウェアを簡素にするため、本実施の形態では先行する命令（主命令）としては単一サイクルの実行レイテンシを持つ整数演算命令のみを対象とする。
【００９１】
グループ化制御回路１１３は、後述する図３のフローチャートの動作を実現するための回路である。さらに、このグループ化制御回路１１３は、Rename/Dispatchステージにおけるグループ化制御回路である。グループ化制御回路１１３は、請求の範囲の制御回路の好適な一例に相当する。
【００９２】
グループ化可能な命令の条件
本実施の形態においてグループ化可能な命令の組選択条件としては、以下の２つの条件が挙げられる。
【００９３】
［条件１］  一方（主命令）発行が他方（従属命令）を発行する唯一のトリガーであること。
【００９４】
［条件２］  同一サイクルに実行が可能な命令群であること。
【００９５】
まず、条件１について説明する。
【００９６】
例えば下記例１に示す２命令において、命令２は右オペランドがレディであり、左オペランドｒ５は命令１のデスティネーションとなっている。
【００９７】
（命令の組の例１）
命令１  ：  ａｄｄ  ｒ５  ←  ｒ３，  ｒ２
命令２  ：  ａｄｄ  ｒ４  ←  ｒ５，  Ｒ
つまり、命令１が発行されるというただ一つの条件によって命令１と命令２の依存は解消され，命令２は次サイクルに発行可能となる。したがって、この２個の命令は上記［条件１］を満たすため、グループ化可能である。なお、Ｒは既にレディ状態となっている任意のレジスタを表す。
【００９８】
なお、上記例１では、両命令は、共に加算命令であり、命令１はレジスタｒ３とｒ２の内容を加算し、その加算結果をレジスタｒ５に格納する命令である。また、命令２はレジスタｒ５の内容にＲを加算し、その加算結果をレジスタｒ４に格納する命令である。命令２が発行可能な状態とは、レジスタｒ５の内容と、数値Ｒの内容が確定することを言う。前提からＲは既に確定している。そして、レジスタｒ５の値は、命令１の実行が完了しないと確定しない。したがって、命令１の実行が完了すれば命令２を引き続き実行可能であることは明らかである。  
同様に、以下の例２の２命令も上記と同じく条件１を満たす。
【００９９】
［命令の組の例２］
命令１  ：  ａｄｄ  ｒ５  ←  ｒ３，  ｒ２
命令２  ：  ａｄｄ  ｒ４  ←  ｒ５，  ｒ３
この例２の命令２の左オペランドは、命令１のデスティネーションである。この点は、上述した例１と同様である。また、命令２の右オペランドｒ３は命令１の左オペランドでもあり、命令１が発行されるということはｒ３はレディ状態であるということを意味する。つまり、上記の２命令も条件１を満たし、グループ化が可能である。
【０１００】
次に条件２について説明する。  
以下に示す２命令はどちらも両オペランドが揃っているので共にレディ状態にある命令である。
【０１０１】
［命令の組の例３］
命令１  ：  ａｄｄ  ｒ１  ←  Ｒ，Ｒ
命令２  ：  ａｄｄ  ｒ２  ←  Ｒ，Ｒ
ここでＲは既に述べたように、既にレディ状態となっている任意のレジスタを表す。この２命令には直接の依存関係はないが、どちらも既にレディ状態にあるため、グループ化することが可能である。この場合、命令オーダーの若い命令が、先に発行される命令として格納される。つまり、命令１が主命令として命令キュー１１０のマスターキュー１２０に格納され、命令２がスレーブキュー１２２に格納される。
【０１０２】
なお、どちらもレディ状態にある２命令を仮にグループ化しなかった場合は、性能的なペナルティが発生する場合もあると考えられる。これは、Slaveエントリーに命令が入らずスループットが低下してしまうからである。
【０１０３】
この点に関して本実施の形態においては、どちらもレディ状態にある２命令をグループ化することによって、命令をなるべく多くグループ化し、スループットを確保することによって性能低下を防ぐ工夫をしている。すなわち、条件２を設けることによって、性能の低下を軽微なものとしている。
【０１０４】
なお、レディ状態にある命令は命令キュー１０にとどまっているサイクル数が短く次から次へと捌けていくため、クリティカルな命令であることは少ない。したがって、仮に実行が１サイクル程度遅れてもほとんど全体的な性能には影響がないと考えられる。
【０１０５】
ディスパッチステージにおけるグループ化の対象となる命令の抽出
（１）処理の概要
十分なスループットを確保するためには上で述べた［命令の組の例１］、［命令の組の例２］、［命令の組の例３］（以下、単に例１、例２、例３と呼ぶ）の３種類のグループ化対象となる命令の組をディスパッチステージにおいて発見し、なるべく多くの命令をグループ化する必要がある。そこで、まず同じサイクルにディスパッチされる命令の中からグループ化可能な命令の組を探索する。
【０１０６】
例えば、上で述べた例では、一度に４個の命令を命令キュー１１０にディスパッチすることができる。そこで、４個の命令を前ステージから取り出し、その中からグループ化の対象を抽出することが考えられる。
【０１０７】
一般に、アウト・オブ・オーダー実行を行いうるスーパースカラープロセッサは命令をディスパッチする前に、偽の依存性を解消するためのレジスタ・リネーミングを行う。その際、同じサイクルにディスパッチする命令についても各々の依存関係をチェックしリネーミングを行う必要がある。
【０１０８】
これは簡単な組み合わせ回路で実現されており、この回路に若干の改良を加えることで上記説明した条件１又は条件２を満たす命令群の発見、すなわち上述した例１〜例３に該当するグループ化可能な命令の組の発見、を行うことができる。この見つけられた命令群をグループ化して命令キュー１１０に格納する。
【０１０９】
さらに、より積極的にグループ化を行うために、ディスパッチする命令を既に命令キュー１１０に格納されている命令とグループ化することを考える。つまり、既にマスターキュー１２０に格納されている命令を主命令とする従属命令を見つけ、スレーブキュー１２２に格納するのである。
【０１１０】
以下では、そのような動作の一つの例を説明する。
【０１１１】
簡単なハードウェアで実装可能なように上述した３個の例の内、例１に当てはまるパターンのみを対象とする。つまり、例１の命令２をディスパッチする際、命令キュー１１０に格納されている命令１を発見することが目的となる。
【０１１２】
プロセッサは、ディスパッチ時に物理レジスタの状態を知るためにステートテーブルにアクセスするが、このステートテーブルに改良を加えることでこの発見を実現する。一般的にレジスタは最低でも４状態あるため、レジスタの状態を示すフィールドは２ビット設けられている場合が多い。
【０１１３】
本実施の形態では、新たにそのレジスタのプロデューサ命令の格納されている命令キュー１０のエントリー番号が書き込まれるフィールドを各レジスタのステートテーブルに追加する。
【０１１４】
このフィールドをステートテーブルのキューフィールドと呼ぶ。キューフィールドの説明図が図２に示されている。図２では、命令列
ｉｎｓｔ．Ａ：ａｄｄ  ｒ５  ←  ｒ３  ，  ｒ２
ｉｎｓｔ．Ｂ：ａｄｄ  ｒ５  ←  ｒ５  ，  ｒ１
を例としてキューフィールドを設けたステートテーブル１３０及びそれに関連した動作の概要を説明する。
【０１１５】
まず、図２（１）には、従来のスーパースカラープロセッサの命令キュー１０と、ステートテーブル３０とが示されている。ステートテーブル３０は各レジスタがレディ状態か否かを表すテーブルである。図２（１）においては、命令キュー１０の第３エントリーＩＱ３に命令であるｉｎｓｔＡが格納されている。
【０１１６】
一方、ステートテーブル３０は、各レジスタがレディ状態か否かが示されている。図２（１）の例では、レジスタｒ１のみがレディ（Ｒ）状態であり、その他のレジスタは非レディ（ＮＲ）状態である。
【０１１７】
図２（２）には、本実施の形態の命令キュー１１０とステートテーブル１３０とが示されている。
【０１１８】
本実施の形態においても、同様に命令ｉｎｓｔ．ＡがＩＱ３のマスターキュー１２０に格納されている。
【０１１９】
また、本実施の形態において特徴的なことは、ステートテーブル１３０にキューフィールド１３０ａが設けられていることである。このキューフィールド１３０ａは、そのレジスタのプロデューサ命令の位置が格納されている。図２（２）の例では、各レジスタのレディ状態は、図２（１）と同様であるが、レジスタｒ２、ｒ３、ｒ５について、そのプロデューサ命令の位置が記録されている。例えば、レジスタｒ２の場合は、そのプロデューサ命令が命令キュー１１０のＩＱ７に格納されていることがこのキューフィールドから読み取ることができる。
【０１２０】
この状態で、命令ｉｎｓｔ．Ｂを命令キュー１１０に格納しよう（ディスパッチしよう）とする場合、以下のことがわかる。
【０１２１】
まず、命令ｉｎｓｔ．Ｂの右側のソースレジスタであるレジスタｒ１は、レディ状態である。さらに、左側のソースレジスタであるｒ５は非レディ状態であるが、そのプロデューサ命令が命令キュー１１０内のＩＱ３に既に格納されていることが判明する。
【０１２２】
そこで、この命令ｉｎｓｔ．Ｂを現在ＩＱ３に格納されている命令を主命令とする従属命令として命令キュー１１０に書き込む。すなわち、ＩＱ３のスレーブキュー１２２に命令ｉｎｓｔ．Ｂを書き込むのである。
【０１２３】
このように、本実施の形態ではレジスタのステートテーブル１３０に新しいキューフィールドを加えたので、既に命令キュー１１０に格納されている命令ともグルーピングすることが可能となる。
【０１２４】
新たに付け加えられたキューフィールドのビット幅はｌｏｇ２（命令キュー１１０のサイズ）である。
【０１２５】
一般的な場合の動作
一般的な動作を示せば、現在グループ化対象の候補となっている命令をディスパッチする際には、まずステートテーブル１３０でその命令のソースレジスタの状態を確認する。
【０１２６】
この確認の結果、ソースレジスタの一方がレディ状態であり、他方のレジスタに関してキューフィールドに値が書き込まれている場合は、グループ化が可能である。ここで、値が書き込まれているとは、そのレジスタのプロデューサ命令が命令キュー１１０に格納されていることを意味する。
【０１２７】
したがって、現在ディスパッチの対象となっている命令は、そのキューフィールドに書き込まれているエントリー番号（上の例で言えばＩＱ３）に既に格納されているプロデューサ命令（上の例では、Ｉｎｓｔ．Ｂ）とグループ化可能であることが判明する。この状態は、まさに文字通り、上記（例１）の状態そのものであるので、グループ化の対象となる。
【０１２８】
また、整数演算命令をディスパッチする際、ソースレジスタの状態を確認するだけでなく，デスティネーションレジスタのキューフィールド１３０にその命令が格納されるエントリー番号を書き込む。これによって、そのデスティネーションレジスタのプロデューサ命令のエントリー番号をキューフィールドに書き込むことができる。
【０１２９】
以上のような処理によって、命令キュー１１０に既に格納されている命令とのグループ化も可能となる。
【０１３０】
（２）ディスパッチの詳細
以下、これまで述べたグループ化可能な命令群の抽出処理についてフローチャートを用いて詳細に説明する。この処理を表すフローチャートが図３に示されている。このフローチャートは、グループ化制御回路１１３の動作を表す。
【０１３１】
なお、本実施の形態では、グループ化の対象として演算処理命令を対象としている。このような演算処理命令は、一般に
ｉｎｓｔ  ｒｄ  ←  ｒｓ１  、  ｒｓ２
の形で記述される場合が多い。ここで、ｉｎｓｔは、命令のニーモニックであり、ａｄｄやｓｕｂ等の演算処理を表す。ｒｄは、デスティネーションレジスタであり、演算結果が格納される。ｒｓ１は、ソースレジスタ１であり、ｒｓ２はソースレジスタ２である。これらソースレジスタの値に関して演算が行われ、その結果がｒｄに格納される。なお、ソースレジスタ１は、単にソース１と呼ぶ場合もあり、ソースレジスタ２も単にソース２と呼ぶ場合がある。
【０１３２】
まず、ステップＳ３−１においては、上述した２個のソースレジスタについて、ソースレジスタ及びデスティネーションレジスタのステートテーブルを参照する。
【０１３３】
ステップＳ３−２においては、この参照の結果、ソース１がレディ状態であるか否かが検査され、レディ状態であればステップＳ３−５に移行する。一方、レディ状態でなければステップＳ３−３に移行する。
【０１３４】
ステップＳ３−３においては、ソース２がレディ状態であるか否かが検査され、レディ状態であればステップＳ３−４に移行する。一方、レディ状態でなければステップＳ３−１０に移行する。
【０１３５】
ステップＳ３−４においては、ソース２がレディ状態で、ソース１がレディ状態ではなかったので、ソース１側のキューフィールド１３０にＩＱ番号が存在するか否かが検査される。ここでＩＱ番号とは命令キュー１１０のエントリー番号である。この結果、ＩＱ番号が存在すればステップＳ３−７に処理が移行し、存在しない場合はステップＳ３−１０に処理移行する。
【０１３６】
ステップＳ３−５においては、ソース２がレディ状態であるか否かが検査され、レディ状態であればステップＳ３−９に移行する。一方、レディ状態でなければステップＳ３−６に移行する。
【０１３７】
ステップＳ３−６においては、ステップＳ３−４とは逆に、ソース１がレディ状態で、ソース２がレディ状態ではなかったので、ソース２側のキューフィールド１３０にＩＱ番号が存在するか否かが検査される。この結果、ＩＱ番号が存在すればステップＳ３−７に処理が移行し、存在しない場合はステップＳ３−１０に処理移行する。
【０１３８】
ステップＳ３−７は、一方のソースレジスタがレディ状態で、他方のソースレジスタのプロデューサ命令が命令キュー１１０に格納されている場合の処理を行う。この場合、今検査している命令をそのプロデューサ命令を主命令とする従属命令として命令キュー１１０に書き込むことが可能である。これは上述した例１に該当する。
【０１３９】
そこで、このステップＳ３−７においては、上記プロデューサ命令を主命令として、そのスレーブキュー１２２側にこの検査対象となっている命令を書き込めるか否かが検査される。そのエントリーが空いており書き込める場合は、ステップＳ３−８に処理が移行し、書き込めない場合は、ステップＳ３−１０に処理が移行する。
【０１４０】
ステップＳ３−８においては、上記検査したスレーブキュー１２２の当該エントリーに今検査対象となっている命令を書き込む。これでディスパッチが終了する。
【０１４１】
ステップＳ３−９は、双方のソースレジスタがレディ状態の場合の処理を行う。この場合は、同一サイクル内に、本命令と同様に２個のソースレジスタが既にレディ状態である命令が存在するか否かが検査される。
【０１４２】
既に述べたように、本実施の形態では、４個の命令が前ステージから取り出され、最大、この４個の命令が命令キュー１１０に同時に書き込まれ得る。上で述べた「同一サイクル内」とは、同一タイミングで書き込まれるこの最大４個の命令の中という意味である。
【０１４３】
そして、このような命令が存在する場合は、ステップＳ３−１３に処理が移行する。一方、そのような命令が存在しない場合は、ステップＳ３−１０に処理が移行する。
【０１４４】
ステップＳ３−１０は、今現在検査の対象となっている命令に対して主命令となる命令が存在しなかった場合の処理を行う。このステップＳ３−１０においてはまず、現在検査対象となっている命令を主命令として命令キュー１０に書き込めるか否か、すなわちマスターキュー側に書き込めるか否かが検査される。空きがあり書き込める場合はステップＳ３−１１に処理が移行する。書き込めない場合は、ステップＳ３−１４に処理が移行する
。
【０１４５】
ステップＳ３−１１においては、マスターキュー１２０側の空いているフリーエントリーに当該命令を書き込む。これでディスパッチが終了するが、キューフィールド１３０を更新するために、ステップＳ３−１２に処理が移行する。
【０１４６】
ステップＳ３−１２においては、当該命令を書き込んだエントリーの番号をステートテーブル中のキューフィールド１３０に書き込む。書き込まれるキューフィールド１３０は、当該命令のデスティネーションレジスタである。
【０１４７】
この処理によって、当該命令を主命令とする従属命令が見つかった場合に、その従属命令を当該エントリー番号のスレーブキュー１２２側に書き込むことができるのである。
【０１４８】
ステップＳ３−１３においては、既にソース１及びソース２共にレディ状態である命令を主命令とし、現在検査対象となっている命令を従属命令として、命令キュー１１０に書き込む。すなわち、当該主命令をマスターキュー側に書き込み、その同一エントリーのスレーブキュー側に従属命令（現在検査の対象となっている命令）を書き込む。これによってディスパッチ処理が終了する。
【０１４９】
ステップＳ３−１４においては、当該命令以降の命令を現在ディスパッチできない状態であるから、当該命令以降をストールさせる。
【０１５０】
このような処理によって、グループ化制御回路１１３は、命令キュー１１０に対するディスパッチを行うことができる。
【０１５１】
命令の実行
このようにして、マスターキュー側とスレーブキュー側に主命令及び従属命令が書き込まれ（ディスパッチされ）る。これらの命令の実行を以下説明する。
【０１５２】
本実施の形態では、２命令を１命令としてグループ化した。この場合の動的命令スケジューリング機構の全体構成図は図４に示した通りである。グループ化される２命令はそれぞれが図４に示すマスターキュー（Ｍａｓｔｅｒ  Ｑｕｅｕｅ）１２０とスレーブキュー（Ｓｌａｖｅ  Ｑｕｅｕｅ）１２２の同じエントリー番号のエントリーに書き込まれ、以後、１エントリーとして扱われる。マスターキュー１２０側に書き込まれた命令を主命令と呼び、スレーブキュー１２２側に書き込まれた命令を従属命令と呼ぶ。
【０１５３】
また、マスターキュー１２０には対応するスレーブキュー１２２のエントリーに命令が格納されているかどうかを示す１ビットのフラグが設けられており、スレーブキュー１２２に命令を書き込む際、同時にこのフラグに１が立てられる。このフラグの処理も制御手段１１２が実行する。このフラグをスレーブキューバリッドフラグ１２４と呼ぶ。
【０１５４】
１サイクル内に最大でマスターキュー１２０はディスパッチ時に２命令ずつ書き込みを行うことができる。また、スレーブキュー１２２も１サイクル内にディスパッチ時に２命令ずつ書き込みを行うことができる。また、１サイクル内でマスターキュー１２０は最大２命令を発行可能であり、同様に１サイクル内でスレーブキュー１２２も最大２命令を発行可能である。すなわち、マスターキュー１２０側に２本の書き込みポート１１０ａが設けられており、同様にスレーブキュー１２２側にも２本の書き込みポート１１０ａが設けられている。また、マスターキュー１２０側に２本の読み出しポート１１０ｂが設けられており、同様にスレーブキュー１２２側にも２本の読み出しポート１１０ｂが設けられている。
【０１５５】
また、制御回路１１２は、２命令をマスターキュー１２０のエントリーからセレクトする回路を備えている。
【０１５６】
また、マスターキュー１２０とスレーブキュー１２２との間にはラッチ１２６が設けられており、マスターキュー１２０内の命令がセレクトされ、発行のためにアクセスされる際、スレーブキュー１２２に命令が格納されていることを示すフラグ（スレーブキューバリッドフラグ１２４）が立っていた場合に、このラッチ１２６を介して次サイクルでスレーブキュー１２２内の命令がアクセス・発行される。
【０１５７】
このように、提案する動的命令スケジューリング機構において、ウェイクアップ時に連想マッチを行うためのＣＡＭロジックはマスターキュー１２０側にのみ備えられており、スレーブキュー１２２側ではＣＡＭは備えられていない。ハードウェア量の一層の低減を図ることができ、低消費電力を実現可能である。
【０１５８】
ＡＬＵの構成
図５には、本実施の形態の命令キュー１１０によって発行された命令を実行するためのＡＬＵの構成の一例を示す説明図が示されている。図５に示すように、マスター側用、スレーブ側用にそれぞれ２個づつ、ＡＬＵ１４０ａ、１４０ｂ、１４２ａ、１４２ｂが設けられている。このような構成によって、パイプライン的な動作を実行することができ、そのスループット（throughput）は４である。
【０１５９】
また、命令を十分にグループ化できる場合は、一定のスループットを確保できると考えられる。  
また、図５に示すように、本実施の形態においては、スレーブ側のＡＬＵ１４２ａ、１４２ｂの一方のオペランド（operand）は、必ずマスター側からバイパスされて供給される。
【０１６０】
なお、本実施の形態では４ｗｉｄｔｈのスーパースケーラー（Superscalar）の例を示しているが、特に、最大４命令を一度に命令キュー１１０に書き込み、最大で２命令を一度に選択（select）でき、また最大４命令を一度に発行（issue）できる例を示している。
【０１６１】
ディスパッチの自由度
なお、図４に示す本実施の形態の動的命令スケジューリング機構においては、マスターキュー１２０・スレーブキュー１２２それぞれの書き込みポート数が２であるためにディスパッチの自由度は従来の４命令同時ディスパッチ・４命令同時発行のシステムに比べると低くなっている。
【０１６２】
例えば、マスターキューに３命令、スレーブキューに１命令を書き込みたい場合が生じる。
【０１６３】
上述したように、本実施の形態では、４命令を取り出してこの４個の命令群毎にディスパッチを行う例を示している。この場合、例えばマスターキューに３命令、スレーブキューに１命令を書き込みたい場合が生じる可能性がある。
【０１６４】
この場合、マスターキュー１２０に３命令、スレーブキュー１２２に１命令を「１サイクルで」書き込むことはできない。その理由は、マスターキュー１２０・スレーブキュー１２２それぞれの書き込みポート数が２であるため、マスターキュー１２０に対して同時に２個の命令しか書き込めないためである。また同様にスレーブキュー１２２に対して同時に２個の命令しか書き込めない。  
このように、本実施の形態は低消費電力を実現しているがディスパッチの自由度は若干減少している。
【０１６５】
例えば上記のようにマスターキュー１２０に３命令、スレーブキュー１２２に１命令を書き込みたい場合は、結局２サイクル用いて命令を書き込むことになる。結果的にフロントエンドの周波数を低下させた場合と同様の振る舞いを示すことになる。フロントエンドは性能的にクリティカルであることがよく知られており、結果的に本実施の形態で提案する手法では若干の性能の低下が予想される。  
そこで、上記の問題を解決するために、動的命令スケジューリング機構の改良例を以下説明する。
【０１６６】
動的命令スケジューリング機構の改良例
図４に示す動的命令スケジューリング機構が内包するディスパッチ時の自由度が低いという問題を物理的な改良によって解決する。
【０１６７】
図６には、この改良した動的命令スケジューリング機構の構成図が示されている。この図６で特徴的な点は、物理的なキューの構成と、論理上のキューの構成を分離した点である。図４に示した例では、２本の物理的なキューがそのまま、マスターキュー１２０、スレーブキュー１２２を構成した。これに対して、図６の構成では、１個のキューの前半が論理的なマスターキューとなり、後半が論理的なスレーブキューを構成する。他方の物理的なキューは、逆に前半がスレーブキューとなり、後半がマスターキューとなる。
【０１６８】
具体的に言えば、図６において、命令キュー２１０の中央に引かれている破線Ｘを境にしてその上部は図４で示したように左側が論理マスターキュー２２０、右側が論理スレーブキュー２２２となっている。一方、破線Ｘの下部については逆に左側が論理スレーブキュー２２２、右側が論理マスターキュー２２０として構成している。
【０１６９】
物理的なキューに対する、論理マスターキュー２２０、論理スレーブキュー２２２の割り当ては、制御手段２１２が設定する。
【０１７０】
図６に示すような改良によってディスパッチ時の自由度が増すことを説明する。  
例えば上で述べたように、「マスターキューに３命令、スレーブキューに１命令を書き込む」という要求にも上部左側の論理マスターキュー２２０に２命令、下部右側の論理マスターキュー２２０に１命令そして上部右側の論理スレーブキュー２２２に１命令を書き込むことによって実現することが可能となっている。
【０１７１】
このような形態によってディスパッチ時に命令をグループ化し、そのグループを一つの命令発行単位として扱うという本発明の原理の論理的動作がポート数などの制限によらず、実現可能となる。
【０１７２】
性能評価について
ところで、動的命令スケジューリング機構のサイズが比較的小さい場合には十分なＩＬＰを抽出することができず、そのサイズ（命令キュー１０のサイズ、エントリー数）が性能のボトルネックとなる。このような場合でも、本実施の形態（特に上記改良例）によれば、従来の動的命令スケジューリング機構と比べて高い性能を達成することが期待できる場合がある。
【０１７３】
一方、命令キュー１０のサイズ（エントリー数）が十分に大きい場合には、本実施の形態で示した機構は、従来の動的命令スケジューリング機構とほぼ同等の性能を達成することが可能である。
【０１７４】
また、消費電力に関しては、動的命令スケジューリング機構のサイズに関わらず，本実施の形態で示した形態の動的命令スケジューリング機構を採用すれば、回路構成の複雑さが低減しているので、大幅な消費電力の削減が期待できる。
【０１７５】
シミュレーションによる性能の評価
本実施の形態において提案した動的命令スケジューリング機構による性能と消費電力への影響を調べるため、所定のマイクロプロセッサシミュレーションツールを用いたシミュレーションにより評価を行う。なお、図４と図６に示す動的命令スケジューリング機構の評価を行うため、上記マイクロプロセッサシミュレーションツールのマイクロアーキテクチャに変更を加えている。また、消費電力の評価には、所定の消費電力評価ツールを用いている。
【０１７６】
評価プログラムは、非特許文献１３記載の「ＳＰＥＣ  ＣＰＵ２０００」の整数ベンチマーク全て（ｒｅｆ  インプットセット）及び「ＭｅｄｉａＢｅｎｃｈ」ベンチマーク群から「ｍｐｅｇ２  エンコード」のプログラムを用いた。「ＳＰＥＣ  ＣＰＵ２０００」についてはプログラムの最初の２億命令をｆａｓｔ−ｆｏｒｗａｒｄし、２００万命令をシミュレーションした。
【０１７７】
シミュレーション評価の前提
図７には、ここで行った評価におけるプロセッサの前提条件を示す。また、命令キューは上記非特許文献６に記載の「Ａｌｐｈａ  ２１２６４」に搭載されている、整数命令とロード・ストア命令がディスパッチされるものを前提としている。したがって、先行する整数演算命令とそれに依存のあるロード命令の組み合わせもグループ化することが可能である。この評価では、命令キューのサイズを変化させ、従来の動的命令スケジューリング機構と比較する。
【０１７８】
また、グループ化対象となる命令を検出するためのハードウェアの消費電力については無視できるものとし、評価には加えていない。
【０１７９】
シミュレーション評価結果
（１）性能
まず、従来型の動的命令スケジューリング機構及び提案手法において、命令キューのエントリーサイズが性能に与える影響を調べた。その結果が図８のグラフに示されている。このグラフにおいて、横軸は、命令キューのエントリーサイズを表す。
【０１８０】
また、縦軸は評価に用いた全プログラムの平均ＩＰＣを表す。図８のグラフ中、ｎｏｒｍａｌは従来型における結果を表す。ＢＡＳＩＣは図４の基本的な実施例における結果を示している。
【０１８１】
また、ＥＸ−ＲＥＳＴＲＩＣＴとＥＸ−ＦＵＬＬはどちらも図６に示す改良された実施例における評価結果である。このＥＸ−ＲＥＳＴＲＩＣＴとＥＸ−ＦＵＬＬとの違いは、次の通りである。まず、ＥＸ−ＲＥＳＴＲＩＣＴはグループ化対象となる命令を同じサイクルにディスパッチされる命令の中のみから選択する。これに対して、ＥＸ−ＦＵＬＬはそれに加えて上述したグループ化可能な［命令の組の例１］に該当する命令の組も対象としている。この点が相違している。また、ＢＡＳＩＣも、ＥＸ−ＦＵＬＬと同様に可能な例［命令の組の例１］に当てはまる組もグループ化の対象としている。
【０１８２】
注意点
ここで、評価結果における命令キューのエントリーサイズが従来型と提案手法で等しい場合は、従来型の命令キューは１エントリーに１命令を格納するが、本実施例では図４（図６）に示すように、１エントリーに２命令を格納する違いがあることに注意されたい。
【０１８３】
さて、図８に示すように、全ての場合で、命令キューのエントリーサイズが増加するにつれてＩＰＣが向上しているのがわかる。これは、命令キューの保持できる命令数が増えるため、よりＩＬＰ  を抽出することができるためである。エントリーサイズが６４以上の場合、ＢＡＳＩＣ、ＥＸ−ＲＥＳＴＲＩＣＴ、ＥＸ−ＦＵＬＬのｎｏｒｍａｌに対する性能の低下率はそれぞれ１１．１％、３．５％、１．１％である。また一方、ＥＸ−ＦＵＬＬにおいてはエントリー数（サイズ）が１６、３２と比較的小さめの場合、ｎｏｒｍａｌに対してむしろ高い性能を達成している点に注目されたい。
【０１８４】
詳細な検討
以下、４命令同時発行可能なスーパースカラープロセッサにとって命令キューのエントリーサイズとして現実的な値である４８エントリーの場合についてより詳細に検討する。
【０１８５】
まず、図８に示すように、ＥＸ−ＦＵＬＬはｎｏｒｍａｌとほぼ変わらない性能を達成していることがわかる。
【０１８６】
また、図９には、評価に用いた全プログラムにおけるＩＰＣを示すグラフが示されている。図９のグラフにおいて、縦軸はＩＰＣを表し、横軸はプログラムの種別を表す。また、図１０には、グループ化された命令の割合を表すグラフが示されている。図１０のグラフにおいて、縦軸は全命令中、グループ化された命令の割合を表し、横軸はプログラムの種別を表す。
【０１８７】
例えば、ｍｐｅｇ２、ｇｚｉｐ、ｃｒａｆｔｙなどのプログラムにおいてＢＡＳＩＣとＥＸ−ＲＥＳＴＲＩＣＴはｎｏｒｍａｌに対して性能が大幅に低下しているが、ＥＸ−ＦＵＬＬにおいてはほとんど性能低下が見られない。この理由は、図１０に示すようにＥＸ−ＦＵＬＬは他の２つの場合と比べて十分な命令数をグループ化し、スループットを確保できたからと考えられる。
【０１８８】
図１１に、ＥＸ−ＦＵＬＬにおいてグループ化された命令の内訳を表すグラフを示す。図１１中、（１）（２）（３）は、それぞれ既に述べたグループ化可能な［命令の組の例１］、［命令の組の例２］、［命令の組の例３］の各命令の条件に相当する。この図１１から、ｇｚｉｐ、ｇｃｃ、ｃｒａｆｔｙ、ｐａｒｓｅｒ、ｅｏｎ、ｖｏｒｔｅｘ、ｂｚｉｐ２においては３０％以上の命令がグループ化されたことがわかる。
【０１８９】
また一方、ｍｐｅｇ２、ｖｐｒ、ｃｒａｆｔｙ、ｇａｐ、ｂｚｉｐ２、ｔｗｏｌｆのプログラムにおいては［命令の組の例１］と［命令の組の例２］の条件に相当する命令が３０％以上グループ化されている。また、［命令の組の例１］、［命令の組の例２］、［命令の組の例３］の各条件に相当する命令がグループ化された割合の全プログラムにおける平均値はそれぞれ２０．６％，６．３％，３２．７％である。
【０１９０】
このように、これら３種類の条件を適用することによってさまざまな特徴を持つプログラムにおいても多くの命令をグループ化でき、十分なスループットを得ることができたと言える。
【０１９１】
消費電力
本実施の形態の手法は、２命令をグループ化し、動的命令スケジューリング機構内において一つの発行単位として扱うことによって、命令キュー１１０のサイズ／ポート数を削減し、命令キュー１１０及びそれに関連する回路の消費電力を削減するものである。
【０１９２】
図１２はＥＸ−ＦＵＬＬにおいて従来のプロセッサに対する、動的命令スケジューリング機構の消費電力削減率を示したグラフである。
【０１９３】
それぞれの棒グラフは左からディスパッチ・ウェイクアップ・セレクト・発行の各ステージにおけるおける電力削減率を示している。すなわち、縦軸は正規化された消費電力比を表す。図１２中、左側の４８ｖｓ．４８は命令キュー１１０のエントリー数４８のｎｏｒｍａｌに対するエントリー数４８のＥＸ−ＦＵＬＬの比較を表す。右側の３２ｖｓ．６４はエントリー数６４のｎｏｒｍａｌに対するエントリー数３２のＥＸ−ＦＵＬＬ（１エントリーに２命令保持可能であるので、潜在的に６４命令保持可能）の比較を表す。
【０１９４】
まず、４８エントリー同士の比較から、ＥＸ−ＦＵＬＬは従来の動的命令スケジューリング機構に対してディスパッチ・ウェイクアップ・セレクト・発行の各ステージにおいてそれぞれ、約５４％、７％、５２％、７１％の消費電力を削減したことがわかる。
【０１９５】
ウェイクアップステージを除く３ステージにおいて大幅な電力削減を達成している。ウェイクアップステージの消費電力は、ブロードキャストされてきたタグとの連想マッチを行うためのＣＡＭの高さ（エントリー数）に支配されており、どちらもエントリー数が４８  のためほぼ同じ結果となったと考えられる。このように、上記の評価結果から同じエントリー数同士の比較ではウェイクアップステージの消費電力はほぼ等しいことがわかる。しかしながら、動的命令スケジューリング機構の消費電力において、ウェイクアップステージの消費電力が支配的な構成の場合は、ＥＸ−ＦＵＬＬにおいてエントリー数を減らすことでその消費電力を削減することが可能である。
【０１９６】
エントリー数６４のｎｏｒｍａｌの性能とエントリー数３２のＥＸ−ＦＵＬＬを比較すると、ＥＸ−ＦＵＬＬが約１．５％ｎｏｒｍａｌを下回っている。また、そのときＥＸ−ＦＵＬＬのｎｏｒｍａｌに対する消費電力削減率はディスパッチ・ウェイクアップ・セレクト・発行の各ステージにおいてそれぞれ約７０％、５０％、７４％、８０％となっており、同じエントリー数同士の比較よりもさらに大幅な消費電力削減を性能の低下率約１．５％で達成している。
【０１９７】
変形例
今まで述べた例では、２個の命令をグループ化することについて述べ、それに合わせてマスターキュー１２０とスレーブキュー１２２とを備える命令キュー１１０等を説明してきた。しかしながら、本発明は、主命令を含むｎ（ｎは２以上の正の整数）個の複数の命令群を同一エントリーに格納可能な命令キューとして構成することが可能である。その場合は、命令キューはｎ本のキュー備えることになる。その内の１本は主命令のためのキューとなりＣＡＭもその主命令を格納している１本のキューに対して備えられる。また、この場合、スレーブキューバリッドフラグ１２４は、残りのｎ−１本のスレーブキューに従属命令が１個でも格納されている場合に立てられるフラグである。
【図面の簡単な説明】
【０１９８】
【図１】本実施の形態における動的命令スケジューリング機構の概念図である。
【図２】本実施の形態におけるステートテーブルの構成図である。
【図３】本実施の形態におけるディスパッチの動作を示すフローチャートである。
【図４】本実施の形態における動的命令スケジューリング機構の全体構成図である。
【図５】本実施の形態の命令キューによって発行された命令を実行するためのＡＬＵの構成の一例を示す説明図である。
【図６】改良した動的命令スケジューリング機構の構成図である。
【図７】評価に用いたプロセッサの条件を示す図である。
【図８】命令キューのエントリーサイズが性能に与える影響を表すグラフである。
【図９】評価に用いた全プログラムにおけるＩＰＣを示すグラフである。
【図１０】グループ化された命令の割合を表すグラフである。
【図１１】ＥＸ−ＦＵＬＬにおいてグループ化された命令の内訳を表すグラフである。
【図１２】ＥＸ−ＦＵＬＬにおいて従来のプロセッサに対する、本実施の形態の動的命令スケジューリング機構の消費電力削減率を示したグラフである。
【図１３】従来の動的命令スケジューリング機構の構成図である。
【図１４】従来のＲＩＳＣの命令発行の様子を示すフロー図である。
【符号の説明】
【０１９９】
１０  命令キュー
１０ａ  書き込みポート
１０ｂ  読み出しポート
１２  制御手段
１２ａ  制御線
３０  ステートテーブル
１１０  命令キュー
１１０ａ  書き込みポート
１１０ｂ  読み出しポート
１１２  制御手段
１１２ａ  制御線
１１３  グループ化制御回路
１２０  マスターキュー
１２２  スレーブキュー
１２４  スレーブキューバリッドフラグ
１２６  ラッチ  
１３０  ステートテーブル
１４０ａ、１４０ｂ  ＡＬＵ
１４２ａ、１４２ｂ  ＡＬＵ
２１０  命令キュー
２１０ａ  書き込みポート
２１０ｂ  読み出しポート
２１２  制御手段
２１２ａ  制御線
２２０  論理マスターキュー
２２２  論理スレーブキュー
２２４  スレーブキューバリッドフラグ
２２６  ラッチ
【図１】
2007328484.tif 000003
【図２】
2007328484.tif 000004
【図３】
2007328484.tif 000005
【図４】
2007328484.tif 000006
【図５】
2007328484.tif 000007
【図６】
2007328484.tif 000008
【図７】
2007328484.tif 000009
【図８】
2007328484.tif 000010
【図９】
2007328484.tif 000011
【図１０】
2007328484.tif 000012
【図１１】
2007328484.tif 000013
【図１２】
2007328484.tif 000014
【図１３】
2007328484.tif 000015
【図１４】
2007328484.tif 000016