図1に本発明の実施の形態におけるプロセッサ装置100の機能ブロック図を示す。本実施の形態に係るプロセッサ装置100は、フェッチ部と、発行部と、ディスパッチ部と、レジスタ部と、実行部と、メモリ部と、コミット部とを有する。フェッチ部は、図示しないフェッチパイプライン部と、1次命令キャッシュ部101と分岐予測部102とを含む。発行部は、デコーダ103とレジスタリネーム制御部104とを含む。ディスパッチ部は、LD/ST(Load/Store)用リザベーションステーション(RS)105と、整数演算用RS106と、整数RS制御部107と、浮動小数点RS制御部108と、浮動小数点演算用RS109と、分岐演算用RS110とを含む。レジスタ部は、整数演算リネーミングレジスタ111と、整数演算用レジスタ112と、浮動小数点演算用レジスタ113と、浮動小数点演算用リネーミングレジスタ114とを含む。実行部は、LD/STパイプ115及び116と、整数系演算器117及び118と、浮動小数点演算器119及び120とを含む。メモリ部は、フェッチ用ポート部121と、ストア用ポート部122と、ストアリタイア制御部123と、1次データキャッシュ部125と、2次キャッシュ部124とを含む。コミット部は、リタイア制御部127と、プログラムカウンタ制御部128と、制御レジスタ129とを含む。
次に、図1に示したプロセッサ装置100における、機能ブロック間の代表的な接続について説明する。フェッチパイプ部は、1次命令キャッシュ部101と、二次キャッシュ部124と、分岐予測部102と、デコーダ103と、図示していないが、プログラムカウンタとに接続されている。また、分岐予測部102は、分岐演算用RS110と、図示していないがリタイア制御部に接続されている。さらに、デコーダ103は、LD/ST用RS105に接続される。なお、図示していないが、デコーダ103は、整数演算用RS106、浮動小数点演算用RS109と、レジスタリネーム制御部104と、リタイア制御部127と、フェッチ用ポート部121と、ストア用ポート部122と、ストアリタイア制御部123にも接続されている。また、レジスタリネーム制御部104は、LD/ST用RS105と、整数演算用RS106と、浮動小数点演算用RS109と、図示されていないが、リネーミングレジスタとレジスタとに接続されている。なお、整数演算用RS106と、浮動小数点演算用RS109と、分岐演算用RS110とは、リタイア制御部127に接続されている。また、図1では、第1及び第2の実施の形態を念頭にして、整数演算用RS106と浮動小数点演算用RS109とを複数設ける例を示している。しかし、第3及び第4の実施の形態のように整数演算用RS106と浮動小数点演算用RS109とを1つずつ設けるようにしても良い。また、第2の実施の形態では、図1に示すように、整数演算用RS106同士、浮動小数点演算用RS109同士も接続されている。
整数演算用RS106には整数RS制御部107が接続されており、浮動小数点演算用RS109には浮動小数点RS制御部108が接続されている。また、整数RS制御部107は、整数演算用RS106内の状態判定及び選択部からの出力信号を受け取るようになっている。同様に、浮動小数点RS制御部108は、浮動小数点演算用RS109内の状態判定及び選択部からの出力信号を受け取るようになっている。
また、LD/ST用RS105は、整数演算リネーミングレジスタ111に接続されている。そして、整数演算用RS106は、整数演算リネーミングレジスタ111と、整数演算用レジスタ112とに接続されている。また、浮動小数点演算用RS109は、浮動小数点演算用レジスタ113と、浮動小数点演算用リネーミングレジスタ114とに接続されている。整数演算リネーミングレジスタ111と、浮動小数点演算用リネーミングレジスタ114とには、1次データキャッシュ部125も接続されている。さらに、整数演算リネーミングレジスタ111には、整数系演算器117及び118が接続されており、浮動小数点演算用リネーミングレジスタ114には、浮動小数点演算器119及び120が接続されている。
整数演算リネーミングレジスタ111は、整数演算用レジスタ112と、LD/STパイプ115及び116と、整数系演算器117及び118とに接続されている。整数演算用レジスタ112も、同様にLD/STパイプ115及び116と、整数系演算器117及び118とに接続されている。さらに、浮動小数点演算用リネーミングレジスタ114は、浮動小数点演算用レジスタ113と、浮動小数点演算器119及び120とに接続されている。浮動小数点演算用レジスタ113は、浮動小数点演算器119及び120に接続されている。
LD/STパイプ115及び116は、フェッチ用ポート部121及びストア用ポート部122に接続され、整数系演算器117及び118は、ストアリタイア制御部123に接続されている。また、浮動小数点演算器119及び120は、ストアリタイア制御部123に接続されている。
フェッチ用ポート部121、ストア用ポート部122、及びストアリタイア制御部123は、1次データキャッシュ部125に接続されている。1次データキャッシュ部125は、2次キャッシュ部124とも接続されている。2次キャッシュ部124は、プロセッサ装置100内のシステムバス126とも接続されている。さらに、リタイア制御部127は、プログラムカウンタ制御部128と制御レジスタ129とに接続されている。
図1に示したプロセッサ装置100の各機能及び動作については、整数演算用RS106、整数RS制御部107、浮動小数点RS制御部108、及び浮動小数点演算用RS109以外の部分については、従来と同様であるからここでは説明を省略する。なお、本願では、図1に示したプロセッサ装置100全体の命令処理ステージだけではなく、リザベーションステーション以降の命令処理ステージについても、演算パイプラインと呼ぶものとする。
[実施の形態1]
図2に、第1の実施の形態における概念図を示す。図2には、第1のリザベーションステーションRS−Aと、第2のリザベーションステーションRS−Bとが設けられており、第1のリザベーションステーションRS−Aは原則として演算パイプラインAに対応付けられており、第2のリザベーションステーションRS−Bは原則として演算パイプラインBに対応付けられているとする。このように、リザベーションステーションと演算パイプラインとが1対1対応している場合には、リザベーションステーションに保持されている命令のうちいずれの命令を演算パイプラインに出力すべきか判断する処理が簡単になるという利点を有する。一方でリザベーションステーションにディスパッチ可能な命令がない場合には演算パイプラインに命令をディスパッチできないため、演算パイプラインにバブルが発生して実行効率が落ちてしまう。そこで、図2に示したように、例えば第1のリザベーションステーションRS−Aと、第2のリザベーションステーションRS−Bとを1つの組として設定し、第1のリザベーションステーションRS−Aにおいてディスパッチ可能な命令が存在しない場合には、第2のリザベーションステーションRS−Bが、ディスパッチ可能であって優先度が高い命令を2つ選択して、最も優先度が高い命令を対応する演算パイプラインBに送出すると共に、点線で示したように2番目に優先度が高い命令を演算パイプラインAに送出するようにする。このような構成を採用することにより、演算パイプラインの効率的な利用が図られるようになる。
図2に示した本実施の形態の概要を実装するために、例えば整数演算用RS106a(整数演算用RS106は、整数演算用RS106a及び整数演算用RS106bを含むものとする)は、図3に示すような構成を有する。整数演算用RS106aは、第1乃至第nのエントリ1061乃至1063と、例えばAND回路である回路1064乃至1066と、状態判定及び選択部1067と、第1のセレクタ1068と、第2のセレクタ1069とを有する。図3では、デコーダ103などとの接続線は省略されている。エントリ1061乃至1063には、演算パイプラインへのディスパッチの可否を判定するためのビットと、オペランド情報と、データの参照元・定義先などのデータが保持されている。第1のエントリ1061においてディスパッチの可否判定に用いられるビット格納部は回路1064に接続され、第2のエントリ1062においてディスパッチの可否判定に用いられるビット格納部は回路1065に接続され、第nのエントリ1063においてディスパッチの可否判定に用いられるビット格納部は回路1066に接続されている。また、第1乃至第nのエントリ1061乃至1063は、それぞれ第1及び第2のセレクタ1068及び1069の入力に接続されている。状態判定及び選択部1067は、回路1064乃至1066の出力と第1及び第2のセレクタ1068及び1069の制御入力と、整数RS制御部107とに接続されている。第1のセレクタ1068は、当該整数演算用RS106aに対応する演算パイプラインに接続されており、第2のセレクタ1069は、整数演算用RS106bに対応する演算パイプラインに接続されている。
第1のエントリ1061においてディスパッチの可否判定に用いられるビットは回路1064でAND演算され、全てのビットが1であれば、ディスパッチ可能を表すオン信号が状態判定及び選択部1067に出力される。第2のエントリ1062乃至第nのエントリ1063についても同様である。整数RS制御部107が通常モード(対応する演算パイプラインにのみ命令を送出するモード)を指示している場合には、状態判定及び選択部1067は、オン信号を出力した回路に対応するエントリのうち、優先順位の最も高いエントリに格納されているデータ(命令)を対応する演算パイプラインにディスパッチさせるように第1のセレクタ1068に指示する。そうすると、ディスパッチ可能な命令を保持する最優先エントリから、対応する演算パイプラインに当該命令が出力される。例えば第1のエントリ1061の優先順位が最も高く、第nのエントリ1063の優先順位が最も低いものとする。なお、通常モードにおいては、第2のセレクタ1069に選択指示を行うことはない。また、状態判定及び選択部1067は、回路1064乃至1066のいずれもがディスパッチ不可を表すオフ信号を出力している、すなわちいずれのエントリにもディスパッチ可能な命令が存在しないという状態を検出する場合もある。このような場合には、第1のセレクタ1068にもディスパッチの指示を行わない。その後、状態判定及び選択部1067は、ディスパッチを行ったか否かを表す信号を整数RS制御部107に出力する。
一方、整数RS制御部107が特別モード(隣の演算パイプラインにも命令を送出するモード)を指示すると、状態判定及び選択部1067は、オン信号を出力した回路に対応するエントリのうち、優先順位の最も高いエントリに格納されているデータ(命令)を対応する演算パイプラインにディスパッチさせるように第1のセレクタ1068に指示すると共に、オン信号を出力した回路に対応するエントリのうち、2番目に優先度の高いエントリに格納されているデータ(命令)を隣の演算パイプライン(ここでは整数演算用RS106bに対応付けられた演算パイプライン)にディスパッチさせるように第2のセレクタ1069に指示する。そうすると、ディスパッチ可能な命令を保持する最優先エントリから、対応する演算パイプラインに当該命令が出力され、ディスパッチ可能な命令を保持する2番目の優先度を有するエントリから、隣の演算パイプラインに当該命令が出力される。なお、ディスパッチ可能な命令が1つしかなければ、対応する演算パイプラインにのみ当該命令に出力する。ディスパッチ可能な命令が1つもなければ、いずれの演算パイプラインにも出力は行わない。状態判定及び選択部1067は、ディスパッチを行ったか否かを表す信号を整数RS制御部107に出力する。
なお、浮動小数点演算用RS109及び浮動小数点RS制御部108についても同様の処理を行う。また、命令が演算パイプラインに送出されると、下位のエントリに格納された命令が上位の空きエントリに移動される。
図3に示したリザベーションステーションの詳細動作を図4に示す。なお、処理モード=0は通常モードを表し、処理モード=1は特別モードであって第1のリザベーションステーションRS−Aから第2のリザベーションステーションRS−Bに対応付けられた演算パイプラインBにも命令を送出するモードであり、処理モード=2も特別モードであって第2のリザベーションステーションRS−Bから第1のリザベーションステーションRS−Aに対応付けられた演算パイプラインAにも命令を送出するモードである。
まず、整数RS制御部107は、処理モード=0と初期化する(ステップS1)。そして、処理モード=0であるか判断する(ステップS3)。処理モード=0であれば、各リザベーションステーションの状態判定及び選択部1067に通常モードであることを指示する。第1のリザベーションステーションRS−A及び第2のリザベーションステーションRS−Bの各々の状態判定及び選択部1067は、エントリ番号の小さい(優先度の高い)順に送出の条件(命令の依存関係及び演算資源の空き)を上で述べた回路1064乃至1066の出力信号により確認し、送出の条件を満たした、最初のエントリの命令を第1のセレクタ1068に指示を行って対応する演算パイプラインに送出させる(ステップS5)。当然、送出の条件を満たした命令が存在しない場合には、ディスパッチを行わない。
また、第1のリザベーションステーションRS−A及び第2のリザベーションステーションRS−Bの各々の状態判定及び選択部1067は、ディスパッチの有無を表す信号を整数RS制御部107に送出する(ステップS7)。整数RS制御部107は、第1のリザベーションステーションRS−Aのディスパッチ状態を表す管理変数CAの値、第2のリザベーションステーションRS−Bのディスパッチ状態を表す管理変数CBの値を、ディスパッチの有無を表す信号に基づき更新する(ステップS9)。すなわち、ディスパッチ有りを表す信号を受信すると、管理変数(CA又はCB)=0と更新する。また、ディスパッチ無しを表す信号を受信すると、管理変数(CA又はCB)=管理変数(CA又はCB)+1と更新する。そして、整数RS制御部107は、CA及びCBの値に応じて処理モードを更新する(ステップS11)。CA=0且つCB≧3であれば処理モードを1に設定し、CA≧3且つCB=0であれば処理モードを2に設定する。それ以外の場合は処理モードを0に設定する。すなわち、いずれかのリザベーションステーションから演算パイプラインへ命令が送出されているが、他方のリザベーションステーションから3回連続で命令が送出されていない状態を検出しようとしている。このように発行可能な命令に偏りが生じてしまっている場合(格納された命令の数に偏りがある場合及び格納された命令の特徴が異なっている場合などを含む)、それを是正するために処理モードを変更する。処理モード=1であれば、以下で詳細に説明するように第1のリザベーションステーションRS−Aから演算パイプラインA及びBに命令がディスパッチされる第1の特別なモードとなる。一方、処理モード=2であれば、以下で詳細に説明するように第2のリザベーションステーションRS−Bから演算パイプラインA及びBに命令がディスパッチされる第2の特別なモードとなる。そしてステップS11の後にステップS3に戻る。
またステップS3において処理モード=0ではないと判断された場合、処理モード=1であるか判断する(ステップS13)。もし、処理モード=1であれば、リザベーションステーションRS−Aにおける状態判定及び選択部1067は、エントリ番号の小さい(優先度の高い)順に送出の条件(命令の依存関係及び演算資源の空き)を上で述べた回路1064乃至1066の出力信号により確認し、送出の条件を満たした、最初のエントリの命令を第1のセレクタ1068に指示を行って対応する第1の演算パイプラインAへ送出させる(ステップS15)。当然送出の条件を満たした命令が存在しない場合には、ディスパッチを行わない。次に、第1のリザベーションステーションRS−Aにおける状態判定及び選択部1067は、さらに送出の条件を上で述べた回路1064乃至1066の出力信号により確認し、送出の条件を満たした、2番目のエントリの命令を第2のセレクタ1069に指示を行って第2の演算パイプラインBへ送出させる(ステップS17)。そして、第1のリザベーションステーションRS−Aにおける状態判定及び選択部1067は、ディスパッチを行っていればディスパッチ有りを表す信号を、ディスパッチを行っていなければディスパッチなしを表す信号を整数RS制御部107に送出する(ステップS19)。一方、第2のリザベーションステーションRS−Bにおける状態判定及び選択部1067は、エントリ番号の小さい(優先度の高い)順に送出の条件(命令の依存関係及び演算資源の空き)を上で述べた回路1064乃至1066の出力信号により確認し、送出の条件を満たした命令が存在していれば、ディスパッチすることなくディスパッチ有りを表す信号を整数RS制御部107に送出する(ステップS21)。なお、送出の条件を満たした命令が存在していない場合には、ディスパッチなしを表す信号が整数RS制御部107に送出される。その後ステップS9に移行する。ステップS21でディスパッチ有りを表す信号を送出すると、ステップS9でCB=0に設定されるので、処理モードが0に戻り、第2のリザベーションステーションRS−Bから演算パイプラインBへ命令がディスパッチされるようになる。
さらにステップS13において処理モード=1ではないと判断されると処理モード=2であり、リザベーションステーションRS−Bにおける状態判定及び選択部1067は、エントリ番号の小さい(優先度の高い)順に送出の条件(命令の依存関係及び演算資源の空き)を上で述べた回路1064乃至1066の出力信号により確認し、送出の条件を満たした、最初のエントリの命令を第1のセレクタ1068を介して対応する第2の演算パイプラインBへ送出させる(ステップS23)。当然送出の条件を満たした命令が存在しない場合には、ディスパッチを行わない。次に、第2のリザベーションステーションRS−Bにおける状態判定及び選択部1067は、さらに送出の条件を上で述べた回路1064乃至1066の出力信号により確認し、送出の条件を満たした、2番目のエントリの命令を第2のセレクタ1069に指示して第1の演算パイプラインAへ送出させる(ステップS25)。そして、第2のリザベーションステーションRS−Bにおける状態判定及び選択部1067は、ディスパッチを行っていればディスパッチ有りを表す信号を、ディスパッチを行っていなければディスパッチなしを表す信号を整数RS制御部107に送出する(ステップS27)。一方、第1のリザベーションステーションRS−Aにおける状態判定及び選択部1067は、エントリ番号の小さい(優先度の高い)順に送出の条件(命令の依存関係及び演算資源の空き)を上で述べた回路1064乃至1066の出力信号により確認し、送出の条件を満たした命令が存在していれば、ディスパッチすることなくディスパッチ有りを表す信号を整数RS制御部107に送出する(ステップS29)。なお、送出の条件を満たした命令が存在していない場合には、ディスパッチなしを表す信号が整数RS制御部107に送出される。その後ステップS9に移行する。ステップS29でディスパッチ有りを表す信号を送出すると、ステップS9でCA=0に設定されるので、処理モードが0に戻り、第1のリザベーションステーションRS−Aから演算パイプラインAへ命令がディスパッチがなされるようになる。
このように処理モード=1となれば、第2のリザベーションステーションRS−Bは論理的に演算パイプラインから分離され、処理モード=2となれば、第1のリザベーションステーションRS−Aは論理的に演算パイプラインから分離される。このように本実施の形態では、リザベーションステーションの状態に応じて使用できないリザベーションステーションを分離して、命令をディスパッチ可能なリザベーションステーションを有効に利用することにより演算パイプラインの有効利用を可能とするものである。
なお、図4に示した処理フローにおける処理モードの決定方法は一例であって管理変数に対する閾値は別の値を用いることも可能である。
[実施の形態2]
図5に、第2の実施の形態における概念図を示す。図5には、第1のリザベーションステーションRS−Aと、第2のリザベーションステーションRS−Bとが設けられており、第1のリザベーションステーションRS−Aは演算パイプラインAに対応付けられており、第2のリザベーションステーションRS−Bは演算パイプラインBに対応付けられているとする。よって、リザベーションステーションにディスパッチ可能な命令がない場合には演算パイプラインに命令をディスパッチできないため、演算パイプラインにバブルが発生して実行効率が落ちてしまうという問題がある。そこで、図5に示したように、例えば第1のリザベーションステーションRS−Aと、第2のリザベーションステーションRS−Bとを1つの組として設定し、第2のリザベーションステーションRS−Bにおいてディスパッチ可能な命令が存在しない場合には、第1のリザベーションステーションRS−Aは、所定個数の命令を選択して、図中矢印で示すように、当該命令を第2のリザベーションステーションRS−Bに移動させる。このような構成を採用することにより、演算パイプラインの効率的な利用が図られるようになる。
図5に示した本実施の形態に係る概要を実装するために、例えば整数演算用RS106a(整数演算用RS106は、整数演算用RS106a及び整数演算用RS106bを含むものとする)は、図6及び図7に示すような構成を有する。
まず図6に通常モードにおける構成を示す。通常モードにおいて用いられる整数演算用RS106aの構成要素は、第1乃至第Nのエントリ1071乃至1074と、例えばAND回路である回路1075乃至1078と、状態判定及び選択部1079と、セレクタ1083とを含む。図6では、デコーダ103などとの接続線は省略されている。エントリ1071乃至1074には、演算パイプラインへのディスパッチの可否を判定するためのビットと、オペランド情報と、データの参照元・定義先などのデータが保持されている。第1のエントリ1071においてディスパッチの可否判定に用いられるビット格納部は回路1075に接続され、第2のエントリ1072においてディスパッチの可否判定に用いられるビット格納部は回路1076に接続され、第N−1のエントリ1073においてディスパッチの可否判定に用いられるビット格納部は回路1077に接続され、第Nのエントリ1074においてディスパッチの可否判定に用いられるビット格納部は回路1078に接続されている。また、第1乃至第Nのエントリ1071乃至1074は、それぞれセレクタ1083に接続されている。状態判定及び選択部1079は、回路1075乃至1078の出力とセレクタ1083の制御入力と、整数RS制御部107とに接続されている。セレクタ1083の出力は、当該整数演算用RS106aに対応する演算パイプラインに接続されている。
第1のエントリ1071においてディスパッチの可否判定に用いられるビットは回路1075でAND演算され、全てのビットが1であれば、ディスパッチ可能を表すオン信号が状態判定及び選択部1079に出力される。第2のエントリ1072乃至第Nのエントリ1074についても同様である。整数RS制御部107が通常モード(命令を他のリザベーションステーションに移動させることなく、対応する演算パイプラインに命令を送出するモード)を指示している場合には、状態判定及び選択部1079は、オン信号を出力した回路に対応するエントリのうち、優先順位の最も高いエントリに格納されているデータ(命令)を、対応する演算パイプラインにディスパッチさせるようにセレクタ1083に指示する。そうすると、ディスパッチ可能な命令を保持する最優先エントリから、対応する演算パイプラインに当該命令が出力される。例えば第1のエントリ1071の優先順位が最も高く、第Nのエントリ1074の優先順位が最も低いものとする。また、状態判定及び選択部1079は、回路1075乃至1078のいずれもがディスパッチ不可を表すオフ信号を出力している、すなわちいずれのエントリにもディスパッチ可能な命令が存在しないという状態を検出する場合もある。このような場合には、セレクタ1083にもディスパッチの指示を行わない。状態判定及び選択部1079は、ディスパッチを行ったか否かを表す信号を整数RS制御部107に出力する。
次に図7に特別モードにおける構成を示す。特別モードにおいて用いられる整数演算用RS106aの構成要素は、第1乃至第Nのエントリ1071乃至1074と、例えばAND回路である回路1075乃至1078と、状態判定及び選択部1079と、第1のセレクタ1080乃至第mのセレクタ1081とを含む。図6と同じ構成については同じ参照番号が付されている。また、図6と同様に図7ではデコーダ103などとの接続線は省略されている。図6との違いは、第1乃至第mのセレクタ1080乃至1081が設けられている点にある。第1のセレクタ1080の入力は、第1のエントリ1071からX(設計仕様において一意に決められる正の整数)個の奇数番号エントリと接続されている。図7の例では、第1のエントリ1071と第N−1のエントリ1073とが接続されている。また、第1のセレクタ1080の出力は、隣の整数演算用RS106bにおける先頭エントリに接続されている。また、第mのセレクタ1081の入力は、第m以降のエントリのうち奇数番号エントリが接続されている。図7の例では、第N−1のエントリ1073が接続されている。第mのセレクタ1081の出力は、隣の整数演算用RS106bにおける第mのエントリに接続されている。
状態判定及び選択部1079は、整数RS制御部107から特別モードが指示されており且つ整数RS制御部107又は隣の整数演算用RS106bから当該整数演算用RS106bが空であることを通知されると、図6に示した構成による演算パイプラインへの命令のディスパッチとは別に、回路1075乃至回路1078からの信号を基に奇数番号エントリのうち命令を格納している上位m個のエントリを選択し、第1乃至第mのセレクタ1080乃至1081に、選択エントリに格納された命令を隣の整数演算用RS106bにおける第1乃至第mのエントリに出力するように命令する。なお、状態判定及び選択部1079には、各セレクタに接続されているエントリの番号(ID)が登録されており、どのセレクタにどの選択エントリに格納されている命令を送出させるかを上位エントリから決定して、各セレクタにいずれのエントリから命令を送出させるか指示する。これにより、空となった隣の整数演算用RS106bにおける第1のエントリから第mのエントリまで命令が格納されるようになる。なお、整数演算用RS106aにおける状態判定及び選択部1079は、整数RS制御部107に対して対応する演算パイプラインに命令のディスパッチを行った場合にはディスパッチ有りを表す信号を出力し、ディスパッチを行っていない場合にはディスパッチなしを表す信号を出力する。一方、整数演算用RS106bにおける状態判定及び選択部1079は、整数RS制御部107に対して、ディスパッチを行っていなくとも整数演算用RS106aから命令を受領した場合には、ディスパッチ有りを表す信号を送出する。
このように本実施の形態においても隣接するリザベーションステーションにおいて保持する命令数に偏りが発生した場合には、演算パイプラインの有効利用を図るため、リザベーションステーション間において命令の移動を行う。なお、上での例では片方のリザベーションステーションが空になることを要件としていたが、例えば保持する命令数の差が所定数以上となった場合に、命令の移動を行うようにしてもよい。この際移動先のバッファで、エントリ1からエントリNまでが、エントリに命令が格納された順番を守る構造になっている場合は、移動により追加される命令が、この順番を損わないことへの配慮が必要である。
図6及び図7に示したリザベーションステーションの詳細動作を図8に示す。なお、処理モード=0は通常モードを表し、処理モード=1は特別モードであって第1のリザベーションステーションRS−Aから第2のリザベーションステーションRS−Bに命令を移動させるモードであり、処理モード=2も特別モードであって第2のリザベーションステーションRS−Bから第1のリザベーションステーションRS−Aに命令を移動させるモードである。
まず、整数RS制御部107は、処理モード=0と初期化する(ステップS31)。そして、処理モード=0であるか判断する(ステップS33)。処理モード=0であれば、各リザベーションステーションの状態判定及び選択部1079に通常モードであることを通知する。第1のリザベーションステーションRS−A及び第2のリザベーションステーションRS−Bの各々の状態判定及び選択部1079は、エントリ番号の小さい(優先度の高い)順に送出の条件(命令の依存関係及び演算資源の空き)を上で述べた回路1075乃至1078の出力信号により確認し、送出の条件を満たした、最初のエントリの命令をセレクタ1083に指示して対応する演算パイプラインに送出させる(ステップS35)。いずれの命令もディスパッチ不可である場合には、演算パイプラインには出力されない。
また、第1のリザベーションステーションRS−A及び第2のリザベーションステーションRS−Bの各々の状態判定及び選択部1079は、ディスパッチの有無を表す信号を整数RS制御部107に送出する(ステップS37)。例えば、上位の空きエントリに下位エントリから命令を移動させる処理及びデコーダ103から命令を空きエントリに格納する処理を行った後に、自リザベーションステーションにおいて格納している命令数を整数RS制御部107に出力するようにしても良い。
整数RS制御部107は、第1のリザベーションステーションRS−Aのディスパッチ状態を表す管理変数CAの値、第2のリザベーションステーションRS−Bのディスパッチ状態を表す管理変数CBの値を、ディスパッチの有無を表す信号に基づき更新する(ステップS39)。すなわち、ディスパッチ有りを表す信号を受信すると、管理変数(CA又はCB)=0と更新する。また、ディスパッチ無しを表す信号を受信すると、管理変数(CA又はCB)=管理変数(CA又はCB)+1と更新する。そして、整数RS制御部107は、CA及びCBの値に応じて処理モードを更新する(ステップS41)。CA=0且つCB=3であれば処理モードを1に設定し、CA=3且つCB=0であれば処理モードを2に設定する。すなわち、いずれかのリザベーションステーションから命令が送出されているが、他方のリザベーションステーションから3回連続で命令が送出されていない状態を検出している。このように発行可能な命令に偏りが生じてしまっている場合(格納された命令の数に偏りがある場合などを含む)、それを是正するために処理モードを変更する。処理モード=1であれば、以下で詳細に説明するように第1のリザベーションステーションRS−Aから第2のリザベーションステーションRS−Bに命令が移動される第1の特別なモードとなる。一方、処理モード=2であれば、以下で詳細に説明するように第2のリザベーションステーションRS−Bから第1のリザベーションステーションRS−Aに命令が移動される第2の特別なモードとなる。そしてステップS41の後にステップS33に戻る。
またステップS33において処理モード=0ではないと判断された場合、処理モード=1であるか判断する(ステップS43)。もし、処理モード=1であれば、第1のリザベーションステーションRS−Aにおける状態判定及び選択部1079は、エントリ番号の小さい(優先度の高い)順に送出の条件(命令の依存関係及び演算資源の空き)を上で述べた回路1075乃至1078の出力信号により確認し、送出の条件を満たした、最初のエントリの命令をセレクタ1083に指示して対応する第1の演算パイプラインAへ送出させる(ステップS45)。一方、第2のリザベーションステーションRS−Bの状態判定及び選択部1079は、自己の全エントリが空となっているか判断し、空となっている場合には、整数RS制御部107を経由して又は直接隣の第1のリザベーションステーションRS−Aに空であることを表す信号を出力する。第1のリザベーションステーションの状態判定及び選択部1079は、整数RS制御部107又は第2のリザベーションステーションRS−Bの状態判定及び選択部1079から、第2のリザベーションステーションRS−Bが空であることを表す信号を受け取ると、奇数番号のエントリであってエントリ番号の小さい順にm個の命令を、第1乃至第mのセレクタ1080乃至1081を介して第2のリザベーションステーションRS−Bのm個のエントリに移動させる(ステップS47)。第1のリザベーションステーションRS−Aに、m個存在しない場合には、移動させられる分だけ移動させる。
そして、第1のリザベーションステーションRS−Aにおける状態判定及び選択部1079は、ディスパッチを行っていればディスパッチ有りを表す信号を、ディスパッチを行っていなければディスパッチなしを表す信号を整数RS制御部107に送出する(ステップS49)。一方、第2のリザベーションステーションRS−Bにおける状態判定及び選択部1079は、第1のリザベーションステーションRS−Aから命令を受け取って自エントリに命令を格納した場合には、ディスパッチすることなくディスパッチ有りを表す信号を整数RS制御部107に送出する(ステップS51)。なお、第1のリザベーションステーションRS−Aから命令を受け取らなかった場合には、ディスパッチなしを表す信号を整数RS制御部107に送出する。その後ステップS39に移行する。ステップS51でディスパッチ有りを表す信号を送出すると、ステップS39でCB=0に設定されるので、処理モードが0に戻り、ディスパッチ可能な命令があれば第2のリザベーションステーションRS−Bから演算パイプラインBへ命令がディスパッチされるようになる。
さらにステップS43において処理モード=1ではないと判断されると処理モード=2であり、第2のリザベーションステーションRS−Bにおける状態判定及び選択部1079は、エントリ番号の小さい(優先度の高い)順に送出の条件(命令の依存関係及び演算資源の空き)を上で述べた回路1075乃至1078の出力信号により確認し、送出の条件を満たした、最初のエントリの命令をセレクタ1083に指示して対応する第2の演算パイプラインBへ送出させる(ステップS53)。いずれの命令もディスパッチ不可である場合には演算パイプラインには出力されない。一方、第1のリザベーションステーションRS−Aの状態判定及び選択部1079は、自己の全エントリが空となっているか判断し、空となっている場合には、整数RS制御部107を経由して又は直接隣の第2のリザベーションステーションRS−Bに空であることを表す信号を出力する。第2のリザベーションステーションRS−Bの状態判定及び選択部1079は、整数RS制御部107又は第1のリザベーションステーションRS−Aの状態判定及び選択部1079から、第1のリザベーションステーションRS−Aが空であることを表す信号を受け取ると、奇数番号のエントリであってエントリ番号の小さい順にm個の命令を、第1乃至第mのセレクタ1080乃至1081を介して第1のリザベーションステーションRS−Aのm個のエントリに移動させる(ステップS55)。第2のリザベーションステーションRS−Bにm個の命令が存在しない場合には、移動させられる分だけ移動させる。
そして、第2のリザベーションステーションRS−Bにおける状態判定及び選択部1079は、ディスパッチを行っていればディスパッチ有りを表す信号を、ディスパッチを行っていなければディスパッチなしを表す信号を整数RS制御部107に送出する(ステップS57)。一方、第1のリザベーションステーションRS−Aにおける状態判定及び選択部1079は、第2のリザベーションステーションRS−Bから命令を受け取って自エントリに命令を格納した場合には、ディスパッチすることなくディスパッチ有りを表す信号を整数RS制御部107に送出する(ステップS59)。なお、第2のリザベーションステーションRS−Bから命令を受け取らなかった場合には、ディスパッチなしを表す信号が整数RS制御部107に送出する。その後ステップS39に移行する。ステップS59でディスパッチ有りを表す信号を送出すると、ステップS39でCA=0に設定されるので、処理モードが0に戻り、ディスパッチ可能な命令があれば第1のリザベーションステーションRS−Aから演算パイプラインAへ命令がディスパッチされるようになる。
このように演算パイプラインに命令がディスパッチされず、リザベーションステーションにおけるエントリが空になった場合には、演算パイプラインが利用されないため利用効率が落ちる。そこで、隣のリザベーションステーションから命令を移動させて、演算パイプラインにバブルを減らして演算パイプラインの利用効率を改善する。
なお、図8のフローでは、空となった上位エントリに下位エントリから命令を移動させる処理及びデコーダ103が命令を発効する処理については触れていないが、例えばステップS39以降に行えばよい。
また、図8のフローでは、演算パイプラインに命令がディスパッチされないことを検出してモードを切り替えるようにしているが、モードを管理することなくリザベーションステーションの命令数(空であるか又は隣のリザベーションステーションに格納された命令数との差が所定数以上であるか)に応じて命令の移動を行うようにしても良い。また、命令を移動させるか否かを、ディスパッチ可能な命令が存在しないという判断基準にする場合もある。
さらに、第1の実施の形態と第2の実施の形態とを組み合わせることも可能である。すなわち、例えば3回連続してディスパッチが行われず、特別なモードに移行した場合には、隣のリザベーションステーションから命令をディスパッチさせると共に、ディスパッチされない理由がリザベーションステーションが空である場合には、命令も移動させるというものである。
[実施の形態3]
図9(a)及び(b)に本発明の第3の実施の形態に係る概要図を示す。本実施の形態においては、第1及び第2の実施の形態とは異なりリザベーションステーションを1つだけ設ける場合、すなわち集中型リザベーションステーションを取り扱う。図9(a)の例では、リザベーションステーションは、エントリRS0乃至RS15の16個のエントリを含む。そしてリザベーションステーションのほとんど全てに命令が格納されている通常モードでは、エントリRS0乃至RS3は演算パイプラインAに対応し、エントリRS4乃至RS7は演算パイプラインBに対応し、エントリRS8乃至RS11は演算パイプラインCに対応し、エントリRS12乃至RS15は演算パイプラインDに対応するように、演算パイプラインと同数の論理的なグループが定義される。リザベーションステーションにおいて各エントリには優先度が設定されており、図9(a)及び(b)においては最も優先度が高いものは、エントリRS0であり、エントリ番号が大きくなるにつれ優先度が下がるものとする。グループ内では、発行可能な命令のうち、優先度の最も高いエントリに格納されている命令が、演算パイプラインにディスパッチされる。また、上位のエントリにおいて空きが発生した場合には、下位のエントリの命令が上位のエントリに移動させられる。
しかし、例えばマルチスレッド方式を採用していると、各スレッドにおいて命令の依存関係などが異なりリザベーションステーションにおけるエントリの各グループから演算パイプラインにディスパッチできる命令の数も異なっている。また、リザベーションステーションにデコーダから出力される命令数もその時々に応じて異なっている。従って、常に図9(a)に示したようにリザベーションステーションの全エントリに命令が格納されるわけではなく、また依存関係が解消されない命令が多いと、演算パイプラインAのバブルが多くなる。そこで、リザベーションステーションにおける命令数、リザベーションステーションから命令がディスパッチされる頻度などに基づき、エントリのグループ構成を動的に変更することによって、演算パイプラインの有効利用を図るものである。具体的には図9(b)に示すように、エントリRS0乃至RS2により第1のグループを構成し、演算パイプラインAに対応付け、エントリRS3乃至RS5により第2のグループを構成し、演算パイプラインBに対応付け、エントリRS6及びRS7により第3のグループを構成し、演算パイプラインCに対応付け、エントリRS8及びRS9により第4のグループを構成し、演算パイプラインDに対応付ける。エントリRS10乃至RS15については、いずれの演算パイプラインにも対応付けられずに、動作は休止状態となる。しかし、ディスパッチ可能な命令が少ない状態等では問題は無く、より古い命令が上位のエントリに移動され、優先的に演算パイプラインにディスパッチされるようになるため、命令の迅速な実行が実現される。
図9(a)及び(b)に示した本実施の形態に係る概念を実装する際における回路例を図10に示す。なお、図1の機能ブロック図において整数演算用RS106及び浮動小数点演算用RS109を複数設ける例を示したが、上でも述べたが本実施の形態では1つの整数演算用RS106、1つの浮動小数点演算用RS109が設けられている。以下、整数演算用RS106を例に示すが、浮動小数点演算用RS109でも同様である。
本実施の形態では、整数演算用RS106は、16のエントリRS0乃至RS15と、セレクタ1101乃至1137などを含む。各エントリは、格納している命令がディスパッチ可能か否かを判断することができるものとする。デコーダ103は、4つの出力を有しているが、いずれもセレクタ1101乃至1116の入力に接続されている。また、上位のエントリに空きが生じた場合下位のエントリから命令を移動させるが、本実施の形態では4レベル上位のエントリまで命令を移動させることができるものとする。従って、エントリRS15に格納された命令は、エントリRS11、RS12、RS13及びRS14に移動させることができる。このため、エントリRS15は、エントリRS14に接続されているセレクタ1115の入力と、エントリRS13に接続されているセレクタ1114の入力と、エントリRS12に接続されているセレクタ1113の入力と、エントリRS11に接続されているセレクタ1112の入力と、接続されている。同様にして、エントリRS14に格納された命令は、エントリRS13、RS12、RS11及びRS10に移動させることができるようにするため、エントリRS13に接続されているセレクタ1114の入力と、エントリRS12に接続されているセレクタ1113の入力と、エントリRS11に接続されているセレクタ1112の入力と、エントリRS10に接続されているセレクタ1111の入力と、接続されている。また、エントリRS13に格納された命令は、エントリRS12、RS11、RS10及びRS9に移動させることができるようにするため、エントリRS12に接続されているセレクタ1113の入力と、エントリRS11に接続されているセレクタ1112の入力と、エントリRS10に接続されているセレクタ1111の入力と、エントリRS9に接続されているセレクタ1110の入力と、接続されている。エントリRS12に格納された命令は、エントリRS11、RS10、RS9及びRS8に移動させることができるようにするため、エントリRS11に接続されているセレクタ1112の入力と、エントリRS10に接続されているセレクタ1111の入力と、エントリRS9に接続されているセレクタ1110の入力と、エントリRS8に接続されているセレクタ1109の入力と、接続されている。エントリRS11に格納された命令は、エントリRS10、RS9、RS8及びRS7に移動させることができるようにするため、エントリRS10に接続されているセレクタ1111の入力と、エントリRS9に接続されているセレクタ1110の入力と、エントリRS8に接続されているセレクタ1109の入力と、エントリRS7に接続されているセレクタ1108の入力と、接続されている。エントリRS10に格納された命令は、エントリRS9、RS8、RS7及びRS6に移動させることができるようにするため、エントリRS9に接続されているセレクタ1110の入力と、エントリRS8に接続されているセレクタ1109の入力と、エントリRS7に接続されているセレクタ1108の入力と、エントリRS6に接続されているセレクタ1107の入力と、接続されている。エントリRS9に格納された命令は、エントリRS8、RS7、RS6及びRS5に移動させることができるようにするため、エントリRS8に接続されているセレクタ1109の入力と、エントリRS7に接続されているセレクタ1108の入力と、エントリRS6に接続されているセレクタ1107の入力と、エントリRS5に接続されているセレクタ1106の入力と、接続されている。エントリRS8に格納された命令は、エントリRS7、RS6、RS5及びRS4に移動させることができるようにするため、エントリRS7に接続されているセレクタ1108の入力と、エントリRS6に接続されているセレクタ1107の入力と、エントリRS5に接続されているセレクタ1106の入力と、エントリRS4に接続されているセレクタ1105の入力と、接続されている。エントリRS7に格納された命令は、エントリRS6、RS5、RS4及びRS3に移動させることができるようにするため、エントリRS6に接続されているセレクタ1107の入力と、エントリRS5に接続されているセレクタ1106の入力と、エントリRS4に接続されているセレクタ1105の入力と、エントリRS3に接続されているセレクタ1104の入力と、接続されている。エントリRS6に格納された命令は、エントリRS5、RS4、RS3及びRS2に移動させることができるようにするため、エントリRS5に接続されているセレクタ1106の入力と、エントリRS4に接続されているセレクタ1105の入力と、エントリRS3に接続されているセレクタ1104の入力と、エントリRS2に接続されているセレクタ1103の入力と、接続されている。エントリRS5に格納された命令は、エントリRS4、RS3、RS2及びRS1に移動させることができるようにするため、エントリRS4に接続されているセレクタ1105の入力と、エントリRS3に接続されているセレクタ1104の入力と、エントリRS2に接続されているセレクタ1103の入力と、エントリRS1に接続されているセレクタ1102の入力と、接続されている。エントリRS4に格納された命令は、エントリRS3、RS2、RS1及びRS0に移動させることができるようにするため、エントリRS3に接続されているセレクタ1104の入力と、エントリRS2に接続されているセレクタ1103の入力と、エントリRS1に接続されているセレクタ1102の入力と、エントリRS0に接続されているセレクタ1101の入力と、接続されている。エントリRS3に格納された命令は、エントリRS2、RS1、及びRS0に移動させることができるようにするため、エントリRS2に接続されているセレクタ1103の入力と、エントリRS1に接続されているセレクタ1102の入力と、エントリRS0に接続されているセレクタ1101の入力と、接続されている。エントリRS2に格納された命令は、エントリRS1、及びRS0に移動させることができるようにするため、エントリRS1に接続されているセレクタ1102の入力と、エントリRS0に接続されているセレクタ1101の入力と、接続されている。エントリRS1に格納された命令は、エントリRS0に移動させることができるようにするため、エントリRS0に接続されているセレクタ1101の入力と接続されている。
セレクタ1101は、エントリRS0が空になると、エントリRS1乃至RS4のうち命令を保持しており且つ優先度の最も高いエントリからの出力を選択するか、エントリRS1乃至RS4のうちいずれのエントリも命令を保持していない場合にはデコーダ103からの4つの出力のうち最優先のものを選択して、選択した出力に係る命令をエントリRS0に格納させる。セレクタ1101自身ではなく、エントリRS0における状態判定部などが命令出力元を選択し、それに応じてセレクタ1101が動作するようにしても良い。以下同じである。セレクタ1102は、エントリRS1が空になると、エントリRS2乃至RS5のうち命令を保持しており且つ優先度の最も高いエントリからの出力を選択するか、エントリRS2乃至RS5のうちいずれのエントリも命令を保持していない場合にはデコーダ103からの4つの出力のうち最優先のもの(既に選択されているものを除く。以下同じ)を選択して、選択した出力に係る命令をエントリRS1に格納させる。セレクタ1103は、エントリRS2が空になると、エントリRS3乃至RS6のうち命令を保持しており且つ優先度の最も高いエントリからの出力を選択するか、エントリRS3乃至RS6のうちいずれのエントリも命令を保持していない場合にはデコーダ103からの4つの出力のうち最優先のものを選択して、選択した出力に係る命令をエントリRS2に格納させる。セレクタ1104は、エントリRS3が空になると、エントリRS4乃至RS7のうち命令を保持しており且つ優先度の最も高いエントリからの出力を選択するか、エントリRS4乃至RS7のうちいずれのエントリも命令を保持していない場合にはデコーダ103からの4つの出力のうち最優先のものを選択して、選択した出力に係る命令をエントリRS3に格納させる。セレクタ1105は、エントリRS4が空になると、エントリRS5乃至RS8のうち命令を保持しており且つ優先度の最も高いエントリからの出力を選択するか、エントリRS5乃至RS8のうちいずれのエントリも命令を保持していない場合にはデコーダ103からの4つの出力のうち最優先のものを選択して、選択した出力に係る命令をエントリRS4に格納させる。セレクタ1106は、エントリRS5が空になると、エントリRS6乃至RS9のうち命令を保持しており且つ優先度の最も高いエントリからの出力を選択するか、エントリRS6乃至RS9のうちいずれのエントリも命令を保持していない場合にはデコーダ103からの4つの出力のうち最優先のものを選択して、選択した出力に係る命令をエントリRS5に格納させる。セレクタ1107は、エントリRS6が空になると、エントリRS7乃至RS10のうち命令を保持しており且つ優先度の最も高いエントリからの出力を選択するか、エントリRS7乃至RS10のうちいずれのエントリも命令を保持していない場合にはデコーダ103からの4つの出力のうち最優先のものを選択して、選択した出力に係る命令をエントリRS6に格納させる。セレクタ1108は、エントリRS7が空になると、エントリRS8乃至RS11のうち命令を保持しており且つ優先度の最も高いエントリからの出力を選択するか、エントリRS8乃至RS11のうちいずれのエントリも命令を保持していない場合にはデコーダ103からの4つの出力のうち最優先のものを選択して、選択した出力に係る命令をエントリRS7に格納させる。
セレクタ1109は、エントリRS8が空になると、エントリRS9乃至RS12のうち命令を保持しており且つ優先度の最も高いエントリからの出力を選択するか、エントリRS9乃至RS12のうちいずれのエントリも命令を保持していない場合にはデコーダ103からの4つの出力のうち最優先のものを選択して、選択した出力に係る命令をエントリRS8に格納させる。セレクタ1110は、エントリRS9が空になると、エントリRS10乃至RS13のうち命令を保持しており且つ優先度の最も高いエントリからの出力を選択するか、エントリRS10乃至RS13のうちいずれのエントリも命令を保持していない場合にはデコーダ103からの4つの出力のうち最優先のものを選択して、選択した出力に係る命令をエントリRS9に格納させる。セレクタ1111は、エントリRS10が空になると、エントリRS11乃至RS14のうち命令を保持しており且つ優先度の最も高いエントリからの出力を選択するか、エントリRS11乃至RS14のうちいずれのエントリも命令を保持していない場合にはデコーダ103からの4つの出力のうち最優先のものを選択して、選択した出力に係る命令をエントリRS10に格納させる。セレクタ1112は、エントリRS11が空になると、エントリRS12乃至RS15のうち命令を保持しており且つ優先度の最も高いエントリからの出力を選択するか、エントリRS12乃至RS15のうちいずれのエントリも命令を保持していない場合にはデコーダ103からの4つの出力のうち最優先のものを選択して、選択した出力に係る命令をエントリRS11に格納させる。セレクタ1113は、エントリRS12が空になると、エントリRS13乃至RS15のうち命令を保持しており且つ優先度の最も高いエントリからの出力を選択するか、エントリRS13乃至RS15のうちいずれのエントリも命令を保持していない場合にはデコーダ103からの4つの出力のうち最優先のものを選択して、選択した出力に係る命令をエントリRS12に格納させる。セレクタ1114は、エントリRS13が空になると、エントリRS14及びRS15のうち命令を保持しており且つ優先度の最も高いエントリからの出力を選択するか、エントリRS14及びRS15のうちいずれのエントリも命令を保持していない場合にはデコーダ103からの4つの出力のうち最優先のものを選択して、選択した出力に係る命令をエントリRS13に格納させる。セレクタ1115は、エントリRS14が空になると、エントリRS15からの出力を選択するか、エントリRS15が命令を保持していない場合にはデコーダ103からの4つの出力のうち最優先のものを選択して、選択した出力に係る命令をエントリRS14に格納させる。セレクタ1116は、エントリRS15が空になると、デコーダ103からの4つの出力のうち最優先のものを選択して、選択した出力に係る命令をエントリRS15に格納させる。エントリRSiに命令を格納する場合、デコーダ103からの4つの出力の命令を格納する場合がある。複数のエントリが、デコーダ103からの命令を格納する場合には、エントリ1101から1116の順番で、デコーダ103からの命令の優先順位の高いものを格納する。優先順位の高いエントリに格納がきまった命令は、下位の優先順位のエントリへの格納対象とはならない。
エントリRS0乃至RS2は、整数RS制御部107に接続されており、整数RS制御部107は、エントリRS0乃至RS2からの出力に応じて動作モードを、Y,R,B及びGのいずれかに設定する。そして、動作モードYであれば、整数RS制御部107は、セレクタ1121乃至1124をイネーブルする。さらに、動作モードRであれば、整数RS制御部107は、セレクタ1125乃至1128をイネーブルする。動作モードBであれば、整数RS制御部107は、セレクタ1129乃至1132をイネーブルする。動作モードGであれば、整数RS制御部107は、セレクタ1133をイネーブルする。
セレクタ1121の入力はエントリRS0乃至RS3に接続され、セレクタ1122の入力はエントリRS4乃至RS7に接続され、セレクタ1123の入力はエントリRS8乃至RS11に接続され、セレクタ1124の入力はエントリRS12乃至RS15に接続されている。セレクタ1121は、セレクタ1134に接続されており、ディスパッチ可能な命令を保持しているエントリのうち最も優先度の高いエントリの命令を、セレクタ1134を介して演算パイプラインAに出力する。セレクタ1122は、セレクタ1135に接続されており、ディスパッチ可能な命令を保持しているエントリのうち最も優先度の高いエントリの命令を、セレクタ1135を介して演算パイプラインBに出力する。さらに、セレクタ1123は、セレクタ1136に接続されており、ディスパッチ可能な命令を保持しているエントリのうち最も優先度の高いエントリの命令を、セレクタ1136を介して演算パイプラインCに出力する。セレクタ1124は、セレクタ1137に接続されており、ディスパッチ可能な命令を保持しているエントリのうち最も優先度の高いエントリの命令を、セレクタ1137を介して演算パイプラインDに出力する。
このように動作モードYであれば、エントリRS0乃至RS3、エントリRS4乃至RS7、エントリRS8乃至RS11、エントリRS12乃至RS15により、グループが構成されている。
また、セレクタ1125の入力はエントリRS0乃至RS2に接続され、セレクタ1126の入力はエントリRS3乃至RS5に接続され、セレクタ1127の入力はエントリRS6乃至RS8に接続され、セレクタ1128の入力はエントリRS9乃至RS12に接続されている。セレクタ1125は、セレクタ1134に接続されており、ディスパッチ可能な命令を保持しているエントリのうち最も優先度の高いエントリの命令を、セレクタ1134を介して演算パイプラインAに出力する。セレクタ1126は、セレクタ1135に接続されており、ディスパッチ可能な命令を保持しているエントリのうち最も優先度の高いエントリの命令を、セレクタ1135を介して演算パイプラインBに出力する。セレクタ1127は、セレクタ1136に接続されており、ディスパッチ可能な命令を保持しているエントリのうち最も優先度の高いエントリの命令を、セレクタ1136を介して演算パイプラインCに出力する。セレクタ1128は、セレクタ1137に接続されており、ディスパッチ可能な命令を保持しているエントリのうち最も優先度の高いエントリの命令を、セレクタ1137を介して演算パイプラインDに出力する。
このように動作モードRであれば、エントリRS0乃至RS2、エントリRS3乃至RS5、エントリRS6乃至RS8、エントリRS9乃至RS12により、グループが構成されている。
さらに、セレクタ1129の入力はエントリRS0及びRS1に接続され、セレクタ1130の入力はエントリRS2及びRS3に接続され、セレクタ1131の入力はエントリRS4及びRS5に接続され、セレクタ1132の入力はエントリRS6乃至RS9に接続されている。セレクタ1129は、セレクタ1134に接続されており、ディスパッチ可能な命令を保持しているエントリのうち最も優先度の高いエントリの命令を、セレクタ1134を介して演算パイプラインAに出力する。セレクタ1130は、セレクタ1135に接続されており、ディスパッチ可能な命令を保持しているエントリのうち最も優先度の高いエントリの命令を、セレクタ1135を介して演算パイプラインBに出力する。セレクタ1131は、セレクタ1136に接続されており、ディスパッチ可能な命令を保持しているエントリのうち最も優先度の高いエントリの命令を、セレクタ1136を介して演算パイプラインCに出力する。セレクタ1132は、セレクタ1137に接続されており、ディスパッチ可能な命令を保持しているエントリのうち最も優先度の高いエントリの命令を、セレクタ1137を介して演算パイプラインDに出力する。
このように動作モードBであれば、エントリRS0及びRS1、エントリRS2及びRS3、エントリRS4及びRS5、エントリRS6乃至RS9により、グループが構成されている。
また、エントリRS0は直接セレクタ1134に接続されており、エントリRS1は直接セレクタ1135に接続されており、エントリRS2は直接セレクタ1136に接続されており、セレクタ1133の入力はエントリRS3乃至RS6に接続されている。セレクタ1133は、セレクタ1137に接続されており、ディスパッチ可能な命令を保持しているエントリのうち最も優先度の高いエントリの命令を、セレクタ1137を介して演算パイプラインDに出力する。
このように動作モードGであれば、エントリRS0、エントリRS1、エントリRS2、エントリRS3乃至RS6によりグループが構成されている。
次に図11及び図12を用いて図10に示した整数演算用RS106及び整数RS制御部107等の詳細な動作を説明する。まず、整数演算用RS106は、動作モード初期値をGに設定する(ステップS61)。次に、動作モード値(Y/R/B/G)に従って、対応するセレクタ・グループをイネーブルする(ステップS63)。動作モードがYであればセレクタ1121乃至1124をイネーブルし、動作モードがRであればセレクタ1125乃至1128をイネーブルし、動作モードがBであればセレクタ1129乃至1132をイネーブルし、動作モードがGであればセレクタ1133をイネーブルする。
そして、動作モードで一意に決まるリザベーションステーションの各グループにおいて、エントリ番号の小さい(優先度の高い)順に送出の条件(命令の依存関係及び演算資源の空き)を確認し、送出の条件を満たした、最初のエントリの命令を、対応する演算パイプラインに送出させる(ステップS65)。同時に、エントリRS0、RS1及びRS2は、すでにデータの依存関係が解消されているか、次のサイクルでバイパス操作によりデータの依存関係が解消される(○)、解消されない(×)又はエントリ空き(△)のいずれかを表す信号を整数RS制御部107に出力する(ステップS67)。
整数RS制御部107は、エントリRS0乃至RS2からの信号を受け取り、依存関係の解消状況及びエントリの空き状況に応じて動作モード値を設定する(ステップS69)。動作モード値は、図12に示すテーブルに基づいて設定される。図12は、RS0、RS1及びRS2の状態組合せに応じてモード値が定義されている。テーブルにおいて「−」は、いずれの場合でも良いことを表す。また、最後の3行はその他の具体的状態組合せを示す。このように、3つのエントリの状態で、エントリの空き状況、エントリから演算パイプラインへの命令ディスパッチ状況、若しくはその両方を推定し、それに応じて適切な動作モードを特定する。処理は、その後ステップS63に戻る。なお、上位エントリに空きが生じた場合における下位エントリからの命令の移動(バブルアップとも呼ぶ)及びデコーダ103からの命令の発行については、従来と同じであるから図11では説明を省略しているが、例えばステップS69と同時又はその後に実行する。
以上述べたように、エントリの空き状況、エントリから演算パイプラインへの命令ディスパッチの状況などに応じて、エントリのグループ構成を動的に変更することにより、古い命令を優先的に実行させ、且つ演算パイプラインを効率的に利用できるようになる。
なお、図11及び図12は、一例であって、モードの数、RS制御部が参照するエントリの数は、変更することが可能である。但し、場合によっては複雑さが増加してしまい、ペナルティを払う必要が生ずる場合もある。また、図12に示したテーブルの内容についても、モード数、RS制御部が参照するエントリの数などを変更しなかったとしても、チューニングによっては変わる場合もある。
さらに、ステップS65とステップS67については同時に行うような例を示しているが、ステップS65とステップS67を同時に行うことなく、ステップS65を実施し且つバブルアップを実行した後にエントリRS0乃至RS2に格納された命令に対してステップS67を実行するようにしても良い。さらに、ステップS67において、レジスタベースで命令の依存関係が解消されている場合も、データの依存関係が解消される(○)ことを表す信号をRS制御部に出力しても良い。
[実施の形態4]
図13(a)及び(b)に本発明の第4の実施の形態に係る概要図を示す。本実施の形態は、物理的に1つのリザベーションステーションを、論理的に複数のリザベーションステーションに見せて使用する機構に関するものである。
図13(a)及び(b)の例では、1つのリザベーションステーションに16のエントリRS0乃至RS15を設け、グループ1を構成するエントリRS0、RS4、RS8及びRS12をセレクタSL4を介して演算パイプラインAに接続し、グループ2を構成するエントリRS1、RS5、RS9及びRS13をセレクタSL3を介して演算パイプラインBに接続し、グループ3を構成するエントリRS2、RS6、RS10及びRS14をセレクタSL2を介して演算パイプラインCに接続し、グループ4を構成するエントリRS3、RS7、RS11及びRS15をセレクタSL1を介して演算パイプラインDに接続する。なお、エントリRS0の方が優先度が上位であり、エントリRS15の方が優先度が下位であるものとする。そして、各セレクタでは、ディスパッチ可能な命令を保持するエントリのうち最も高い優先度を有するエントリが保持する命令を演算パイプラインに出力するように動作する。また、上位のエントリから命令がディスパッチされると、下位のエントリから上位の空きエントリに命令が移動される。
このような構成を採用すると、図13(a)のように全エントリに命令が格納されていない場合、すなわち図13(b)のようにエントリRS11乃至RS15に命令が格納されていないような場合であっても、各演算パイプラインにはいずれかのエントリがセレクタを介して接続されているため、演算パイプラインのバブルを最小限に抑えることができる。
図14に本実施の形態に係る詳細な回路例を示す。図14ではエントリ数が9のリザベーションステーションを用いる例が示されている。本実施の形態におけるリザベーションステーションは、エントリRS0乃至RS8、セレクタ1201乃至1212などを含む。デコーダ103の2つの出力は、それぞれセレクタ1201乃至1209に接続されている。また、本実施の形態では全ての下位エントリから上位エントリへ命令を移動させることができるようになっている。すなわち、エントリRS8に接続されているセレクタ1209の入力には、デコーダ103の出力のみが接続されているが、エントリRS7に接続されているセレクタ1208の入力には、エントリRS8とデコーダ103の出力とが接続されている。エントリRS6に接続されているセレクタ1207の入力には、エントリRS7及びRS8とデコーダ103の出力とが接続されている。エントリRS5に接続されているセレクタ1206の入力には、エントリRS6乃至RS8とデコーダ103の出力とが接続されている。エントリRS4に接続されているセレクタ1205の入力には、エントリRS5乃至RS8とデコーダ103の出力とが接続されている。エントリRS3に接続されているセレクタ1204の入力には、エントリRS4乃至RS8とデコーダ103の出力とが接続されている。エントリRS2に接続されているセレクタ1203の入力には、エントリRS3乃至RS8とデコーダ103の出力とが接続されている。エントリRS1に接続されているセレクタ1202の入力には、エントリRS2乃至RS8とデコーダ103の出力とが接続されている。エントリRS0に接続されているセレクタ1201の入力には、エントリRS1乃至RS8とデコーダ103の出力とが接続されている。
セレクタ1201は、エントリRS1乃至RS8のうち空でなく且つ優先順位が最も高いエントリの命令、または当該命令が存在しない場合にはデコーダ103が発行した命令を、エントリRS0に出力する。セレクタ1201自身ではなく、エントリRS0における状態判定部などが命令出力元を選択し、それに応じてセレクタ1201が動作するようにしても良い。以下同じである。同様に、セレクタ1202は、エントリRS2乃至RS8のうち空でなく且つ優先順位が最も高いエントリの命令、または当該命令が存在しない場合にはデコーダ103が発行した命令を、エントリRS1に出力する。セレクタ1203は、エントリRS3乃至RS8のうち空でなく且つ優先順位が最も高いエントリの命令、または当該命令が存在しない場合にはデコーダ103が発行した命令を、エントリRS2に出力する。セレクタ1204は、エントリRS4乃至RS8のうち空でなく且つ優先順位が最も高いエントリの命令、または当該命令が存在しない場合にはデコーダ103が発行した命令を、エントリRS3に出力する。セレクタ1205は、エントリRS5乃至RS8のうち空でなく且つ優先順位が最も高いエントリの命令、または当該命令が存在しない場合にはデコーダ103が発行した命令を、エントリRS4に出力する。セレクタ1206は、エントリRS6乃至RS8のうち空でなく且つ優先順位が最も高いエントリの命令、または当該命令が存在しない場合にはデコーダ103が発行した命令を、エントリRS5に出力する。セレクタ1207は、エントリRS7及びRS8のうち空でなく且つ優先順位が最も高いエントリの命令、または当該命令が存在しない場合にはデコーダ103が発行した命令を、エントリRS6に出力する。セレクタ1208は、エントリRS8のうち空でなく且つ優先順位が最も高いエントリの命令、または当該命令が存在しない場合にはデコーダ103が発行した命令を、エントリRS7に出力する。
エントリRS0、RS3及びRS6はセレクタ1210の入力に接続され、エントリRS1、RS4及びRS7はセレクタ1211の入力に接続され、エントリRS2、RS5及びRS8はセレクタ1212の入力に接続されている。セレクタ1210は、ディスパッチ可能な命令を保持しており且つ最も優先度が高いエントリが保持している命令を演算パイプラインAに出力する。セレクタ1211は、ディスパッチ可能な命令を保持しており且つ最も優先度が高いエントリが保持している命令を演算パイプラインBに出力する。さらに、セレクタ1212は、ディスパッチ可能な命令を保持しており且つ最も優先度が高いエントリが保持している命令を演算パイプラインCに出力する。
本実施の形態では、命令数、命令のディスパッチ頻度などに基づいてモードの切り替えを行うまでもなく、各演算パイプラインに複数のエントリが上位から下位に分散して割り当てられているので、演算パイプラインの有効利用が図られる。
より具体的に本実施の形態の動作及び効果を考察する。例えば、図15(a)に示すように、スレッドAとスレッドBとが存在しており、スレッドAの命令を1つのリザベーションステーションから対応する演算パイプラインに、スレッドBの命令を他の1つのリザベーションステーションから対応する演算パイプラインに出力するものとする。この際、スレッドAについては、各命令について依存関係があり、1つの命令につき完全に演算が終了しない限り次の命令を実行できず、スレッドBについてはそのような制限はないものとする。図15(a)のような従来のリザベーションステーションの構成であれば、図15(b)に示すように、第8サイクル完了時までにスレッドBについてはB−i6までしか実行できない。
一方、図16(a)に示すように本実施の形態に係る構成を採用して、1つのリザベーションステーションを用い、2つの演算パイプラインに命令をエントリのグループ毎に出力するものとした場合、図16(b)に示すように第8サイクル完了時にB−i10まで実行することができる。なお、図16(a)に示すように、リザベーションステーションに初期的にスレッドAの命令A−i1乃至A−i3とスレッドBの命令B−i1乃至B−i3とが交互に、さらにB−i4乃至B−i6が順番に蓄えられている場合、まず第1サイクルの開始時に演算パイプラインAにはスレッドAの命令A−i1が出力され、演算パイプラインBにスレッドBの命令B−i1が出力される。従って図16(c)に示すように、リザベーションステーションには、第1サイクルでは、バブルアップ及びデコーダからの命令発行により、命令A−i2及びA−i3、命令B−i2乃至B−i7が保持されるようになる。なお、命令B−i7がデコーダにより新たに発行された命令である。
そして、第2サイクルの開始時に、演算パイプラインAについては、命令A−i2及びA−i3を出力できないので、命令B−i4が出力され、演算パイプラインBには、命令B−i2が出力される。従って、第2サイクルでは、バブルアップ及びデコーダからの命令発行により、リザベーションステーションにおいて、命令A−i2及びA−i3、命令B−i3,B−i5乃至B−i8が保持されるようになる。なお、命令B−i8がデコーダにより新たに発行された命令である。その後、第3サイクルの開始時に、演算パイプラインAについては、命令A−i2を出力できないので、命令B−i3が出力され、演算パイプラインBには命令A−i3を出力できないので、命令B−i5が出力される。従って、第3サイクルでは、バブルアップ及びデコーダからの命令発行により、リザベーションステーションにおいて、命令A−i2及びA−i3、命令B−i6乃至B−i9が保持されるようになる。なお、命令B−i9がデコーダにより新たに発行された命令である。
さらにその後、第4サイクルの開始時に、演算パイプラインAについては、命令A−i2が出力できるようになったのでこれが出力され、演算パイプラインBには命令A−i3を出力できないので、命令B−i7が出力される。従って、第4サイクルでは、バブルアップ及びデコーダからの命令発行により、リザベーションステーションにおいて、命令A−i3、命令B−i6、命令B−i8乃至B−i10が保持されるようになる。なお、命令B−i10がデコーダにより新たに発行された命令である。さらにその後、第5サイクルの開始時に、演算パイプラインAについては、命令A−i3を出力することができないので命令B−i8が出力され、演算パイプラインBには命令B−i6が出力される。従って、第5サイクルでは、リザベーションステーションにおいて、バブルアップにより、命令A−i3、命令B−i9及びB−i10が保持されるようになる。さらにその後、第6サイクルの開始時に、演算パイプラインAについては、命令A−i3を出力することができないので命令B−i10が出力され、演算パイプラインBには命令B−i9が出力される。従って、第6サイクルでは、リザベーションステーションにおいて、バブルアップにより、命令A−i3のみが保持されるようになる。そして、第7サイクルになると、命令A−i3が出力可能となって、演算パイプラインAに出力される。以上のように、明らかに本実施の形態の方が従来の方式よりスループットが向上している。
以上本発明の実施の形態を説明したが、本発明はこれに限定されるものではない。例えば、第1の実施の形態に係る構成を、例えば第3の実施の形態の1つのエントリに適用するようにしても良い。同様に、第1の実施の形態に係る構成を、例えば第4の実施の形態の1つのエントリに適用するようにしても良い。さらに、図で示した回路サイズは説明の都合により決定されているので、実際のプロセッサ装置において適用する場合に、その数については任意で設定することが可能である。
また、第1及び第2の実施の形態では、2つのリザベーションステーションを組にして、片方に演算パイプラインに対してディスパッチを行えない状態が発生すると、他方のリザベーションステーションが代わりにディスパッチを行うか、命令の移動を行うようにしているが、3以上のリザベーションステーションを組にするようにしても良い。