以下、実施の形態について図面を参照して詳細に説明する。
〔第1の実施の形態〕
図1は、第1の実施の形態に係る演算処理装置の構成例を示す図である。
図1に示す演算処理装置1は、演算実行命令をデコードし、そのデコード結果に応じた演算処理を実行する装置である。この演算処理装置1は、例えば、一般的にCPU、MPU(Microprocessor Unit)などと呼ばれる半導体回路として実現される。演算処理装置1は、演算器11,12、制御部13およびレジスタファイル14を備える。
演算器11は、それぞれオペランド(演算対象)が入力される2つの入力ポート11a,11bを備え、各入力ポート11a,11bに入力されたデータに対する演算を実行する。演算器12も同様に、それぞれオペランドが入力される2つの入力ポート12a,12bを備え、各入力ポート12a,12bに入力されたデータに対する演算を実行する。これらの演算器11,12は、演算を並列に実行可能である。また、演算器11が実行可能な演算の種類と、演算器12が実行可能な演算の種類とは同じであってよい。
ただし、演算器11と演算器12とでは、オペランドとして入力されるソースデータが異なる。図1では、演算器11,12に対する入力パスのうち、レジスタファイル14から読み出された値(以下、「レジスタ値」と呼ぶ)が伝送される入力パスを太線矢印で示し、即値が伝送される入力パスを点線矢印で示す。なお、図1の例では、即値は制御部13から出力されるものとするが、即値は制御部13以外の処理部から出力されてもよい。
演算器11の入力ポート11aは、レジスタ値と即値のいずれの入力も受けることができる。また、演算器11の入力ポート11bも、レジスタ値と即値のいずれの入力も受けることができる。従って、演算器11は、2つのオペランドが両方ともレジスタ値である演算と、一方のオペランドがレジスタ値で他方のオペランドが即値である演算と、2つのオペランドが両方とも即値である演算とを実行可能である。
一方、演算器12の入力ポート12aは、レジスタ値と即値のいずれの入力も受けることができる。しかしながら、演算器12の入力ポート12bは、即値の入力のみ受けることができる。従って、演算器12は、一方のオペランドがレジスタ値で他方のオペランドが即値である演算と、2つのオペランドが両方とも即値である演算とを実行可能である。
制御部13は、演算実行命令に基づいて、演算器11と演算器12のいずれかに、演算実行命令に係る演算を実行させる。制御部13は、演算実行命令に基づき、この演算実行命令に係る演算における2つのオペランドのそれぞれがレジスタ値と即値のいずれであるかを判定する。そして、制御部13は、判定結果に応じて、演算器11と演算器12のいずれかに演算実行命令に係る演算を実行させる。
例えば、制御部13は、演算実行命令に係る演算における2つのオペランドが両方ともレジスタ値であると判定した場合、この演算実行命令に係る演算を演算器11に実行させる。また、制御部13は、演算実行命令に係る演算における2つのオペランドのうち少なくとも一方が即値であると判定した場合、この演算実行命令に係る演算を演算器11,12のいずれかに実行させる。なお、制御部13は、例えば、演算器11,12のそれぞれに対して選択信号を出力することにより、演算を実行させる演算器を選択する。
また、図1では例として、制御部13は、演算実行命令のデコード機能、レジスタファイル14から演算器へのデータ読み出し制御機能、演算器に対する即値の出力機能を備えるものとするが、これらの各機能は、制御部13以外の処理部が実現してもよい。ここで、データ読み出し制御機能とは、デコードされた演算実行命令内のソースオペランドに記述されたレジスタアドレスをレジスタファイル14に出力して、レジスタアドレスに対応するレジスタから、演算を実行させる演算器に対してデータを出力させる機能である。また、即値の出力機能とは、デコードされた演算実行命令内のソースオペランドに記述された即値を、演算を実行させる演算器に対して出力する機能である。
以上の構成の演算処理装置1では、演算器11と演算器12のそれぞれによって演算を並列に実行させることができる。このため、例えば演算器11のみを設けた場合と比較して、演算性能を向上させることができる。
また、一方の演算器12の入力ポート12bに即値のみ入力させる構成としたことで、レジスタファイル14から各演算器への入力パスが3本になる。例えば、演算器11を2台設けた場合には、レジスタファイル14から各演算器への入力パスは4本になるのに対して、図1の構成によれば、レジスタファイル14から各演算器への入力パスを3本に留めることができる。
すなわち、図1の演算処理装置1によれば、演算器を1台のみ設けた場合と比較して、レジスタファイル14から各演算器への入力パスの数が増大することを抑制しつつ、演算性能を向上させることができる。レジスタファイル14から各演算器への入力パスの数を抑制できることにより、配線の面積を抑制できる。また、配線の面積抑制によって配線の長さも短縮されるので、演算器とレジスタファイル14との間の伝送遅延も抑制され、伝送遅延によって演算性能が低下することを抑止できる。
なお、図1では、演算器11,12をそれぞれ1つずつ設けたが、演算器11,12のそれぞれを複数設けてもよい。このとき、演算器11の数より演算器12の数を多くすることにより、レジスタファイル14から各演算器への入力パスの数を抑制する効果が大きくなる。
また、上記の演算器11,12に加えて、2つの入力ポートの両方に即値のみが入力される演算器が設けられてもよい。この場合にも、レジスタファイル14から各演算器への入力パスの数を抑制する効果が大きくなる。
〔第2の実施の形態〕
図2は、第2の実施の形態に係る演算処理装置の構成例を示す図である。
図2に示す演算処理装置100は、汎用演算器110,120,130,140、アドレス演算器150,160,170、キャッシュメモリ180、命令制御部200およびレジスタファイル300を備える。
命令制御部200は、図示しないメモリから演算実行命令を取得して、取得した演算実行命令をデコードする。命令制御部200は、演算実行命令のデコード結果に応じて、汎用演算器110,120,130,140、アドレス演算器150,160,170のいずれか1つを選択し、選択した演算器に対してデコード結果に応じた演算処理を実行させる。また、命令制御部200は、いずれかの演算器に演算処理を実行させる際に、レジスタファイル300からの読み出しデータ(レジスタ値)または、演算実行命令に記述された即値、もしくはレジスタ値と即値の両方を、演算処理を実行させる演算器に入力するように制御する。
レジスタファイル300は、複数のレジスタを備える。レジスタファイル300内の各レジスタには、汎用演算器110,120,130,140による演算結果や図示しないメモリから読み出されたデータなどが格納される。
汎用演算器110,120,130,140のそれぞれは、命令制御部200によってデコードされる演算実行命令のうち、例えば、加算命令、減算命令、乗算命令および除算命令に応じた演算処理を実行する。汎用演算器110,120,130,140は、命令制御部200からの要求に応じて、互いに並列に演算処理を実行できる。
また、汎用演算器110,120,130,140のそれぞれは、入力された2つのオペランドに対して演算を行う。後述するように、汎用演算器110は、2つのオペランドのそれぞれとして、レジスタファイル300からの読み出しデータ(レジスタ値)と命令制御部200からの即値のいずれの入力も受けることができる。また、汎用演算器120,130のそれぞれは、2つのオペランドのうち、一方のオペランドとしてレジスタ値と即値のいずれの入力も受けることができるが、他方のオペランドとして即値の入力のみ受けることができる。汎用演算器140は、2つのオペランドのそれぞれとして即値の入力のみ受けることができる。なお、汎用演算器110,120,130,140のそれぞれによる演算結果は、レジスタファイル300、または図示しないメモリなどに出力される。
アドレス演算器150,160,170のそれぞれは、命令制御部200によってデコードされる演算実行命令のうち、ロード命令およびストア命令に応じたアドレス演算処理を実行する。アドレス演算器150,160,170は、命令制御部200からの要求に応じて、互いに並列に演算処理を実行できる。
また、アドレス演算器150,160,170のそれぞれは、2つのオペランドの入力を受けて演算を行う。後述するように、アドレス演算器150は、2つのオペランドのそれぞれとして、レジスタ値と即値のいずれの入力も受けることができる。また、アドレス演算器160,170のそれぞれは、2つのオペランドのうち、一方のオペランドとしてレジスタ値と即値のいずれの入力も受けることができるが、他方のオペランドとして即値の入力のみ受けることができる。
キャッシュメモリ180は、図示しないメモリのデータをキャッシュする。例えば、アドレス演算器150,160,170のそれぞれは、ロード命令のデコード結果に応じて、メモリからのデータの読み出しアドレスを計算し、算出した読み出しアドレスをキャッシュメモリ180に出力する。この場合、キャッシュメモリ180は、入力された読み出しアドレスに対応するデータを、レジスタファイル300に格納する。また、例えば、アドレス演算器150,160,170のそれぞれは、ストア命令のデコード結果に応じて、メモリに対するデータの書き込みアドレスを計算し、算出した書き込みアドレスをキャッシュメモリ180に出力する。この場合、キャッシュメモリ180は、レジスタファイル300から書き込みデータを読み込み、入力された書き込みアドレスに対応する自身の記憶領域に書き込みデータを書き込むとともに、書き込みデータを図示しないメモリにも書き込む。
次に、各演算器における入出力信号について説明する。図3〜図5は、汎用演算器における入出力信号の例を示す図である。
図3〜図5に示すように、汎用演算器110,120,140のそれぞれは、2つの入力ポートIN1,IN2を備え、入力ポートIN1,IN2のそれぞれに入力されたデータに対して演算処理を行う。また、図示しないが、汎用演算器130も同様に、2つの入力ポートIN1,IN2を備え、入力ポートIN1,IN2のそれぞれに入力されたデータに対して演算処理を行う。
ここで、命令制御部200に入力される演算実行命令には、最大2つのソースオペランドが記述されるものとし、演算実行命令内の2つのソースオペランドのうちの一方を第1ソースオペランド、他方を第2ソースオペランドと呼ぶことにする。このとき、各汎用演算器において、入力ポートIN1は第1ソースオペランドに対応付けられており、入力ポートIN2は第2ソースオペランドに対応付けられている。すなわち、入力ポートIN1には、演算実行命令内の第1ソースオペランドに基づくデータが入力され、入力ポートIN2には、演算実行命令内の第2ソースオペランドに基づくデータが入力される。
図3に示すように、汎用演算器110の入力ポートIN1には、レジスタファイル300からのレジスタ値と、命令制御部200からの即値とが、MUX(Multiplexer)111を介して選択的に入力される。また、汎用演算器110の入力ポートIN2にも同様に、レジスタファイル300からのレジスタ値と、命令制御部200からの即値とが、MUX112を介して選択的に入力される。
また、図4に示すように、汎用演算器120の入力ポートIN1には、レジスタファイル300からのレジスタ値と、命令制御部200からの即値とが、MUX121を介して選択的に入力される。一方、汎用演算器120の入力ポートIN2には、命令制御部200からの即値のみが入力される。
なお、図示しないが、汎用演算器130の入力ポートIN1,IN2に入力される信号の組合せは、汎用演算器120と同様になっている。すなわち、汎用演算器130の入力ポートIN1には、レジスタファイル300からのレジスタ値と、命令制御部200からの即値とが選択的に入力される。一方、汎用演算器130の入力ポートIN2には、命令制御部200からの即値のみが入力される。
また、図5に示すように、汎用演算器140の入力ポートIN1,IN2のいずれにも、命令制御部200からの即値が入力される。
なお、図3〜図5に示すように、汎用演算器110,120,140のそれぞれによって演算された演算結果は、レジスタファイル300に書き込まれる。また、図示しないが、汎用演算器130によって演算された演算結果も、同様に、レジスタファイル300に書き込まれる。演算結果の書き込み先は、演算実行命令内のディスティネーションオペランドにおいて指定されたアドレスであり、命令制御部200によって書き込み先の指定が行われる。
また、図3〜図5に示すように、汎用演算器110,120,140のそれぞれには、命令制御部200からの演算種別指定信号が入力される。汎用演算器110,120,140のそれぞれは、入力された演算種別指定信号によって指定された種別の演算を実行する。演算の種別としては、加算、減算、乗算、除算などがある。なお、図示しないが、汎用演算器130も、他の汎用演算器と同様に、命令制御部200からの演算種別指定信号を受信し、受信した演算種別指定信号によって指定された種別の演算を実行する。
また、演算種別指定信号は、例えば、演算種別ごとに用意された選択信号群として実現される。この場合、各汎用演算器に入力される選択信号のうち1つのみがオンになり、その他の選択信号がすべてオフになることで、演算の種別が指定される。
なお、図示しないが、アドレス演算器150,160,170のそれぞれについても、汎用演算器と同様に、2つの入力ポートIN1,IN2を備え、入力ポートIN1,IN2のそれぞれに入力されたデータに対して演算処理を行う。そして、アドレス演算器150の入力ポートIN1,IN2に入力される信号の組合せは、汎用演算器110と同様になっている。すなわち、アドレス演算器150の入力ポートIN1は、レジスタファイル300からのレジスタ値と、命令制御部200からの即値のいずれの入力も受けることができる。また、アドレス演算器150の入力ポートIN2も同様に、レジスタファイル300からのレジスタ値と、命令制御部200からの即値のいずれの入力も受けることができる。
また、アドレス演算器160の入力ポートIN1,IN2に入力される信号の組合せと、アドレス演算器170の入力ポートIN1,IN2に入力される信号の組合せとは、汎用演算器120,130と同様になっている。すなわち、アドレス演算器160,170のそれぞれの入力ポートIN1は、レジスタファイル300からのレジスタ値と、命令制御部200からの即値のいずれの入力も受けることができる。一方、アドレス演算器160,170のそれぞれの入力ポートIN2は、命令制御部200からの即値の入力のみ受けることができる。
なお、ロード命令やストア命令では、2つのソースオペランドにともに即値が設定されることはない。このため、入力ポートIN1,IN2のいずれにも即値のみが入力されるアドレス演算器は必要とならない。
ところで、各演算器の入力ポートに入力されるオペランドは、レジスタ値か、あるいはそれ以外かの2通りに分類できる。演算器におけるオペランドがレジスタ値以外になる場合の典型例は、オペランドが即値になる場合である。
また、演算器におけるオペランドがレジスタ値かそれ以外かを判別しにくい例として、いわゆるバイパス演算が行われる場合がある。バイパス演算では、演算実行命令のソースオペランドにおいてレジスタが指定されている場合であっても、高速処理を目的として、直前の演算結果が演算器へのオペランドとして転用される。さらに、バイパス演算の一種として、他のパイプラインからの結果が演算器へオペランドとして転用される場合もある。これらのバイパス演算では、演算実行命令のソースオペランドにおいてレジスタが指定されているにもかかわらず、結果的に、レジスタの実体を使用せずに演算が実行されることになる。
しかしながら、演算器におけるオペランドがレジスタ値かそれ以外かを、バイパスの有無の判別より後にならないと判別できない構成の場合には、バイパスが発生しなかったと仮定することで、演算器におけるオペランドをレジスタ値と判別することができるようになる。一方、演算器におけるオペランドがレジスタ値かそれ以外かを、バイパスの有無が判別された時点で判別してよい構成の場合には、演算器におけるオペランドをレジスタ値以外と判別することができるようになる。
演算器におけるオペランドを、レジスタ値かそれ以外かという2通りに場合分けできれば、演算器における2つのオペランドの組合せを、レジスタを使用する数によって次の3種類に分類できる。1つは、演算器における2つのオペランドがともにレジスタ値となるケース(すなわち、レジスタが2つ使用されるケース)である。他の1つは、演算器における一方のオペランドがレジスタ値で、他方のオペランドがレジスタ値以外となるケース(すなわち、レジスタが1つ使用されるケース)である。さらに他の1つは、演算器における2つのオペランドがともにレジスタ値以外となるケース(すなわち、レジスタが使用されないケース)である。なお、MOV命令のような定数を設定する命令や転送命令など、ソースオペランドが1つだけ指定される演算実行命令に応じた演算は、上記の3種類の分類のうち、レジスタが1つ使用されるケースか、レジスタが使用されないケースのいずれかに分類できる。
このように、演算器における2つのオペランドの組合せをレジスタの使用数によって3種類に分類できることから、演算器を複数設けて演算の並列度を高める場合に、それらすべての演算器を、2つのオペランドの両方にレジスタ値を入力可能な構成にしなくてもよいと考えることができる。例えば、演算器における一方のオペランドのみがレジスタ値となる演算は、一方の入力ポートにのみレジスタ値が入力される演算器によって実行できる。また、演算器における2つのオペランドがともにレジスタ値以外となる演算は、レジスタ値の入力が不可能な演算器によって実行できる。
そこで、本実施の形態の演算処理装置100では、上記3種類のそれぞれの分類に対応する3種類の演算器を設けた。すなわち、第1の種類の演算器は、2つのオペランドの両方をレジスタ値とすることが可能な演算器(例えば、汎用演算器110およびアドレス演算器150)である。第2の種類の演算器は、一方のオペランドのみをレジスタ値とすることが可能な演算器(例えば、汎用演算器120,130およびアドレス演算器160,170)である。第3の種類の演算器は、2つのオペランドの両方が即値とされる演算器(例えば、汎用演算器140)である。
このような3種類の演算器を設けることにより、演算の並列度が向上するだけでなく、次の図に示すように、レジスタファイル300から演算器への読み出しパスの数を減らすことができるという効果を奏するようになる。
図6は、レジスタファイルから演算器への読み出しパスを示す図である。なお、この図6では、レジスタファイル300と各演算器との間に介在するMUXについては図示を省略している。
汎用演算器110の入力ポートIN1,IN2、汎用演算器120の入力ポートIN1、汎用演算器130の入力ポートIN1のそれぞれには、レジスタファイル300からの読み出しパスが接続されている。また、アドレス演算器150の入力ポートIN1,IN2、アドレス演算器160の入力ポートIN1、アドレス演算器170の入力ポートIN1のそれぞれにも、レジスタファイル300からの読み出しパスが接続されている。なお、汎用演算器140には、レジスタファイル300からの読み出しパスは接続されない。
この図6より、演算処理装置100では、汎用演算器が4個、アドレス演算器が3個設けられ、各演算器に対するレジスタファイル300からの読み出しパスが合計8本設けられている。
ここで、2つのオペランドの両方としてレジスタ値を入力可能な演算器を複数設けた演算処理装置を比較例として示し、この比較例と本実施の形態の演算処理装置100とを比較する。図7は、演算処理装置の比較例を示す図である。
この図7では、図6に対応する構成要素については同じ符号を付して示している。すなわち、図7の演算処理装置500では、入力ポートIN1,IN2のそれぞれにレジスタファイル300からの読み出しパスが接続された汎用演算器110が、2個設けられている。さらに、入力ポートIN1,IN2のそれぞれにレジスタファイル300からの読み出しパスが接続されたアドレス演算器150も、2個設けられている。
この図7より、演算処理装置500では、汎用演算器、アドレス演算器がそれぞれ2個ずつ設けられ、各演算器に対するレジスタファイル300からの読み出しパスが合計8本設けられている。図7の演算処理装置500と図6の演算処理装置100とを比較すると、図6の演算処理装置100は、図7の演算処理装置500より演算器の設置数が多いにもかかわらず、レジスタファイル300から演算器への読み出しパスの本数は演算処理装置500と同じ数になっている。入力される演算実行命令のうち、2つのソースオペランドの両方がレジスタを示す命令は一部に過ぎないことを考慮すると、図6の演算処理装置100では、図7の演算処理装置500と比較して、演算器の数の増加により演算の並列度が高まると言える。すなわち、本実施の形態の演算処理装置100では、レジスタファイルから演算器への読み出しパスが増大することを抑制しつつ、演算器を多く設置し、演算効率を向上させることができる。
次に、図8は、レジスタファイルの構成例を示す図である。なお、図8では、レジスタファイル300における各演算器への読み出し回路部分のみを示している。
レジスタファイル300は、複数のレジスタ301a,301b,301c,・・・を備える。また、レジスタファイル300は、汎用演算器110の入力ポートIN1,IN2、汎用演算器120,130のそれぞれの入力ポートIN1、アドレス演算器150の入力ポートIN1,IN2、アドレス演算器160,170のそれぞれの入力ポートIN1という合計8個の入力ポートのそれぞれに対して、レジスタに格納された値を供給する選択回路311〜318を備える。選択回路311〜318のそれぞれには、命令制御部200からレジスタ番号が入力される。選択回路311〜318のそれぞれは、入力されたレジスタ番号に対応するレジスタに格納された値を、対応する演算器に対して出力する。
なお、命令制御部200によって演算実行命令がアウトオブオーダで実行される場合、レジスタファイル300の実装方式としては、例えば、リネーミングレジスタ方式や、レジスタ更新バッファ方式などの種々の方式を適用可能である。
次に、命令制御部による各演算器の制御処理について説明する。なお、以下の説明では、主として、汎用演算器110,120,130,140に対する制御処理について図を用いて説明し、アドレス演算器150,160,170に対する制御処理についての説明を適宜省略する。
図9は、命令制御部の内部構成例を示す図である。
命令制御部200は、命令レジスタ(IWR:Instruction Word Register)201〜204、デコーダ211〜214およびリザベーションステーション221〜223を備えている。
命令レジスタ201〜204のそれぞれは、命令フェッチ部(図示せず)によってメモリ(図示せず)からフェッチされた演算実行命令を、一時的に保持する。デコーダ211は、命令レジスタ201に保持された演算実行命令を読み込んでデコードする。デコーダ212は、命令レジスタ202に保持された演算実行命令を読み込んでデコードする。デコーダ213は、命令レジスタ203に保持された演算実行命令を読み込んでデコードする。デコーダ214は、命令レジスタ204に保持された演算実行命令を読み込んでデコードする。
命令制御部200では、デコーダ211〜214を備えたことにより、最大4つの演算実行命令を同時に発行することが可能である。なお、デコーダの設置数は4個に限らない。また、デコーダ211〜214は、例えば、互いに演算実行命令の依存関係をチェックすることで、必要に応じて、演算実行命令をいずれか1つのデコーダのみから発行し、複数のデコーダから演算実行命令が同時に発行されないようにしてもよい。
デコーダ211〜214のそれぞれは、デコードした演算実行命令が、加算、減算、乗算、除算など、汎用演算器によって実行可能な演算の実行を要求するものである場合には、デコードした演算実行命令を、リザベーションステーション221〜223のいずれかに出力する。後述するように、デコーダ211〜214のそれぞれは、デコードした演算実行命令内の2つのソースオペランドに記述された情報の組合せに応じて、リザベーションステーション221〜223から1つを選択し、選択したリザベーションステーションに対して演算実行命令のデコード結果を出力する。
リザベーションステーション221〜223のそれぞれは、デコーダ211〜214から出力された演算実行命令を一時的に保持する演算キューを備える。リザベーションステーション221〜223のそれぞれは、演算キューに保持した演算実行命令のうち、リソースの準備が整った命令から順に、汎用演算器に対して発行する。
本実施の形態では、リザベーションステーションは、2つのオペランドに入力可能なデータの組合せに応じた汎用演算器の種類ごとに設けられる。リザベーションステーション221は、入力ポートIN1,IN2の両方にレジスタ値を入力可能である汎用演算器110に対応付けられている。すなわち、リザベーションステーション221は、演算キューに保持した演算実行命令を汎用演算器110に発行する。
また、リザベーションステーション222は、入力ポートIN1にのみレジスタ値を入力可能である汎用演算器120,130に対応付けられている。すなわち、リザベーションステーション222は、演算キューに保持した演算実行命令を、汎用演算器120,130のいずれかに対して発行する。なお、リザベーションステーション222は、例えば、リソースの準備が整った演算実行命令が現れたとき、汎用演算器120,130のうち演算処理が実行されていない汎用演算器に対して、演算実行命令を発行する。
さらに、リザベーションステーション223は、入力ポートIN1,IN2のいずれにもレジスタ値が入力されない汎用演算器140に対応付けられている。すなわち、リザベーションステーション223は、演算キューに保持した演算実行命令を汎用演算器140に対して発行する。
なお、このように、リザベーションステーションが、2つのオペランドに入力可能なデータの組合せに応じた汎用演算器の種類ごとに設けられていることから、デコーダ211〜214のそれぞれは、デコードした演算実行命令の出力先のリザベーションステーションを選択することで、実質的に、演算を実行させる汎用演算器を選択していると言える。
リザベーションステーション221〜223のそれぞれは、リソースの準備が整った演算実行命令が現れたとき、例えば、次のように動作する。リザベーションステーション221〜223のそれぞれは、演算実行命令に記述された命令コードに基づき、演算を実行させる汎用演算器に対して、演算の種別を示す演算種別指定信号を送信する。なお、演算種別指定信号が、それぞれ個別の演算の種別に対応する選択信号群からなる場合には、リザベーションステーション221〜223のそれぞれは、選択信号群のうち1つの選択信号のみをオンにする。
また、リザベーションステーション221〜223のそれぞれは、演算実行命令のソースオペランドにレジスタ番号が設定されていた場合には、レジスタファイル300に対してレジスタ番号を指定し、指定したレジスタ番号に対応するレジスタに保持されたデータを、演算を実行させる汎用演算器に出力させる。さらに、リザベーションステーション221〜223のそれぞれは、演算実行命令のソースオペランドに即値が設定されていた場合には、演算を実行させる汎用演算器に対して、即値を送信する。また、リザベーションステーション221〜223のそれぞれは、演算実行命令のソースオペランドに設定された値(例えばレジスタ番号)によっては、即値を生成して、生成した即値を、演算を実行させる汎用演算器に送信する場合もある。
なお、図示しないが、命令制御部200は、例えば、アドレス演算器150,160,170のそれぞれに対応するリザベーションステーションを備えている。これらのリザベーションステーションは、RSA(Reservation Station for Address generate)と呼ばれるものである。デコーダ211〜214のそれぞれは、デコードした演算実行命令が、ロード命令やストア命令など、アドレス演算器での処理を要求するものである場合には、デコードした演算実行命令を、いずれかのRSA内の演算キューに出力する。デコーダ211〜214のそれぞれは、デコードした演算実行命令内の2つのソースオペランドに記述された情報の組合せに応じて、演算実行命令の出力先のRSAを選択する。各RSAは、デコーダ211〜214から入力された演算実行命令を演算キューに保持し、演算キューに保持した演算実行命令のうち、リソースの準備が整った命令から順に、対応するアドレス演算器に対して発行する。
次に、デコーダ211〜214の処理についてより詳しく説明する。デコーダ211〜214はそれぞれ同じ構成であって同じ処理を実行可能であるので、以下、例としてデコーダ211の処理についてのみ説明する。
図10は、デコーダに入力される演算実行命令のフォーマットの例を示す図である。この図10では、例として、「SPARC V9」において規定された命令セットの例を挙げる。なお、「SPARC」は、SPARCインターナショナル(SPARC International, Inc)の登録商標である。
「SPARC V9」における演算実行命令は、32ビットのデータとなっている。デコーダ211は、第19ビットから第24ビットまでの6ビットの値と、第30ビットおよび第31ビットの2ビットの値との組合せにより、演算の種類を判別する。汎用演算器で実行される演算実行命令の場合、第30ビットおよび第31ビットの2ビットのコードとして、「10」が設定される。また、第19ビットから第24ビットまでの6ビットのコード(以下、「op3」とする)としては、例えば、加算を示す場合には、下位4ビットが「0x00」、残りの2ビットがそれぞれ「0」と設定され、減算を示す場合には、下位4ビットが「0x04」、残りの2ビットがそれぞれ「0」と設定される。
第25ビットから第29ビットまでの5ビットの値は、演算結果を格納するレジスタの番号(以下、「rd」とする)を示す。第14ビットから第18ビットまでの5ビット分の領域は、第1ソースオペランドである。第1ソースオペランドの領域に記述された5ビットの値は、演算器の入力ポートIN1に入力するデータの読み出し元のレジスタ番号(以下、「rs1とする」)を示す。
第0ビットから第12ビットまでの13ビット分の領域は、第2ソースオペランドであり、第13ビットの値は、第2ソースオペランドにレジスタ番号と即値のいずれが設定されているかを示す。第13ビットの値が「0」である場合、図10の上段に示すように、第2ソースオペランドにはレジスタ番号が設定される。この場合、第0ビットから第4ビットまでの5ビットの値は、演算器の入力ポートIN2に入力するデータの読み出し元のレジスタ番号(以下、「rs2」とする)を示し、第5ビットから第12ビットまでの領域には、固定値「00000000」が設定される。一方、第13ビットの値が「1」である場合、図10の下段に示すように、第2ソースオペランドには、13ビットの符号付き即値(以下、「simm13」とする)が設定される。
図10の上段に示した演算実行命令は、アセンブリ言語では「op3 %rs1,%rs2,%rd」と記述される。この演算実行命令は、レジスタ番号「rs1」,「rs2」にそれぞれ記憶された値を用いて「op3」で指定される演算を実行し、演算結果をレジスタ番号「rd」に格納するように指示するものである。また、図10の下段に示した演算実行命令は、アセンブリ言語では「op3 %rs1,simm13,%rd」と記述される。この演算実行命令は、レジスタ番号「rs1」に記憶された値と即値「simm13」とを用いてコード「op3」で指定される演算を実行し、演算結果をレジスタ番号「rd」に格納するように指示するものである。
以上の図10に示したように、デコーダ211に入力される演算実行命令では、基本的に、第1ソースオペランドとしてレジスタ番号が指定され、第2ソースオペランドとしてレジスタ番号または即値が指定される。
また、図10の命令セットでは、ソースオペランドにおいてレジスタ番号「g0」が指定された場合には、レジスタ番号「g0」に対応するレジスタからは常に定数「0」が読み出される。そこで、デコーダ211は、ソースオペランドにおいてレジスタ番号「g0」が指定された場合、ソースオペランドに即値「0」が指定されたと見なして、レジスタ番号「g0」の代わりに即値「0」を出力する。なお、以下の説明では、ソースオペランドに指定されるレジスタ番号として、定数が読み出されるレジスタ番号「g0」を、定数でない値が読み出されるレジスタ番号「rs1」,「rs2」とは区別して示す。
また、上記においては、定数の読み出しを指定するレジスタ番号として「g0」を例示したが、デコーダ211は、「0」以外の他の定数の読み出しを指定するレジスタ番号がソースオペランドに指定された場合でも、「g0」と同様に即値が指定されたと見なして処理すればよい。
ここで、第1ソースオペランドおよび第2ソースオペランドにそれぞれ指定されるデータ種(rs1,rs2,simm13,g0)の組合せパターンとしては、次の6通りが考えられる。なお、下記の各パターンにおいて、例えば、「rs1,rs2」は、第1ソースオペランドにレジスタ番号「rs1」が指定され、第2ソースオペランドにレジスタ番号「rs2」が指定されることを示す。
パターン1:rs1,rs2
パターン2:rs1,g0
パターン3:g0,rs2
パターン4:g0,g0
パターン5:rs1,simm13
パターン6:g0,simm13
デコーダ211は、演算実行命令の第1ソースオペランドおよび第2ソースオペランドにそれぞれ指定されたデータ種の組合せパターンを判別し、判別した組合せパターンに応じて、演算を実行させる演算器を選択する。上記の6通りの組合せパターンのうち、第2ソースオペランドにおいて実体を伴うレジスタが指定されるものは、パターン1とパターン3である。また、第1ソースオペランドおよび第2ソースオペランドの両方において実体を伴うレジスタが指定されないものは、パターン4とパターン6である。
そこで、本実施の形態では、デコーダ211は、第2ソースオペランドにおいて実体を伴うレジスタが指定される数に応じて、上記の組合せパターンを次の3種類のグループに分類する。そして、デコーダ211は、各グループに対応する演算器に対して演算実行命令を発行するように制御する。
グループA1:パターン1(rs1,rs2)、パターン3(g0,rs2)
グループB1:パターン2(rs1,g0)、パターン5(rs1,simm13)
グループC1:パターン4(g0,g0)、パターン6(g0,simm13)
図11は、第2の実施の形態におけるデコーダの処理を示すフローチャートである。この図11の処理は、デコードした演算実行命令が汎用演算器によって実行可能な演算の実行を要求するものであると判定した場合に、デコーダ211によって実行されるものである。
[ステップS11]デコーダ211は、演算実行命令における第2ソースオペランドに、実体を伴うレジスタの番号「rs2」が指定されているかを判定する。デコーダ211は、第2ソースオペランドにレジスタ番号「rs2」が指定されている場合(S11:Yes)には、ステップS12の処理を実行する。一方、デコーダ211は、第2ソースオペランドにレジスタ番号「rs2」が指定されていない場合(S11:No)には、ステップS13の処理を実行する。
[ステップS12]第2ソースオペランドにレジスタ番号「rs2」が指定されている場合(S11:Yes)、第1ソースオペランドと第2ソースオペランドの組合せパターンは、上記のグループA1に属するパターン1またはパターン3となる。この場合、デコーダ211は、入力ポートIN1,IN2の両方にレジスタ値を入力可能な汎用演算器110で演算するように制御する。すなわち、デコーダ211は、デコードした演算実行命令を、汎用演算器110に対応するリザベーションステーション221にキューイングする。
[ステップS13]デコーダ211は、演算実行命令における第1ソースオペランドに、実体を伴うレジスタの番号「rs1」が指定されているかを判定する。デコーダ211は、第1ソースオペランドにレジスタ番号「rs1」が指定されている場合(S13:Yes)には、ステップS14の処理を実行する。一方、デコーダ211は、第1ソースオペランドにレジスタ番号「rs1」が指定されていない場合(S13:No)には、ステップS15の処理を実行する。
[ステップS14]第2ソースオペランドにレジスタ番号「rs2」が指定されておらず(S11:No)、第1ソースオペランドにレジスタ番号「rs1」が指定されている場合(S13:Yes)、第1ソースオペランドと第2ソースオペランドの組合せパターンは、上記のグループB1に属するパターン2またはパターン5となる。この場合、デコーダ211は、入力ポートIN2に命令制御部200からの即値のみが入力されるが、入力ポートIN1にレジスタ値を入力可能な汎用演算器120または汎用演算器130で演算するように制御する。すなわち、デコーダ211は、デコードした演算実行命令を、汎用演算器120,130に対応するリザベーションステーション222にキューイングする。
[ステップS15]第1ソースオペランドおよび第2ソースオペランドのいずれにもレジスタ番号「rs1」,「rs2」が指定されていない場合(S11:No,S13:No)、第1ソースオペランドおよび第2ソースオペランドの組合せパターンは、上記のグループC1に属するパターン4またはパターン6となる。この場合、デコーダ211は、入力ポートIN1,IN2の両方とも命令制御部200からの即値のみが入力される汎用演算器140で演算するように制御する。すなわち、デコーダ211は、デコードした演算実行命令を、汎用演算器140に対応するリザベーションステーション223にキューイングする。
なお、上記のステップS12,S14において、デコーダ211は、ソースオペランドに定数を示すレジスタ番号「g0」が指定されていた場合、ソースオペランドを定数に対応する即値に置換して、リザベーションステーション221またはリザベーションステーション222にキューイングする。ただし、ソースオペランドに定数を示すレジスタ番号「g0」が指定されていた場合に、リザベーションステーション221またはリザベーションステーション222に対してはソースオペランドの置換を行わずにキューイングを行い、リザベーションステーション221またはリザベーションステーション222からの命令発行時に、ソースオペランドに指定されたレジスタ番号「g0」を定数に対応する即値に置換するようにしてもよい。
以上の図11の処理では、ソースオペランドの組合せパターンがグループA1に属する場合、演算実行命令はリザベーションステーション221にキューイングされる。また、ソースオペランドの組合せパターンがグループB1に属する場合、演算実行命令はリザベーションステーション222にキューイングされる。また、ソースオペランドの組合せパターンがグループC1に属する場合、演算実行命令はリザベーションステーション223にキューイングされる。
ここで、上記処理では、ソースオペランドに定数を示すレジスタ番号「g0」が指定された場合、このソースオペランドを即値と見なして処理する。これにより、第2ソースオペランドにレジスタ番号「g0」が指定されたパターン2を、汎用演算器110ではなく汎用演算器120,130のいずれかで処理できるようになり、汎用演算器110で処理すべき演算実行命令の数を減らし、演算処理を分散させることができる。特に、本実施の形態では、入力ポートIN1,IN2の両方にレジスタ値を入力可能な汎用演算器より、入力ポートIN1にのみレジスタ値を入力可能な汎用演算器の数を多くした。このことから、レジスタ番号「g0」が指定されたソースオペランドを即値と見なすことで生じる演算処理の分散効果が、より顕著になる。
また、図示しないが、命令制御部200は、例えば、アドレス演算器150,160,170のそれぞれに対応するリザベーションステーションを備えている。これらのリザベーションステーションは、RSA(Reservation Station for Address generate)と呼ばれるものである。デコーダ211〜214のそれぞれは、デコードした演算実行命令が、ロード命令やストア命令など、アドレス演算器での処理を要求するものである場合には、デコードした演算実行命令を、いずれかのRSA内の演算キューに出力する。デコーダ211〜214のそれぞれは、デコードした演算実行命令内の2つのソースオペランドに記述された情報の組合せに応じて、演算実行命令の出力先のRSAを選択する。
演算実行命令によりアドレス演算器での処理を要求する命令が指定された場合にも、デコーダ211〜214は、図11と同様の判定手順により、処理を実行させるアドレス演算器に対応するリザベーションステーション(前述のRSA)を選択する。例えば、第1ソースオペランドと第2ソースオペランドの組合せパターンがグループA1に属するパターンである場合、デコーダ211は、アドレス演算器150に対応するRSAに対して演算実行命令をキューイングする(ステップS12に対応)。また、第1ソースオペランドと第2ソースオペランドの組合せパターンがグループB1に属するパターンである場合、デコーダ211は、アドレス演算器160,170に対応するRSAに対して演算実行命令をキューイングする(ステップS14に対応)。なお、アドレス演算器での処理を要求する演算実行命令では、第1ソースオペランドと第2ソースオペランドの組合せパターンは、グループC1に属するパターンにはならない。
各RSAは、デコーダ211〜214から入力された演算実行命令を内部の演算キューに保持し、演算キューに保持した演算実行命令のうち、リソースの準備が整った命令から順に、対応するアドレス演算器に対して発行する。
図12は、第2の実施の形態におけるデコーダの回路構成例を示す図である。なお、この図12では、主として加算命令に関する回路構成を示し、その他の構成の図示を省略する。また、図12は、例としてデコーダ211の回路構成例を示すが、デコーダ212〜214のそれぞれも同じ構成の回路を有する。
図12に示すように、デコーダ211は、AND(論理積)ゲート231〜237、OR(論理和)ゲート238〜242およびバッファ243を備える。
ANDゲート231,232は、加算(ADD)命令の入力を判定するゲート回路である。ANDゲート231には、命令レジスタ201からの演算実行命令のうち、第30ビットの反転値と、第31ビットの値とが入力される。また、ANDゲート232には、命令レジスタ201からの演算実行命令のうちの第19ビットから第24ビットまでの値をすべて反転した値が入力される。ANDゲート231は、第30ビットの値が「0」、第31ビットの値が「1」のとき、出力をオンにし、ANDゲート232は、第19ビットから第24ビットまでのすべての値が「0」のとき、出力をオンにする。すなわち、入力された演算実行命令によって加算命令の実行が指定されたとき、ANDゲート231,232の各出力はオンになる。
ANDゲート232の出力信号は、ORゲート238に入力される。また、ORゲート238の他の入力には、他の可換演算命令が指定されたことを判定する判定回路からの出力信号が入力される。他の可換演算命令とは、例えば乗算命令である。乗算命令が指定されたことを判定する判定回路は、演算実行命令における第19ビットから第24ビットまでの値(op3)のうち、下位4ビットが「0x09」であり、残りの2ビットがともに「0」である場合に、出力をオンにする。ORゲート238は、演算実行命令により可換演算の実行が指定された場合に、出力をオンにする。なお、図12に示す回路は、ANDゲート232以外は、加算、乗算などの可換演算命令に関して共用される。
ANDゲート233は、命令レジスタ201からの演算実行命令の第1ソースオペランドに、実体を伴うレジスタの番号「rs1」が指定されているかを判定するゲート回路である。ANDゲート233には、演算実行命令の第14ビットから第18ビットまでの値をすべて反転した値が入力される。ANDゲート233は、演算実行命令の第14ビットから第18ビットまでの値がすべて「0」の場合、すなわち、第1ソースオペランドに定数を示すレジスタ番号「g0」が指定されていた場合に、出力をオンにする。一方、ANDゲート233は、演算実行命令の第14ビットから第18ビットまでのビットのうち少なくとも1つのビットに「1」が設定されている場合、すなわち、第1ソースオペランドに実体を伴うレジスタの番号「rs1」が指定されている場合に、出力をオフにする。
ANDゲート234、ORゲート239およびバッファ243は、命令レジスタ201からの演算実行命令の第2ソースオペランドに、実体を伴うレジスタの番号「rs2」が指定されているかを判定する回路である。ANDゲート234には、演算実行命令の第13ビットの値と第0ビットから第4ビットまでの値とをすべて反転した値が入力される。バッファ243には、演算実行命令の第13ビットの値が入力される。ANDゲート234およびバッファ243の各出力信号は、ORゲート239に入力される。
ANDゲート234は、演算実行命令の第13ビットが「1」の場合、すなわち、第2ソースオペランドに即値「simm13」が指定されている場合に、出力をオフにする。この場合には、バッファ243の出力がオンになることから、ORゲート239の出力もオンになる。なお、バッファ243は、入力された第13ビットの値をORゲート239に出力するタイミングを、ANDゲート234の出力タイミングと合わせる。
また、ANDゲート234は、演算実行命令の第13ビットが「0」であり、かつ、第0ビットから第4ビットまでのビットのうち少なくとも1つのビットに「1」が設定されている場合、すなわち、第2ソースオペランドに実体を伴うレジスタの番号「rs2」が指定されている場合に、出力をオフにする。この場合、バッファ243の出力もオフになり、ORゲート239の出力もオフになる。
また、ANDゲート234は、演算実行命令の第13ビットが「0」であり、かつ、第0ビットから第4ビットまでがすべて「0」である場合、すなわち、第2ソースオペランドに定数を示すレジスタ番号「g0」が指定されている場合には、出力をオンにする。この場合、ORゲート239の出力もオンになる。
ANDゲート235〜237は、演算実行命令をリザベーションステーション221〜223のいずれにキューイングすべきかを判定する回路である。ANDゲート235には、ANDゲート231およびORゲート238からの各出力信号と、ORゲート239からの出力信号を反転した信号とが入力される。ANDゲート236には、ANDゲート231およびORゲート238,239からの各出力信号と、ANDゲート233からの出力信号を反転した信号とが入力される。ANDゲート237には、ANDゲート231,233およびORゲート238,239からの各出力信号が入力される。
命令レジスタ201からの演算実行命令により、可換演算以外の演算(例えば、減算などの非可換演算)の実行が命令された場合、すなわち、ANDゲート231とORゲート238のうち少なくとも一方の出力がオフの場合には、ANDゲート235〜237のいずれの出力もオフになる。一方、命令レジスタ201からの演算実行命令により加算などの可換演算の実行が命令された場合、すなわち、ANDゲート231およびORゲート238の各出力信号がともにオンである場合には、次のような動作が行われる。
第1ソースオペランドと第2ソースオペランドの組合せパターンが、上記のグループA1に属するパターン1またはパターン3となる場合、すなわち、ORゲート239の出力がオフの場合には、ANDゲート235の出力がオンになる。このとき、ANDゲート236,237の各出力はともにオフになる。ANDゲート235からの出力信号は、ORゲート240を介して、選択信号IWR1_GroupA1_SELとしてリザベーションステーション221に出力される。ANDゲート235の出力がオンになり、選択信号IWR1_GroupA1_SELがオンになったとき、デコーダ211は、命令レジスタ201からの演算実行命令をリザベーションステーション221にキューイングする。
第1ソースオペランドと第2ソースオペランドの組合せパターンが、上記のグループB1に属するパターン2またはパターン5となる場合、すなわち、ORゲート239の出力がオンになり、ANDゲート233の出力がオフになる場合には、ANDゲート236の出力がオンになる。このとき、ANDゲート235,237の各出力はともにオフになる。ANDゲート236からの出力信号は、ORゲート241を介して、選択信号IWR1_GroupB1_SELとしてリザベーションステーション222に出力される。ANDゲート236の出力がオンになり、選択信号IWR1_GroupB1_SELがオンになったとき、デコーダ211は、命令レジスタ201からの演算実行命令をリザベーションステーション222にキューイングする。
第1ソースオペランドと第2ソースオペランドの組合せパターンが、上記のグループC1に属するパターン4またはパターン6となる場合、すなわち、ORゲート239およびANDゲート233の各出力がともにオンの場合には、ANDゲート237の出力がオンになる。このとき、ANDゲート235,236の各出力はともにオフになる。ANDゲート237からの出力信号は、ORゲート242を介して、選択信号IWR1_GroupC1_SELとしてリザベーションステーション223に出力される。ANDゲート237の出力がオンになり、選択信号IWR1_GroupC1_SELがオンになったとき、デコーダ211は、命令レジスタ201からの演算実行命令をリザベーションステーション223にキューイングする。
以上の図12の回路により、命令レジスタ201からの演算実行命令により加算などの可換演算の実行が命令された場合において、図11に示した処理が実行される。なお、図示しないが、デコーダ211には、可換演算以外の演算の実行命令が入力された場合に、演算実行命令のキューイング先を選択する選択回路も別途設けられる。選択回路は、実行が要求される演算の種類に応じてさらに複数設けられる場合もある。各選択回路からは、リザベーションステーション221を選択する場合にオンになる選択信号が、ORゲート240に入力される。また、各選択回路からは、リザベーションステーション222を選択する場合にオンになる選択信号が、ORゲート241に入力される。さらに、各選択回路からは、リザベーションステーション223を選択する場合にオンになる選択信号が、ORゲート242に入力される。
以上説明した第2の実施の形態では、レジスタファイル300から演算器への読み出しパスが増大することを抑制しつつ、演算器の設置数を多くすることができる。そして、演算実行命令における第1ソースオペランドと第2ソースオペランドの組合せパターンに応じて、演算を実行させる演算器を振り分けることにより、複数設けた演算器を効率よく使用し、演算の並列度を高めることができる。
なお、以上説明した第2の実施の形態では、汎用演算器110,120,130,140を設けた構成とした。しかしながら、例えば汎用プロセッサの場合、演算実行命令の両方のソースオペランドに、実体を伴うレジスタの番号が指定されないというケースはほとんど存在しない。このことから、入力ポートIN1,IN2のいずれにも即値が入力される汎用演算器140を設けないようにしてもよい。この場合、図9に示したリザベーションステーション223も不要となる。汎用演算器140が設けられないようにした場合、デコーダは、ソースオペランドの組合せパターンが、上記のグループC1に属するパターン4またはパターン6であるときには、演算実行命令のキューイング先としてリザベーションステーション222を選択すればよい。
〔第3の実施の形態〕
第3の実施の形態に係る演算処理装置では、第2の実施の形態におけるデコーダ211〜214による演算器の選択処理を、次のように変形する。前述した、第1ソースオペランドと第2ソースオペランドの組合せパターンのうち、2つのソースオペランドの両方において実体を伴うレジスタが指定されるのは、パターン1のみである。また、2つのソースオペランドのうち一方にのみ実体を伴うレジスタが指定されるのは、パターン2,3,5である。そこで、第3の実施の形態における各デコーダ211〜214は、2つのソースオペランドにおいて実体を伴うレジスタが指定される数に応じて、上記の組合せパターンを次の3種類のグループに分類する。そして、各デコーダ211〜214は、各グループに対応する演算器に対して演算実行命令を発行するように制御する。
グループA2:パターン1(rs1,rs2)
グループB2:パターン2(rs1,g0)、パターン3(g0,rs2)、パターン5(rs1,simm13)
グループC2:パターン4(g0,g0)、パターン6(g0,simm13)
また、上記のグループB2では、2つのソースオペランドのうち一方にのみ実体を伴うレジスタが指定されるが、実体を伴うレジスタを第1ソースオペランドまたは第2ソースオペランドのどちらにも指定できるようにする。このような分類を可能にするために、デコーダおよび汎用演算器120,130に、第1ソースオペランドと第2ソースオペランドとを転置する機能を設ける。
図13は、第3の実施の形態で使用される汎用演算器における入出力信号の例を示す図である。なお、図13では、図4に対応する構成要素については同じ符号を付して示している。
第3の実施の形態に係る演算処理装置では、入力ポートIN1,IN2のうち一方にのみレジスタ値を入力可能な汎用演算器120,130の入力段に、オペランドを転置するセレクタを設ける。図13では例として、汎用演算器120における入出力信号の例を示す。汎用演算器120の入力ポートIN1,IN2のそれぞれの入力段には、セレクタ113,114がそれぞれ設けられる。
セレクタ113,114のそれぞれは、2つの入力ポートを備える。セレクタ113の一方の入力ポートには、レジスタファイル300からのレジスタ値と命令制御部200からの即値とが、MUX111を介して選択的に入力される。また、セレクタ114の一方の入力ポートにも同様に、レジスタファイル300からのレジスタ値と命令制御部200からの即値とが、MUX111を介して選択的に入力される。一方、セレクタ113の他方の入力ポート、およびセレクタ114の他方の入力ポートには、命令制御部200からの即値が入力される。
命令制御部200からは、セレクタ113,114に対して転置指示信号が出力される。セレクタ113には、命令制御部200からの転置指示信号がそのまま入力され、セレクタ114には、命令制御部200からの転置指示信号を反転した信号が入力される。例えば、転置指示信号がオフである場合、セレクタ113は一方の入力ポートへの入力信号を選択し、セレクタ114は他方の入力ポートへの入力信号を選択する。この場合、第2の実施の形態の場合と同様に、汎用演算器120の入力ポートIN1には、レジスタ値および即値のどちらも入力可能であり、汎用演算器120の入力ポートIN2には、即値のみが入力される。
一方、転置指示信号がオンである場合、セレクタ113は他方の入力ポートへの入力信号を選択し、セレクタ114は一方の入力ポートへの入力信号を選択する。この場合、汎用演算器120の入力ポートIN1には、即値のみが入力され、汎用演算器120の入力ポートIN2には、レジスタ値および即値のどちらも入力可能となる。すなわち、転置指示信号がオンになると、演算実行命令における第1ソースオペランドで指定されたデータと第2ソースオペランドで指定されたデータとが、転置されて汎用演算器120に入力される。
なお、図示しないが、汎用演算器130の入力ポートIN1,IN2に入力される信号の組合せも、図13に示した汎用演算器120と同様になっている。
図14は、第3の実施の形態におけるデコーダおよびリザベーションステーションの構成例と、伝送される信号の例について示す図である。なお、この図14では、図9に対応する構成要素には同じ符号を付して示している。
本実施の形態では、汎用演算器110に対応するリザベーションステーション221と、汎用演算器140に対応するリザベーションステーション223については、第2の実施の形態と同様の構成となっている。一方、本実施の形態では、汎用演算器120,130に対応するリザベーションステーション222は、デコーダ211〜214のそれぞれから出力された演算実行命令を保持する演算キュー252を備えるが、この演算キュー252には、演算実行命令にそれぞれ対応付けて転置フラグ252aも保持される。転置フラグ252aは、対応付けられた演算実行命令に応じた演算を汎用演算器120,130のいずれかに実行させる際に、オペランドの転置を行うか否かを示すフラグである。
本実施の形態のデコーダ211は、選択信号IWR1_GroupA2_SEL,IWR1_GroupB2_SEL,IWR1_GroupC2_SEL,IWR1_GroupB2_Swap1,IWR1_GroupB2_Swap2を出力する。また、本実施の形態のデコーダ211は、命令レジスタ201からの演算実行命令の第1ソースオペランドと第2ソースオペランドとを転置することが可能な転置回路251をさらに備える。転置回路251は、選択信号IWR1_GroupB2_Swap1がオンであるとき、演算実行命令の第1ソースオペランドと第2ソースオペランドとを転置して、リザベーションステーション222にキューイングする。
選択信号IWR1_GroupA2_SELは、リザベーションステーション221に出力される。デコーダ211は、演算実行命令の第1ソースオペランドと第2ソースオペランドとの組合せパターンが前述のグループA2に属するパターンである場合に、選択信号IWR1_GroupA2_SELをオンにする。このとき、デコーダ211は、リザベーションステーション221に対して演算実行命令をキューイングする。
選択信号IWR1_GroupB2_SEL,IWR1_GroupB2_Swap1,IWR1_GroupB2_Swap2は、リザベーションステーション222に出力される。デコーダ211は、演算実行命令の第1ソースオペランドと第2ソースオペランドとの組合せパターンが前述のグループB2に属するパターンである場合に、選択信号IWR1_GroupB2_SEL,IWR1_GroupB2_Swap1,IWR1_GroupB2_Swap2のいずれかをオンにする。
デコーダ211は、第1ソースオペランドと第2ソースオペランドとの組合せパターンがパターン2またはパターン5である場合には、選択信号IWR1_GroupB2_SELをオンにする。このとき、デコーダ211は、第1ソースオペランドと第2ソースオペランドとを転置回路251で転置させることなく、演算実行命令をリザベーションステーション222にキューイングする。
また、デコーダ211は、第1ソースオペランドと第2ソースオペランドとの組合せパターンがパターン3であり、かつ、演算実行命令が可換演算の実行命令である場合には、選択信号IWR1_GroupB2_Swap1をオンにする。このとき、デコーダ211は、第1ソースオペランドと第2ソースオペランドとを転置回路251で転置させた状態で、演算実行命令をリザベーションステーション222にキューイングする。
また、デコーダ211は、第1ソースオペランドと第2ソースオペランドとの組合せパターンがパターン3であり、かつ、演算実行命令が非可換演算の実行命令である場合には、選択信号IWR1_GroupB2_Swap2をオンにする。このとき、デコーダ211は、第1ソースオペランドと第2ソースオペランドとを転置回路251で転置させることなく、演算実行命令をリザベーションステーション222にキューイングする。また、選択信号IWR1_GroupB2_Swap2がオンになった場合、リザベーションステーション222は、演算キュー252に登録された演算実行命令に対応する転置フラグ252aをオンとする。
ここで、リザベーションステーション222は、第2の実施の形態の場合と同様に、演算キュー252に登録された演算実行命令のうち、演算リソースの準備が整った演算実行命令から順に、汎用演算器120,130のいずれかに発行する。ただし、リザベーションステーション222は、演算キュー252に登録された演算実行命令を発行する際、発行する演算実行命令に対応付けられた転置フラグ252aがオンである場合には、発行先の汎用演算器に対応するセレクタ113,114に出力する転置指示信号をオンにする。これにより、演算実行命令の発行先の汎用演算器においては、入力ポートIN1,IN2にそれぞれ入力されるオペランドが、セレクタ113,114によって入れ替えられる。一方、リザベーションステーション222は、発行する演算実行命令に対応付けられた転置フラグ252aがオフである場合には、発行先の汎用演算器に対応するセレクタ113,114に出力する転置指示信号をオフにする。
選択信号IWR1_GroupC2_SELは、リザベーションステーション223に出力される。デコーダ211は、演算実行命令の第1ソースオペランドと第2ソースオペランドとの組合せパターンが前述のグループC2に属するパターンである場合に、選択信号IWR1_GroupC2_SELをオンにする。このとき、デコーダ211は、リザベーションステーション223に対して演算実行命令をキューイングする。
なお、以上の図14ではデコーダ211について説明したが、デコーダ212〜214のそれぞれも、デコーダ211と同様の構成を有する。また、上記の図14では、汎用演算器に対応するリザベーションステーションについて説明したが、アドレス演算器に対応するリザベーションステーション(RSA)とデコーダ211〜214との間でも、図14と同様の動作が行われればよい。
図15は、第3の実施の形態におけるデコーダの処理を示すフローチャートである。この図15の処理は、デコードした演算実行命令が汎用演算器によって実行可能な演算の実行を要求するものであると判定した場合に、デコーダ211によって実行されるものである。
[ステップS21]デコーダ211は、演算実行命令における第2ソースオペランドに、実体を伴うレジスタの番号「rs2」が指定されているかを判定する。デコーダ211は、第2ソースオペランドにレジスタ番号「rs2」が指定されている場合(S21:Yes)には、ステップS22の処理を実行する。一方、デコーダ211は、第2ソースオペランドにレジスタ番号「rs2」が指定されていない場合(S21:No)には、ステップS24の処理を実行する。
[ステップS22]デコーダ211は、演算実行命令における第1ソースオペランドに、実体を伴うレジスタの番号「rs1」が指定されているかを判定する。デコーダ211は、第1ソースオペランドにレジスタ番号「rs1」が指定されている場合(S22:Yes)には、ステップS23の処理を実行する。一方、デコーダ211は、第1ソースオペランドにレジスタ番号「rs1」が指定されていない場合(S22:No)には、ステップS26の処理を実行する。
[ステップS23]第1ソースオペランドと第2のソースオペランドの両方に実体を伴うレジスタの番号が指定されている場合(S21:Yes,S22:Yes)、各ソースオペランドの組合せパターンは、上記のグループA2に属するパターン1となる。この場合、デコーダ211は、入力ポートIN1,IN2の両方にレジスタ値を入力可能な汎用演算器110で演算するように制御する。すなわち、デコーダ211は、選択信号IWR1_GroupA2_SELをオンにして、デコードした演算実行命令を、汎用演算器110に対応するリザベーションステーション221にキューイングする。
[ステップS24]デコーダ211は、演算実行命令における第1ソースオペランドに、実体を伴うレジスタの番号「rs1」が指定されているかを判定する。デコーダ211は、第1ソースオペランドにレジスタ番号「rs1」が指定されている場合(S24:Yes)には、ステップS29の処理を実行する。一方、デコーダ211は、第1ソースオペランドにレジスタ番号「rs1」が指定されていない場合(S24:No)には、ステップS25の処理を実行する。
[ステップS25]第1ソースオペランドおよび第2ソースオペランドの両方に実体を伴うレジスタの番号が指定されていない場合(S21:No,S24:No)、各ソースオペランドの組合せパターンは、上記のグループC2に属するパターン4またはパターン6となる。この場合、デコーダ211は、入力ポートIN1,IN2の両方とも命令制御部200からの即値のみが入力される汎用演算器140で演算するように制御する。すなわち、デコーダ211は、選択信号IWR1_GroupC2_SELをオンにして、デコードした演算実行命令を、汎用演算器140に対応するリザベーションステーション223にキューイングする。
[ステップS26]デコーダ211は、演算実行命令の第19ビットから第24ビットまでのコード値「op3」に基づき、実行を要求された演算が可換演算であるかを判定する。実行を要求された演算が可換演算である場合(S26:Yes)、デコーダ211は、ステップS27の処理を実行する。一方、実行を要求された演算が非可換演算である場合(S26:No)、デコーダ211は、ステップS28の処理を実行する。
[ステップS27]第2ソースオペランドにレジスタ番号「rs2」が指定されており(S21:Yes)、第1ソースオペランドにレジスタ番号「rs1」が指定されていない場合(S22:No)、第1ソースオペランドと第2ソースオペランドの組合せパターンは、上記のグループB2に属するパターン3となる。ここで、実行を要求された演算が可換演算である場合(S26:Yes)には、演算実行命令における各ソースオペランドを入れ替えて処理を続行することが可能である。この場合、デコーダ211は、選択信号IWR1_GroupB2_Swap1をオンにして、転置回路251に、第1ソースオペランドと第2ソースオペランドとを転置させる。
[ステップS28]第2ソースオペランドにレジスタ番号「rs2」が指定されており(S21:Yes)、第1ソースオペランドにレジスタ番号「rs1」が指定されていない場合(S22:No)、第1ソースオペランドと第2ソースオペランドの組合せパターンは、上記のグループB2に属するパターン3となる。ただし、実行を要求された演算が非可換命令である場合(S26:No)には、リザベーションステーションにキューイングする段階では第1ソースオペランドと第2ソースオペランドとを入れ替えることはできない。この場合、デコーダ211は、リザベーションステーション222への演算実行命令のキューイング時に、キューイングした演算実行命令に対応する転置フラグ252aをオンにするように制御する。具体的には、デコーダ211は、選択信号IWR1_GroupB2_Swap2をオンにする。
[ステップS29]デコーダ211は、入力ポートIN2に命令制御部200からの即値のみが入力されるが、入力ポートIN1にレジスタ値を入力可能な汎用演算器120または汎用演算器130で演算するように制御する。
ここで、第2ソースオペランドにレジスタ番号「rs2」が指定されておらず(S21:No)、第1ソースオペランドにレジスタ番号「rs1」が指定されている場合(S24:Yes)、第1ソースオペランドと第2ソースオペランドの組合せパターンは、上記のグループB2に属するパターン2またはパターン5となる。この場合、デコーダ211は、選択信号IWR1_GroupB2_SELをオンにして、デコードした演算実行命令を、各ソースオペランドを転置することなく、汎用演算器120,130に対応するリザベーションステーション222にキューイングする。このとき、演算実行命令に対応付けて登録される転置フラグ252aはオフになる。
また、第2ソースオペランドにレジスタ番号「rs2」が指定されており(S21:Yes)、第1ソースオペランドにレジスタ番号「rs1」が指定されておらず(S22:No)、実行を要求された演算が可換演算である場合(S26:Yes)には、ステップS27の処理により、選択信号IWR1_GroupB2_Swap1がオンになる。この場合、ステップS29では、デコーダ211は、デコードした演算実行命令をリザベーションステーション222にキューイングするが、演算キュー252に登録された演算実行命令は、転置回路251によって元の第1ソースオペランドと第2ソースオペランドとが入れ替えられた状態となる。また、このとき、演算実行命令に対応付けて登録される転置フラグ252aはオフになる。
また、第2ソースオペランドにレジスタ番号「rs2」が指定されており(S21:Yes)、第1ソースオペランドにレジスタ番号「rs1」が指定されておらず(S22:No)、実行を要求された演算が可換演算でない場合(S26:No)には、ステップS28の処理により、選択信号IWR1_GroupB2_Swap2がオンになる。この場合、ステップS29では、デコーダ211は、デコードした演算実行命令を、各ソースオペランドを転置することなく、リザベーションステーション222にキューイングする。このとき、演算実行命令に対応付けて登録される転置フラグ252aはオンになる。
図16は、第3の実施の形態におけるデコーダの回路構成例を示す図である。
なお、この図16では、図12に対応する構成要素には同じ符号を付して示す。また、図16では、可換演算、非可換演算のそれぞれの例として加算(ADD)、減算(SUB)を挙げ、主として加算命令および減算命令に関する回路構成を示して、その他の構成の図示を省略する。さらに、図16は、例としてデコーダ211の回路構成例を示すが、デコーダ212〜214のそれぞれも同じ構成の回路を有する。
図16に示すように、第3の実施の形態におけるデコーダ211は、ANDゲート231〜233,261〜269、ORゲート238,239,270〜276およびバッファ243を備える。
図12で説明したように、ANDゲート231,232は、加算命令の入力を判定するゲート回路である。入力された演算実行命令によって加算命令の実行が指定されたとき、ANDゲート231,232の各出力はオンになる。ANDゲート232の出力信号は、ORゲート238に入力される。ORゲート238の他の入力には、他の可換演算命令が指定されたことを判定する判定回路からの出力信号が入力される。従って、ORゲート238は、演算実行命令により可換演算の実行が指定された場合に、出力をオンにする。
また、図12で説明したように、ANDゲート233は、命令レジスタ201からの演算実行命令の第1ソースオペランドに、実体を伴うレジスタの番号「rs1」が指定されているかを判定するゲート回路である。ANDゲート233は、演算実行命令の第1ソースオペランドに定数を示すレジスタ番号「g0」が指定されていた場合に、出力をオンにする。一方、ANDゲート233は、演算実行命令の第1ソースオペランドに実体を伴うレジスタの番号「rs1」が指定されている場合に、出力をオフにする。
また、図12で説明したように、ANDゲート234、ORゲート239およびバッファ243は、命令レジスタ201からの演算実行命令の第2ソースオペランドに、実体を伴うレジスタの番号「rs2」が指定されているかを判定する回路である。ANDゲート234は、演算実行命令の第2ソースオペランドに即値「simm13」が指定されている場合に、出力をオフにする。この場合には、バッファ243の出力がオンになることから、ORゲート239の出力もオンになる。また、ANDゲート234は、演算実行命令の第2ソースオペランドに実体を伴うレジスタの番号「rs2」が指定されている場合に、出力をオフにする。この場合、バッファ243の出力もオフになり、ORゲート239の出力もオフになる。また、ANDゲート234は、演算実行命令の第2ソースオペランドに定数を示すレジスタ番号「g0」が指定されている場合には、出力をオンにする。この場合、ORゲート239の出力もオンになる。
ANDゲート261は、ANDゲート231と協働することで減算命令の入力を判定する。減算命令が指定される場合、演算実行命令のコード「op3」は、下位4ビットが「0x02」、残りの2ビットがともに「0」とされる。ANDゲート261には、命令レジスタ201からの演算実行命令のうちの第19ビットから第24ビットまでのコード「op3」が入力されるが、これらのビットのうち、第21ビットの値はANDゲート261にそのまま入力され、それ以外のビットの値は反転してANDゲート261に入力される。演算実行命令によって減算命令の実行が指定されたとき、ANDゲート231,261の各出力はともにオンになる。
ANDゲート261の出力信号は、ORゲート270に入力される。また、ORゲート270の他の入力には、他の非可換演算命令が指定されたことを判定する判定回路からの出力信号が入力される。他の非可換演算命令とは、例えば除算命令である。除算命令が指定されたことを判定する判定回路は、演算実行命令における第19ビットから第24ビットまでのコード「op3」のうち、下位4ビットが「0x0d」であり、残りの2ビットがともに「0」である場合に、出力をオンにする。ORゲート270は、演算実行命令により非可換演算の実行が指定された場合に、出力をオンにする。
ANDゲート262は、命令レジスタ201からの演算実行命令の第1ソースオペランドに、実体を伴うレジスタの番号「rs1」が指定されているかを判定するゲート回路である。ANDゲート262は、演算実行命令の第1ソースオペランドに定数を示すレジスタ番号「g0」が指定されていた場合に、出力をオンにする。一方、ANDゲート262は、演算実行命令の第1ソースオペランドに実体を伴うレジスタの番号「rs1」が指定されている場合に、出力をオフにする。なお、ANDゲート262の機能は、ANDゲート233によって代用することもできる。
ANDゲート263,264は、命令レジスタ201からの演算実行命令の第2ソースオペランドに、実体を伴うレジスタの番号「rs2」が指定されているかを判定する回路である。ANDゲート263には、演算実行命令の第0ビットから第4ビットまでの値が入力される。第0ビットから第4ビットまでのすべての値が「0」の場合(例えば、第2ソースオペランドに定数を示すレジスタ番号「g0」が指定されている場合)、ANDゲート263の出力はオンになり、その他の場合にはANDゲート263の出力はオフになる。
ANDゲート264には、ANDゲート263からの出力を反転した信号と、演算実行命令の第13ビットの値を反転した信号とが入力される。演算実行命令の第13ビットの値が「1」である場合、すなわち、第2ソースオペランドに即値「simm13」が指定されている場合には、ANDゲート264の出力はオフになる。また、演算実行命令の第13ビットの値が「0」であり、かつ、第0ビットから第4ビットまでがすべて「0」の場合、すなわち、第2ソースオペランドに定数を示すレジスタ番号「g0」が指定されている場合にも、ANDゲート264の出力はオフになる。従って、第2ソースオペランドに実体を伴うレジスタの番号「rs2」が指定されている場合に、ANDゲート264の出力はオンになる。
ORゲート271には、ORゲート238,270からの各出力信号が入力される。前述のように、ORゲート238は、演算実行命令により可換演算の実行が指定された場合に出力をオンにし、ORゲート270は、演算実行命令により非可換演算の実行が指定された場合に出力をオンにする。従って、ORゲート271は、演算実行命令により可換演算または非可換演算の実行が指定されたとき、出力をオンにする。
ANDゲート265〜269は、演算実行命令をリザベーションステーション221〜223のいずれにキューイングすべきかを判定する回路である。ANDゲート265には、ANDゲート231,264およびORゲート271からの各出力信号と、ANDゲート233およびORゲート239からの各出力信号を反転した信号とが入力される。ANDゲート266には、ANDゲート231およびORゲート239,271からの各出力信号と、ANDゲート233からの出力信号を反転した信号とが入力される。ANDゲート267には、ANDゲート231,233およびORゲート239,271からの各出力信号が入力される。ANDゲート268には、ANDゲート231,262,264およびORゲート238からの各出力信号が入力される。ANDゲート269には、ANDゲート231,262,264およびORゲート270からの各出力信号が入力される。
ここで、演算実行命令により可換演算または非可換演算のいずれかの実行が指定された場合、ANDゲート231およびORゲート271の各出力はともにオンになる。この場合、ANDゲート265〜269は、次のように動作する。
第1ソースオペランドと第2ソースオペランドの組合せパターンが、上記のグループA2に属するパターン1となる場合、ANDゲート233およびORゲート239の各出力がともにオフになり、ANDゲート264の出力がオンになる。このとき、ANDゲート265の出力がオンになる。ANDゲート265からの出力信号は、ORゲート272を介して、選択信号IWR1_GroupA2_SELとしてリザベーションステーション221に出力される。ANDゲート265の出力がオンになり、選択信号IWR1_GroupA2_SELがオンになったとき、デコーダ211は、命令レジスタ201からの演算実行命令をリザベーションステーション221にキューイングする。
第1ソースオペランドと第2ソースオペランドの組合せパターンが、上記のグループB2に属するパターン2またはパターン5になるとき、ORゲート239の出力がオンになり、ANDゲート233の出力がオフになる。このとき、ANDゲート266の出力がオンになる。ANDゲート266からの出力信号は、ORゲート273を介して、選択信号IWR1_GroupB2_SELとしてリザベーションステーション222に出力される。ANDゲート266の出力がオンになり、選択信号IWR1_GroupB2_SELがオンになったとき、デコーダ211は、命令レジスタ201からの演算実行命令を、ソースオペランドを転置しないままでリザベーションステーション222にキューイングする。
第1ソースオペランドと第2ソースオペランドの組合せパターンが、上記のグループC2に属するパターン4またはパターン6となる場合には、ORゲート239およびANDゲート233の各出力がともにオンになり、ANDゲート267の出力がオンになる。ANDゲート267からの出力信号は、ORゲート274を介して、選択信号IWR1_GroupC2_SELとしてリザベーションステーション223に出力される。ANDゲート267の出力がオンになり、選択信号IWR1_GroupC2_SELがオンになったとき、デコーダ211は、命令レジスタ201からの演算実行命令をリザベーションステーション223にキューイングする。
次に、第1ソースオペランドと第2ソースオペランドの組合せパターンが、上記のグループB2に属するパターン3になる場合には、ともにANDゲート268,269に入力されるANDゲート262,264の各出力は、ともにオンになる。この場合、実行を要求された演算が可換演算か非可換演算かによって、次のような動作が行われる。
実行を要求された演算が可換演算である場合、ORゲート238の出力がオンになり、ORゲート270の出力がオフになる。このとき、ANDゲート268の出力がオンになり、ANDゲート269の出力はオフになる。ANDゲート268からの出力信号は、ORゲート275を介して、選択信号IWR1_GroupB2_Swap1として、デコーダ211内の転置回路251とリザベーションステーション222とに出力される。ANDゲート268の出力がオンになり、選択信号IWR1_GroupB2_Swap1がオンになったとき、デコーダ211は、命令レジスタ201からの演算実行命令を、転置回路251によってソースオペランドを転置させた状態で、リザベーションステーション222にキューイングする。
一方、実行を要求された演算が非可換演算である場合、ORゲート238の出力がオフになり、ORゲート270の出力がオンになる。このとき、ANDゲート269の出力がオンになり、ANDゲート268の出力はオフになる。ANDゲート269からの出力信号は、ORゲート276を介して、選択信号IWR1_GroupB2_Swap2としてリザベーションステーション222に出力される。ANDゲート269の出力がオンになり、選択信号IWR1_GroupB2_Swap2がオンになったとき、デコーダ211は、命令レジスタ201からの演算実行命令を、ソースオペランドを転置しないままで、リザベーションステーション222にキューイングする。リザベーションステーション222は、選択信号IWR1_GroupB2_Swap2がオンになったとき、演算キュー252に登録された演算実行命令に対応付けられた転置フラグ252aをオンにする。
以上の図16の回路により、命令レジスタ201からの演算実行命令により加算などの可換演算の実行が命令された場合において、図15に示した処理が実行される。なお、図示しないが、本実施の形態のデコーダ211には、可換演算命令および非可換演算命令以外の演算実行命令が入力された場合に、演算実行命令のキューイング先を選択する選択回路も別途設けられる。選択回路は、実行が要求される処理の種類に応じてさらに複数設けられる場合もある。各選択回路には、演算実行命令のキューイング先ごとに選択するか否かを判定する、図16のANDゲート265〜269に相当する判定回路が設けられ、各判定回路からの出力が、ORゲート272〜276に入力される。
以上説明した第3の実施の形態では、演算実行命令のソースオペランドの一方において実体を伴うレジスタが指定された場合に、ソースオペランドを転置することを可能にした。これにより、第2の実施の形態と比較して、入力ポートIN1のみにレジスタ値を入力可能な演算器がより積極的に使用されるようになる。このため、例えば、入力ポートIN1,IN2の両方にレジスタ値を入力可能な演算器に対して演算要求が集中することが少なくなり、その結果、全体の演算効率が向上する。また、入力ポートIN1のみにレジスタ値を入力可能な演算器の数を多くするほど、演算効率を向上させることができる。
〔第4の実施の形態〕
上記の第3の実施の形態では、演算実行命令のソースオペランドの一方において実体を伴うレジスタが指定された場合に、実行を要求された演算が可換演算または非可換演算のいずれであっても、入力ポートIN1のみにレジスタ値を入力可能な演算器に演算を実行させた。これに対して、以下の第4の実施の形態では、演算実行命令のソースオペランドの一方において実体を伴うレジスタが指定された場合には、実行を要求された演算が可換演算である場合のみ、入力ポートIN1のみにレジスタ値を入力可能な演算器に演算を実行させる。
ここで、前述した第1ソースオペランドと第2ソースオペランドの組合せパターンのうち、パターン3を、可換演算の実行が要求された場合のパターン3−1と、非可換演算の実行が要求された場合のパターン3−2とにさらに分類する。第4の実施の形態における各デコーダ211〜214は、上記の組合せパターンを次の3種類のグループに分類し、各グループに対応する演算器に対して演算実行命令を発行するように制御する。
グループA3:パターン1(rs1,rs2)、パターン3−2(g0,rs2:非可換演算)
グループB3:パターン2(rs1,g0)、パターン3−1(g0,rs2:可換演算)、パターン5(rs1,simm13)
グループC3:パターン4(g0,g0)、パターン6(g0,simm13)
本実施の形態では、汎用演算器およびアドレス演算器に入力される信号(レジスタ値または即値)の組合せは、第2の実施の形態と同様になっている。すなわち、汎用演算器120,130では、入力ポートIN1にはレジスタ値と即値のいずれも入力可能である一方、入力ポートIN2には即値のみが入力される。
図17は、第4の実施の形態におけるデコーダおよびリザベーションステーションの構成例と、伝送される信号の例について示す図である。なお、この図17は、図14に対応する構成要素には同じ符号を付して示している。
本実施の形態のリザベーションステーション221〜223の構成は、第2の実施の形態と同様である。これらのうち、汎用演算器120,130に対応するリザベーションステーション222は、内部の演算キューに演算実行命令のみ保持し、第3の実施の形態で使用された転置フラグを保持しない。
本実施の形態のデコーダ211は、選択信号IWR1_GroupA3_SEL,IWR1_GroupB3_SEL,IWR1_GroupC3_SEL,IWR1_GroupB3_Swapを出力する。また、本実施の形態のデコーダ211は、第3の実施の形態と同様に、演算実行命令の第1ソースオペランドと第2ソースオペランドとを転置することが可能な転置回路251を備える。転置回路251は、選択信号IWR1_GroupB3_Swapがオンのとき、第1ソースオペランドと第2ソースオペランドとを転置させて、リザベーションステーション222に出力する。
選択信号IWR1_GroupA3_SELは、リザベーションステーション221に出力される。デコーダ211は、演算実行命令の第1ソースオペランドと第2ソースオペランドとの組合せパターンが前述のグループA3に属するパターンである場合に、選択信号IWR1_GroupA3_SELをオンにする。このとき、デコーダ211は、リザベーションステーション221に対して演算実行命令をキューイングする。
選択信号IWR1_GroupB3_SEL,IWR1_GroupB3_Swapは、リザベーションステーション222に出力される。デコーダ211は、演算実行命令の第1ソースオペランドと第2ソースオペランドとの組合せパターンが前述のグループB3に属するパターンである場合に、選択信号IWR1_GroupB3_SEL,IWR1_GroupB3_Swapのいずれかをオンにする。
デコーダ211は、第1ソースオペランドと第2ソースオペランドとの組合せパターンがパターン2またはパターン5である場合には、選択信号IWR1_GroupB3_SELをオンにする。このとき、デコーダ211は、第1ソースオペランドと第2ソースオペランドとを転置回路251で転置させることなく、演算実行命令をリザベーションステーション222にキューイングする。
また、デコーダ211は、第1ソースオペランドと第2ソースオペランドとの組合せパターンがパターン3−1である場合には、選択信号IWR1_GroupB3_Swapをオンにする。このとき、デコーダ211は、第1ソースオペランドと第2ソースオペランドとを転置回路251で転置させた状態で、演算実行命令をリザベーションステーション222にキューイングする。
また、デコーダ211は、第1ソースオペランドと第2ソースオペランドの組合せパターンが前述のグループC3に属するパターン4またはパターン6である場合には、選択信号IWR1_GroupC3_SELをオンにする。このとき、デコーダ211は、リザベーションステーション223に対して演算実行命令をキューイングする。
なお、以上の図17ではデコーダ211について説明したが、デコーダ212〜214のそれぞれも、デコーダ211と同様の構成を有する。また、上記の図17では、汎用演算器に対応するリザベーションステーションについて説明したが、アドレス演算器に対応するリザベーションステーション(RSA)とデコーダ211〜214との間でも、図17と同様の動作が行われればよい。
図18は、第4の実施の形態におけるデコーダの処理を示すフローチャートである。この図18の処理は、デコードした演算実行命令が汎用演算器によって実行可能な演算の実行を要求するものであると判定した場合に、デコーダ211によって実行されるものである。
[ステップS41〜S44]ステップS41,S42,S43,S44の判定処理は、それぞれ図15のステップS21,S22,S26,S24の判定処理と同様であるので、ここでは説明を省略する。
[ステップS45]第1ソースオペランドと第2ソースオペランドの両方に実体を伴うレジスタの番号が指定されている場合(S41:Yes,S42:Yes)、各ソースオペランドの組合せパターンは、上記のグループA3に属するパターン1となる。また、第2ソースオペランドには実体を伴うレジスタの番号「rs2」が指定されている(S41:Yes)が、第1ソースオペランドには実体を伴うレジスタの番号「rs1」が指定されておらず(S42:No)、かつ、実行を要求された演算が非可換演算である(S43:No)場合、各ソースオペランドの組合せパターンは、グループA3に属するパターン3−2となる。
これらの場合、デコーダ211は、入力ポートIN1,IN2の両方にレジスタ値を入力可能な汎用演算器110で演算するように制御する。すなわち、デコーダ211は、選択信号IWR1_GroupA3_SELをオンにして、デコードした演算実行命令を、汎用演算器110に対応するリザベーションステーション221にキューイングする。
[ステップS46]第1ソースオペランドおよび第2ソースオペランドの両方に実体を伴うレジスタの番号が指定されていない場合(S41:No,S44:No)、各ソースオペランドの組合せパターンは、上記のグループC3に属するパターン4またはパターン6となる。この場合、デコーダ211は、入力ポートIN1,IN2の両方とも命令制御部200からの即値のみが入力される汎用演算器140で演算するように制御する。すなわち、デコーダ211は、選択信号IWR1_GroupC3_SELをオンにして、デコードした演算実行命令を、汎用演算器140に対応するリザベーションステーション223にキューイングする。
[ステップS47]第2ソースオペランドにレジスタ番号「rs2」が指定されており(S41:Yes)、第1ソースオペランドにレジスタ番号「rs1」が指定されておらず(S42:No)、かつ、実行を要求された演算が可換演算である(S43:Yes)場合、各ソースオペランドの組合せパターンは、グループB3に属するパターン3−1となる。この場合、演算実行命令における各ソースオペランドを入れ替えて処理を続行することが可能であるので、デコーダ211は、選択信号IWR1_GroupB3_Swapをオンにして、転置回路251に、第1ソースオペランドと第2ソースオペランドとを転置させる。
[ステップS48]デコーダ211は、入力ポートIN2に命令制御部200からの即値のみが入力されるが、入力ポートIN1にレジスタ値を入力可能な汎用演算器120または汎用演算器130で演算するように制御する。
ここで、第2ソースオペランドにレジスタ番号「rs2」が指定されておらず(S41:No)、第1ソースオペランドにレジスタ番号「rs1」が指定されている場合(S44:Yes)、第1ソースオペランドと第2ソースオペランドの組合せパターンは、上記のグループB3に属するパターン2またはパターン5となる。この場合、デコーダ211は、選択信号IWR1_GroupB3_SELをオンにして、デコードした演算実行命令を、各ソースオペランドを転置することなく、汎用演算器120,130に対応するリザベーションステーション222にキューイングする。
また、第2ソースオペランドにレジスタ番号「rs2」が指定されており(S41:Yes)、第1ソースオペランドにレジスタ番号「rs1」が指定されておらず(S42:No)、かつ、実行を要求された演算が可換演算である(S43:Yes)場合には、ステップS47の処理により、選択信号IWR1_GroupB3_Swapがオンになる。この場合、ステップS48では、デコーダ211は、デコードした演算実行命令をリザベーションステーション222にキューイングするが、キューイングされる演算実行命令は、転置回路251によって元の第1ソースオペランドと第2ソースオペランドとが入れ替えられた状態となる。
図19は、第4の実施の形態におけるデコーダの回路構成例を示す図である。
なお、この図19では、図16に対応する構成要素には同じ符号を付して示す。また、図19では、図16と同様に、可換演算、非可換演算のそれぞれの例として加算(ADD)、減算(SUB)を挙げ、主として加算命令および減算命令に関する回路構成を示して、その他の構成の図示を省略する。さらに、図19は、例としてデコーダ211の回路構成例を示すが、デコーダ212〜214のそれぞれも同じ構成の回路を有する。
図19に示すように、第4の実施の形態のデコーダ211は、ANDゲート231〜233,261〜264,281〜285、ORゲート238,239,270,271,286〜289およびバッファ243を備える。これらの回路要素のうち、ANDゲート231〜233,261〜264、ORゲート238,239,270,271およびバッファ243の接続関係および動作については、図16と同様であるので、説明を省略する。
ANDゲート281には、ANDゲート233およびORゲート238からの各出力信号が入力される。また、ANDゲート281は、各入力信号の論理積をとった結果を反転させて出力する。ANDゲート233からの出力信号は、演算実行命令の第1ソースオペランドに定数を示すレジスタ番号「g0」が指定された場合に、オンになる。また、ORゲート238からの出力信号は、演算実行命令により可換演算の実行が要求された場合に、オンになる。従って、ANDゲート281からの出力信号は、可換演算/非可換演算に関係なく、第1ソースオペランドにレジスタ番号「rs1」が指定された場合、または、非可換演算が要求され、なおかつ第1ソースオペランドにレジスタ番号「g0」が指定された場合に、オンになる。
ANDゲート282〜285は、演算実行命令をリザベーションステーション221〜223のいずれにキューイングすべきかを判定する回路である。ANDゲート282には、ANDゲート231,281およびORゲート271からの各出力信号と、ORゲート239からの各出力信号を反転した信号とが入力される。ANDゲート283には、ANDゲート231およびORゲート239,271からの各出力信号と、ANDゲート233からの出力信号を反転した信号とが入力される。ANDゲート284には、ANDゲート231,233およびORゲート239,271からの各出力信号が入力される。ANDゲート285には、ANDゲート231,262,264およびORゲート238からの各出力信号が入力される。
ここで、演算実行命令により可換演算または非可換演算のいずれかの実行が指定された場合、ANDゲート231およびORゲート271の各出力はともにオンになる。この場合、ANDゲート282〜284は、次のように動作する。
第1ソースオペランドと第2ソースオペランドの組合せパターンが、上記のグループA3に属するパターン1となる場合、ANDゲート281の出力はオンになり、ORゲート239の出力はオフになる。また、演算実行命令により非可換演算の実行が指定され、かつ、各ソースオペランドの組合せパターンがグループA3に属するパターン3−2となる場合にも、同様に、ANDゲート281の出力はオンになり、ORゲート239の出力はオフになる。これらの場合、ANDゲート282の出力がオンになる。ANDゲート282からの出力信号は、ORゲート286を介して、選択信号IWR1_GroupA3_SELとしてリザベーションステーション221に出力される。ANDゲート282の出力がオンになり、選択信号IWR1_GroupA3_SELがオンになったとき、デコーダ211は、命令レジスタ201からの演算実行命令をリザベーションステーション221にキューイングする。
第1ソースオペランドと第2ソースオペランドの組合せパターンが、上記のグループB3に属するパターン2またはパターン5になるとき、ORゲート239の出力がオンになり、ANDゲート233の出力がオフになる。このとき、ANDゲート283の出力がオンになる。ANDゲート283からの出力信号は、ORゲート287を介して、選択信号IWR1_GroupB3_SELとしてリザベーションステーション222に出力される。ANDゲート283の出力がオンになり、選択信号IWR1_GroupB3_SELがオンになったとき、デコーダ211は、命令レジスタ201からの演算実行命令を、ソースオペランドを転置しないままでリザベーションステーション222にキューイングする。
第1ソースオペランドと第2ソースオペランドの組合せパターンが、上記のグループC3に属するパターン4またはパターン6となる場合には、ORゲート239およびANDゲート233の各出力がともにオンになり、ANDゲート284の出力がオンになる。ANDゲート284からの出力信号は、ORゲート288を介して、選択信号IWR1_GroupC3_SELとしてリザベーションステーション223に出力される。ANDゲート284の出力がオンになり、選択信号IWR1_GroupC3_SELがオンになったとき、デコーダ211は、命令レジスタ201からの演算実行命令をリザベーションステーション223にキューイングする。
次に、演算実行命令により可換演算の実行が指定された場合、ANDゲート231およびORゲート238の各出力がともにオンになる。この状態で、各ソースオペランドの組合せパターンが、グループB3に属するパターン3−1になるとき、ANDゲート262,264の各出力がともにオンになり、その結果、ANDゲート285の出力がオンになる。ANDゲート285からの出力信号は、ORゲート289を介して、選択信号IWR1_GroupB3_Swapとして、デコーダ211内の転置回路251とリザベーションステーション222とに出力される。ANDゲート285の出力がオンになり、選択信号IWR1_GroupB3_Swapがオンになったとき、デコーダ211は、命令レジスタ201からの演算実行命令を、転置回路251によってソースオペランドを転置させた状態で、リザベーションステーション222にキューイングする。
以上の図19の回路により、命令レジスタ201からの演算実行命令により加算などの可換演算の実行が命令された場合において、図18に示した処理が実行される。なお、図示しないが、本実施の形態のデコーダ211には、可換演算命令および非可換演算命令以外の演算実行命令が入力された場合に、演算実行命令のキューイング先を選択する選択回路も別途設けられる。選択回路は、実行が要求される処理の種類に応じてさらに複数設けられる場合もある。各選択回路には、演算実行命令のキューイング先ごとに選択するか否かを判定する、図19のANDゲート282〜285に相当する判定回路が設けられ、各判定回路からの出力が、ORゲート286〜289に入力される。
以上説明した第4の実施の形態では、演算実行命令のソースオペランドの一方において実体を伴うレジスタが指定された場合に、可換演算の実行が要求された場合のみ、デコーダの内部でソースオペランドを転置することを可能にした。これにより、第2の実施の形態と比較して、入力ポートIN1のみにレジスタ値を入力可能な演算器がより積極的に使用されるようになり、入力ポートIN1,IN2の両方にレジスタ値を入力可能な演算器に対して演算要求が集中することが少なくなる。また、第3の実施の形態と比較した場合、演算器側にオペランドを転置する回路を設けたり、この回路を制御するためにリザベーションステーションの演算キューに転置フラグを登録する必要がなくなるので、全体の回路構成を単純化し、製造コストや回路面積を抑制することができる。
〔第5の実施の形態〕
前述した第2〜第4の実施の形態では、ソースオペランドの組合せパターンに応じて、入力される信号が異なる3種類の演算器のうち1つのみを選択し、選択した演算器に演算を実行させていた。しかしながら、実際には、1つの組合せパターンについて、複数種類の演算器のいずれでも演算を実行させることが可能な場合がある。
例えば、第2の実施の形態で分類したグループのうち、グループB1に属するパターン2,5については、汎用演算器120,130だけでなく、汎用演算器110を用いて演算することも可能である。また、グループC1に属するパターン4,6については、汎用演算器140だけでなく、汎用演算器110,120,130のいずれを用いて演算することも可能である。
そこで、以下の第5の実施の形態に係る演算処理装置では、リザベーションステーションの演算キューの状態に応じて、演算を実行させる演算器を変更可能にする。
図20は、第5の実施の形態における命令制御部の内部構成例と、伝送される信号の例を示す図である。なお、この図20では、図9に対応する構成要素については同じ符号を付して示す。
第5の実施の形態における命令制御部200は、命令レジスタ201〜204、デコーダ211〜214、リザベーションステーション221〜223およびディスパッチャ400を備えている。
以下の説明では、命令レジスタ201〜204、デコーダ211〜214およびリザベーションステーション221〜223の基本的な構成および処理は、例として第2の実施の形態と同じであるものとする。ただし、デコーダ211〜214のそれぞれから出力される選択信号は、ディスパッチャ400に入力される。また、リザベーションステーション221〜223のそれぞれは、内部に備える演算キューの状態をディスパッチャ400に通知する機能をさらに備える。
ディスパッチャ400は、デコーダ211〜214のそれぞれから選択信号によって指定された演算実行命令の出力先を、出力先のリザベーションステーション内の演算キューの状態に応じて変更する。例えば、ディスパッチャ400は、デコーダにより演算実行命令のキューイング先としてリザベーションステーション223が指定されたとき、リザベーションステーション223の演算キューが満杯である場合には、キューイング先をリザベーションステーション222に変更する。また、ディスパッチャ400は、デコーダにより演算実行命令のキューイング先としてリザベーションステーション222が指定されたとき、リザベーションステーション222の演算キューが満杯である場合には、キューイング先をリザベーションステーション221に変更する。
図21は、第5の実施の形態におけるデコーダおよびディスパッチャの処理を示すフローチャートである。この図21の処理は、デコードした演算実行命令が汎用演算器によって実行可能な演算の実行を要求するものであると判定した場合に、デコーダ211およびディスパッチャ400によって実行されるものである。
[ステップS61]デコーダ211は、演算実行命令における第2ソースオペランドに、実体を伴うレジスタの番号「rs2」が指定されているかを判定する。デコーダ211は、第2ソースオペランドにレジスタ番号「rs2」が指定されている場合(S61:Yes)には、演算実行命令のキューイング先としてリザベーションステーション221を選択する選択信号IWR1_GroupA1_SEL(図12参照)をオンにする。この場合、次にステップS62の処理が実行される。一方、デコーダ211は、第2ソースオペランドにレジスタ番号「rs2」が指定されていない場合(S61:No)には、ステップS65の処理を実行する。
[ステップS62]ディスパッチャ400は、リザベーションステーション221がキューフルであるかを判定する。ここで、「キューフル」とは、リザベーションステーション221内の演算キューに、デコーダ211からの演算実行命令を格納可能な空きエントリが存在しないことを示す。ディスパッチャ400は、リザベーションステーション221がキューフルである場合(S62:Yes)には、ステップS63の処理を実行する。一方、ディスパッチャ400は、リザベーションステーション221がキューフルでない場合(S62:No)には、ステップS64の処理を実行する。
[ステップS63]ディスパッチャ400は、リザベーションステーション221がキューフルでなくなるまで待つように、デコーダ211または命令レジスタ201に指示する。ここで、上記のステップS62においてリザベーションステーション221がキューフルである場合には、ステップS63でのディスパッチャ400の指示に応じて、命令レジスタ201からの新たな演算実行命令の発行が停止される。そして、要求された演算を実行可能な汎用演算器に対応するリザベーションステーションのいずれかがキューフルでなくなるまでの間、新たな演算実行命令の発行が停止された状態のまま、ステップS61からの処理が繰り返される。
[ステップS64]ディスパッチャ400は、デコーダ211でデコードされた演算実行命令を汎用演算器110で演算するように制御する。すなわち、ディスパッチャ400は、デコードされた演算実行命令を、汎用演算器110に対応するリザベーションステーション221にキューイングする。
[ステップS65]デコーダ211は、演算実行命令における第1ソースオペランドに、実体を伴うレジスタの番号「rs1」が指定されているかを判定する。デコーダ211は、第1ソースオペランドにレジスタ番号「rs1」が指定されている場合(S65:Yes)には、演算実行命令のキューイング先としてリザベーションステーション222を選択する選択信号IWR1_GroupB1_SEL(図12参照)をオンにする。この場合、次にステップS66の処理が実行される。一方、デコーダ211は、第1ソースオペランドにレジスタ番号「rs1」が指定されていない場合(S65:No)には、演算実行命令のキューイング先としてリザベーションステーション223を選択する選択信号IWR1_GroupC1_SEL(図12参照)をオンにする。この場合、次にステップS68の処理が実行される。
[ステップS66]ディスパッチャ400は、リザベーションステーション222がキューフルであるかを判定する。ディスパッチャ400は、リザベーションステーション222がキューフルである場合(S66:Yes)には、ステップS62の処理を実行する。一方、ディスパッチャ400は、リザベーションステーション222がキューフルでない場合(S66:No)には、ステップS67の処理を実行する。
[ステップS67]ディスパッチャ400は、デコーダ211でデコードされた演算実行命令を汎用演算器120または汎用演算器130で演算するように制御する。すなわち、ディスパッチャ400は、デコードされた演算実行命令を、汎用演算器120,130に対応するリザベーションステーション222にキューイングする。
[ステップS68]ディスパッチャ400は、リザベーションステーション223がキューフルであるかを判定する。ディスパッチャ400は、リザベーションステーション223がキューフルである場合(S68:Yes)には、ステップS66の処理を実行する。一方、ディスパッチャ400は、リザベーションステーション223がキューフルでない場合(S68:No)には、ステップS69の処理を実行する。
[ステップS69]ディスパッチャ400は、デコーダ211でデコードされた演算実行命令を汎用演算器140で演算するように制御する。すなわち、ディスパッチャ400は、デコードされた演算実行命令を、汎用演算器140に対応するリザベーションステーション223にキューイングする。
以上の図21の処理では、ディスパッチャ400は、デコーダ211から演算実行命令のキューイング先を選択する選択信号の入力を受けたとき、選択されたキューイング先のリザベーションステーションがキューフルであるかを判定する。ディスパッチャ400は、選択されたキューイング先のリザベーションステーションがキューフルである場合には、演算実行命令のキューイング先を、要求された演算処理を実行可能な演算器に対応し、かつキューフルでない他のリザベーションステーションに変更する。
例えば、デコードした演算実行命令の各ソースオペランドの組合せパターンが、前述のグループC1に属するパターン4またはパターン6である場合(S61:No,S65:No)、デコーダ211は、演算実行命令のキューイング先として汎用演算器140に対応するリザベーションステーション223を選択する。このとき、ディスパッチャ400は、リザベーションステーション223がキューフルであるかを判定する(S68)。リザベーションステーション223がキューフルでない場合(S68:No)、演算実行命令は、リザベーションステーション223にキューイングされる(S69)。
一方、リザベーションステーション223がキューフルである場合(S68:Yes)、ディスパッチャ400は、上記のパターン4またはパターン6のソースオペランドを処理可能である汎用演算器120,130に対応するリザベーションステーション222が、キューフルであるかを判定する(S66)。リザベーションステーション222がキューフルでない場合(S66:No)、ディスパッチャ400は、演算実行命令をキューイング先をリザベーションステーション222に決定する(S67)。
また、リザベーションステーション222がキューフルである場合(S66:Yes)、ディスパッチャ400は、上記のパターン4またはパターン6に係る演算を実行可能である汎用演算器110に対応するリザベーションステーション221が、キューフルであるかを判定する(S62)。リザベーションステーション221がキューフルでない場合(S62:No)、ディスパッチャ400は、演算実行命令のキューイング先をリザベーションステーション221に決定する(S64)。一方、リザベーションステーション221がキューフルである場合(S62:Yes)、ディスパッチャ400は、リザベーションステーション221〜223のいずれかがキューフルでなくなるまでの間、デコーダ211が新たな演算実行命令をデコードしないように制御する(S63)。
以上のようなディスパッチャ400の処理により、演算実行命令のキューイング先が分散するようになり、キューフルであるために演算実行命令のキューイング動作を一時的に停止するという事態が発生しにくくなるとともに、演算の並列度が向上する。その結果、演算処理装置全体の演算速度が向上する。
次に、第5の実施の形態における命令制御部200の内部構成の一例について説明する。まず、図22は、命令制御部内で伝送される信号の例を示す図である。
図12において説明したように、デコーダ211は、演算実行命令の各ソースオペランドの組合せパターンに応じて、リザベーションステーション221を選択する選択信号IWR1_GroupA1_SELと、リザベーションステーション222を選択する選択信号IWR1_GroupB1_SELと、リザベーションステーション223を選択する選択信号IWR1_GroupC1_SELのいずれかをオンにする。
デコーダ212〜214も、デコーダ211と同様の選択信号を出力する。デコーダ212は、演算実行命令の各ソースオペランドの組合せパターンに応じて、リザベーションステーション221を選択する選択信号IWR2_GroupA1_SELと、リザベーションステーション222を選択する選択信号IWR2_GroupB1_SELと、リザベーションステーション223を選択する選択信号IWR2_GroupC1_SELのいずれかをオンにする。
また、デコーダ213は、演算実行命令の各ソースオペランドの組合せパターンに応じて、リザベーションステーション221を選択する選択信号IWR3_GroupA1_SELと、リザベーションステーション222を選択する選択信号IWR3_GroupB1_SELと、リザベーションステーション223を選択する選択信号IWR3_GroupC1_SELのいずれかをオンにする。
さらに、デコーダ214は、演算実行命令の各ソースオペランドの組合せパターンに応じて、リザベーションステーション221を選択する選択信号IWR4_GroupA1_SELと、リザベーションステーション222を選択する選択信号IWR4_GroupB1_SELと、リザベーションステーション223を選択する選択信号IWR4_GroupC1_SELのいずれかをオンにする。
一方、リザベーションステーション221〜223は、それぞれが備える演算キューの状態をディスパッチャ400に通知することが可能なキュー制御部221a〜223aをそれぞれ具備する。
キュー制御部221aは、リザベーションステーション221の演算キューの状態を示すキュー状態信号RS_A_FULL,RS_A_LE1,RS_A_LE2,RS_A_LE3を、ディスパッチャ400に出力する。キュー制御部221aは、リザベーションステーション221の演算キューにおける空きエントリ数が0の場合に、キュー状態信号RS_A_FULLをオンにする。また、キュー制御部221aは、リザベーションステーション221の演算キューにおける空きエントリ数が1のとき、キュー状態信号RS_A_LE1をオンにする。さらに、キュー制御部221aは、リザベーションステーション221の演算キューにおける空きエントリ数が2のとき、キュー状態信号RS_A_LE2をオンにする。また、キュー制御部221aは、リザベーションステーション221の演算キューにおける空きエントリ数が3のとき、キュー状態信号RS_A_LE3をオンにする。
キュー制御部222a,223aのそれぞれも、キュー制御部221aと同様のキュー状態信号をディスパッチャ400に出力する。すなわち、キュー制御部222aは、リザベーションステーション222の演算キューにおける空きエントリ数が0,1,2,3である場合に、それぞれキュー状態信号RS_B_FULL,RS_B_LE1,RS_B_LE2,RS_B_LE3をオンにする。また、キュー制御部223aは、リザベーションステーション223の演算キューにおける空きエントリ数が0,1,2,3である場合に、それぞれキュー状態信号RS_C_FULL,RS_C_LE1,RS_C_LE2,RS_C_LE3をオンにする。
ディスパッチャ400は、リザベーションステーション221〜223のそれぞれからのキュー状態信号に応じて、デコーダ211〜214のそれぞれにおいてデコードされた演算実行命令の最終的なキューイング先を決定する。ディスパッチャ400は、演算実行命令のキューイング先としてリザベーションステーション221を選択する選択信号IWR1_RS_A_SEL,IWR2_RS_A_SEL,IWR3_RS_A_SEL,IWR4_RS_A_SELと、演算実行命令のキューイング先としてリザベーションステーション222を選択する選択信号IWR1_RS_B_SEL,IWR2_RS_B_SEL,IWR3_RS_B_SEL,IWR4_RS_B_SELと、演算実行命令のキューイング先としてリザベーションステーション223を選択する選択信号IWR1_RS_C_SEL,IWR2_RS_C_SEL,IWR3_RS_C_SEL,IWR4_RS_C_SELとを出力する。
また、ディスパッチャ400は、命令レジスタ201〜204に対して、出力制御信号IWR1_FULL_RETRY,IWR2_FULL_RETRY,IWR3_FULL_RETRY,IWR4_FULL_RETRYをそれぞれ出力する。命令レジスタ201〜204は、それぞれ出力制御信号IWR1_FULL_RETRY,IWR2_FULL_RETRY,IWR3_FULL_RETRY,IWR4_FULL_RETRYがオンになっている間、新たな演算実行命令の出力を停止する。
ここで、ディスパッチャ400は、デコーダ211〜214に対して優先度を付与する。本実施の形態では、例として、優先度が高い方から順にデコーダ211,212,213,214とする。ディスパッチャ400は、複数の演算実行命令のキューイング先として同じリザベーションステーションが選択された場合に、優先度の高いデコーダからの演算実行命令を、選択されたリザベーションステーションに優先的にキューイングする。
このような優先度に基づくキューイング先の選択処理においては、例えば、デコーダ214からの演算実行命令のキューイング先としてリザベーションステーション221が選択されたとき、たとえリザベーションステーション221の演算キューにおいて3つの空きエントリが存在したとしても、他のデコーダ211〜213のいずれもキューイング先としてリザベーションステーション221を選択した場合には、デコーダ211〜213からの各演算実行命令が優先的にリザベーションステーション221にキューイングされ、デコーダ214からの演算実行命令のキューイングは待ち状態となる。このように、最も優先度の低いデコーダ214からの演算実行命令のキューイングが不可能な状態は、各リザベーションステーションの演算キューにおける空きエントリ数が0の場合だけでなく、空きエントリ数が1,2,3のいずれの場合でもあり得る。そこで、ディスパッチャ400は、各リザベーションステーションのキュー制御部から、演算キューの空きエントリ数が0,1,2,3のそれぞれであることの通知を受けることにより、デコーダの優先度に応じて演算実行命令のキューイング先を適切に選択する。
図23は、ディスパッチャの内部構成例を示す第1の図である。
この図23では、ディスパッチャが備える回路のうち、リザベーションステーション223を演算実行命令のキューイング先とするか否かを判定する判定回路401を示す。この判定回路401は、ANDゲート411〜426、ORゲート431〜435およびゲート回路441を備える。
ANDゲート411,412は、デコーダ211からの演算実行命令のキューイング先をリザベーションステーション223とするか否かを決定する機能を果たす。ANDゲート411には、デコーダ211からの選択信号IWR1_GroupC1_SELと、リザベーションステーション223のキュー制御部223aからのキュー状態信号RS_C_FULLとが入力される。ANDゲート411からの出力は、選択信号IWR1_GROUP_C_TO_Bとして、次の図24に示す、リザベーションステーション222をキューイング先とするか否かを判定する回路に出力される。この選択信号IWR1_GROUP_C_TO_Bは、デコーダ211からの演算実行命令のキューイング先候補をリザベーションステーション222に変更する場合に、オンになる。ANDゲート412には、ANDゲート411からの出力を反転した信号と、デコーダ211からの選択信号IWR1_GroupC1_SELとが入力される。ANDゲート412からの出力は、デコーダ211からの演算実行命令のキューイング先としてリザベーションステーション223を最終的に選択するかを示す選択信号IWR1_RS_C_SELとして、リザベーションステーション223に出力される。
ここで、デコーダ211によりキューイング先としてリザベーションステーション223が選択されていない場合、すなわち、選択信号IWR1_GroupC1_SELがオフの場合には、選択信号IWR1_RS_C_SEL,IWR1_GROUP_C_TO_Bもともにオフになる。また、デコーダ211によりキューイング先としてリザベーションステーション223が選択された場合、すなわち、選択信号IWR1_GroupC1_SELがオンになった場合には、次のような動作が行われる。
リザベーションステーション223の演算キューにおける空きエントリ数が1以上の場合、すなわち、キュー状態信号RS_C_FULLがオフの場合には、選択信号IWR1_RS_C_SELがオンになる。この場合、デコーダ211からの演算実行命令は、そのキューイング先が変更されることなく、リザベーションステーション223にキューイングされる。一方、リザベーションステーション223の演算キューにおける空きエントリ数が0の場合、すなわち、キュー状態信号RS_C_FULLがオンの場合には、選択信号IWR1_GROUP_C_TO_Bがオンになる。この場合、デコーダ211からの演算実行命令のキューイング先候補が、リザベーションステーション222に変更される。
次に、ANDゲート413〜415およびORゲート431は、デコーダ212からの演算実行命令のキューイング先をリザベーションステーション223とするか否かを決定する機能を果たす。ANDゲート413には、デコーダ211からの選択信号IWR1_GroupC1_SELと、リザベーションステーション223のキュー制御部223aからのキュー状態信号RS_C_LE_1とが入力される。ORゲート431には、リザベーションステーション223のキュー制御部223aからのキュー状態信号RS_C_FULLと、ANDゲート413からの出力信号とが入力される。ANDゲート414には、ORゲート431からの出力信号と、デコーダ212からの選択信号IWR2_GroupC1_SELとが入力される。
ANDゲート414からの出力は、選択信号IWR2_GROUP_C_TO_Bとして、次の図24に示す、リザベーションステーション222をキューイング先するか否かを判定する回路に出力される。この選択信号IWR2_GROUP_C_TO_Bは、デコーダ212からの演算実行命令のキューイング先候補をリザベーションステーション222に変更する場合に、オンになる。ANDゲート415には、ANDゲート414からの出力を反転した信号と、デコーダ212からの選択信号IWR2_GroupC1_SELとが入力される。ANDゲート415からの出力は、デコーダ212からの演算実行命令のキューイング先としてリザベーションステーション223を最終的に選択するかを示す選択信号IWR2_RS_C_SELとして、リザベーションステーション223に出力される。
ここで、デコーダ212によりキューイング先としてリザベーションステーション223が選択されていない場合、すなわち、選択信号IWR2_GroupC1_SELがオフの場合には、選択信号IWR2_RS_C_SEL,IWR2_GROUP_C_TO_Bもともにオフになる。また、デコーダ212によりキューイング先としてリザベーションステーション223が選択された場合、すなわち、選択信号IWR2_GroupC1_SELがオンになった場合には、次のような動作が行われる。
リザベーションステーション223の演算キューにおける空きエントリ数が2以上の場合、すなわち、キュー状態信号RS_C_FULL,RS_C_LE_1がともにオフの場合には、選択信号IWR2_RS_C_SELがオンになる。この場合、デコーダ212からの演算実行命令は、そのキューイング先が変更されることなく、リザベーションステーション223にキューイングされる。
また、リザベーションステーション223の演算キューにおける空きエントリ数が0の場合、すなわち、キュー状態信号RS_C_FULLがオンの場合には、選択信号IWR2_GROUP_C_TO_Bがオンになる。この場合、デコーダ212からの演算実行命令のキューイング先候補が、リザベーションステーション222に変更される。
また、リザベーションステーション223の演算キューにおける空きエントリ数が1の場合、すなわち、キュー状態信号RS_C_LE_1がオンであり、キュー状態信号RS_C_FULLがオフの場合には、優先度の高いデコーダ211によりリザベーションステーション223がキューイング先として選択されているか否かによって、次のような動作が行われる。
デコーダ211によりリザベーションステーション223がキューイング先として選択されていない場合には、デコーダ212からの演算実行命令をリザベーションステーション223にキューイング可能である。この場合、選択信号IWR1_GroupC1_SELがオフになり、ANDゲート413の出力がオフになることから、選択信号IWR2_RS_C_SELがオンになる。従って、デコーダ212からの演算実行命令は、そのキューイング先が変更されることなく、リザベーションステーション223にキューイングされる。
一方、デコーダ211によりリザベーションステーション223がキューイング先として選択されている場合には、デコーダ211からの演算実行命令がリザベーションステーション223に優先的にキューイングされる。この場合、選択信号IWR1_GroupC1_SELがオンになり、ANDゲート413の出力がオンになることから、選択信号IWR2_GROUP_C_TO_Bがオンになる。従って、デコーダ212からの演算実行命令のキューイング先候補が、リザベーションステーション222に変更される。
次に、ANDゲート416〜420およびORゲート432,433は、デコーダ213からの演算実行命令のキューイング先をリザベーションステーション223とするか否かを決定する機能を果たす。ANDゲート417およびORゲート432には、ともに、デコーダ211からの選択信号IWR1_GroupC1_SELと、デコーダ212からの選択信号IWR2_GroupC1_SELとが入力される。ANDゲート416には、リザベーションステーション223のキュー制御部223aからのキュー状態信号RS_C_LE_1と、ORゲート432からの出力信号とが入力される。ANDゲート418には、ANDゲート417からの出力信号と、リザベーションステーション223のキュー制御部223aからのキュー状態信号RS_C_LE_2とが入力される。ORゲート433には、リザベーションステーション223のキュー制御部223aからのキュー状態信号RS_C_FULLと、ANDゲート416,418からの各出力信号とが入力される。
ANDゲート419からの出力は、選択信号IWR3_GROUP_C_TO_Bとして、次の図24に示す、リザベーションステーション222をキューイング先とするか否かを判定する回路に出力される。この選択信号IWR3_GROUP_C_TO_Bは、デコーダ213からの演算実行命令のキューイング先候補をリザベーションステーション222に変更する場合に、オンになる。ANDゲート420には、ANDゲート419からの出力を反転した信号と、デコーダ213からの選択信号IWR3_GroupC1_SELとが入力される。ANDゲート420からの出力は、デコーダ213からの演算実行命令のキューイング先としてリザベーションステーション223を最終的に選択するかを示す選択信号IWR3_RS_C_SELとして、リザベーションステーション223に出力される。
ここで、デコーダ213によりキューイング先としてリザベーションステーション223が選択されていない場合、すなわち、選択信号IWR3_GroupC1_SELがオフの場合には、選択信号IWR3_RS_C_SEL,IWR3_GROUP_C_TO_Bもともにオフになる。また、デコーダ213によりキューイング先としてリザベーションステーション223が選択された場合、すなわち、選択信号IWR3_GroupC1_SELがオンである場合には、次のような動作が行われる。
まず、リザベーションステーション223の演算キューにおける空きエントリ数が3以上の場合、すなわち、キュー状態信号RS_C_FULL,RS_C_LE_1,RS_C_LE_2がすべてオフの場合には、選択信号IWR3_RS_C_SELがオンになる。この場合、デコーダ213からの演算実行命令は、そのキューイング先が変更されることなく、リザベーションステーション223にキューイングされる。
次に、リザベーションステーション223の演算キューにおける空きエントリ数が0の場合、すなわち、キュー状態信号RS_C_FULLがオンの場合には、選択信号IWR3_GROUP_C_TO_Bがオンになる。この場合、デコーダ213からの演算実行命令のキューイング先候補が、リザベーションステーション222に変更される。
次に、リザベーションステーション223の演算キューにおける空きエントリ数が1の場合、すなわち、キュー状態信号RS_C_LE_1がオンであり、キュー状態信号RS_C_FULLがオフの場合には、優先度の高いデコーダ211またはデコーダ212によりリザベーションステーション223がキューイング先として選択されているか否かによって、次のような動作が行われる。
デコーダ211,212がいずれもリザベーションステーション223をキューイング先として選択していない場合には、デコーダ213からの演算実行命令をリザベーションステーション223にキューイング可能である。この場合、選択信号IWR1_GroupC1_SEL,IWR2_GroupC1_SELがいずれもオフになり、ANDゲート416〜418の各出力がいずれもオフになることから、選択信号IWR3_RS_C_SELがオンになる。従って、デコーダ213からの演算実行命令は、そのキューイング先が変更されることなく、リザベーションステーション223にキューイングされる。
一方、デコーダ211,212の少なくとも一方がリザベーションステーション223をキューイング先として選択している場合には、デコーダ211,212からの演算実行命令がリザベーションステーション223に優先的にキューイングされる。この場合、選択信号IWR1_GroupC1_SEL,IWR2_GroupC1_SELの少なくとも一方がオンになり、ANDゲート416の出力がオンになることから、選択信号IWR3_GROUP_C_TO_Bがオンになる。従って、デコーダ213からの演算実行命令のキューイング先候補が、リザベーションステーション222に変更される。
次に、リザベーションステーション223の演算キューにおける空きエントリ数が2の場合、すなわち、キュー状態信号RS_C_LE_2がオンであり、キュー状態信号RS_C_FULL,RS_C_LE_1がともにオフの場合には、優先度の高いデコーダ211,212の両方によりリザベーションステーション223がキューイング先として選択されているか否かによって、次のような動作が行われる。
デコーダ211,212の両方がリザベーションステーション223をキューイング先として選択している場合には、デコーダ211,212からの演算実行命令がリザベーションステーション223に優先的にキューイングされる。この場合、選択信号IWR1_GroupC1_SEL,IWR2_GroupC1_SELがいずれもオンになり、ANDゲート417,418の各出力がオンになることから、選択信号IWR3_GROUP_C_TO_Bがオンになる。従って、デコーダ213からの演算実行命令のキューイング先候補が、リザベーションステーション222に変更される。
一方、デコーダ211,212のうちの少なくとも一方がリザベーションステーション223をキューイング先として選択していない場合には、デコーダ213からの演算実行命令をリザベーションステーション223にキューイング可能である。この場合、選択信号IWR1_GroupC1_SEL,IWR2_GroupC1_SELのうち少なくとも一方がオフになり、ANDゲート416〜418の各出力がいずれもオフになることから、選択信号IWR3_RS_C_SELがオンになる。従って、デコーダ213からの演算実行命令は、そのキューイング先が変更されることなく、リザベーションステーション223にキューイングされる。
次に、ANDゲート421〜426、ORゲート434,435およびゲート回路441は、デコーダ214からの演算実行命令のキューイング先をリザベーションステーション223とするか否かを決定する機能を果たす。ANDゲート423およびORゲート434には、ともに、デコーダ211〜213からの選択信号IWR1_GroupC1_SEL,IWR2_GroupC1_SEL,IWR3_GroupC1_SELが入力される。ANDゲート421には、リザベーションステーション223のキュー制御部223aからのキュー状態信号RS_C_LE_1と、ORゲート434からの出力信号とが入力される。ANDゲート424には、ANDゲート423からの出力信号と、リザベーションステーション223のキュー制御部223aからのキュー状態信号RS_C_LE_3とが入力される。
ゲート回路441は、3つのANDゲートと、各ANDゲートからの出力を入力とするORゲートとからなる。ここで、ゲート回路441が備えるANDゲートを、図23における上側から順に、第1ANDゲート、第2ANDゲート、第3ANDゲートと呼ぶ。ゲート回路441の第1ANDゲートには、デコーダ211,212からの選択信号IWR1_GroupC1_SEL,IWR2_GroupC1_SELが入力される。ゲート回路441の第2ANDゲートには、デコーダ211,213からの選択信号IWR1_GroupC1_SEL,IWR3_GroupC1_SELが入力される。ゲート回路441の第3ANDゲートには、デコーダ212,213からの選択信号IWR2_GroupC1_SEL,IWR3_GroupC1_SELが入力される。
ANDゲート422には、リザベーションステーション223のキュー制御部223aからのキュー状態信号RS_C_LE_2と、ゲート回路441のORゲートからの出力信号とが入力される。ORゲート435には、リザベーションステーション223のキュー制御部223aからのキュー状態信号RS_C_FULLと、ANDゲート421,422,424からの各出力信号とが入力される。ANDゲート425には、ORゲート435からの出力信号と、デコーダ214からの選択信号IWR4_GroupC1_SELとが入力される。
ANDゲート425からの出力は、選択信号IWR4_GROUP_C_TO_Bとして、次の図24に示す、リザベーションステーション222をキューイング先とするか否かを判定する回路に出力される。この選択信号IWR4_GROUP_C_TO_Bは、デコーダ214からの演算実行命令のキューイング先候補をリザベーションステーション222に変更する場合に、オンになる。ANDゲート426には、ANDゲート425からの出力を反転した信号と、デコーダ214からの選択信号IWR4_GroupC1_SELとが入力される。ANDゲート426からの出力は、デコーダ214からの演算実行命令のキューイング先としてリザベーションステーション223を最終的に選択するかを示す選択信号IWR4_RS_C_SELとして、リザベーションステーション223に出力される。
ここで、デコーダ214によりキューイング先としてリザベーションステーション223が選択されていない場合、すなわち、選択信号IWR4_GroupC1_SELがオフの場合には、選択信号IWR4_RS_C_SEL,IWR4_GROUP_C_TO_Bもともにオフになる。また、デコーダ214によりキューイング先としてリザベーションステーション223が選択された場合、すなわち、選択信号IWR4_GroupC1_SELがオンである場合には、次のような動作が行われる。
まず、リザベーションステーション223の演算キューにおける空きエントリ数が4以上の場合、すなわち、キュー状態信号RS_C_FULL,RS_C_LE_1,RS_C_LE2,RS_C_LE_3がすべてオフの場合には、選択信号IWR4_RS_C_SELがオンになる。この場合、デコーダ214からの演算実行命令は、そのキューイング先が変更されることなく、リザベーションステーション223にキューイングされる。
次に、リザベーションステーション223の演算キューにおける空きエントリ数が0の場合、すなわち、キュー状態信号RS_C_FULLがオンの場合には、選択信号IWR4_GROUP_C_TO_Bがオンになる。この場合、デコーダ214からの演算実行命令のキューイング先候補が、リザベーションステーション222に変更される。
次に、リザベーションステーション223の演算キューにおける空きエントリ数が1の場合、すなわち、キュー状態信号RS_C_LE_1がオンであり、キュー状態信号RS_C_FULLがオフの場合には、優先度の高いデコーダ211〜213のいずれかによりリザベーションステーション223がキューイング先として選択されているか否かによって、次のような動作が行われる。
デコーダ211〜213がいずれもリザベーションステーション223をキューイング先として選択していない場合には、デコーダ214からの演算実行命令をリザベーションステーション223にキューイング可能である。この場合、選択信号IWR1_GroupC1_SEL,IWR2_GroupC1_SEL,IWR3_GroupC1_SELがいずれもオフになり、ANDゲート421〜424の各出力がいずれもオフになることから、選択信号IWR4_RS_C_SELがオンになる。従って、デコーダ214からの演算実行命令は、そのキューイング先が変更されることなく、リザベーションステーション223にキューイングされる。
また、デコーダ211〜213の少なくとも1つがリザベーションステーション223をキューイング先として選択している場合には、デコーダ211〜213からの演算実行命令がリザベーションステーション223に優先的にキューイングされる。この場合、選択信号IWR1_GroupC1_SEL,IWR2_GroupC1_SEL,IWR3_GroupC1_SELの少なくとも一方がオンになり、ANDゲート421の出力がオンになることから、選択信号IWR4_GROUP_C_TO_Bがオンになる。従って、デコーダ214からの演算実行命令のキューイング先候補が、リザベーションステーション222に変更される。
次に、リザベーションステーション223の演算キューにおける空きエントリ数が2の場合、すなわち、キュー状態信号RS_C_LE_2がオンであり、キュー状態信号RS_C_FULL,RS_C_LE_1がともにオフの場合には、優先度の高いデコーダ211〜213のうち2つ以上のデコーダによってリザベーションステーション223がキューイング先として選択されているか否かによって、次のような動作が行われる。
デコーダ211〜213のうち、キューイング先としてリザベーションステーション223を選択しているデコーダが2つ以上存在する場合には、デコーダ211〜213からの演算実行命令がリザベーションステーション223に優先的にキューイングされる。この場合、選択信号IWR1_GroupC1_SEL,IWR2_GroupC1_SEL,IWR3_GroupC1_SELのうち2つ以上がオンになり、ANDゲート422がオンになることから、選択信号IWR4_GROUP_C_TO_Bがオンになる。従って、デコーダ214からの演算実行命令のキューイング先候補が、リザベーションステーション222に変更される。
一方、デコーダ211〜213のうち、キューイング先としてリザベーションステーション223を選択しているデコーダが1つ以下である場合には、デコーダ214からの演算実行命令をリザベーションステーション223にキューイング可能である。この場合、選択信号IWR1_GroupC1_SEL,IWR2_GroupC1_SEL,IWR3_GroupC1_SELのうち1つのみがオンになり、ANDゲート421〜424の各出力がいずれもオフになることから、選択信号IWR4_RS_C_SELがオンになる。従って、デコーダ214からの演算実行命令は、そのキューイング先が変更されることなく、リザベーションステーション223にキューイングされる。
次に、リザベーションステーション223の演算キューにおける空きエントリ数が3の場合、すなわち、キュー状態信号RS_C_LE_3がオンであり、キュー状態信号RS_C_FULL,RS_C_LE_1,RS_C_LE_2がすべてオフの場合には、優先度の高いデコーダ211〜213のすべてがリザベーションステーション223をキューイング先として選択しているか否かによって、次のような動作が行われる。
デコーダ211〜213のすべてがキューイング先としてリザベーションステーション223を選択している場合には、デコーダ211〜213からの演算実行命令がリザベーションステーション223に優先的にキューイングされる。この場合、選択信号IWR1_GroupC1_SEL,IWR2_GroupC1_SEL,IWR3_GroupC1_SELのすべてがオンになり、ANDゲート423,424がともにオンになることから、選択信号IWR4_GROUP_C_TO_Bがオンになる。従って、デコーダ214からの演算実行命令のキューイング先候補が、リザベーションステーション222に変更される。
一方、デコーダ211〜213のうち、キューイング先としてリザベーションステーション223を選択しているデコーダが2つ以下である場合には、デコーダ214からの演算実行命令をリザベーションステーション223にキューイング可能である。この場合、選択信号IWR1_GroupC1_SEL,IWR2_GroupC1_SEL,IWR3_GroupC1_SELのうちの少なくとも1つはオフになり、ANDゲート421〜424の各出力がいずれもオフになることから、選択信号IWR4_RS_C_SELがオンになる。従って、デコーダ214からの演算実行命令は、そのキューイング先が変更されることなく、リザベーションステーション223にキューイングされる。
図24は、ディスパッチャの内部構成例を示す第2の図である。
この図24では、ディスパッチャ400が備える回路のうち、リザベーションステーション222を演算実行命令のキューイング先とするか否かを判定する回路を示す。リザベーションステーション222を演算実行命令のキューイング先とするか否かを判定する回路としては、判定回路402と、ORゲート451〜454とを含む。
判定回路402の回路構成および動作は、図23に示した判定回路401と同じである。そこで、図24では、判定回路402が備える論理回路を、図23の判定回路401と同じ符号を用いて示し、判定回路402における動作の説明を省略する。
ORゲート451には、デコーダ211からの選択信号IWR1_GroupB1_SELと、図23の判定回路401からの選択信号IWR1_GROUP_C_TO_Bとが入力される。ORゲート451からの出力は、判定回路402内のANDゲート411〜413,417,423、ORゲート432,434、ゲート回路441の第1ANDゲートおよび第2ANDゲートに入力される。
ORゲート452には、デコーダ212からの選択信号IWR2_GroupB1_SELと、図23の判定回路401からの選択信号IWR2_GROUP_C_TO_Bとが入力される。ORゲート452からの出力は、判定回路402内のANDゲート414,415,417,423、ORゲート432,434、ゲート回路441の第1ANDゲートおよび第3ANDゲートに入力される。
ORゲート453には、デコーダ213からの選択信号IWR3_GroupB1_SELと、図23の判定回路401からの選択信号IWR3_GROUP_C_TO_Bとが入力される。ORゲート453からの出力は、判定回路402内のANDゲート419,420,423、ORゲート434、ゲート回路441の第2ANDゲートおよび第3ANDゲートに入力される。
ORゲート454には、デコーダ214からの選択信号IWR4_GroupB1_SELと、図23の判定回路401からの選択信号IWR4_GROUP_C_TO_Bとが入力される。ORゲート454からの出力は、判定回路402内のANDゲート425,426に入力される。
判定回路402内のANDゲート411からの出力は、選択信号IWR1_GROUP_B_TO_Aとして、次の図25に示す、リザベーションステーション221をキューイング先とするか否かを判定する回路に出力される。判定回路402内のANDゲート412からの出力は、選択信号IWR1_RS_B_SELとしてリザベーションステーション222に出力される。
デコーダ211により演算実行命令のキューイング先としてリザベーションステーション222が選択されたとき、リザベーションステーション222の演算キューに空きエントリがある場合には、選択信号IWR1_RS_B_SELがオンになる。この場合、デコーダ211からの演算実行命令がリザベーションステーション222にキューイングされる。一方、リザベーションステーション222の演算キューに空きエントリがない場合には、選択信号IWR1_GROUP_B_TO_Aがオンになる。この場合、デコーダ211からの演算実行命令のキューイング先候補が、リザベーションステーション221に変更される。
判定回路402内のANDゲート414からの出力は、選択信号IWR2_GROUP_B_TO_Aとして、次の図25に示す、リザベーションステーション221をキューイング先とするか否かを判定する回路に出力される。判定回路402内のANDゲート415からの出力は、選択信号IWR2_RS_B_SELとしてリザベーションステーション222に出力される。
デコーダ212により演算実行命令のキューイング先としてリザベーションステーション222が選択されたとき、リザベーションステーション222の演算キューに、デコーダ212からの演算実行命令を格納可能な空きエントリがある場合には、選択信号IWR2_RS_B_SELがオンになる。この場合、デコーダ212からの演算実行命令がリザベーションステーション222にキューイングされる。一方、リザベーションステーション222の演算キューに、デコーダ212からの演算実行命令を格納可能な空きエントリがない場合には、選択信号IWR2_GROUP_B_TO_Aがオンになる。この場合、デコーダ212からの演算実行命令のキューイング先候補が、リザベーションステーション221に変更される。
判定回路402内のANDゲート419からの出力は、選択信号IWR3_GROUP_B_TO_Aとして、次の図25に示す、リザベーションステーション221をキューイング先とするか否かを判定する回路に出力される。判定回路402内のANDゲート420からの出力は、選択信号IWR3_RS_B_SELとしてリザベーションステーション222に出力される。
デコーダ213により演算実行命令のキューイング先としてリザベーションステーション222が選択されたとき、リザベーションステーション222の演算キューに、デコーダ213からの演算実行命令を格納可能な空きエントリがある場合には、選択信号IWR3_RS_B_SELがオンになる。この場合、デコーダ213からの演算実行命令がリザベーションステーション222にキューイングされる。一方、リザベーションステーション222の演算キューに、デコーダ213からの演算実行命令を格納可能な空きエントリがない場合には、選択信号IWR3_GROUP_B_TO_Aがオンになる。この場合、デコーダ213からの演算実行命令のキューイング先候補が、リザベーションステーション221に変更される。
判定回路402内のANDゲート425からの出力は、選択信号IWR4_GROUP_B_TO_Aとして、次の図25に示す、リザベーションステーション221をキューイング先とするか否かを判定する回路に出力される。判定回路402内のANDゲート426からの出力は、選択信号IWR4_RS_B_SELとしてリザベーションステーション222に出力される。
デコーダ214により演算実行命令のキューイング先としてリザベーションステーション222が選択されたとき、リザベーションステーション222の演算キューに、デコーダ214からの演算実行命令を格納可能な空きエントリがある場合には、選択信号IWR4_RS_B_SELがオンになる。この場合、デコーダ214からの演算実行命令がリザベーションステーション222にキューイングされる。一方、リザベーションステーション222の演算キューに、デコーダ214からの演算実行命令を格納可能な空きエントリがない場合には、選択信号IWR4_GROUP_B_TO_Aがオンになる。この場合、デコーダ214からの演算実行命令のキューイング先候補が、リザベーションステーション221に変更される。
図25は、ディスパッチャの内部構成例を示す第3の図である。
この図25では、ディスパッチャ400が備える回路のうち、リザベーションステーション221を演算実行命令のキューイング先とするか否かを判定する回路を示す。リザベーションステーション221を演算実行命令のキューイング先とするか否かを判定する回路としては、判定回路403と、ORゲート461〜464とを含む。
判定回路403の回路構成および動作は、図23に示した判定回路401と同じである。そこで、図25では、判定回路403が備える論理回路を、図23の判定回路401と同じ符号を用いて示し、判定回路403における動作の説明を省略する。
ORゲート461には、デコーダ211からの選択信号IWR1_GroupA1_SELと、図24の判定回路402からの選択信号IWR1_GROUP_B_TO_Aとが入力される。ORゲート461からの出力信号は、判定回路403内のANDゲート411〜413,417,423、ORゲート432,434、ゲート回路441の第1ANDゲートおよび第2ANDゲートに入力される。
ORゲート462には、デコーダ212からの選択信号IWR2_GroupA1_SELと、図24の判定回路402からの選択信号IWR2_GROUP_B_TO_Aとが入力される。ORゲート462からの出力信号は、判定回路403内のANDゲート414,415,417,423、ORゲート432,434、ゲート回路441の第1ANDゲートおよび第3ANDゲートに入力される。
ORゲート463には、デコーダ213からの選択信号IWR3_GroupA1_SELと、図24の判定回路402からの選択信号IWR3_GROUP_B_TO_Aとが入力される。ORゲート463からの出力信号は、判定回路403内のANDゲート419,420,423、ORゲート434、ゲート回路441の第2ANDゲートおよび第3ANDゲートに入力される。
ORゲート464には、デコーダ214からの選択信号IWR4_GroupA1_SELと、図24の判定回路402からの選択信号IWR4_GROUP_B_TO_Aとが入力される。ORゲート464からの出力信号は、判定回路403内のANDゲート425,426に入力される。
判定回路403内のANDゲート411からの出力は、出力制御信号IWR1_FULL_RETRYとして命令レジスタ201に出力される。判定回路403内のANDゲート412からの出力は、選択信号IWR1_RS_A_SELとしてリザベーションステーション221に出力される。
デコーダ211により演算実行命令のキューイング先としてリザベーションステーション221が選択されたとき、リザベーションステーション221の演算キューに空きエントリがある場合には、選択信号IWR1_RS_A_SELがオンになる。この場合、デコーダ211からの演算実行命令がリザベーションステーション221にキューイングされる。一方、リザベーションステーション221の演算キューに空きエントリがない場合には、出力制御信号IWR1_FULL_RETRYがオンになる。この場合、命令レジスタ201からの新たな演算実行命令の出力が停止される。
判定回路403内のANDゲート414からの出力は、出力制御信号IWR2_FULL_RETRYとして命令レジスタ202に出力される。判定回路403内のANDゲート415からの出力は、選択信号IWR2_RS_A_SELとしてリザベーションステーション221に出力される。
デコーダ212により演算実行命令のキューイング先としてリザベーションステーション221が選択されたとき、リザベーションステーション221の演算キューに、デコーダ212からの演算実行命令を格納可能な空きエントリがある場合には、選択信号IWR2_RS_A_SELがオンになる。この場合、デコーダ212からの演算実行命令がリザベーションステーション221にキューイングされる。一方、リザベーションステーション221の演算キューに、デコーダ212からの演算実行命令を格納可能な空きエントリがない場合には、出力制御信号IWR2_FULL_RETRYがオンになる。この場合、命令レジスタ202からの新たな演算実行命令の出力が停止される。
判定回路403内のANDゲート419からの出力は、出力制御信号IWR3_FULL_RETRYとして命令レジスタ203に出力される。判定回路403内のANDゲート420からの出力は、選択信号IWR3_RS_A_SELとしてリザベーションステーション221に出力される。
デコーダ213により演算実行命令のキューイング先としてリザベーションステーション221が選択されたとき、リザベーションステーション221の演算キューに、デコーダ213からの演算実行命令を格納可能な空きエントリがある場合には、選択信号IWR3_RS_A_SELがオンになる。この場合、デコーダ213からの演算実行命令がリザベーションステーション221にキューイングされる。一方、リザベーションステーション221の演算キューに、デコーダ213からの演算実行命令を格納可能な空きエントリがない場合には、出力制御信号IWR3_FULL_RETRYがオンになる。この場合、命令レジスタ203からの新たな演算実行命令の出力が停止される。
判定回路403内のANDゲート425からの出力は、出力制御信号IWR4_FULL_RETRYとして命令レジスタ204に出力される。判定回路403内のANDゲート426からの出力は、選択信号IWR4_RS_A_SELとしてリザベーションステーション221に出力される。
デコーダ214により演算実行命令のキューイング先としてリザベーションステーション221が選択されたとき、リザベーションステーション221の演算キューに、デコーダ214からの演算実行命令を格納可能な空きエントリがある場合には、選択信号IWR4_RS_A_SELがオンになる。この場合、デコーダ214からの演算実行命令がリザベーションステーション221にキューイングされる。一方、リザベーションステーション221の演算キューに、デコーダ214からの演算実行命令を格納可能な空きエントリがない場合には、出力制御信号IWR4_FULL_RETRYがオンになる。この場合、命令レジスタ204からの新たな演算実行命令の出力が停止される。
以上の図22〜図25に示した命令制御部200では、デコーダ211〜214に優先度を付与し、優先度の高いデコーダからの演算実行命令をリザベーションステーション内の演算キューの空きエントリに優先的にキューイングするようにした。これにより、複数のデコーダによって同時にデコードされた演算実行命令のキューイング先として、同じリザベーションステーションが選択された場合でも、キューイング動作をできるだけ停止させずに演算処理を実行させることができるようになる。従って、演算処理装置における演算の並列度を高め、処理効率を向上させることができる。
なお、以上説明した第5の実施の形態では、各デコーダによるキューイング先の選択処理として第2の実施の形態での処理を適用したが、例えば、第3の実施の形態あるいは第4の実施の形態でのキューイング先の選択処理を適用することも可能である。例えば、第3の実施の形態でのキューイング先の選択処理を適用する場合には、ディスパッチャ400は、デコーダ211から出力される選択信号のうち、選択信号IWR1_GroupB2_SEL,IWR1_GroupB2_Swap1,IWR1_GroupB2_Swap2のいずれかがオンになったときに、キューイング先としてリザベーションステーション222が選択されたと判定すればよい。同様に、第4の実施の形態でのキューイング先の選択処理を適用する場合には、ディスパッチャ400は、デコーダ211から出力される選択信号のうち、選択信号IWR1_GroupB3_SEL,IWR1_GroupB3_Swapのいずれかがオンになったときに、キューイング先としてリザベーションステーション222が選択されたと判定すればよい。
〔第6の実施の形態〕
上記の第2〜第5の実施の形態では、リザベーションステーションに演算実行命令をキューイングする前に、ソースオペランドの組合せパターンに応じて演算器の選択を行った。しかしながら、以下の第6の実施の形態のように、演算器の選択を、リザベーションステーションから演算実行命令を発行した後の段階で行ってもよい。
図26は、第6の実施の形態における命令制御部の構成例を示す図である。なお、図26では、図9に対応する構成要素については同じ符号を付して示す。
図26に示すリザベーションステーション224には、例えば、汎用演算器で実行可能な演算が指示された演算実行命令がキューイングされるものとする。デコーダ211a〜214aのそれぞれは、命令レジスタ201〜204から取得した演算実行命令をデコードして、指定された演算を実行可能な演算器に対応するリザベーションステーションに、演算実行命令をキューイングする。
ディスパッチャ470は、リザベーションステーション224から発行された演算実行命令におけるソースオペランドの組合せパターンに基づいて、指示された演算を実行させる汎用演算器を選択する。ディスパッチャ470は、例えば、図11、図15、図18のいずれかの処理手順に従って、汎用演算器を選択すればよい。また、例えば、ディスパッチャ470が図15または図18の処理手順に従って汎用演算器を選択する場合には、ディスパッチャ470の内部に、演算実行命令内のソースオペランドを転置する回路が設けられればよい。ただし、ソースオペランドを転置する必要がある演算実行命令(上記のパターン3に対応)を汎用演算器120,130ではなく汎用演算器110に実行させる場合には、ソースオペランドを転置する必要はなくなる。
以上の第6の実施の形態においても、レジスタファイル300から演算器への読み出しパスが増大することを抑制しつつ、演算器の設置数を多くすることができる、という効果を得ることができる。
以上の各実施の形態に関し、さらに以下の付記を開示する。
(付記1) 2つのオペランドのそれぞれとしてレジスタからの読み出しデータと即値のいずれかの入力を受けることが可能な第1の演算器と、
2つのオペランドのうち、一方のオペランドとしてレジスタからの読み出しデータと即値のいずれかの入力を受けることが可能であり、他方のオペランドとして即値のみが入力される第2の演算器と、
入力された演算実行命令に基づき、前記入力された演算実行命令に係る演算における2つのオペランドのそれぞれがレジスタからの読み出しデータと即値のいずれであるかを判定し、判定結果に応じて前記入力された演算実行命令に係る演算を前記第1の演算器と前記第2の演算器のいずれかに実行させる制御部と、
を有することを特徴とする演算処理装置。
(付記2) 2つのオペランドのそれぞれとして即値のみが入力される第3の演算器をさらに有し、
前記制御部は、前記入力された演算実行命令に係る演算における2つのオペランドがいずれも即値であると判定した場合に、前記入力された演算実行命令に係る演算を前記第3の演算器に実行させる、
ことを特徴とする付記1記載の演算処理装置。
(付記3) 前記第2の演算器は、オペランドの入力を受ける入力ポートとして、前記入力された演算実行命令の第1のソースオペランドに対応する第1の入力ポートと、前記入力された演算実行命令の第2のソースオペランドに対応する第2の入力ポートとを備え、
前記制御部は、前記入力された演算実行命令の第2のソースオペランドにレジスタが指定され、前記入力された演算実行命令の第1のソースオペランドにレジスタまたは即値のいずれかが指定されていた場合、前記入力された演算実行命令に係る演算を前記第2の演算器に実行させる、
ことを特徴とする付記1または2記載の演算処理装置。
(付記4) 前記制御部は、前記入力された演算実行命令に係る演算が可換演算であり、前記入力された演算実行命令の第1のソースオペランドに即値が指定され、前記入力された演算実行命令の第2のソースオペランドにレジスタが指定されていた場合、前記入力された演算実行命令の第1のソースオペランドと第2のソースオペランドとを入れ替え、入れ替え後の演算実行命令に係る演算を前記第2の演算器に実行させることを特徴とする付記3記載の演算処理装置。
(付記5) 前記制御部は、前記入力された演算実行命令に係る演算が非可換演算であり、前記入力された演算実行命令の第1のソースオペランドに即値が指定され、前記入力された演算実行命令の第2のソースオペランドにレジスタが指定されていた場合、前記入力された演算実行命令に係る演算を前記第2の演算器に実行させるとともに、前記第2の演算器に対して入力される2つのオペランドを入れ替えて演算を行うように制御することを特徴とする付記3または4記載の演算処理装置。
(付記6) 前記第1の演算器および前記第2の演算器にそれぞれ対応付けて設けられ、演算実行命令を自身が備える演算キューに一時的に保持し、演算キュー内の演算実行命令を発行準備が整った演算実行命令から順に自身に対応する演算器に発行するリザベーションステーションを備え、
前記制御部は、前記入力された演算実行命令に係る演算が非可換演算であり、前記入力された演算実行命令の第1のソースオペランドに即値が指定され、前記入力された演算実行命令の第2のソースオペランドにレジスタが指定されていた場合、前記入力された演算実行命令を前記第2の演算器に対応するリザベーションステーションの演算キューに登録するとともに、登録した演算実行命令にソースオペランドを入れ替えるように指示する指示情報を付加し、
前記第2の演算器に対応するリザベーションステーションは、前記指示情報が付加された演算実行命令を前記第2の演算器に発行する際、前記第2の演算器に対して入力される2つのオペランドを入れ替えるように指示する、
ことを特徴とする付記5記載の演算処理装置。
(付記7) 前記制御部は、前記入力された演算実行命令に係る演算における2つのオペランドの両方がレジスタからの読み出しデータであると判定した場合、前記入力された演算実行命令に係る演算を前記第1の演算器に実行させ、前記入力された演算実行命令に係る演算における2つのオペランドのうち少なくとも一方が即値であると判定した場合、前記入力された演算実行命令に係る演算を前記第1の演算器または前記第2の演算器のいずれかに実行させることを特徴とする付記1または2記載の演算処理装置。
(付記8) 前記制御部は、前記入力された演算実行命令のソースオペランドにおいて定数を出力するレジスタが指定された場合、当該ソースオペランドに即値が指定されたものと見なして、前記入力された演算実行命令に係る演算を実行させる演算器を選択することを特徴とする付記3〜7のいずれか1つに記載の演算処理装置。
(付記9) 少なくとも前記第2の演算器が複数設けられ、前記第1の演算器の数より前記第2の演算器の数の方が多いことを特徴とする付記1〜8のいずれか1つに記載の演算処理装置。
(付記10) 前記第1の演算器および前記第2の演算器にそれぞれ対応付けて設けられ、演算実行命令を自身が備える演算キューに一時的に保持し、演算キュー内の演算実行命令を発行準備が整った演算実行命令から順に自身に対応する演算器に発行するリザベーションステーションを備え、
前記制御部は、前記入力された演算実行命令に係る演算における2つのオペランドのうち少なくとも一方が即値であると判定したとき、前記第2の演算器に対応するリザベーションステーションの演算キューに空きエントリがある場合には、当該演算キューに対して前記入力された演算実行命令を登録し、前記第2の演算器に対応するリザベーションステーションの演算キューに空きエントリがない場合には、前記入力された演算実行命令を前記第1の演算器に対応するリザベーションステーションの演算キューに登録する、
ことを特徴とする付記1または2記載の演算処理装置。
(付記11) 前記制御部は、並列に入力されたそれぞれの演算実行命令に係る演算を前記第1の演算器と前記第2の演算器のいずれに実行させるかを判定する複数の判定部を備え、
前記各判定部には優先度が付与され、
前記制御部は、前記複数の判定部のうち2以上の判定部が、入力された演算実行命令に係る演算を前記第2の演算器に実行させると同時に判定した場合、前記第2の演算器に対応するリザベーションステーションの演算キューにおける空きエントリに対して、優先度の高い判定部からの演算実行命令を優先的に登録する、
ことを特徴とする付記10記載の演算処理装置。
(付記12) 前記制御部は、前記複数の判定部のうち2以上の判定部が、入力された演算実行命令に係る演算を前記第2の演算器に実行させると同時に判定した場合、前記第2の演算器に対応するリザベーションステーションの演算キューにおける空きエントリに対して、優先度の高い判定部からの演算実行命令を優先的に登録した結果、前記第2の演算器に対応するリザベーションステーションの演算キューに演算実行命令を登録できない判定部が発生した場合には、当該判定部からの演算実行命令を前記第1の演算器に対応するリザベーションステーションの演算キューにおける空きエントリに登録することを特徴とする付記11記載の演算処理装置。
(付記13) 制御部が、入力された演算実行命令に基づき、前記入力された演算実行命令に係る演算における2つのオペランドのそれぞれがレジスタからの読み出しデータと即値のいずれであるかを判定し、
前記制御部が、判定結果に応じて、前記入力された演算実行命令に係る演算を、2つのオペランドのそれぞれとしてレジスタからの読み出しデータと即値のいずれかの入力を受けることが可能な第1の演算器と、2つのオペランドのうち、一方のオペランドとしてレジスタからの読み出しデータと即値のいずれかの入力を受けることが可能であり、他方のオペランドとして即値のみが入力される第2の演算器のいずれかに実行させる、
ことを特徴とする演算処理方法。