次に、本発明の実施の形態について説明する。なお、以下において、複数のデータを格納可能なレジスタの一例として、ベクトルレジスタを用いて説明する。しかし、本発明は、ベクトルレジスタに限定されるものではなく、あるレジスタに、データを格納するための格納領域(エントリ)が複数設けられているものについて本発明を適用可能である。
(第1の実施形態)
図1を参照し、本発明の第1の実施形態について説明する。
図1を参照すると、本発明の第1の実施形態における情報処理装置13は、ベクトルレジスタ1、WDレジスタ2、RDレジスタ3、WPレジスタ4、RPレジスタ5、マスク部6、レジスタ管理部7、拡張ビット部8、ポインタ合成部9、WEレジスタ10、WE制御部11及びレジスタ制御部12を有する。
ベクトルレジスタ1は、プログラムからは論理ベクトルレジスタとしてアクセスされる。ベクトルレジスタ1には、論理ベクトルレジスタ番号が付与される。論理ベクトルレジスタ番号とは、プログラムによりベクトルレジスタ1にアクセスする際の識別子(例えば変数)である。プログラムからは、ベクトルレジスタ1に対して論理ベクトルレジスタ番号に基づいてアクセスされる。
また、ベクトルレジスタ1は、物理ベクトルレジスタにより構成される。物理ベクトルレジスタとは、演算の対象となるデータの物理的な格納場所である。
ベクトルレジスタ1は、演算に用いるデータを格納するためのエントリを有する。物理ベクトルレジスタも、演算に用いるデータを格納するためのエントリを有する。
論理ベクトルレジスタと物理ベクトルレジスタは、レジスタ・リネーミングにより関連付けられる。論理ベクトルレジスタ及び物理ベクトルレジスタのそれぞれのエントリは、ポインタを用いてその位置が指定される。本発明は、レジスタ・リネーミングにおいて、論理ベクトルレジスタと物理ベクトルレジスタとを、エントリ毎に関連付ける。物理ベクトルレジスタのエントリ毎に対応付けられた拡張ビットを設け、ポインタ合成部9が当該拡張ビットと物理ベクトルレジスタのエントリの位置を指定するためのポインタとを合成し、論理ベクトルレジスタのエントリを指定するためのポインタを作成する。つまり、物理ベクトルレジスタのエントリ毎に、 論理ベクトルレジスタのエントリと対応するポインタが作成される。これにより、演算実行時に、データを書込む論理ベクトルレジスタのエントリを、物理ベクトルレジスタのエントリ毎に関連付けることが可能となる。
次に、図1に示す各構成について、それぞれ説明する。
ベクトルレジスタ1は、演算の対象となる一連の順序付けられたベクトルデータを格納する。ベクトルレジスタ1は、複数のエントリを有し、ベクトルデータはエントリ毎に格納される。なお、ベクトルデータは、複数のワード(以下、要素という)で構成される。ワードとは、1つのデータの単位である。よって、ベクトルレジスタ1の各エントリには、ベクトルデータの要素が格納されることになる。命令で指定された数の要素が、ポインタで指定されたベクトルレジスタ1のエントリから1マシンサイクルに1要素ずつ読み出される。また、演算結果のベクトルデータが、ポインタで指定されたベクトルレジスタ1のエントリに順に格納される。ベクトルレジスタ1は、所定の要素数からなる論理ベクトルレジスタで構成される。つまり、論理ベクトルレジスタは、所定の要素数の単位でアクセスされる。論理ベクトルレジスタには、論理ベクトルレジスタ番号が与えられ、ベクトルレジスタ1はプログラムから論理ベクトルレジスタ番号によりアクセスされる。つまり、ベクトルレジスタ1は、プログラムから所定の要素数の単位でアクセスされる仮想的なレジスタである。論理ベクトルレジスタは、ベクトルレジスタ1のエントリのうちの所定の要素数の分のエントリにより構成される。また、ベクトルレジスタ1は、所定の数の物理ベクトルレジスタにより構成される。よって、プログラムによりベクトルレジスタ1のエントリに読み書きされた要素は、物理的に、対応する物理ベクトルレジスタのエントリに読み書きされる。つまり、論理ベクトルレジスタのエントリと物理ベクトルレジスタのエントリは1対1に対応している。物理ベクトルレジスタには、物理ベクトルレジスタ番号が付与され、物理ベクトルレジスタは当該番号により指定される。
WDレジスタ2は、ベクトルレジスタ1に書込むベクトルデータの要素を一時的に格納する。なお、WDは、“ライトデータ”と読む。
RDレジスタ3は、ベクトルレジスタ1から読み出されたベクトルデータの要素を一時的に格納する。なお、RDは、“リードデータ”と読む。
WPレジスタ4は、物理ベクトルレジスタの各エントリとそれぞれ対応するWPを格納する。WPレジスタ4は、ベクトルレジスタ1への書き込みに同期してWPの値に1を加算する。WPレジスタ4は、パス40を介して、WPを拡張ビット部8とポインタ合成部9に通知する。なお、WPは、“ライトポインタ”と読む。
RPレジスタ5は、物理ベクトルレジスタの各エントリとそれぞれ対応するRPを格納する。RPレジスタ5は、ベクトルレジスタ1からの読み出しに同期してRPの値に1を加算する。RPレジスタ5は、パス50を介して、RPを拡張ビット部8とポインタ合成部9に通知する。なお、RPは、“リードポインタ”と読む。
マスク部6は、論理ベクトルレジスタの要素数と同じ数のビット数で構成される。このことは、つまり、物理ベクトルレジスタの要素数と同じ数のビット数で構成されるということも意味する。マスク部6は、それぞれのビットが、要素が格納されている論理ベクトルレジスタの各エントリのそれぞれに対応するマスクレジスタを有する。マスクレジスタのそれぞれのビットは、要素が格納されている物理ベクトルレジスタの各エントリのそれぞれにも対応する。マスク部6は、マスクレジスタの設定により、マスク付き演算が実行される際に命令で指定された論理ベクトルレジスタに演算結果を書込むか否かを、要素が格納されているエントリ毎に指定する。マスク部6は、書き込みを行うエントリに格納されている要素(以下、有効要素という)に対応するマスクレジスタのビットに“1”を設定する。また、マスク部6は、書き込みを行わないエントリに格納されている要素(以下、無効要素という)に対応するマスクレジスタのビットに“0”を設定する。マスク部6は、拡張ビット部8とWE制御部11に対して、パス60を介して、書き込みを行うエントリに対応するマスクレジスタの内容1ビットと、そのマスクレジスタの値を使用するか否かをマスク情報として通知する。
レジスタ管理部7は、レジスタ・リネーミングを行う際に、論理ベクトルレジスタと物理ベクトルレジスタとの対応関係を制御する。レジスタ管理部7は、書き込みが実行される物理ベクトルレジスタ番号をライト物理ベクトルレジスタ番号とし、読込みが実行される物理ベクトルレジスタ番号をリード物理ベクトルレジスタ番号として、それぞれ管理する。レジスタ管理部7は、ライト物理ベクトルレジスタ番号を、パス70を介して拡張ビット部8に通知する。レジスタ管理部7は、リード物理ベクトルレジスタ番号を、パス71を介して拡張ビット部8に通知する。ライト物理ベクトルレジスタ番号及びリード物理ベクトルレジスタ番号は、2進数で送信される。また、レジスタ管理部7は、ベクトルレジスタ1のエントリ毎に、エントリ内のベクトルデータの要素が使用中であるか否かを示すフラグを有する。このことは、同時に、レジスタ管理部7は、論理ベクトルレジスタのエントリ毎に、エントリ内のベクトルデータの要素が使用中であるか否かを管理することを意味する。使用中とは、当該要素を他の要素に上書きすることができない状態をいう。フラグは、例えば1ビットの値とし、エントリ内の要素が使用中であれば“1”、そうでなければ“0”を示すというように構成すればよい。レジスタ管理部7は、全エントリ分のフラグを、パス72を介してポインタ合成部9に送信する。なお、レジスタ管理部7は、フラグの内容が更新される度に、全エントリ分のフラグをパス72を介してポインタ合成部9に送信する。レジスタ管理部7は、レジスタ・リネーミング後の論理ベクトルレジスタと物理ベクトルレジスタとのエントリ毎の対応関係を管理する。つまり、レジスタ管理部7は、論理ベクトルレジスタの要素数の単位で、物理ベクトルレジスタとのエントリ毎の対応関係を管理する。
拡張ビット部8は、WPとRPを、それぞれパス40、パス50経由で受信する。拡張ビット部8は、マスク部6からパス60を経由してマスク情報を受信する。拡張ビット部8は、レジスタ管理部7からライト物理ベクトルレジスタ番号、リード物理ベクトルレジスタ番号を、それぞれパス70、パス71から受信する。拡張ビット部8は、物理ベクトルレジスタの各エントリと1対1に対応する拡張ビットを生成する。拡張ビット部8は、WPで指定されるエントリに対応した拡張ビットを生成し、ライト拡張ビット(以下 WEX)としてパス80を介してポインタ合成部9に通知する。拡張ビット部8は、RPで指定されるエントリに対応した拡張ビットを生成し、リード拡張ビット(以下 REX)としてパス81を介してポインタ合成部9に通知する。なお、拡張ビット部8は、拡張ビットを、対応するエントリ毎に格納する拡張ビットレジスタを備える。拡張ビット部8は、物理ベクトルレジスタのそれぞれに対応した拡張ビットレジスタを備える。
ポインタ合成部9は、WP、RPを、それぞれパス40、パス50経由で受信する。拡張ビット部8から、WEX、REXを、それぞれパス80、パス81経由で受信する。ポインタ合成部9は、WPとWEXから、ベクトルレジスタ1に対してベクトルデータを書込むエントリを指定するための、ライト拡張ポインタを生成する。また、ポインタ合成部9は、RPとREXから、ベクトルレジスタ1に対してベクトルデータを読み出すエントリを指定するための、リード拡張ポインタを生成する。ポインタ合成部9は、ライト拡張ポインタ、リード拡張ポインタを、それぞれパス90、パス91を経由してベクトルレジスタ1に送信する。ポインタ合成部9は、パス72を介してレジスタ管理部7からエントリの使用可否を示すフラグを受信する。ポインタ合成部9は、WEXから生成したライト拡張ポインタに対応するベクトルレジスタ1のエントリの使用可否を、レジスタ管理部7から受信したフラグを用いて判断する。ポインタ合成部9は、ライト拡張ポインタに対応するエントリが使用不可の場合、パス80を介して受信したWEXの値を変更し、新たなライト拡張ポインタを生成する。ポインタ合成部9は、生成した新たなライト拡張ポインタを、パス94を介して拡張ビット部8へ送信する。
WEレジスタ10は、ベクトルレジスタ1に対して、書き込みの動作タイミングを指示する。WEレジスタ10には、WDレジスタ2に有効な書き込みデータが存在する場合には“1”、存在しない場合には“0”が格納される。WEレジスタ10は、自己に格納されている値を、WE制御部11に通知する。なお、WEは“ライトイネーブル”と読む。
WE制御部11は、WEレジスタ10の値と、マスク部6からパス60を介してマスク情報を受信する。マスク情報によりマスクレジスタの値を使用することが通知された場合、WE制御部11は、マスクビットとWEレジスタ10の値の論理積を計算し、WE信号としてベクトルレジスタ1へ送信する。また、マスク情報によりマスクレジスタの値を使用しないことが通知された場合、WEレジスタ10の値をそのままWE信号としてベクトルレジスタ1に送信する。ベクトルレジスタ1では、WE信号が“1”のときに書き込みが実行され、“0”のときには書き込みは実行されない。
レジスタ制御部12は、命令発行をトリガとし、WPレジスタ4とRPレジスタ5の動作タイミング、拡張ビット部8における拡張ビットレジスタの動作タイミング、WEレジスタ10の動作タイミングを制御する。
以下において、ベクトルレジスタ1は、要素数4の1つの論理ベクトルレジスタ(論理ベクトルレジスタ0番)からなり、物理ベクトルレジスタ2個(物理ベクトルレジスタ0番及び1番)からなる構成により、本発明の第1の実施形態についてより詳細に説明する。なお、各物理ベクトルレジスタの要素数も4であるものとする。
まず、論理ベクトルレジスタの各エントリと、物理ベクトルレジスタのエントリとの関連付けについて説明する。
図2に、物理ベクトルレジスタの各エントリと、論理ベクトルレジスタの各エントリとの関連付けの対応表を示す。図2を用いて、物理ベクトルレジスタ0番についての関連付けについて説明する。なお、図2において、WPレジスタ4の値を用いて関連付けについて説明するが、RPレジスタ5の値を用いて関連付けを行うことも可能である。
関連付けのために、物理ベクトルレジスタ0番に対応する拡張ビットレジスタ(以下、物理0拡張ビットレジスタ)に格納されている拡張ビットを用いる。
物理ベクトルレジスタ0番のエントリ00(2進数の“00”で、エントリの番号を表現)は、WPレジスタ4の値“00”(2進数)と、WPレジスタ4の値“00”に対応する物理0拡張ビットレジスタの値を用いて、論理ベクトルレジスタのエントリと関連付けられる。物理0拡張ビットレジスタの値が“0”の場合、当該値とWPレジスタ4の値“00”を合成して生成されるライト拡張ポインタは“000”(2進数)となり、ベクトルレジスタ1のエントリe0(即ち、論理ベクトルレジスタのエントリ0)と関連付けられる。物理0拡張ビットレジスタの値が“1”のとき、物理ベクトルレジスタ0番は、ライト拡張ポインタは“100”となり、ベクトルレジスタ1のエントリe4(即ち、論理ベクトルレジスタのエントリ0)と関連付けられる。物理ベクトルレジスタ1番についても、物理1拡張ビットレジスタの値を用いて同様に関連付けが実行される。このように、図2に示した対応表に基づいて、関連付けが実行される。ただし、図2は一例であり、図2に示した対応表による関連付けに限定されるものではない。
図3を用いて、関連付けについて具体的に説明する。
ベクトルレジスタ1は、エントリe0〜e7を有する。ベクトルレジスタ1は、上述したように、要素数4の論理ベクトルレジスタにより構成される。つまり、命令実行時に、ベクトルレジスタ1の8つのエントリ(e0〜e7)のうちの4つのエントリが論理ベクトルレジスタを構成する。また、物理ベクトルレジスタ0番及び1番は、それぞれ、エントリfe0〜fe3を有する。ベクトルレジスタ1のe0〜e7の内容が、A,B、C,D、E,K、初期値(−)、Hとする。物理0拡張ビットレジスタの内容が、0101である場合、WPレジスタ4の対応する値と物理0拡張ビットレジスタのそれぞれの値を合成し、物理ベクトルレジスタ0番のエントリfe0〜fe3は、それぞれ、e0、e5、e2、e7と関連付けられる。図3では、fe0(e0)、fe1(e5)、fe2(e2)、fe3(e7)と表す。物理ベクトルレジスタ0番の内容は、A、K、C、Hとなる。これにより、論理ベクトルレジスタの4つのエントリはそれぞれ、ベクトルレジスタ1のe0、e5、e2、e7と関連付けられる。
物理1拡張ビットレジスタの内容が、1001である場合、WPレジスタ4の対応する値と物理1拡張ビットレジスタのそれぞれの値を合成し、物理ベクトルレジスタ1番のエントリfe0〜fe3は、それぞれ、e4、e1、e2、e7と関連付けられる。図3では、fe0(e4)、fe1(e1)、fe2(e2)、fe3(e7)と表す。物理ベクトルレジスタ1番の内容は、E、B、C、Hとなる。これにより、論理ベクトルレジスタの4つのエントリはそれぞれ、ベクトルレジスタ1のe4、e1、e2、e7と関連付けられる。
以上のように、物理ベクトルレジスタの各エントリと、論理ベクトルレジスタの各エントリが、エントリ毎に関連付けられる。
次に、図4及び図5を用いて、拡張ビット部8について詳細に説明する。
拡張ビット部8は、物理ベクトルレジスタ0番、物理ベクトルレジスタ1番にそれぞれ対応する物理0拡張ビットレジスタ82、物理1拡張ビットレジスタ83を有する。また、拡張ビット部8は、更新部84、リードセレクタ85、拡張ビットレジスタ制御部86を有する。
物理0拡張ビットレジスタ82は、物理ベクトルレジスタ0番の各エントリのそれぞれに対応した1ビットの値を格納する。物理0拡張ビットレジスタ82が格納する値は、WP、RPそれぞれの値のビット数を1ビット拡張するために用いられる。
物理1拡張ビットレジスタ83は、物理ベクトルレジスタ1番の各エントリのそれぞれに対応した1ビットの値を格納する。物理1拡張ビットレジスタ83が格納する値は、WP、RPそれぞれの値のビット数を1ビット拡張するために用いられる。
物理0拡張ビットレジスタ82、物理1拡張ビットレジスタ83と更新部84は、それぞれパス820、パス830を介して接続される。
物理0拡張ビットレジスタ82、物理1拡張ビットレジスタ83とリードセレクタ85は、それぞれパス821、パス831を介して接続される。
更新部84は、パス820を介して物理0拡張ビットレジスタ82から1ビットの値を受信する。また、更新部84は、パス830を介して物理1拡張ビットレジスタ83から1ビットの値を受信する。更新部84は、パス70を介してライト物理ベクトルレジスタ番号を受信し、パス60経由でマスク情報を受信する。更新部84は、物理0拡張ビットレジスタ82若しくは物理1拡張ビットレジスタ83の内容を更新するための新たな値、及び、WEXを生成する。更新部84は、パス844を介して物理0拡張ビットレジスタの内容を更新する。また、更新部84は、パス845を介して物理1拡張ビットレジスタの内容を更新する。
リードセレクタ85は、パス821を介して物理0拡張ビットレジスタ82から1ビットの値を受信する。リードセレクタ85は、パス831を介して物理1拡張ビットレジスタ83から1ビットの値を受信する。また、リードセレクタ85は、パス71を介してリード物理ベクトルレジスタ番号を受信する。リードセレクタ85は、物理0拡張ビットレジスタ82、物理1拡張ビットレジスタ83からそれぞれ受信した1ビットの値のいずれかを、リード物理ベクトルレジスタ番号に基づいて選択する。リード物理ベクトルレジスタ番号が物理ベクトルレジスタ0番を指定している場合、リードセレクタ85は、パス821を選択し、物理0拡張ビットレジスタから受信した値を選択する。リード物理ベクトルレジスタが物理ベクトルレジスタ1番を指定している場合、リードセレクタ85は、パス831を選択し、物理1拡張ビットレジスタから受信した値を選択する。
拡張ビットレジスタ制御部86は、レジスタ制御部12からの指示により、物理0拡張ビットレジスタ82、物理1拡張ビットレジスタ83を制御する。つまり、拡張ビットレジスタ制御部86は、物理0拡張ビットレジスタ82、物理1拡張ビットレジスタ83の動作タイミングを制御する。
物理0拡張ビットレジスタ82は、物理ベクトルレジスタ0番のエントリ数、つまり物理ベクトルレジスタ0番に格納される要素数の分の1ビットの値を保持する。物理0拡張ビットレジスタ82が保持する値のそれぞれは、物理ベクトルレジスタ0番の各エントリと1対1に対応する。WP、RPにより、物理ベクトルレジスタ0番のエントリに対応する物理0拡張ビットレジスタ82の値が読み出される。これは、WP、RPが物理ベクトルレジスタの各エントリと1対1に対応しているからである。
WPによって読み出された値は、パス820を介して更新部84へ送信される。RPによって読み出された値は、パス821を介してリードセレクタ85へ送信される。
物理0拡張ビットレジスタ82は、パス844を介して、更新部84からの指示により対応する物理0拡張ビットレジスタ82のエントリの内容を更新する。
物理0拡張ビットレジスタ82に格納されている値は、ポインタ合成部9で生成されるリード拡張ポインタ又はライト拡張ポインタ(いずれも2進数)の最上位ビットとなる。
物理1拡張ビットレジスタ83は、物理ベクトルレジスタ1番のエントリ数、つまり物理ベクトルレジスタ1番に格納される要素数の分の1ビットの値を保持する。物理1拡張ビットレジスタ83が保持する値のそれぞれは、物理ベクトルレジスタ1番の各エントリと1対1に対応する。WP、RPにより、物理ベクトルレジスタ1番のエントリに対応する物理1拡張ビットレジスタ83の値が読み出される。これは、WP、RPが物理ベクトルレジスタの各エントリと1対1に対応しているからである。
WPによって読み出された値は、パス830を介して更新部84へ送信される。RPによって読み出された値は、パス831を介してリードセレクタ85へ送信される。
物理1拡張ビットレジスタ83は、パス845を介して、更新部84からの指示により対応する物理1拡張ビットレジスタ83のエントリの内容を更新する。
物理1拡張ビットレジスタ83に格納されている値は、ポインタ合成部9で生成されるリード拡張ポインタ又はライト拡張ポインタ(いずれも2進数)の最上位ビットとなる。
図5を参照すると、更新部84は、ライトセレクタ840、マスク識別回路841、演算回路842及び更新判定回路843を有する。
ライトセレクタ840は、パス70を介して受信するライト物理ベクトルレジスタ番号により、パス820若しくはパス830のいずれかを選択する。ライトセレクタ840は、選択したパスから受信した1ビットの値を演算回路842に送信する。
マスク識別回路841は、パス60を介してマスク情報を受信する。マスク付き命令の実行時、即ち、マスク情報がマスクレジスタの値を使用することを指定している場合には、物理ベクトルレジスタのエントリに対応するマスクレジスタに格納されている値を、演算回路842に対して出力する。通常命令の実行時、即ち、マスク情報がマスクレジスタの値を使用しないことを指定している場合には、常に1ビットの“1”を、演算回路842に対して出力する。
演算回路842は、ライトセレクタ840から受信した値とマスク識別回路841から受信した値の排他的論理和(以下 XORという)をとり、WEXを生成する。演算回路842は、生成したWEXを、パス80を介してポインタ合成部9へ送信する。また、演算回路842は、生成したWEXを、更新判定回路843にも送信する。XOR演算を実行するだけなので、演算回路の構成を単純化でき、従来技術と比較してHW量の増大を抑えつつ、マスク付き演算の実行時でもレジスタ・リネーミングを実現することができる。
更新判定回路843は、パス70を介して受信したライト物理ベクトルレジスタ番号により、パス844若しくはパス845のいずれかを選択する。更新判定回路843は、ライト物理ベクトルレジスタ番号が0のとき、パス844を選択し、ライト物理ベクトルレジスタ番号が1のとき、パス845を選択する。更新判定回路843は、選択したパスを介して、演算回路842から受信したWEX及び更新指示を、物理拡張ビットレジスタに対して送信する。
ライトセレクタ840は、ライト物理ベクトルレジスタ番号が0のとき、パス830を介して送信された物理1拡張ビットレジスタ83の値を選択し、演算回路842へ出力する。また、ライトセレクタ840は、ライト物理ベクトルレジスタ番号が1のとき、パス820を介して送信された物理0拡張ビットレジスタ82の値を選択し、演算回路842へ出力する。
次に、図6を用いて、ポインタ合成部9について詳細に説明する。
ポインタ合成部9は、WP合成回路92及びRP合成回路93を有する。
WP合成回路92は、パス40を介してWPレジスタ4からWPを受信する。また、WP合成回路92は、パス80を介して演算回路842からWEXを受信する。WP合成回路92は、それぞれのパスから受信した値を合成し、ライト拡張ポインタを生成する。WP合成回路92は、合成において、WEXがライト拡張ポインタの最上位ビットとなるように、WEXとWPを合成する。WEXは1ビット、WPは2ビットであるので、ライト拡張ポインタは3ビットとなる。図2の表に示したように、WEXが“0”のとき、ライト拡張ポインタは、ベクトルレジスタ1のエントリe0〜e3(以下 前半という)と関連付けられる。また、WEXが“1”のとき、ライト拡張ポインタは、ベクトルレジスタ1のエントリe4〜e7(以下 後半という)と関連付けられる。ライト拡張ポインタは、ベクトルレジスタ1のエントリ(即ち、論理ベクトルレジスタのエントリと対応するベクトルレジスタ1のエントリ)を決定する情報として、パス90を介してベクトルレジスタ1へ通知される。
RP合成回路93は、パス50を介してRPレジスタ5からRPを受信する。また、RP合成回路93は、パス81を介してリードセレクタ85からREXを受信する。RP合成回路93は、それぞれのパスから受信した値を合成し、リード拡張ポインタを生成する。RP合成回路93は、合成において、REXがリード拡張ポインタの最上位ビットとなるように、REXとRPを合成する。REXは1ビット、RPは2ビットであるので、リード拡張ポインタは3ビットとなる。REXが“0”のとき、リード拡張ポインタは、ベクトルレジスタ1のエントリe0〜e3(以下 前半という)と関連付けられる。また、REXが“1”のとき、リード拡張ポインタは、ベクトルレジスタ1のエントリe4〜e7(以下 後半という)と関連付けられる。リード拡張ポインタは、ベクトルレジスタ1のエントリ(即ち、論理ベクトルレジスタのエントリと対応するベクトルレジスタ1のエントリ)を決定する情報として、パス91を介してベクトルレジスタ1へ通知される。
WP合成回路92は、パス72を介して、レジスタ管理部7から、ベクトルレジスタ1のエントリ内のベクトルデータの要素が使用中であるか否かを示すフラグを受信する。WP合成回路92は、生成したライト拡張ポインタにより指定されるベクトルレジスタ1のエントリと対応するフラグの内容を確認する。フラグにより要素が使用中でないことが確認できた場合、WP合成回路92は、生成したライト拡張ポインタを、パス90を介してベクトルレジスタ1へ通知する。
フラグにより要素が使用中であることが確認された場合、WP合成回路92は、パス80を介して受信したWEXの値を変更する。例えば、WP合成回路92は、受信したWEXの値に1を加算(インクリメント)し、若しくは、受信したWEXの値から1を減算する(デクリメント)ことにより、受信したWEXの値を変更する。その上で、再度ライト拡張ポインタを生成し、当該ライト拡張ポインタにより指定されるベクトルレジスタ1のエントリと対応するフラグの内容を再確認する。フラグにより要素が使用中でないことが確認できた場合、WP合成回路92は、再生成されたライト拡張ポインタを、パス90を介してベクトルレジスタ1に通知する。それと共に、WP合成回路92は、パス94を介して、更新判定回路843に対して変更後のWEXの値を通知する。更新判定回路843は、当該通知を受けて、対応する物理拡張ビットレジスタのエントリの値を変更する。
再生成したライト拡張ポインタに対応するフラグの内容を再確認しても当該フラグに対応する要素が使用中であった場合、WP合成回路92は、パス80を介して受信した最初のWEXにより生成したライト拡張ポインタに対応するエントリの要素が使用可能となるまで待機する。つまり、パス80を介して受信したWEXの値を、予め定めた一定の回数だけ変更しても、使用可能な要素が無い場合は、パス80を介して受信した最初のWEXにより生成したライト拡張ポインタに対応するエントリの要素が使用可能となるまで待機するということである。また、変更によりWEXの値が上限値若しくは下限値に到達した場合は、パス80を介して受信した最初のWEXにより生成したライト拡張ポインタに対応するエントリの要素が使用可能となるまで待機するようにしてもよい。
ベクトルレジスタ1のエントリ毎に、使用中か否かを確認することで、マスク付き演算の実行時においてレジスタ・リネーミングを実行した場合でも、レジスタ内容の不正な上書きを防ぎ、データ化けを回避できるという効果が得られる。
次に、ベクトルレジスタ1が要素数4の1つの論理ベクトルレジスタ(論理ベクトルレジスタ0番)からなり、物理ベクトルレジスタ2個(物理ベクトルレジスタ0番及び1番)からなる構成において、レジスタ・リネーミングにより論理ベクトルレジスタと物理ベクトルレジスタをエントリ毎に関連付ける方式について、詳細に説明する。ベクトルレジスタ1は、プログラムからは要素数が4(エントリ数が4)の1つの論理ベクトルレジスタとしてアクセスされる。なお、各物理ベクトルレジスタの要素数も4であるものとする。
図7(a)〜(g)を参照して、論理ベクトルレジスタ0番に書込む通常命令である3命令(以降、それぞれ命令0、命令1、命令2)を実行した場合について説明する。なお、図7において、ベクトルレジスタ1のエントリをe0〜e7とし、物理ベクトルレジスタのエントリをfe0〜fe3とする。なお、ベクトルレジスタ1のエントリe0〜e7のうちのいずれか4つが、論理ベクトルレジスタ0番のエントリと対応付けられる。つまり、物理ベクトルレジスタのエントリと関連付けられる論理ベクトルレジスタ0番のエントリは、ベクトルレジスタ1のエントリのうちのいずれか4つのエントリとなる。
図7(a)に初期状態を示す。初期状態は、物理0拡張ビットレジスタ82の全ての値が“0”となり、物理1拡張ビットレジスタ83の全ての値が“1”となる。これは、原則として、レジスタ・リネーミングにより、物理ベクトルレジスタ0番の各エントリをエントリe0〜e7の前半(e0〜e3)と関連付け、物理ベクトルレジスタ1番の各エントリをエントリ(e0〜e7)の後半(e4〜e7)と関連付けたいからである。ベクトルレジスタ1の全エントリ、物理ベクトルレジスタ0番の全エントリ、物理ベクトルレジスタ1番の全エントリは、それぞれ初期値(−)となる。
命令0を実行した場合について説明する。
なお、命令の発行により、マスク部6、レジスタ管理部7、レジスタ制御部12に制御情報が渡される。以下、命令実行について説明する場合には、全て同様とする。
命令0の論理ベクトルレジスタ0番は、レジスタ管理部7においてレジスタ・リネーミングにより、物理ベクトルレジスタ0番が指定されるものとする。命令0は通常命令なので、マスク識別回路841の出力は“1”となる。
図7(b)に、ベクトルデータを書込む直前の状態を示す。通常命令なので、各エントリに対応するマスク識別回路841の出力は、全て“1”となる。ライト物理ベクトルレジスタ番号が“0”(実際は2進数で表現されるが、便宜上10進数で表示する。以下同様とする。)なので、ライトセレクタ840により、物理1拡張ビットレジスタ83の値が選択される。従って、演算回路842は、データを書込むエントリに対応する、マスク識別回路841の出力及び物理1拡張ビットレジスタ83の値をXOR演算する。演算結果は、更新判定回路843により、パス844を介して、物理0拡張ビットレジスタ82の対応するエントリに書込まれる。
物理ベクトルレジスタ0番の各エントリと、論理ベクトルレジスタ0番の各エントリとの関連付けは、以下のように行われる。
1)物理ベクトルレジスタ0番のエントリ0(fe0)に対応するWP(2進数で“00”)により、物理0拡張ビットレジスタ82と、物理1拡張ビットレジスタ83から、対応する1ビットの値(ここでは、それぞれ“0”、“1”)が、拡張ビットレジスタ制御部86により読み出される。読み出された値は、それぞれパス820、パス830を介して更新部84へ送信される。
2)マスク識別回路841は、マスク部6からパス60を介して、WPに対応するマスクレジスタの内容及びマスク情報を受信する。命令0は通常命令なので、マスク識別回路841は、マスク情報に基づいて1ビットの値“1”を演算回路842へ出力する。
3)ライトセレクタ840は、パス70を介してライト物理ベクトルレジスタ番号“0”を受信する。よって、ライトセレクタ840は、パス830を選択し、物理1拡張ビットレジスタの値である“1”を演算回路842へ送信する。
4)演算回路842は、マスク識別回路841の出力値である“1”と、ライトセレクタ840から受信した値である“1”を、XOR演算する。結果は“0”となり、演算回路842は、当該演算結果をパス80を介してポインタ合成部9及び更新判定回路843へ送信する。演算結果は、WEXとしてポインタ合成部9へ送信される。
5)更新判定回路843は、パス70を介してライト物理ベクトルレジスタ番号“0”を受信する。また、更新判定回路843は、パス80を介して演算回路842の演算結果を受信する。ライト物理ベクトルレジスタ番号が“0”なので、更新判定回路843は、パス844に対して演算結果及び更新指示を送信する。
6)物理0拡張ビットレジスタ82は、WPと対応するエントリに、パス844を介して更新判定回路843から受信した演算結果を書込む。
7)ポインタ合成部9は、パス80を介して受信したWEXと、パス40を介して受信したWPからWP合成回路92によりライト拡張ポインタを生成する。WEXは“0”、WPは“00”であるので、ライト拡張ポインタは2進数の“000”となる。ライト拡張ポインタ“000”は、図2の対応表により、ベクトルレジスタ1のe0を指す。
以上のようにして、論理ベクトルレジスタ0番のエントリ0は、ベクトルレジスタ1のe0及び物理ベクトルレジスタ0番のfe0が関連付けられる。命令0の実行により、ライト拡張ポインタ“000”で指定されるベクトルレジスタ1のエントリe0にベクトルデータの要素が書込まれる。つまり、プログラムにより、論理ベクトルレジスタ0番のエントリ0に、ベクトルレジスタ1のe0に書込まれたベクトルデータの要素が書込まれるということである。また、物理的には、エントリe0に対応する物理ベクトルレジスタ0番のエントリfe0にベクトルデータの要素が書込まれる。
このとき、WDレジスタ2に、ベクトルレジスタ1に対する有効な書込みデータが存在する場合、WEレジスタ10は“1”となる。WE制御部11は、WEレジスタ10の値、パス60を介して受信したマスク情報からWEを“1”と判断し、WEとしてベクトルレジスタ1へ出力する。ベクトルレジスタ1は、ライト拡張ポインタが指定するエントリに、WDレジスタ2のデータを書込む。
なお、物理ベクトルレジスタ0番のエントリ1以降は、WPを+1(インクリメント)して、上記 1)から物理ベクトルレジスタ0番のエントリ数分繰り返す。WPが“00”〜“11”まで変化した際に物理ベクトルレジスタ0番と関連付けられるベクトルレジスタ1のエントリは、それぞれ、e0、e1、e2、e3となる。図7(c)において、fe0(e0)、fe1(e1)、fe2(e2)、fe3(e4)と表現する。また、論理ベクトルレジスタ0番の4つのエントリはそれぞれ、ベクトルレジスタ1のe0、e1、e2、e3と関連付けられる。
このとき、物理ベクトルレジスタ0番からのデータの読み出しが要求された場合について説明する。
1)物理ベクトルレジスタ0番のエントリ0(fe0)に対応するRP(2進数で“00”)により、物理0拡張ビットレジスタ82と、物理1拡張ビットレジスタ83から、対応する1ビットの値(ここでは、それぞれ“0”、“1”)が、拡張ビットレジスタ制御部86により読み出される。読み出された値は、それぞれパス821、パス831を介してリードセレクタ85へ送信される。
2)リードセレクタ85は、パス71を介してリード物理ベクトルレジスタ番号を受信する。リード物理ベクトルレジスタ番号が“0”であるので、パス821を選択し、物理0拡張ビットレジスタ82の値(ここでは、“0”)をREXとしてポインタ合成部9に送信する。
3)ポインタ合成部9は、パス81を介して受信したREXと、パス50を介して受信したRPから、リード拡張ポインタを生成する。このとき、REXの値は“0”、RPの値は“00”なので、リード拡張ポインタは“000”となる。リード拡張ポインタ“000”は、ベクトルレジスタ1のエントリe0を指す。よって、論理ベクトルレジスタ0番エントリ0は、ベクトルレジスタ1のe0及び物理ベクトルレジスタ0番のfe0が関連付けられる。
4)論理ベクトルレジスタ0番のエントリ0、即ちベクトルレジスタ1のe0(物理ベクトルレジスタ0番のfe0)からデータが読み出される。
エントリ1以降はRPを+1して、1)からエントリ数分繰り返せばよい。
図7(c)に、命令0の実行後の状態を示す。
物理0拡張ビットレジスタ82は、全てのビットの値が“0”となり、物理1拡張ビットレジスタ83は、全てのビットの値が“1”となる。ベクトルレジスタ1のe0〜e3(即ち、論理ベクトルレジスタ0番のエントリ0〜3)はそれぞれA、B、C、Dが格納されている。このとき、物理ベクトルレジスタ0番の4つのエントリfe0〜fe3は、ベクトルレジスタ1のe0〜e3(即ち、論理ベクトルレジスタ0番のエントリ0〜3)のそれぞれが対応し、その内容は、A、B、C、Dとなる。
命令0の実行後、物理ベクトルレジスタ0番にはレジスタ・リネーミング後のレジスタ状態が保持され、物理ベクトルレジスタ1番にはレジスタ・リネーミング前のレジスタ状態が保持されている。よって、1つの論理ベクトルレジスタ番号に対する、2つの物理ベクトルレジスタによるレジスタ・リネーミングが正しく行われている事になる。
次に、命令1が実行された場合について説明する。
命令1の論理ベクトルレジスタ0番は、レジスタ管理部7においてレジスタ・リネーミングにより、物理ベクトルレジスタ1番が指定されるものとする。命令1は通常命令なので、マスク識別回路841の出力は“1”となる。
図7(d)に、ベクトルデータを書込む直前の状態を示す。通常命令なので、各エントリに対応するマスク識別回路841の出力は、全て“1”となる。ライト物理ベクトルレジスタ番号が“1”なので、ライトセレクタ840により、物理0拡張ビットレジスタ82の値が選択される。従って、演算回路842は、データを書込むエントリに対応する、マスク識別回路841の出力及び物理0拡張ビットレジスタ82の値をXOR演算する。演算結果は、更新判定回路843により、パス845を介して、物理1拡張ビットレジスタ83の対応するエントリに書込まれる。
物理ベクトルレジスタ1番の各エントリと、論理ベクトルレジスタ0番の各エントリとの関連付けは、以下のように行われる。
1)物理ベクトルレジスタ1番のエントリ0(fe0)に対応するWP(2進数で“00”)により、物理0拡張ビットレジスタ82と、物理1拡張ビットレジスタ83から、対応する1ビットの値(ここでは、それぞれ“0”、“1”)が、拡張ビットレジスタ制御部86により読み出される。読み出された値は、それぞれパス820、パス830を介して更新部84へ送信される。
2)マスク識別回路841は、マスク部6からパス60を介して、WPに対応するマスクレジスタの内容及びマスク情報を受信する。命令1は通常命令なので、マスク識別回路841は、マスク情報に基づいて1ビットの値“1”を演算回路842へ出力する。
3)ライトセレクタ840は、パス70を介してライト物理ベクトルレジスタ番号“1”を受信する。よって、ライトセレクタ840は、パス820を選択し、物理0拡張ビットレジスタの値である“0”を演算回路842へ送信する。
4)演算回路842は、マスク識別回路841の出力値である“1”と、ライトセレクタ840から受信した値である“0”を、XOR演算する。結果は“1”となり、演算回路842は、当該演算結果をパス80を介してポインタ合成部9及び更新判定回路843へ送信する。演算結果は、WEXとしてポインタ合成部9へ送信される。
5)更新判定回路843は、パス70を介してライト物理ベクトルレジスタ番号“1”を受信する。また、更新判定回路843は、パス80を介して演算回路842の演算結果を受信する。ライト物理ベクトルレジスタ番号が“1”なので、更新判定回路843は、パス845に対して演算結果及び更新指示を送信する。
6)物理1拡張ビットレジスタ83は、WPと対応するエントリに、パス845を介して更新判定回路843から受信した演算結果を書込む。
7)ポインタ合成部9は、パス80を介して受信したWEXと、パス40を介して受信したWPからWP合成回路92によりライト拡張ポインタを生成する。WEXは“1”、WPは“00”であるので、ライト拡張ポインタは2進数の“100”となる。ライト拡張ポインタ“100”は、図2の対応表により、ベクトルレジスタ1のe4を指す。
以上のようにして、論理ベクトルレジスタ0番エントリ0と、ベクトルレジスタ1のe4及び物理ベクトルレジスタ1番のfe0が関連付けられる。命令1により、ライト拡張ポインタ“100”で指定されるベクトルレジスタ1のエントリe4にベクトルデータの要素が書込まれる。つまり、プログラムにより、論理ベクトルレジスタ0番のエントリ0に、ベクトルレジスタ1のe4に書込まれたベクトルデータの要素が書込まれるということである。また、物理的には、エントリe4に対応する物理ベクトルレジスタ0番のエントリfe0にベクトルデータの要素が書込まれる。
このとき、WDレジスタ2に、ベクトルレジスタ1に対する有効な書込みデータが存在する場合、WEレジスタ10は“1”となる。WE制御部11は、WEレジスタ10の値、パス60を介して受信したマスク情報からWEを“1”と判断し、WEとしてベクトルレジスタ1へ出力する。ベクトルレジスタ1は、ライト拡張ポインタが指定するエントリに、WDレジスタ2のデータを書込む。
なお、物理ベクトルレジスタ1番のエントリ1以降は、WPを+1(インクリメント)して、上記 1)から物理ベクトルレジスタ1番のエントリ数分繰り返す。WPが“00”〜“11”まで変化した際に物理ベクトルレジスタ1番と関連付けられるベクトルレジスタ1のエントリは、それぞれ、e4、e5、e6、e7となる。図7(e)において、fe0(e4)、fe1(e5)、fe2(e6)、fe3(e7)と表現する。また、論理ベクトルレジスタ0番の4つのエントリはそれぞれ、ベクトルレジスタ1のe4、e5、e6、e7と関連付けられる。
このとき、物理ベクトルレジスタ1番からのデータの読み出しが要求された場合について説明する。
1)物理ベクトルレジスタ1番のエントリ0(fe0)に対応するRP(2進数で“00”)により、物理0拡張ビットレジスタ82と、物理1拡張ビットレジスタ83から、対応する1ビットの値(ここでは、それぞれ“0”、“1”)が、拡張ビットレジスタ制御部86により読み出される。読み出された値は、それぞれパス821、パス831を介してリードセレクタ85へ送信される。
2)リードセレクタ85は、パス71を介してリード物理ベクトルレジスタ番号を受信する。リード物理ベクトルレジスタ番号が“1”であるので、パス831を選択し、物理1拡張ビットレジスタ83の値(ここでは、“1”)をREXとしてポインタ合成部9に送信する。
3)ポインタ合成部9は、パス81を介して受信したREXと、パス50を介して受信したRPから、リード拡張ポインタを生成する。このとき、REXの値は“1”、RPの値は“00”なので、リード拡張ポインタは“000”となる。リード拡張ポインタ“100”は、ベクトルレジスタ1のエントリe4を指す。よって、論理ベクトルレジスタ0番のエントリ0は、ベクトルレジスタ1のe4及び物理ベクトルレジスタ1番のfe0が関連付けられる。
4)論理ベクトルレジスタのエントリ0、即ちベクトルレジスタ1のe4(物理ベクトルレジスタ1番のfe0)からデータが読み出される。
エントリ1以降はRPを+1して、1)からエントリ数分繰り返せばよい。
図7(e)に、命令1の実行後の状態を示す。
物理0拡張ビットレジスタ82は、全てのビットの値が“0”となり、物理1拡張ビットレジスタ83は、全てのビットの値が“1”となる。ベクトルレジスタ1のe4〜e7(即ち、論理ベクトルレジスタ0番のエントリ0〜3)はそれぞれE、F、G、Hが格納されている。このとき、物理ベクトルレジスタ1番の4つのエントリfe0〜fe3は、ベクトルレジスタ1のe4〜e7(即ち、論理ベクトルレジスタ0番のエントリ0〜3)のそれぞれが対応し、その内容は、E、F、G、Hとなる。
命令1の実行後、物理ベクトルレジスタ0番にはレジスタ・リネーミング前のレジスタ状態が保持され、物理ベクトルレジスタ1番にはレジスタ・リネーミング後のレジスタ状態が保持されている。よって、1つの論理ベクトルレジスタ番号に対する、2つの物理ベクトルレジスタによるレジスタ・リネーミングが正しく行われている事になる。
次に、命令2が実行された場合について説明する。
命令2の論理ベクトルレジスタ0番は、レジスタ管理部7においてレジスタ・リネーミングにより、物理ベクトルレジスタ0番が指定されるものとする。命令2は通常命令なので、マスク識別回路841の出力は“1”となる。
図7(f)に、ベクトルデータを書込む直前の状態を示す。
物理ベクトルレジスタ0番の各エントリと、論理ベクトルレジスタ0番の各エントリとの関連付けは、命令0と同様である。
このとき、物理ベクトルレジスタ0番の読出しがあった場合の動作は、命令0により物理ベクトルレジスタ0番から読出しがあった場合と同様である。
図7(g)に、命令2の実行後の状態を示す。
物理0拡張ビットレジスタ82は、全てのビットの値が“0”となり、物理1拡張ビットレジスタ83は、全てのビットの値が“1”となる。ベクトルレジスタ1のe0〜e7はそれぞれI、J、K、L、E、F、G、Hが格納されている。このとき、物理ベクトルレジスタ0番の4つのエントリfe0〜fe3は、ベクトルレジスタ1のe0〜e3(即ち、論理ベクトルレジスタ0番のエントリ0〜3)のそれぞれが対応し、その内容は、I、J、K、Lとなる。
命令2の実行後、物理ベクトルレジスタ0番にはレジスタ・リネーミング後のレジスタ状態が保持され、物理ベクトルレジスタ1番にはレジスタ・リネーミング前のレジスタ状態が保持されている。よって、1つの論理ベクトルレジスタ番号に対する、2つの物理ベクトルレジスタによるレジスタ・リネーミングが正しく行われていることになる。
次に、マスク付き演算を行う命令を実行する場合について、図8を用いて説明する。
図8(a)〜(e)に、論理ベクトルレジスタ0番に書込む命令0と、論理ベクトルレジスタ0番に書込むマスク付き命令が2命令(以下、それぞれ、命令M1、命令M2)の3命令を実行した場合について説明する。
初期状態から命令0を実行した場合については、図7で説明した命令0と同様となる。図8(a)は、命令0の実行後の各レジスタの状態を示し、図7(c)と同様である。
次に、マスク付き演算を行う命令M1が実行された場合について説明する。
命令M1の論理ベクトルレジスタ0番は、レジスタ管理部7においてレジスタ・リネーミングにより、物理ベクトルレジスタ1番が指定されているものとする。命令M1のマスクレジスタの値は、論理ベクトルレジスタ0番、物理ベクトルレジスタ1番のそれぞれのエントリに対応して、1001(2進数)となっている。
図8(b)は、ベクトルデータを書込む直前の状態を示す。
物理ベクトルレジスタ1番のエントリ0(fe0)に相当する論理ベクトルレジスタ0番のエントリ0は以下のようにして決定される。
1−0)物理ベクトルレジスタ1番のエントリ0(fe0)に対応するWP(2進数で“00”)により、物理0拡張ビットレジスタ82と、物理1拡張ビットレジスタ83から、対応する1ビットの値(ここでは、それぞれ“0”、“1”)が、拡張ビットレジスタ制御部86により読み出される。読み出された値は、それぞれパス820、パス830を介して更新部84へ送信される。
2−0)マスク識別回路841は、マスク部6からパス60を介して、WPに対応するマスクレジスタの内容及びマスク情報を受信する。命令M1はマスク付き命令なので、マスク識別回路841は、マスク情報に基づいて対応するマスクレジスタの1ビットの値“1”を演算回路842へ出力する。
3−0)ライトセレクタ840は、パス70を介してライト物理ベクトルレジスタ番号“1”を受信する。よって、ライトセレクタ840は、パス820を選択し、物理0拡張ビットレジスタの値である“0”を演算回路842へ送信する。
4−0)演算回路842は、マスク識別回路841の出力値である“1”と、ライトセレクタ840から受信した値である“0”を、XOR演算する。結果は“1”となり、演算回路842は、当該演算結果をパス80を介してポインタ合成部9及び更新判定回路843へ送信する。演算結果は、WEXとしてポインタ合成部9へ送信される。
5−0)更新判定回路843は、パス70を介してライト物理ベクトルレジスタ番号“1”を受信する。また、更新判定回路843は、パス80を介して演算回路842の演算結果を受信する。ライト物理ベクトルレジスタ番号が“1”なので、更新判定回路843は、パス845に対して演算結果及び更新指示を送信する。
6−0)物理1拡張ビットレジスタ83は、WPと対応する自己のエントリに、パス845を介して更新判定回路843から受信した演算結果を書込む。
7−0)ポインタ合成部9は、パス80を介して受信したWEXと、パス40を介して受信したWPからWP合成回路92によりライト拡張ポインタを生成する。WEXは“1”、WPは“00”であるので、ライト拡張ポインタは2進数の“100”となる。ライト拡張ポインタ“100”は、図2の対応表により、ベクトルレジスタ1のe4を指す。よって、論理ベクトルレジスタ0番のエントリ0は、ベクトルレジスタ1のe4及び物理ベクトルレジスタ1番のfe0と関連付けられる。
物理ベクトルレジスタ1番のエントリ1に相当する論理ベクトルレジスタ0番のエントリ1は、以下のように決定される。
1−1)物理ベクトルレジスタ1番のエントリ1(fe1)に対応するWP(2進数で“01”)により、物理0拡張ビットレジスタ82と、物理1拡張ビットレジスタ83から、対応する1ビットの値(ここでは、それぞれ“0”、“1”)が、拡張ビットレジスタ制御部86により読み出される。読み出された値は、それぞれパス820、パス830を介して更新部84へ送信される。
2−1)マスク識別回路841は、マスク部6からパス60を介して、WPに対応するマスクレジスタの内容及びマスク情報を受信する。命令M1はマスク付き命令なので、マスク識別回路841は、マスク情報に基づいて対応するマスクレジスタの1ビットの値“0”を演算回路842へ出力する。
3−1)ライトセレクタ840は、パス70を介してライト物理ベクトルレジスタ番号“1”を受信する。よって、ライトセレクタ840は、パス820を選択し、物理0拡張ビットレジスタの値である“0”を演算回路842へ送信する。
4−1)演算回路842は、マスク識別回路841の出力値である“0”と、ライトセレクタ840から受信した値である“0”を、XOR演算する。結果は“0”となり、演算回路842は、当該演算結果をパス80を介してポインタ合成部9及び更新判定回路843へ送信する。演算結果は、WEXとしてポインタ合成部9へ送信される。
5−1)更新判定回路843は、パス70を介してライト物理ベクトルレジスタ番号“1”を受信する。また、更新判定回路843は、パス80を介して演算回路842の演算結果を受信する。ライト物理ベクトルレジスタ番号が“1”なので、更新判定回路843は、パス845に対して演算結果及び更新指示を送信する。
6−1)物理1拡張ビットレジスタ83は、WPと対応する自己のエントリに、パス845を介して更新判定回路843から受信した演算結果を書込む。
7−1)ポインタ合成部9は、パス80を介して受信したWEXと、パス40を介して受信したWPからWP合成回路92によりライト拡張ポインタを生成する。WEXは“0”、WPは“01”であるので、ライト拡張ポインタは2進数の“001”となる。ライト拡張ポインタ“001”は、図2の対応表により、ベクトルレジスタ1のe1を指す。よって、論理ベクトルレジスタ0番のエントリ1は、ベクトルレジスタ1のe1及び物理ベクトルレジスタ1番のfe1と関連付けられる。但し、マスクビットが“0”であるので、ベクトルレジスタ1のエントリe1(即ち、論理ベクトルレジスタ0番のエントリ1)に対する書込みは実行されない。
物理ベクトルレジスタ1番のエントリ2に相当する論理ベクトルレジスタ0番のエントリ2は、以下のように決定される。
1−2)物理ベクトルレジスタ1番のエントリ2(fe2)に対応するWP(2進数で“10”)により、物理0拡張ビットレジスタ82と、物理1拡張ビットレジスタ83から、対応する1ビットの値(ここでは、それぞれ“0”、“1”)が、拡張ビットレジスタ制御部86により読み出される。読み出された値は、それぞれパス820、パス830を介して更新部84へ送信される。
2−2)マスク識別回路841は、マスク部6からパス60を介して、WPに対応するマスクレジスタの内容及びマスク情報を受信する。命令M1はマスク付き命令なので、マスク識別回路841は、マスク情報に基づいて対応するマスクレジスタの1ビットの値“0”を演算回路842へ出力する。
3−2)ライトセレクタ840は、パス70を介してライト物理ベクトルレジスタ番号“1”を受信する。よって、ライトセレクタ840は、パス820を選択し、物理0拡張ビットレジスタの値である“0”を演算回路842へ送信する。
4−2)演算回路842は、マスク識別回路841の出力値である“0”と、ライトセレクタ840から受信した値である“0”を、XOR演算する。結果は“0”となり、演算回路842は、当該演算結果をパス80を介してポインタ合成部9及び更新判定回路843へ送信する。演算結果は、WEXとしてポインタ合成部9へ送信される。
5−2)更新判定回路843は、パス70を介してライト物理ベクトルレジスタ番号“1”を受信する。また、更新判定回路843は、パス80を介して演算回路842の演算結果を受信する。ライト物理ベクトルレジスタ番号が“1”なので、更新判定回路843は、パス845に対して演算結果及び更新指示を送信する。
6−2)物理1拡張ビットレジスタ83は、WPと対応する自己のエントリに、パス845を介して更新判定回路843から受信した演算結果を書込む。
7−2)ポインタ合成部9は、パス80を介して受信したWEXと、パス40を介して受信したWPからWP合成回路92によりライト拡張ポインタを生成する。WEXは“0”、WPは“10”であるので、ライト拡張ポインタは2進数の“010”となる。ライト拡張ポインタ“010”は、図2の対応表により、ベクトルレジスタ1のe2を指す。よって、論理ベクトルレジスタ0番のエントリ2は、ベクトルレジスタ1のe2及び物理ベクトルレジスタ1番のfe2と関連付けられる。但し、マスクビットが“0”であるので、ベクトルレジスタ1のエントリe2(即ち、論理ベクトルレジスタ0番のエントリ2)に対する書込みは実行されない。
物理ベクトルレジスタ1番のエントリ3に相当する論理ベクトルレジスタ0番のエントリ3は、以下のように決定される。
1−3)物理ベクトルレジスタ1番のエントリ3(fe3)に対応するWP(2進数で“11”)により、物理0拡張ビットレジスタ82と、物理1拡張ビットレジスタ83から、対応する1ビットの値(ここでは、それぞれ“0”、“1”)が、拡張ビットレジスタ制御部86により読み出される。読み出された値は、それぞれパス820、パス830を介して更新部84へ送信される。
2−3)マスク識別回路841は、マスク部6からパス60を介して、WPに対応するマスクレジスタの内容及びマスク情報を受信する。命令M1はマスク付き命令なので、マスク識別回路841は、マスク情報に基づいて対応するマスクレジスタの1ビットの値“1”を演算回路842へ出力する。
3−3)ライトセレクタ840は、パス70を介してライト物理ベクトルレジスタ番号“1”を受信する。よって、ライトセレクタ840は、パス820を選択し、物理0拡張ビットレジスタの値である“0”を演算回路842へ送信する。
4−3)演算回路842は、マスク識別回路841の出力値である“1”と、ライトセレクタ840から受信した値である“0”を、XOR演算する。結果は“1”となり、演算回路842は、当該演算結果をパス80を介してポインタ合成部9及び更新判定回路843へ送信する。演算結果は、WEXとしてポインタ合成部9へ送信される。
5−3)更新判定回路843は、パス70を介してライト物理ベクトルレジスタ番号“1”を受信する。また、更新判定回路843は、パス80を介して演算回路842の演算結果を受信する。ライト物理ベクトルレジスタ番号が“1”なので、更新判定回路843は、パス845に対して演算結果及び更新指示を送信する。
6−3)物理1拡張ビットレジスタ83は、WPと対応する自己のエントリに、パス845を介して更新判定回路843から受信した演算結果を書込む。
7−3)ポインタ合成部9は、パス80を介して受信したWEXと、パス40を介して受信したWPからWP合成回路92によりライト拡張ポインタを生成する。WEXは“1”、WPは“11”であるので、ライト拡張ポインタは2進数の“111”となる。ライト拡張ポインタ“111”は、図2の対応表により、ベクトルレジスタ1のe7を指す。よって、論理ベクトルレジスタ0番のエントリ3は、ベクトルレジスタ1のe7及び物理ベクトルレジスタ1番のfe3と関連付けられる。
以上より、物理ベクトルレジスタ1番として書込まれるベクトルレジスタ1のエントリ(即ち、論理ベクトルレジスタ0番のエントリ)は、それぞれe4、書込み無し(e1)、書込み無し(e2)、e7となる。
図8(c)に、命令M1の実行後の状態を示す。
物理0拡張ビットレジスタ82の全ての値は“0”、物理1拡張ビットレジスタ83の値はそれぞれ1、0、0、1となる。ベクトルレジスタ1のe0〜e7は、それぞれA,B,C,D,E,−、−、H(ハイフン(−)は初期値)が格納されている。このとき、物理ベクトルレジスタ0番の4つのエントリは、ベクトルレジスタ1のe0〜e3が対応し、その内容はそれぞれA,B,C,Dとなる。物理ベクトルレジスタ1番の4つのエントリは、ベクトルレジスタ1のe4、e1、e2、e7がそれぞれ対応し、その内容はそれぞれE,B,C,Hとなる。
命令M1の実行により、論理ベクトルレジスタ0番の4つのエントリの値は、A,B,C,Dという内容から、マスクレジスタの値が“1”となっているエントリのみが更新されて、E,B,C,Hとなる。
命令M1の実行後、物理ベクトルレジスタ0番にはレジスタ・リネーミング前のレジスタ状態が保持され、物理ベクトルレジスタ1番にはレジスタ・リネーミング後のレジスタ状態が保持されている。よって、1つの論理ベクトルレジスタ番号に対する、2つの物理ベクトルレジスタによるレジスタ・リネーミングが正しく行われていることになる。
ここで、図8(c')に、従来技術により、命令M1の実行時にレジスタ・リネーミングを実行した後の状態を示す。物理ベクトルレジスタ1番の4つのエントリは、ベクトルレジスタ1のe4〜e7がそれぞれ対応し、その内容は、E,−、−、Hとなっている。つまり、物理ベクトルレジスタ番号である“1”と、WPのそれぞれを合成しているため、上記のような関連付けがなされる。結果として、論理ベクトルレジスタ1番の4つのエントリの値は、レジスタ・リネーミング実行前のA,B,C,Dという内容から、マスクレジスタの値が“1”となっているエントリのみが更新されて、E,B,C,Hになるという期待値と一致していない。従って、結果はデータ化けとなってしまう。
次に、命令M2が実行された場合について説明する。
命令M2の論理ベクトルレジスタ0番は、レジスタ管理部7においてレジスタ・リネーミングにより、物理ベクトルレジスタ0番が指定されているものとする。命令M2のマスクレジスタの値は、論理ベクトルレジスタ0番又は物理ベクトルレジスタ1番のそれぞれのエントリに対応して、1100(2進数)となっている。
図8(d)は、ベクトルデータを書込む直前の状態を示す。
物理ベクトルレジスタ0番のエントリ0(fe0)に相当する論理ベクトルレジスタ0番のエントリ0は以下のようにして決定される。
1−0)物理ベクトルレジスタ0番のエントリ0(fe0)に対応するWP(2進数で“00”)により、物理0拡張ビットレジスタ82と、物理1拡張ビットレジスタ83から、対応する1ビットの値(ここでは、それぞれ“0”、“1”)が、拡張ビットレジスタ制御部86により読み出される。読み出された値は、それぞれパス820、パス830を介して更新部84へ送信される。
2−0)マスク識別回路841は、マスク部6からパス60を介して、WPに対応するマスクレジスタの内容及びマスク情報を受信する。命令M2はマスク付き命令なので、マスク識別回路841は、マスク情報に基づいて対応するマスクレジスタの1ビットの値“1”を演算回路842へ出力する。
3−0)ライトセレクタ840は、パス70を介してライト物理ベクトルレジスタ番号“0”を受信する。よって、ライトセレクタ840は、パス830を選択し、物理1拡張ビットレジスタ83の値である“1”を演算回路842へ送信する。
4−0)演算回路842は、マスク識別回路841の出力値である“1”と、ライトセレクタ840から受信した値である“1”を、XOR演算する。結果は“0”となり、演算回路842は、当該演算結果をパス80を介してポインタ合成部9及び更新判定回路843へ送信する。演算結果は、WEXとしてポインタ合成部9へ送信される。
5−0)更新判定回路843は、パス70を介してライト物理ベクトルレジスタ番号“0”を受信する。また、更新判定回路843は、パス80を介して演算回路842の演算結果を受信する。ライト物理ベクトルレジスタ番号が“0”なので、更新判定回路843は、パス844に対して演算結果及び更新指示を送信する。
6−0)物理0拡張ビットレジスタ82は、WPと対応する自己のエントリに、パス844を介して更新判定回路843から受信した演算結果を書込む。
7−0)ポインタ合成部9は、パス80を介して受信したWEXと、パス40を介して受信したWPからWP合成回路92によりライト拡張ポインタを生成する。WEXは“0”、WPは“00”であるので、ライト拡張ポインタは2進数の“000”となる。ライト拡張ポインタ“000”は、図2の対応表により、ベクトルレジスタ1のe0を指す。よって、論理ベクトルレジスタ0番のエントリ0は、ベクトルレジスタ1のe0及び物理ベクトルレジスタ0番のfe0と関連付けられる。
物理ベクトルレジスタ0番のエントリ1に相当する論理ベクトルレジスタ0番のエントリ1は、以下のように決定される。
1−1)物理ベクトルレジスタ1番のエントリ1(fe1)に対応するWP(2進数で“01”)により、物理0拡張ビットレジスタ82と、物理1拡張ビットレジスタ83から、対応する1ビットの値(ここでは、それぞれ“0”、“0”)が、拡張ビットレジスタ制御部86により読み出される。読み出された値は、それぞれパス820、パス830を介して更新部84へ送信される。
2−1)マスク識別回路841は、マスク部6からパス60を介して、WPに対応するマスクレジスタの内容及びマスク情報を受信する。命令M2はマスク付き命令なので、マスク識別回路841は、マスク情報に基づいて対応するマスクレジスタの1ビットの値“1”を演算回路842へ出力する。
3−1)ライトセレクタ840は、パス70を介してライト物理ベクトルレジスタ番号“0”を受信する。よって、ライトセレクタ840は、パス830を選択し、物理1拡張ビットレジスタ83の値である“0”を演算回路842へ送信する。
4−1)演算回路842は、マスク識別回路841の出力値である“1”と、ライトセレクタ840から受信した値である“0”を、XOR演算する。結果は“1”となり、演算回路842は、当該演算結果をパス80を介してポインタ合成部9及び更新判定回路843へ送信する。演算結果は、WEXとしてポインタ合成部9へ送信される。
5−1)更新判定回路843は、パス70を介してライト物理ベクトルレジスタ番号“0”を受信する。また、更新判定回路843は、パス80を介して演算回路842の演算結果を受信する。ライト物理ベクトルレジスタ番号が“0”なので、更新判定回路843は、パス844に対して演算結果及び更新指示を送信する。
6−1)物理0拡張ビットレジスタ82は、WPと対応する自己のエントリに、パス844を介して更新判定回路843から受信した演算結果を書込む。
7−1)ポインタ合成部9は、パス80を介して受信したWEXと、パス40を介して受信したWPからWP合成回路92によりライト拡張ポインタを生成する。WEXは“1”、WPは“01”であるので、ライト拡張ポインタは2進数の“101”となる。ライト拡張ポインタ“101”は、図2の対応表により、ベクトルレジスタ1のe5を指す。よって、論理ベクトルレジスタ0番のエントリ1は、ベクトルレジスタ1のe5及び物理ベクトルレジスタ0番のfe1と関連付けられる。
物理ベクトルレジスタ0番のエントリ2に相当する論理ベクトルレジスタ0番のエントリ2は、以下のように決定される。
1−2)物理ベクトルレジスタ0番のエントリ2(fe2)に対応するWP(2進数で“10”)により、物理0拡張ビットレジスタ82と、物理1拡張ビットレジスタ83から、対応する1ビットの値(ここでは、それぞれ“0”、“0”)が、拡張ビットレジスタ制御部86により読み出される。読み出された値は、それぞれパス820、パス830を介して更新部84へ送信される。
2−2)マスク識別回路841は、マスク部6からパス60を介して、WPに対応するマスクレジスタの内容及びマスク情報を受信する。命令M2はマスク付き命令なので、マスク識別回路841は、マスク情報に基づいて対応するマスクレジスタの1ビットの値“0”を演算回路842へ出力する。
3−2)ライトセレクタ840は、パス70を介してライト物理ベクトルレジスタ番号“0”を受信する。よって、ライトセレクタ840は、パス830を選択し、物理1拡張ビットレジスタ83の値である“0”を演算回路842へ送信する。
4−2)演算回路842は、マスク識別回路841の出力値である“0”と、ライトセレクタ840から受信した値である“0”を、XOR演算する。結果は“0”となり、演算回路842は、当該演算結果をパス80を介してポインタ合成部9及び更新判定回路843へ送信する。演算結果は、WEXとしてポインタ合成部9へ送信される。
5−2)更新判定回路843は、パス70を介してライト物理ベクトルレジスタ番号“0”を受信する。また、更新判定回路843は、パス80を介して演算回路842の演算結果を受信する。ライト物理ベクトルレジスタ番号が“0”なので、更新判定回路843は、パス844に対して演算結果及び更新指示を送信する。
6−2)物理0拡張ビットレジスタ82は、WPと対応する自己のエントリに、パス844を介して更新判定回路843から受信した演算結果を書込む。
7−2)ポインタ合成部9は、パス80を介して受信したWEXと、パス40を介して受信したWPからWP合成回路92によりライト拡張ポインタを生成する。WEXは“0”、WPは“10”であるので、ライト拡張ポインタは2進数の“010”となる。ライト拡張ポインタ“010”は、図2の対応表により、ベクトルレジスタ1のe2を指す。よって、論理ベクトルレジスタ0番のエントリ2は、ベクトルレジスタ1のe2及び物理ベクトルレジスタ0番のfe2と関連付けられる。但し、マスクビットが“0”であるので、ベクトルレジスタ1のエントリe2(即ち、論理ベクトルレジスタ0番のエントリ2)に対する書込みは実行されない。
物理ベクトルレジスタ0番のエントリ3に相当する論理ベクトルレジスタ0番のエントリ3は、以下のように決定される。
1−3)物理ベクトルレジスタ0番のエントリ3(fe3)に対応するWP(2進数で“11”)により、物理0拡張ビットレジスタ82と、物理1拡張ビットレジスタ83から、対応する1ビットの値(ここでは、それぞれ“0”、“1”)が、拡張ビットレジスタ制御部86により読み出される。読み出された値は、それぞれパス820、パス830を介して更新部84へ送信される。
2−3)マスク識別回路841は、マスク部6からパス60を介して、WPに対応するマスクレジスタの内容及びマスク情報を受信する。命令M2はマスク付き命令なので、マスク識別回路841は、マスク情報に基づいて対応するマスクレジスタの1ビットの値“0”を演算回路842へ出力する。
3−3)ライトセレクタ840は、パス70を介してライト物理ベクトルレジスタ番号“0”を受信する。よって、ライトセレクタ840は、パス830を選択し、物理1拡張ビットレジスタ83の値である“1”を演算回路842へ送信する。
4−3)演算回路842は、マスク識別回路841の出力値である“0”と、ライトセレクタ840から受信した値である“1”を、XOR演算する。結果は“1”となり、演算回路842は、当該演算結果をパス80を介してポインタ合成部9及び更新判定回路843へ送信する。演算結果は、WEXとしてポインタ合成部9へ送信される。
5−3)更新判定回路843は、パス70を介してライト物理ベクトルレジスタ番号“0”を受信する。また、更新判定回路843は、パス80を介して演算回路842の演算結果を受信する。ライト物理ベクトルレジスタ番号が“0”なので、更新判定回路843は、パス844に対して演算結果及び更新指示を送信する。
6−3)物理0拡張ビットレジスタ82は、WPと対応する自己のエントリに、パス844を介して更新判定回路843から受信した演算結果を書込む。
7−3)ポインタ合成部9は、パス80を介して受信したWEXと、パス40を介して受信したWPからWP合成回路92によりライト拡張ポインタを生成する。WEXは“1”、WPは“11”であるので、ライト拡張ポインタは2進数の“111”となる。ライト拡張ポインタ“111”は、図2の対応表により、ベクトルレジスタ1のe7を指す。よって、論理ベクトルレジスタ0番のエントリ3は、ベクトルレジスタ1のe7及び物理ベクトルレジスタ0番のfe3と関連付けられる。
以上より、物理ベクトルレジスタ0番として書込まれるベクトルレジスタ1のエントリ(即ち、論理ベクトルレジスタ0番のエントリ)は、それぞれe0、e5、書込み無し(e2)、書込み無し(e7)となる。
図8(e)に、命令M2の実行後の状態を示す。
物理0拡張ビットレジスタ82の値はそれぞれ0、1、0、1となり、物理1拡張ビットレジスタ83の値はそれぞれ1、0、0、1となる。ベクトルレジスタ1のe0〜e7は、それぞれI,B,C,D,E,J、−、H(ハイフン(−)は初期値)が格納されている。このとき、物理ベクトルレジスタ0番の4つのエントリは、ベクトルレジスタ1のe0、e5、e2、e7が対応し、その内容はそれぞれI,J,C,Hとなる。物理ベクトルレジスタ1番の4つのエントリは、ベクトルレジスタ1のe4、e1、e2、e7がそれぞれ対応し、その内容はそれぞれE,B,C,Hとなる。
命令M2の実行により、論理ベクトルレジスタ0番の4つのエントリの値は、E,B,C,Hという内容から、マスクレジスタの値が“1”となっているエントリのみが更新されて、I,J,C,Hとなる。
命令M2の実行後、物理ベクトルレジスタ0番にはレジスタ・リネーミング後のレジスタ状態が保持され、物理ベクトルレジスタ1番にはレジスタ・リネーミング前のレジスタ状態が保持されている。よって、1つの論理ベクトルレジスタ番号に対する、2つの物理ベクトルレジスタによるレジスタ・リネーミングが正しく行われていることになる。
ここで、図8(e')に、従来技術により、図8(c')に示す状態から命令M2の実行した場合において、レジスタ・リネーミングを実行した後の状態を示す。物理ベクトルレジスタ0番の4つのエントリは、ベクトルレジスタ1のe0〜e3(即ち、論理ベクトルレジスタ0番のe0〜e3)がそれぞれ対応し、その内容は、I,J,C,Dとなっている。つまり、物理ベクトルレジスタ番号である“0”と、WPのそれぞれを合成しているため、上記のような関連付けがなされる。結果として、図8(e')に示す論理ベクトルレジスタ1番の4つのエントリの値は、図8(e)に示すI,J,C,Hという期待値と一致していない。従って、結果はデータ化けとなってしまう。
このように、論理ベクトルレジスタと物理ベクトルレジスタとの間で、エントリ毎に、レジスタ・リネーミングによる関連付けを実行できるので、マスク付き演算を実行してもレジスタ・リネーミングによるデータ化けを回避できるという格別の効果が得られる。
次に、図9のフローチャートを参照し、本発明の第1の実施形態の動作について説明する。
レジスタ管理部7により、論理ベクトルレジスタと物理ベクトルレジスタの間で、レジスタ・リネーミングが実行される(S1)。
拡張ビット部8により、WPレジスタ4からWPが受信される(S2)。このとき、レジスタ・リネーミング時にレジスタ管理部7により指定された物理ベクトルレジスタのエントリのうち、データの書き込み対象のエントリに対応するWPが、1つずつ受信される。
更新部84は、物理0拡張ビットレジスタ82及び物理1拡張ビットレジスタ83から、WPに対応する拡張ビットを受信する(S3)。
ライトセレクタ840は、ライト物理ベクトルレジスタ番号に基づいて、拡張ビットを選択する(S4)。ここで、ライトセレクタ840は、ライト物理ベクトルレジスタ番号が“0”である場合には、物理1拡張ビットレジスタ83から読込まれた拡張ビットを選択する。ライト物理ベクトルレジスタ番号が“1”である場合には、物理0拡張ビットレジスタ82から読込まれた拡張ビットを選択する。
マスク識別回路841は、マスク部6からレジスタ・リネーミング時にレジスタ管理部7により指定された物理ベクトルレジスタのエントリのうち、データの書き込み対象のエントリに対応するマスクビットを受信する(S4)。
演算回路842は、マスクビットの値とライトセレクタ840が選択した拡張ビットの値を用いて演算処理を実行する(S6)。演算回路842は、XOR演算を実行し、演算結果をWEXとしてポインタ合成部9へ送信する。
ポインタ合成部9は、演算回路842による演算結果とWPレジスタ4から受信したWPを合成し、ライト拡張ポインタを生成する(S7)。
ライト拡張ポインタに対応するベクトルレジスタ1のエントリと、WPに対応する物理ベクトルレジスタのエントリが関連付けされる(S8)。これにより、論理ベクトルレジスタのエントリと、ベクトルレジスタ1のエントリ及び物理ベクトルレジスタのエントリが、それぞれ関連付けられる。
ライト拡張ポインタで指定されたエントリに、ベクトルデータの要素が書込まれる(S9)。
ベクトルデータの読出し要求があった場合(S10でYes)、リードセレクタ85は、レジスタ・リネーミングにより指定された物理ベクトルレジスタに対応する拡張ビットレジスタから、RPに対応する拡張ビットを受信する(S11)。リードセレクタ85は、受信した拡張ビットをポインタ合成部9へ送信する。
ポインタ合成部9は、受信した拡張ビットとRPを合成し、リード拡張ポインタを生成する(S12)。
ベクトルレジスタ1のエントリのうち、リード拡張ポインタにより指定されるエントリからベクトルデータの要素が読込まれる(S13)。
(第2の実施形態)
次に、本発明の第2の実施形態について説明する。
第1の実施形態では、主として、ベクトルレジスタ1のエントリ数が8、エントリ数が4の物理ベクトルレジスタが2個の場合により説明した。しかし、本発明はこれに限るものではない。図10に示す所定の条件下において、ベクトルレジスタのエントリ数、物理ベクトルレジスタのエントリ数及び物理ベクトルレジスタの数は、いくつであってもよい。
図10を参照し、所定の条件について説明する。物理ベクトルレジスタのエントリ数を2のx乗で表される数とする。この場合、WP又はRPのビット数はxビットの値となる。WP又はRPは、物理ベクトルレジスタの各エントリと1対1に対応するからである。ベクトルレジスタ1のエントリ数を2のm乗で表される数とすると、ライト拡張ポインタ若しくはリード拡張ポインタは、mビットの値となる。ライト拡張ポインタ若しくはリード拡張ポインタは、WP若しくはRPとWEX若しくはREXとを合成した値である。よって、WEX若しくはREXは、(m−x)ビットの値となる。
この条件下において、クトルレジスタのエントリ数、物理ベクトルレジスタのエントリ数及び物理ベクトルレジスタの数は、それぞれ任意に決定できる。
次に、本発明の第2の実施形態の構成について、図11、図12、図13及び図14を用いて説明する。なお、図11、図12、図13及び図14において、第1の実施形態において説明した各構成と同一の番号を付してあるものは、第1の実施形態の各構成と同一である。
図11を参照すると、本発明の第2の実施形態における情報処理装置130は、レジスタ管理部700、拡張ビット部800を有する。他の部分は、第1の実施形態と同様である。
レジスタ管理部700は、本発明の第1の実施形態のレジスタ管理部7が備える機能に加え、命令実行時のレジスタ・リネーミングにおける論理ベクトルレジスタと物理ベクトルレジスタとの対応関係をより詳細に管理する。対応関係とは、つまり、論理ベクトルレジスタと物理ベクトルレジスタの、エントリ毎の対応関係である。例えば、レジスタ管理部700は、物理ベクトルレジスタの数がnとすると、最大で過去n回分の命令実行後の論理ベクトルレジスタと物理ベクトルレジスタの対応関係を、命令の実行順序に従って管理できるように構成すればよい。なお、必ずしも過去n回分の対応関係を管理する必要はなく、ハードウェア資源等を考慮し、最適な設計をすればよい。レジスタ管理部700は、論理ベクトルレジスタに対応付けた物理ベクトルレジスタの物理ベクトルレジスタ番号により、対応関係を管理する。レジスタ管理部700は、リネーム情報と最新状態情報を、パス701を介して拡張ビット部800に送信する。レジスタ管理部700は、命令の実行毎に、最新状態情報とリネーム情報を送信する。最新状態情報及びリネーム情報は、レジスタ管理部700が管理する論理ベクトルレジスタと物理ベクトルレジスタの過去の対応関係に基づいて生成される情報である。最新状態情報及びリネーム情報は、物理ベクトルレジスタの番号で表される。リネーム情報とは、ある実行中の命令において、レジスタ・リネーミングにより論理ベクトルレジスタと関連付けられている物理ベクトルレジスタの番号である。レジスタ管理部700は、物理ベクトルレジスタの中からレジスタ・リネーミングの対象とする物理ベクトルレジスタを選択し、当該物理ベクトルレジスタの番号をリネーム情報として拡張ビット部800へ送信する。最新状態情報とは、ある命令を実行する際において、論理ベクトルレジスタの最新状態のデータを保持している物理ベクトルレジスタの番号である。論理ベクトルレジスタの内容は、命令の実行により逐次書き換えられていくが、最後に内容が書き換えられた状態が最新状態となる。レジスタ管理部700は、命令の実行順に従って管理している論理ベクトルレジスタと物理ベクトルレジスタとの対応関係を参照すれば、最新状態を保持している論理ベクトルレジスタと対応している物理ベクトルレジスタを特定できる。レジスタ管理部700は、物理ベクトルレジスタの中から論理ベクトルレジスタの最新状態のデータを保持している物理ベクトルレジスタを選択し、当該物理ベクトルレジスタの番号を最新状態情報として拡張ビット部800へ送信する。なお、レジスタ管理部700は、論理ベクトルレジスタの更新履歴に基づいて、自己が管理している過去の論理ベクトルレジスタと物理ベクトルレジスタの対応関係から、論理ベクトルレジスタの最新状態を保持している物理ベクトルレジスタを選択すればよい。
次に、図12を参照して、拡張ビット部800について説明する。
拡張ビット部800は、拡張ビット格納部8000、物理0拡張ビットレジスタ82−0〜物理n拡張ビットレジスタ82−n(nは、物理ベクトルレジスタの数)、更新部8400を有する。その他の部分は、第1の実施形態と同様である。
拡張ビット格納部8000は、物理ベクトルレジスタ数分の拡張ビットレジスタを備える。物理ベクトルレジスタの数がnである場合(nは任意の数)、拡張ビット格納部8000は、物理0拡張ビットレジスタ82−0〜物理n拡張ビットレジスタ82−nを備える。物理0拡張ビットレジスタ82−0〜物理n拡張ビットレジスタ82−nはそれぞれ、物理ベクトルレジスタのエントリ数と同数のエントリを有し、各エントリに拡張ビットを格納する。物理0拡張ビットレジスタ82−0〜物理n拡張ビットレジスタ82−nはそれぞれ、パス820−0〜パス820−nを介して更新部8400を接続している。また、物理0拡張ビットレジスタ82−0〜物理n拡張ビットレジスタ82−nはそれぞれ、パス821−0〜パス821−nを介してリードセレクタ85と接続している。
次に、図13を参照して、更新部8400について説明する。
更新部8400は、ライトセレクタ8401、演算回路8420を有する。その他の部分は、第1の実施形態と同様である。
ライトセレクタ8401は、パス820−0〜パス820−nのうちの1つを選択し、選択したパスを介して物理0拡張ビットレジスタ82−0〜物理n拡張ビットレジスタ82−nのいずれかから拡張ビットを受信する。ライトセレクタ8401は、パス701を介してレジスタ管理部700から、最新状態情報を受信する。ライトセレクタ8401は、最新状態情報で示される物理ベクトルレジスタ番号に対応するパスを選択し、拡張ビットを受信する。ライトセレクタ8401は、受信した拡張ビットを、パス84010を介して演算回路8420へ送信する。例えば、最新状態情報が“2”であった場合、ライトセレクタ8401は、物理ベクトルレジスタ2番に対応するパス820−2を選択し、拡張ビットを受信する。なお、最新状態情報が初期値であった場合(例えば、NULL等)、パス70を介して受信したライト物理ベクトルレジスタ番号と対応するパスを選択する。例えば、ライト物理ベクトルレジスタ番号が“0”であった場合、ライトセレクタ8401は、パス820−0を選択する。
演算回路8420は、マスク識別回路841から受信したマスクビットと、ライトセレクタ8401から受信した拡張ビットとに基づいて、所定の演算を実行する。詳細は後述する。
更新判定回路843は、パス70を介して受信したライト物理ベクトルレジスタ番号に対応するパスを、844−0乃至844−nから選択する。例えば、ライト物理ベクトルレジスタ番号が“1”の場合、パス844−1を選択する。その他の機能は、第1の実施形態と同様である。
次に、図14を参照して、演算回路8420について説明する。
演算回路8420は、マスクビット格納部8421、拡張ビット格納部8422及び演算実行部8423を有する。
マスクビット格納部8421は、マスク識別回路841から受信したマスクビットを格納する。
拡張ビット格納部8422は、ライトセレクタ8401から受信した拡張ビットを格納する。
演算実行部8423は、マスクビット格納部8421に格納された値と、拡張ビット格納部8422に格納された値とに基づいて、所定の演算を実行する。演算実行部8423は、マスクビット格納部8421に格納されている値が“1”である場合、演算実行部8423は、拡張ビット格納部8422に格納されている値をインクリメントする。例えば、拡張ビット格納部8422に格納されている値が“010”である場合、演算実行部8423は、当該値を“1”インクリメントして、“011”とするように構成すればよい。なお、演算実行部8422による演算処理はこれに限定されるものではなく、例えば、インクリメントする量を1以外としてもよい。また、インクリメントするのではなく、拡張ビット格納部8422に格納されている値を所定の量だけデクリメントするように構成してもよい。マスクビット格納部8421に格納されている値が“0”である場合、演算実行部8423は、演算処理を実行せず、拡張ビット格納部8422に格納されている値をそのままパス80へ送信する。演算実行部8423は、演算結果をWEXとして、パス80を介してポインタ合成部9へ送信する。拡張ビットの値は、上述したように(m−x)ビットの値となる。よって、上限値及び下限値が存在する。例えば、拡張ビットが3ビットの値である場合、上限値は“111”、下限値は“000”となる。演算実行部8423は、演算処理の結果が上限値を超過した場合、演算結果を下限値の値に設定する。また、演算実行部8423は、演算処理の結果が下限値を下回る場合、演算結果を上限値の値に設定する。
なお、拡張ビット格納部8422に格納されている値が初期値(例えば、NULL等)の場合、演算実行部8423は、演算処理を実行せず、拡張ビットの値を上限値若しくは下限値のいずれかに設定する処理をする。但し、この場合、上限値若しくは下限値以外の任意の値を設定してもよい。
次に、図15のフローチャートを参照して、演算回路8420による演算処理について説明する。
演算回路8420は、マスク識別回路841からマスクビットを受信し、マスクビット格納部8421に格納する(S21)。
演算回路8420は、ライトセレクタ8401により選択された拡張ビットを、拡張ビット格納部8422に格納する(S22)。
演算実行部8423は、拡張ビット格納部内の拡張ビットの値が初期値(例えば、NULL等)か否かを判断する(S23)。
拡張ビットの値が初期値であった場合(S23でYesの場合)、演算実行部8423は、拡張ビットの値を設定する(S24)。演算実行部8423は、拡張ビットの値を上限値若しくは下限値に設定する。また、上限値若しくは下限値以外の任意の値に設定してもよい。
演算実行部8423は、マスクビットがエントリへの書込みを許可しているか否かを判断する(S25)。例えば、マスクビットが“1”である場合、書込みが許可されていると判断する。
書込みが許可されていると判断した場合(S25でYesの場合)、演算実行部8423は、拡張ビット格納部8422に格納されている値に対して演算処理を行う(S26)。例えば、当該値をインクリメント又はデクリメントするという演算処理を行う。ここで、演算処理の結果が、拡張ビットの値の上限値を超過した場合、演算実行部8423は、演算処理の結果として拡張ビットの下限値を設定する。また、演算処理の結果が、拡張ビットの値の下限値を下回った場合、演算実行部8423は、演算処理の結果として拡張ビットの上限値を設定する。
次に、図16、図17及び図18を参照して、第2の実施形態において命令を実行した場合について説明する。なお、説明においては、mが4、xが2の場合、即ち、ベクトルレジスタ1のエントリ数が16、物理ベクトルレジスタのエントリ数が4の場合について説明する。また、物理ベクトルレジスタの数は4であるものとして説明する。ベクトルレジスタ1には1つの論理ベクトルレジスタ番号(0番)が与えられ、また、論理ベクトルレジスタ0番の要素数は4であるものとする。つまり、ベクトルレジスタ1は、プログラムからは要素数が4(エントリ数が4)の1つの論理ベクトルレジスタとしてアクセスされる。
図16に、レジスタ・リネーミングを実行した場合における、論理ベクトルレジスタのエントリと、物理ベクトルレジスタのエントリとの対応表を示す。当該対応表に基づいて、論理ベクトルレジスタと物理ベクトルレジスタとの関連付けが行われる。なお、当該対応表は一例であり、関連付けはこれに限定されるものではない。
図17(a)〜(b)及び図18(c)〜(d)を参照して、論理ベクトルレジスタ0番にベクトルデータを書込む通常命令を1命令(以降、命令0)、マスク付き命令を2命令(以降、それぞれ命令M1、命令M2)実行した場合について説明する。なお、図17及び図18において、ベクトルレジスタ1のエントリをe0〜e15とし、各物理ベクトルレジスタのエントリをfe0〜fe3とする。なお、ベクトルレジスタ1のエントリe0〜e15のいずれか4つが、論理ベクトルレジスタ0番の4つのエントリのいずれかと対応付けられる。つまり、物理ベクトルレジスタのエントリと関連付けられる論理ベクトルレジスタ0番のエントリは、ベクトルレジスタ1のエントリのうちのいずれか4つのエントリとなる。
図17(a)に初期状態を示す。初期状態は、物理0拡張ビットレジスタ82−0〜物理3拡張ビットレジスタ82−3の全ての値が初期値(ここでは、ハイフン(−)で表す)となっているものとする。ベクトルレジスタ1の全エントリ、物理ベクトルレジスタ0番〜物理ベクトルレジスタ3番の全エントリは、それぞれ初期値(ここでは、ハイフン(−)で表す)となっているものとする。また、リネーム情報、最新状態情報共に初期値(ここでは、ハイフン(−)で表す)であるものとする。
命令0を実行した場合について説明する。
なお、命令の発行により、マスク部6、レジスタ管理部700、レジスタ制御部12に制御情報が渡される。以下、命令実行について説明する場合には、全て同様とする。
命令0の論理ベクトルレジスタ0番は、レジスタ管理部700においてレジスタ・リネーミングにより、物理ベクトルレジスタ2番が指定されるものとする。命令0は通常命令なので、マスク識別回路841の出力は“1”となる。マスク識別回路841の出力は、マスクビット格納部8421へ格納される。
命令0は通常命令なので、各エントリに対応するマスク識別回路841の出力は、全て“1”となる。レジスタ管理部700から送信された最新状態情報が初期値なので、ライトセレクタ8401により、ライト物理ベクトルレジスタ番号“2”に対応する物理2拡張ビットレジスタ82−2の値が選択される。ライトセレクタ8401により選択された値は、拡張ビット格納部8422に格納される。演算回路8420は、マスクビット格納部8421に格納された値及び拡張ビット格納部8422に格納された値により演算処理を実行する。ここで、物理2拡張ビットレジスタ82−2に格納されている値は初期値なので、演算回路8420は、ここでは、拡張ビットの下限値である“00”を演算結果として出力する。演算結果は、更新判定回路843により、パス844−2を介して、物理2拡張ビットレジスタ82−2の対応するエントリに書込まれる。
物理ベクトルレジスタ2番の各エントリと、論理ベクトルレジスタ0番の各エントリとの関連付けは、以下のように行われる。
1)物理ベクトルレジスタ2番のエントリ0(fe0)に対応するWP(2進数で“00”)により、物理0拡張ビットレジスタ82−0〜物理n拡張ビットレジスタ82−nから、対応する1ビットの値が、拡張ビットレジスタ制御部86により読み出される。読み出された値は、それぞれパス820−0〜パス820−nを介して更新部8400へ送信される。
2)マスク識別回路841は、マスク部6からパス60を介して、WPに対応するマスクレジスタの内容及びマスク情報を受信する。命令0は通常命令なので、マスク識別回路841は、マスク情報に基づいて1ビットの値“1”を演算回路8420へ出力する。
3)ライトセレクタ8401は、パス70を介してライト物理ベクトルレジスタ番号“2”を受信する。また、ライトセレクタ8401は、パス701を介して、最新状態情報を受信する。最新状態情報が初期値であるので、ライトセレクタ8401は、ライト物理ベクトルレジスタ番号“2”に対応するパス820−2を選択し、物理2拡張ビットレジスタの値である初期値を演算回路842へ送信する。ここで、初期値として、例えばNULLデータ等が送信される。
4)演算回路8420は、ライトセレクタ8401から受信した初期値が拡張ビット格納部8422に格納されているので、拡張ビットの下限値である“00”を演算結果として出力する。演算回路8420は、当該演算結果をパス80を介してポインタ合成部9及び更新判定回路843へ送信する。演算結果は、WEXとしてポインタ合成部9へ送信される。
5)更新判定回路843は、パス70を介してライト物理ベクトルレジスタ番号“2”を受信する。また、更新判定回路843は、パス80を介して演算回路842の演算結果を受信する。ライト物理ベクトルレジスタ番号が“2”なので、更新判定回路843は、パス844−2に対して演算結果及び更新指示を送信する。
6)物理2拡張ビットレジスタ82−2は、WPと対応するエントリに、パス844−2を介して更新判定回路843から受信した演算結果を書込む。
7)ポインタ合成部9は、パス80を介して受信したWEXと、パス40を介して受信したWPからWP合成回路92によりライト拡張ポインタを生成する。WEXは“00”、WPは“00”であるので、ライト拡張ポインタは2進数の“0000”となる。ライト拡張ポインタ “0000”は、図16の対応表により、ベクトルレジスタ1のe0を指す。
以上のようにして、論理ベクトルレジスタ0番エントリ0は、ベクトルレジスタ1のe0及び物理ベクトルレジスタ2番のfe0が関連付けられる。命令0により、ライト拡張ポインタ“0000”で指定されるベクトルレジスタ1のエントリe0にベクトルデータの要素が書込まれる。つまり、プログラムにより、論理ベクトルレジスタ0番のエントリ0に、ベクトルレジスタ1のe0に書込まれたベクトルデータの要素が書込まれるということである。また、物理的には、ベクトルレジスタ1のe0に対応する物理ベクトルレジスタ2番のエントリfe0にベクトルデータの要素が書込まれる。
なお、物理ベクトルレジスタ2番のエントリ1以降は、WPを+1(インクリメント)して、上記 1)から物理ベクトルレジスタ1番のエントリ数分繰り返す。WPが“00”〜“11”まで変化した際に物理ベクトルレジスタ2番と関連付けられるベクトルレジスタ1のエントリは、それぞれ、e0、e1、e2、e3となる。図17(b)において、fe0(e0)、fe1(e1)、fe2(e2)、fe3(e3)と表現する。また、論理ベクトルレジスタ0番の4つのエントリはそれぞれ、ベクトルレジスタ1のe0、e1、e2、e3と関連付けられる。
図17(b)に、命令0の実行後の状態を示す。
物理2拡張ビットレジスタ82−2は、全てのビットの値が“00”となる。ベクトルレジスタ1のe0〜e3(即ち、論理ベクトルレジスタ0番のエントリ0〜3)はそれぞれA、B、C、Dが格納されている。このとき、物理ベクトルレジスタ2番の4つのエントリfe0〜fe3は、ベクトルレジスタ1のe0〜e3(即ち、論理ベクトルレジスタ0番のエントリ0〜3)のそれぞれが対応し、その内容は、A、B、C、Dとなる。
命令0の実行後、物理ベクトルレジスタ2番にはレジスタ・リネーミング後のレジスタ状態が保持され、他の物理ベクトルレジスタにはレジスタ・リネーミング前のレジスタ状態が保持されている。よって、レジスタ・リネーミングが正しく行われていることになる。
次に、マスク付き命令である命令M1の実行について説明する。
命令M1の論理ベクトルレジスタ0番は、レジスタ管理部700においてレジスタ・リネーミングにより、物理ベクトルレジスタ0番が指定されるものとする。マスク識別回路841の出力は、マスクビット格納部8421へ格納される。
命令M1はマスク付き命令であり、各エントリに対応するマスク識別回路841の出力は、それぞれ1、1、0、0となる。レジスタ管理部700から送信された最新状態情報が物理ベクトルレジスタ2番を示す“2”であるので、ライトセレクタ8401により、物理2拡張ビットレジスタ82−2の値が選択される。ライトセレクタ8401により選択された値は、拡張ビット格納部8422に格納される。演算回路8420は、マスクビット格納部8421に格納された値及び拡張ビット格納部8422に格納された値により演算処理を実行する。演算回路8420は、演算結果をポインタ合成部9及び更新判定回路843に送信する。演算結果は、更新判定回路843により、パス844−0を介して、物理0拡張ビットレジスタ82−0の対応するエントリに書込まれる。ライト物理ベクトルレジスタ番号が“0”だからである。
物理ベクトルレジスタ0番の各エントリと、論理ベクトルレジスタ0番の各エントリとの関連付けは、以下のように行われる。
1−0)物理ベクトルレジスタ2番のエントリ0(fe0)に対応するWP(2進数で“00”)により、物理0拡張ビットレジスタ82−0〜物理n拡張ビットレジスタ82−nから、対応する1ビットの値が、拡張ビットレジスタ制御部86により読み出される。読み出された値は、それぞれパス820−0〜パス820−nを介して更新部8400へ送信される。
2−0)マスク識別回路841は、マスク部6からパス60を介して、WPに対応するマスクレジスタの内容及びマスク情報を受信する。命令M1はマスク付き命令であり、エントリ0に対応する値は“1”である。マスク識別回路841は、マスクビット格納部8421へ出力する。
3−0)ライトセレクタ8401は、パス70を介してライト物理ベクトルレジスタ番号“0”を受信する。また、ライトセレクタ8401は、パス701を介して、最新状態情報を受信する。最新状態情報は“2”(実際は2進数で表現されるが、便宜上10進数で表現する。以下同様とする。)であるので、ライトセレクタ8401は、パス820−2を選択し、物理2拡張ビットレジスタの値である“00”を演算回路8420の拡張ビット格納部8422へ送信する。
4−0)演算回路8420は、マスクビット格納部8421の値と拡張ビット格納部8422に格納されている値により、演算処理を実行する。演算回路8420は、マスクビット格納部8421に格納されている値が“1”であるので、演算処理を実行する。ここでは、演算回路8420は、拡張ビット格納部8422に格納されている値の“00”を1だけインクリメントした“01”を演算結果として生成する。演算回路8420は、当該演算結果をパス80を介してポインタ合成部9及び更新判定回路843へ送信する。演算結果は、WEXとしてポインタ合成部9へ送信される。
5−0)更新判定回路843は、パス70を介してライト物理ベクトルレジスタ番号“0”を受信する。また、更新判定回路843は、パス80を介して演算回路8420の演算結果を受信する。ライト物理ベクトルレジスタ番号が“0”なので、更新判定回路843は、パス844−0に対して演算結果及び更新指示を送信する。
6−0)物理0拡張ビットレジスタ82−0は、WPと対応するエントリに、パス844−0を介して受信した演算結果を書込む。
7−0)ポインタ合成部9は、パス80を介して受信したWEXと、パス40を介して受信したWPからWP合成回路92によりライト拡張ポインタを生成する。WEXは“01”、WPは“00”であるので、ライト拡張ポインタは2進数の“0100”となる。ライト拡張ポインタ“0100”は、図16の対応表により、ベクトルレジスタ1のe4を指す。
物理ベクトルレジスタ0番のエントリ1以降も、上記と同様に関連付けが行われる。
物理ベクトルレジスタ0番と関連付けられるベクトルレジスタ1のエントリは、それぞれ、e4、e5、e2、e3となる。図18(c)において、fe0(e4)、fe1(e5)、fe2(e2)、fe3(e3)と表現する。また、論理ベクトルレジスタ0番の4つのエントリはそれぞれ、ベクトルレジスタ1のe4、e5、e2、e3と関連付けられる。
図18(c)に、命令M1の実行後の状態を示す。
物理0拡張ビットレジスタ82−0の値は、それぞれ“01”、“01”、“00”、“00”となる。ベクトルレジスタ1のe4及びe5にはそれぞれE、Fが格納されている。このとき、物理ベクトルレジスタ0番の4つのエントリfe0〜fe3は、ベクトルレジスタ1のe4、e5、e2、e3(即ち、論理ベクトルレジスタ0番のエントリ0〜3)のそれぞれが対応し、その内容は、E、F、C、Dとなる。
命令M1の実行後、物理ベクトルレジスタ0番にはレジスタ・リネーミング後のレジスタ状態が保持され、他の物理ベクトルレジスタにはレジスタ・リネーミング前のレジスタ状態が保持されている。よって、レジスタ・リネーミングが正しく行われていることになる。
命令M2も、上記と同様の処理により実行される。
図18(d)に命令M2の実行後の状態を示す。命令M1の実行後と同様、レジスタ・リネーミングが正しく実行されている。
以上のように、本発明の第2の実施形態によれば、ベクトルレジスタのエントリ数、物理ベクトルレジスタのエントリ数及び物理ベクトルレジスタの数を任意に設定した場合でも、マスク演算の実行時において、ベクトルレジスタについてレジスタ・リネーミングが可能となる。これにより、ベクトルデータを用いる処理において、命令の実行性能の向上を図ることが可能になる。なお、ベクトルデータを処理する情報処理装置において、ベクトルデータを格納するベクトルレジスタの数は非常に多くなるので、ベクトルレジスタのエントリ数、物理ベクトルレジスタのエントリ数及び物理ベクトルレジスタの数を任意に設定した場合においても、レジスタ・リネーミングを可能とし、命令の実行性能の向上が図れるという効果は格別のものである。