本発明の実施形態を図面に基づいて説明する。
以下に説明する各実施形態によるプロセッサは、レジスタファイルからのデータ(オペランド)の供給が不要なサイクルでは、レジスタファイルからのデータ読み出しに係る信号の変化を抑止することにより、レジスタファイルの無駄な電力消費を抑制する。
プロセッサにおいてレジスタファイルからのデータの供給が不要なサイクルの一例としては、例えば命令のソースデータ(ソースオペランド)がフォワーディングにより供給される場合がある。先行する命令の演算結果がフォワーディングにより後続の命令のソースデータとして供給されるときには、レジスタファイルから読み出されるデータ(オペランド)は後続の命令のソースデータとして使用されない。つまり、後続の命令のソースデータがフォワーディングにより供給される場合には、そのソースデータを供給するためにレジスタファイルからのデータ読み出しを行うことは無駄であり、レジスタファイルからの読み出し動作を行う必要がない。したがって、命令のソースデータがフォワーディングにより供給される場合に、レジスタファイルからのデータ読み出しに係る信号変化を抑止することで消費電力の低減が図れる。
また、プロセッサにおいてレジスタファイルからのデータの供給が不要なサイクルの他の例としては、例えば命令が発行されないサイクルがある。命令が発行されなければ有意な演算処理等そのものが実行されることがないので、レジスタファイルからのデータの読み出し動作を行う必要がないとともに、そのときレジスタファイルからのデータ読み出しに係る信号が変化すると無駄な電力消費が生じることになる。命令が発行されないサイクルにおいては、レジスタファイルからのデータ読み出しに係る信号変化を抑止することで消費電力が増加することが防げる。
プロセッサにおいてレジスタファイルからのデータの供給が不要なサイクルとして、命令のソースデータがフォワーディングにより供給される場合や命令が発行されないサイクルを例示したが、これらは一例であって、これに限定されるものではない。なお、以下では、先行する命令と後続の命令との間に真の依存関係(RAW<read after write>ハザード)があり、かつ先行する命令の演算結果がフォワーディングにより後続の命令のソースデータ(ソースオペランド)として供給されるときにレジスタファイルからのデータ読み出しに係る信号変化を抑止する場合を例に各実施形態によるプロセッサについて説明する。
(第1の実施形態)
本発明の第1の実施形態について説明する。
図1は、第1の実施形態によるプロセッサの構成例を示す図である。図1において、IFは命令フェッチステージ、IDは命令デコードステージ、RRはレジスタ読み出しステージ、EXは演算実行ステージ、MAはメモリアクセスステージ、WBはライトバックステージである。図1に示すプロセッサは、命令デコードステージIDとレジスタ読み出しステージRRとが分離した6ステージのパイプライン構成のスカラプロセッサである。
命令フェッチステージIFでは、アドレス指定によって命令バッファ11から命令が読み出される。命令バッファ11には、プロセッサにてプログラムに応じた処理を実行するための命令列が格納されている。
命令デコードステージIDでは、命令フェッチステージIFにおいて読み出された(フェッチされた)命令がデコードされる。命令デコードステージIDにおいて、デコード回路21は、命令フェッチステージIFにおいて読み出された命令からオペランドのフィールド等を分離する。また、命令デコードステージIDにおいて、発行制御回路22は、当該命令が発行可能であるか否か、先行する命令との依存関係を判定する処理や、フォワーディングを行うか否かを判定する処理等を行う。命令デコードステージIDにおけるデコード回路21や発行制御回路22によるデコード結果等に基づいて制御情報23が生成される。
レジスタ読み出しステージRRでは、命令デコードステージIDにおいて生成された制御情報23に応じてレジスタファイル33に対する読み出し動作が行われる。レジスタ読み出しステージRRにおいて、指定信号制御回路31、32は、制御情報23を基に発行される読み出しオペランド指定信号ROPRA及びオペランド制御信号OPRCが入力される。指定信号制御回路31、32は、オペランド制御信号OPRCに応じて、入力された読み出しオペランド指定信号ROPRA、又は前のサイクルで(もしくは先行する命令でのレジスタ読み出しステージRRにおいて)レジスタファイル33に出力した読み出しオペランド指定信号ROPRBを、現命令における読み出しオペランド指定信号ROPRBとして出力する。
指定信号制御回路31は、例えばマルチプレクサ回路41及びレジスタ42を有する。指定信号制御回路31において、マルチプレクサ回路41は、読み出しオペランド指定信号ROPRA及びレジスタ42の出力が入力されるとともに、制御信号としてオペランド制御信号OPRCが入力される。マルチプレクサ回路41は、読み出しオペランド指定信号ROPRA又はレジスタ42の出力の一方をオペランド制御信号OPRCに応じて出力し、その出力が読み出しオペランド指定信号ROPRBとして指定信号制御回路31より出力される。また、マルチプレクサ回路41の出力は、先行する命令において出力した読み出しオペランド指定信号ROPRBとしてレジスタ42によって保持され、マルチプレクサ回路41に供給される。
同様に、指定信号制御回路32は、例えばマルチプレクサ回路43及びレジスタ44を有する。指定信号制御回路32におけるマルチプレクサ回路43及びレジスタ44は、指定信号制御回路31におけるマルチプレクサ回路41及びレジスタ42にそれぞれ対応する。また、指定信号制御回路32における動作と指定信号制御回路31における動作とは同様であるので、指定信号制御回路32に係る説明は省略する。なお、指定信号制御回路31、32は、オペランド制御信号OPRCに応じて、読み出しオペランド指定信号ROPRA又は前のサイクル(先行する命令)で出力した読み出しオペランド指定信号ROPRBを、現命令における読み出しオペランド指定信号ROPRBとして選択的に出力できれば良く、図1に示した構成に限定されるものではない。
指定信号制御回路31、32から出力された読み出しオペランド指定信号ROPRBは、レジスタファイル33に入力される。そして、レジスタファイル33から読み出しオペランド指定信号ROPRBで指定されたレジスタに格納されているデータが読み出され出力される。ここで、レジスタファイル33は、複数のレジスタを有し、命令に応じた処理の実行に際して供給されるソースデータや処理結果である演算結果等を保持している。
レジスタファイル33から出力されたデータは、マルチプレクサ回路34に入力される。また、マルチプレクサ回路34には、フォワーディング回路40より出力されたデータが入力されるとともに、オペランド制御信号OPRCが入力されている。マルチプレクサ回路34に入力されたレジスタファイル33からのデータやフォワーディング回路40からのデータは、オペランド制御信号OPRCに応じて選択されソースデータ(ソースオペランド)35として演算器36等に入力される。
ここで、フォワーディング回路40は、フォワーディングによるデータ供給を行うための回路である。フォワーディング回路40は、1又は複数の先行する命令(1又は複数サイクル前に実行された命令)での演算実行ステージEX、メモリアクセスステージMA、及びライトバックステージWBに係る処理結果(演算結果37、39等)が入力される。フォワーディング回路40は、入力された各ステージに係る処理結果をマルチプレクサ回路34にフォワーディングデータとして出力する。
演算実行ステージEXでは、命令によって指定された演算処理が演算器36により実行される。演算器36は、制御情報24を基に発行される演算器制御信号ALUCが入力され、ソースデータ35を用いて演算器制御信号ALUCに応じた演算処理を実行する。また、メモリアクセスステージMAでは、メモリアクセス回路38により図示しないデータメモリに対するアクセス(データのロード/ストア)が行われる。さらに、ライトバックステージWBでは、演算実行ステージEXやメモリアクセスステージMAでの演算結果37、39(演算器の演算結果やメモリから読み出したデータ)がレジスタファイル33の書き込みオペランドとして指定されたレジスタに書き込まれる。なお、制御情報24は、制御情報23と同様のものであり、図示していないがメモリアクセスステージMA及びライトバックステージWBにおいても同様の制御情報に基づいて各ステージでの処理が実行される。
以下に、前述したレジスタ読み出しステージRRにおける動作を、命令のソースデータ(ソースオペランド)をレジスタファイル33から読み出して供給する場合、及びフォワーディングにより供給する場合のそれぞれについて説明する。ここで、命令のソースデータとして、レジスタファイル33から読み出したデータを供給するか、フォワーディングにより供給するかは、オペランド制御信号OPRCによって制御される。
<レジスタファイル33から読み出したデータを命令のソースデータとする場合>
オペランド制御信号OPRCにより、レジスタファイル33からのデータを命令のソースデータとして供給することが示される。このとき、指定信号制御回路31、32は、オペランド制御信号OPRCに従って、入力された読み出しオペランド指定信号ROPRAを現命令における読み出しオペランド指定信号ROPRBとして出力する。すなわち、図1に例示した指定信号制御回路31、32において、マルチプレクサ回路41、43は、オペランド制御信号OPRCに従い、読み出しオペランド指定信号ROPRAを選択して出力する。
これにより、レジスタファイル33に入力される読み出しオペランド指定信号ROPRBが読み出しオペランド指定信号ROPRAに応じて変化し、読み出しオペランド指定信号ROPRAが指定するレジスタのデータが読み出されレジスタファイル33より出力される。そして、マルチプレクサ回路34は、オペランド制御信号OPRCに従って、レジスタファイル33から出力されたデータを選択し、ソースデータ35として出力する。
<フォワーディングにより命令のソースデータを供給する場合>
オペランド制御信号OPRCにより、フォワーディングによって命令のソースデータを供給することが示される。このとき、指定信号制御回路31、32は、オペランド制御信号OPRCに従って、前のサイクルでレジスタファイル33に出力した読み出しオペランド指定信号ROPRBを、現命令における読み出しオペランド指定信号ROPRBとして出力する。すなわち、図1に例示した指定信号制御回路31、32において、マルチプレクサ回路41、43は、オペランド制御信号OPRCに従い、レジスタ42、44の出力を選択して出力する。また、マルチプレクサ回路34は、オペランド制御信号OPRCに従って、フォワーディング回路40から出力されたデータを選択し、ソースデータ35として出力する。
このように、レジスタファイル33に入力される読み出しオペランド指定信号ROPRBは、変化することなく、前のサイクルにおいてレジスタファイル33に入力された状態を維持する。そのため、レジスタファイル33からマルチプレクサ回路34に入力されるデータも変化することなく、先行する命令のときと同じデータである。つまり、レジスタファイル33に入力される読み出しオペランド指定信号ROPRB及びレジスタファイル33から出力されるデータにおいて、信号の変化は発生しない。したがって、レジスタファイル33からのデータ読み出しに係る信号(データを含む)が不要に変化することを抑止し、レジスタファイル33の無駄な電力消費を抑制することができ、プロセッサにおける消費電力を低減することができる。
前述した説明では、命令デコードステージIDとレジスタ読み出しステージRRが分離したスカラプロセッサを一例として説明したが、命令デコードステージIDとレジスタ読み出しステージRRが分離していないスカラプロセッサにも適用することが可能である。例えば、命令デコードステージIDにおいてレジスタファイルからのデータ読み出しを行う5ステージのパイプライン構成のスカラプロセッサに適用可能である。このような命令デコードステージIDとレジスタ読み出しステージRRが分離していないスカラプロセッサでは、通常は遅延時間の短縮の観点から命令のデコード処理とレジスタファイルからの読み出し処理とを並行して行う。しかし、読み出しオペランドに係る情報はデコード回路21の出力から得られるが、フォワーディングを行うか否かの判定結果は発行制御回路22の出力から得られる。したがって、フォワーディングを行うか否かの判定結果が得られてからレジスタファイルに対する読み出し動作を行うようにすると処理が直列となって遅延時間が増大してしまうことが考えられる。つまり、命令デコードステージIDとレジスタ読み出しステージRRが分離していないスカラプロセッサについて前述した本実施形態に係る技術を適用した場合には、遅延時間が増大するおそれはあるが、プロセッサにおける消費電力は低減される。
(第2の実施形態)
次に、本発明の第2の実施形態について説明する。
以下に、ベクトルデータを複数サイクルに渡って処理するベクトルプロセッサに適用した場合について説明する。ベクトルプロセッサは、配列型のレジスタファイルを有し、配列データに対して演算処理やロード/ストア処理等を行う。ベクトルプロセッサについて、図2を参照し説明する。
図2(A)は、ベクトルレジスタファイルの例を示す図であり、図示のように物理番号は論理番号とベクトル長VLとにより決まる。図2(A)には、ベクトルレジスタが1−halfword×512エントリであって、ベクトル長VLが32の場合における物理番号と論理番号との対応を示している。例えば、物理番号0から31が論理番号0に対応し、物理番号32から63が論理番号1に対応する。
図2(B)は、ベクトルプロセッサにおける動作を説明するための図である。図2(B)には、演算器が1サイクルで4データ(1−halfword×4)について演算を行うSIMD(Single Instruction Multiple Data)構成で、ベクトル実行パイプラインを2つ有するベクトルプロセッサの動作例を示している。また、図2(B)に動作例を示したベクトルプロセッサは、1サイクルに発行可能な命令数が1であり、ベクトル長が32であるとする。したがって、各実行パイプラインは1つのベクトル命令をVL/4=8サイクルで実行する。
図2(B)に示す例では、第1サイクル〜第8サイクルにおいて、命令1:(vadd r1,r2,r3)に係る処理がベクトル実行パイプラインp0で実行される。命令1:(vadd r1,r2,r3)は、レジスタr2の内容とレジスタr3の内容とを加算して、加算結果をレジスタr1に格納する演算処理を実行させる命令である。すなわち、第1サイクル〜第8サイクルにおいて、物理番号64〜95に対応する領域のデータと物理番号96〜127に対応する領域のデータとが加算され、加算結果が物理番号32〜63に対応する領域に書き込まれる。
命令1に続いて、命令2:(vadd r5,r1,r4)が発行される。命令2:(vadd r5,r1,r4)は、レジスタr1の内容とレジスタr4の内容とを加算して、加算結果をレジスタr5に格納する演算処理を実行させる命令である。すなわち、命令2に係る演算処理では、物理番号32〜63に対応する領域のデータと物理番号128〜159に対応する領域のデータとを加算し、加算結果を物理番号160〜191に対応する領域に書き込む。ここで、ペナルティが0であるとすると、第2サイクル〜第9サイクルにおいて物理番号32〜63に対応する領域が順次参照されてもストールすることがないので命令1に続けて命令2を発行することができる。したがって、命令1に続いて命令2が発行され、第2サイクル〜第9サイクルにおいて命令2に係る処理がベクトル実行パイプラインp1で実行される。
そして、第8サイクルにおいてベクトル実行パイプラインp0での命令1に係る処理が完了した後、命令3が発行され、第9サイクル〜第16サイクルにおいて命令3に係る処理がベクトル実行パイプラインp0で実行される。
図3は、第2の実施形態によるプロセッサの構成例を示す図である。図3において、IFは命令フェッチステージ、IDは命令デコードステージ、RRはレジスタ読み出しステージ、EXは演算実行ステージ、MAはメモリアクセスステージ、WBはライトバックステージである。図3に示すプロセッサは、命令デコードステージIDとレジスタ読み出しステージRRとが分離した6ステージのパイプライン構成のベクトルプロセッサであり、2つのベクトル実行パイプラインp0、p1を有している。
命令フェッチステージIFでは、アドレス指定によって命令バッファ51から命令が読み出される。命令バッファ51には、プロセッサにてプログラムに応じた処理を実行するための命令列が格納されている。
命令デコードステージIDでは、命令フェッチステージIFにおいて読み出された命令がデコードされる。デコード回路61は、命令フェッチステージIFにおいて読み出された命令からオペランドのフィールド等を分離する。また、発行制御回路62は、当該命令が発行可能であるか否か、先行する命令との依存関係を判定する処理や、フォワーディングを行うか否かを判定する処理等を行う。そして、命令が発行可能なベクトル実行パイプラインp0、p1に対して、デコード回路61や発行制御回路62によるデコード結果等に基づいて生成された制御情報64A、64Bが出力される。
本実施形態における制御情報は、デコード回路61や発行制御回路62によるデコード結果に係る情報に加え、パイプラインの状態に係る情報を含む。また、制御情報は、命令の実行に伴って命令更新回路66A、66Bにより更新され、例えば命令の実行に伴ってパイプラインの状態に係る情報(読み出し対象のレジスタ番号等)が更新される。
なお、2つのベクトル実行パイプラインp0、p1の各々の構成や動作は同様であるので、以下ではベクトル実行パイプラインp0を例に説明し、適宜ベクトル実行パイプラインp1の対応する構成要素の符号を括弧書きにより付加する(第3の実施形態についても同様)。
レジスタ読み出しステージRRでは、制御情報64A(64B)に応じてベクトルレジスタファイル72に対する読み出し動作が行われる。指定信号制御回路71A(71B)は、制御情報64A(64B)を基に発行される読み出しオペランド指定信号ROPRA0(ROPRA1)及びオペランド制御信号OPRC0(OPRC1)が入力される。指定信号制御回路71A(71B)は、オペランド制御信号OPRC0(OPRC1)に応じて、レジスタファイル72に出力する読み出しオペランド指定信号ROPRB0(ROPRB1)を制御する。指定信号制御回路71A(71B)は、オペランド制御信号OPRC0(OPRC1)に応じて、入力された読み出しオペランド指定信号ROPRA0(ROPRA1)を読み出しオペランド指定信号ROPRB0(ROPRB1)として出力するか、あるいは信号を変化させずに読み出しオペランド指定信号ROPRB0(ROPRB1)を維持する。
指定信号制御回路71A(71B)から出力された読み出しオペランド指定信号ROPRB0(ROPRB1)は、ベクトルレジスタファイル72に入力される。そして、ベクトルレジスタファイル72から読み出しオペランド指定信号ROPRB0(ROPRB1)で指定されたレジスタに格納されているデータが読み出されて、マルチプレクサ回路73A(73B)に入力される。また、マルチプレクサ回路73A(73B)には、フォワーディング回路79より出力されたデータが入力されている。マルチプレクサ回路73A(73B)に入力されたベクトルレジスタファイル72からのデータやフォワーディング回路79からのデータは、オペランド制御信号OPRC0(OPRC1)に応じて選択されソースデータ74A(74B)として演算器75A(75B)等に入力される。
フォワーディング回路79は、フォワーディングによるデータ供給を行うための回路である。フォワーディング回路79は、1又は複数サイクル前の演算実行ステージEX、メモリアクセスステージMA、及びライトバックステージWBに係る処理結果が入力され、入力された各ステージに係る処理結果をマルチプレクサ回路73A(73B)に出力する。
また、レジスタ読み出しステージRRにおいて、命令更新回路66A(66B)は、制御情報64A(64B)を命令実行に伴って適宜更新する。更新された制御情報は、マルチプレクサ回路63A(63B)を介して次の制御情報64A(64B)として出力される。
演算実行ステージEXでは、命令によって指定された演算処理が演算器75A(75B)により実行される。演算器75A(75B)は、ソースデータ74A(74B)を用い、制御情報65A(65B)を基に発行された演算器制御信号ALUC0(ALUC1)に応じた演算処理を実行する。また、メモリアクセスステージMAでは、メモリアクセス回路77A(77B)により図示しないデータメモリに対するアクセス(データのロード/ストア)が行われる。さらに、ライトバックステージWBでは、演算実行ステージEXやメモリアクセスステージMAでの演算結果76A、78A(76B、78B)がベクトルレジスタファイル72の書き込みオペランドとして指定されたレジスタに書き込まれる。なお、制御情報65A(65B)は、制御情報64A(64B)と同様のものであり、図示していないがメモリアクセスステージMA及びライトバックステージWBにおいても同様の制御情報に基づいて各ステージでの処理が実行される。
ここで、レジスタ読み出しステージRRにおける動作について詳しく説明する。
第2の実施形態において、ベクトルレジスタファイル72からのデータを命令のソースデータとする場合には、ベクトルレジスタファイル72からのデータを命令のソースデータとして供給することがオペランド制御信号OPRC0(OPRC1)によって示される。このとき、指定信号制御回路71A(71B)は、オペランド制御信号OPRC0(OPRC1)に従って、入力された読み出しオペランド指定信号ROPRA0(ROPRA1)を読み出しオペランド指定信号ROPRB0(ROPRB1)として出力する。これにより、ベクトルレジスタファイル72から読み出しオペランド指定信号ROPRA0(ROPRA1)によって指定されるレジスタのデータが読み出されて出力される。そして、マルチプレクサ回路73A(73B)は、オペランド制御信号OPRC0(OPRC1)に従って、ベクトルレジスタファイル72からのデータを選択し、ソースデータ74A(74B)として出力する。
一方、フォワーディングにより命令のソースデータを供給する場合には、フォワーディングにより命令のソースデータを供給することがオペランド制御信号OPRC0(OPRC1)によって示される。このとき、指定信号制御回路71A(71B)は、オペランド制御信号OPRC0(OPRC1)に従って、前のサイクルで出力した読み出しオペランド指定信号ROPRB0(ROPRB1)を維持する。また、マルチプレクサ回路73A(73B)は、オペランド制御信号OPRC0(OPRC1)に従って、フォワーディング回路79からのデータを選択し、ソースデータ74A(74B)として出力する。
このように、フォワーディングにより命令のソースデータを供給する場合には、ベクトルレジスタファイル72に入力される読み出しオペランド指定信号ROPRB0(ROPRB1)は、変化することなく、前のサイクルの状態を維持する。そのため、ベクトルレジスタファイル72からの出力データも変化することなく、前のサイクルと同じ状態で維持される。つまり、ベクトルレジスタファイル72に入力される読み出しオペランド指定信号ROPRB0(ROPRB1)及びベクトルレジスタファイル72からの出力データにおいて、信号の変化は発生しない。したがって、ベクトルレジスタファイル72からのデータ読み出しに係る信号(データを含む)が不要に変化することを抑止して無駄な電力消費を抑制することができ、プロセッサにおける消費電力を低減することができる。
(第3の実施形態)
次に、本発明の第3の実施形態について説明する。
図4は、第3の実施形態によるプロセッサの構成例を示す図である。図4において、IFは命令フェッチステージ、IDは命令デコードステージ、EXは演算実行ステージ、MAはメモリアクセスステージ、WBはライトバックステージである。図4に示すプロセッサは、命令デコードステージIDにおいてレジスタファイルからのデータ読み出し動作を行う5ステージのパイプライン構成のベクトルプロセッサであり、2つのベクトル実行パイプラインp0、p1を有している。
命令フェッチステージIFでは、アドレス指定によって、プロセッサにてプログラムに応じた処理を実行するための命令列が格納された命令バッファ81から命令が読み出される。命令デコードステージIDでは、命令フェッチステージIFにおいて読み出された命令がデコードされるとともに、ベクトルレジスタファイル93に対する読み出し動作が行われる。
命令デコードステージIDにおいて、デコード回路82は、命令バッファ81から読み出された命令からオペランドのフィールド等を分離し、得られるオペランド指定情報に応じた読み出しオペランド指定信号ROPRAAを出力する。また、発行制御回路83は、当該命令が発行可能であるか否か、先行する命令との依存関係を判定する処理や、フォワーディングを行うか否かを判定する処理等を行う。そして、命令が発行可能なベクトル実行パイプラインp0、p1に対して、デコード回路82や発行制御回路83によるデコード結果等に基づいて生成した制御情報85A(85B)が出力される。
制御情報85A(85B)は、デコード結果等に係る情報及びパイプラインの状態に係る情報を含み、命令の実行に伴って命令更新回路86A(86B)により適宜更新される。例えば、命令更新回路86A(86B)は、命令の実行に伴って制御情報85A(85B)におけるパイプラインの状態に係る情報(読み出し対象のレジスタ番号等)を更新する。命令更新回路86A(86B)により更新された制御情報は、マルチプレクサ回路84A(84B)を介して次の制御情報85A(85B)として出力される。
また、命令デコードステージIDにおいて、指定信号制御回路91A(91B)は、命令更新回路86A(86B)により更新された制御情報を基に発行される読み出しオペランド指定信号ROPRA0(ROPRA1)及びオペランド制御信号OPRC0(OPRC1)が入力される。指定信号制御回路91A(91B)は、オペランド制御信号OPRC0(OPRC1)に応じて、読み出しオペランド指定信号ROPRA0(ROPRA1)を読み出しオペランド指定信号ROPRA0B(ROPRA1B)として出力するか、あるいは信号を変化させずに読み出しオペランド指定信号ROPRA0B(ROPRA1B)を維持する。
デコード回路82より出力される読み出しオペランド指定信号ROPRAA及び指定信号制御回路91A(91B)から出力される読み出しオペランド指定信号ROPRA0B(ROPRA1B)が、マルチプレクサ回路92A(92B)に入力される。マルチプレクサ回路92A(92B)は、制御情報85A(85B)を基に発行される演算器制御信号ALUC0(ALUC1)に応じて、読み出しオペランド指定信号ROPRAA又は読み出しオペランド指定信号ROPRA0B(ROPRA1B)を読み出しオペランド指定信号ROPRB0(ROPRB1)として出力する。
マルチプレクサ回路92A(92B)から出力された読み出しオペランド指定信号ROPRB0(ROPRB1)は、ベクトルレジスタファイル93に入力される。そして、ベクトルレジスタファイル93から読み出しオペランド指定信号ROPRB0(ROPRB1)で指定されたレジスタに格納されているデータが読み出されて、マルチプレクサ回路94A(94B)に入力される。また、マルチプレクサ回路94A(94B)には、フォワーディング回路100より出力されたデータが入力されている。マルチプレクサ回路94A(94B)に入力されたベクトルレジスタファイル93からのデータやフォワーディング回路100からのデータは、オペランド制御信号OPRC0(OPRC1)に応じて選択されソースデータ95A(95B)として出力される。
なお、演算実行ステージEX、メモリアクセスステージMA、及びライトバックステージWBの各々は、第2の実施形態における演算実行ステージEX、メモリアクセスステージMA、及びライトバックステージWBと同様であるので説明は省略する。ここで、演算器96A、96B、メモリアクセス回路98A、98B、及び演算結果97A、97B、99A、99Bが、図3に示した演算器75A、75B、メモリアクセス回路77A、77B、及び演算結果76A、76B、78A、78Bにそれぞれ対応する。
第3の実施形態でのベクトルレジスタファイルに係る読み出し動作について詳しく説明する。
第3の実施形態によるプロセッサのように命令デコードステージIDにてレジスタファイルからのデータ読み出しを行うプロセッサでは、通常は遅延時間が増大するのを抑制するために命令のデコード処理とレジスタファイルからの読み出し処理とを並行して行う。したがって、発行制御回路83によるフォワーディングを行うか否かの判定結果が得られてから、レジスタファイルに対する読み出し動作を行うようにすると処理が並列ではなくなり遅延時間が増大してしまう。
そこで、本実施形態におけるプロセッサでは、図5に示すように制御を行い、命令実行の1サイクル目ではフォワーディングを行うか否かにかかわらずベクトルレジスタファイル93からのデータ読み出しを行う。そして、命令実行の2サイクル目以降では、フォワーディングを行うか否かの判定結果を基にフォワーディングを行う場合には、ベクトルレジスタファイル93からのデータ読み出しに係る信号の変化を抑止するように制御する。
図5は、本実施形態における読み出し制御の一例を示すフローチャートである。図5に示す制御は、制御パスが制御情報を基に各制御信号を発行することにより実現される。
まず、制御が開始されると(S1)、デコーダ回路82から出力される読み出しオペランド指定信号ROPRAAを選択して出力するよう、マルチプレクサ回路92A(92B)が制御される(S2)。そして、命令実行の1サイクル目であれば(S3のYes)、通常通り読み出しオペランド指定信号ROPRAAで指定されたレジスタのデータをベクトルレジスタファイル93から読み出す(S6)。
続いて、命令に応じた所定のサイクル数だけ処理を実行したか否かが判定され、所定サイクル数の処理が終了していなければ(S8のNo)、ステップS3に戻る。そして、命令実行の2サイクル目以降であれば(S3のNo)、指定信号制御回路91A(91B)から出力される読み出しオペランド指定信号ROPRA0B(ROPRA1B)を選択して出力するよう、マルチプレクサ回路92A(92B)が制御される(S4)。次に、フォワーディングにより命令のソースデータが供給される、すなわちフォワーディングを行うと判定されていれば(S5のYes)、指定信号制御回路91A(91B)から出力される読み出しオペランド指定信号ROPRA0B(ROPRA1B)を変化させないように制御する(S7)。一方、ベクトルレジスタファイル93からのデータを命令のソースデータとして供給する、すなわちフォワーディングを行わないと判定されていれば(S5のNo)、通常通り読み出しオペランド指定信号ROPRA0B(ROPRA1B)で指定されたレジスタのデータをベクトルレジスタファイル93から読み出す(S6)。
ステップS6又はS7の処理を実行した後、命令に応じた所定のサイクル数だけ処理を実行したか否かが再び判定され、所定サイクル数の処理が終了していなければ(S8のNo)ステップS3に戻り、所定サイクル数の処理が終了すると制御を終了する(S9)。
以下、命令のソースデータをベクトルレジスタファイル93から読み出して供給する場合、及びフォワーディングにより供給する場合に分けて命令のソースデータ供給に係る一連の動作を説明する。
まず、ベクトルレジスタファイル93からのデータを命令のソースデータとする場合には、ベクトルレジスタファイル93からのデータを命令のソースデータとして供給することがオペランド制御信号OPRC0(OPRC1)によって示される。このとき、指定信号制御回路91A(91B)は、オペランド制御信号OPRC0(OPRC1)に従って、入力された読み出しオペランド指定信号ROPRA0(ROPRA1)を読み出しオペランド指定信号ROPRA0B(ROPRA1B)として出力する。また、マルチプレクサ回路92A(92B)は、演算器制御信号ALUC0(ALUC1)に基づき、命令実行の1サイクル目では読み出しオペランド指定信号ROPRAAを、2サイクル目以降では読み出しオペランド指定信号ROPRA0B(ROPRA1B)を、読み出しオペランド指定信号ROPRB0(ROPRB1)として出力する。これにより、読み出した命令を基に得られた読み出しオペランド指定信号ROPRB0(ROPRB1)によって指定されるレジスタのデータがベクトルレジスタファイル93から読み出されて出力される。そして、マルチプレクサ回路94A(94B)は、オペランド制御信号OPRC0(OPRC1)に従って、ベクトルレジスタファイル93からのデータを選択し、ソースデータ95A(95B)として出力する。
次に、フォワーディングにより命令のソースデータを供給する場合には、フォワーディングにより命令のソースデータを供給することがオペランド制御信号OPRC0(OPRC1)によって示される。このとき、指定信号制御回路91A(91B)は、オペランド制御信号OPRC0(OPRC1)に従って、前のサイクルで出力した読み出しオペランド指定信号ROPRA0B(ROPRA1B)を維持する。また、マルチプレクサ回路92A(92B)は、演算器制御信号ALUC0(ALUC1)に基づき、命令実行の1サイクル目では読み出しオペランド指定信号ROPRAAを、2サイクル目以降では読み出しオペランド指定信号ROPRA0B(ROPRA1B)を、読み出しオペランド指定信号ROPRB0(ROPRB1)として出力する。マルチプレクサ回路94A(94B)は、オペランド制御信号OPRC0(OPRC1)に従って、フォワーディング回路100からのデータを選択し、ソースデータ95A(95B)として出力する。
このように、フォワーディングにより命令のソースデータを供給する場合には、命令実行の1サイクル目において、ベクトルレジスタファイル93からデータの読み出しを行うが、ソースデータ95A(95B)としてはフォワーディング回路100からのデータを選択して出力する。これにより、フォワーディングを行うか否かの判定結果を待つことなく、レジスタファイルからのデータ読み出しを行って処理が実行されるので、遅延時間が増大することを防止することができる。また、命令実行の2サイクル目以降では、第2の実施形態と同様に、ベクトルレジスタファイル93に入力される読み出しオペランド指定信号ROPRB0(ROPRB1)及びベクトルレジスタファイル93からの出力データにおいて、信号の変化は発生しない。したがって、ベクトルレジスタファイル93からのデータ読み出しに係る信号(データを含む)が不要に変化することを抑止して無駄な電力消費を抑制することができ、プロセッサにおける消費電力を低減することができる。
前述した各実施形態における読み出し動作について、図6に示す。なお、図6においては、各実行パイプラインにおいてレジスタ読み出しが行われるステージ(命令デコードステージID又はレジスタ読み出しステージRR)を示している。また、図6(A)、(B)にはスカラプロセッサの場合を示しており、図6(C)、(D)にはベクトル実行パイプラインを2つ有するベクトルプロセッサの場合を示している。
なお、命令1:(add r1,r2,r3)及び命令2:(add r5,r1,r4)はスカラ演算を実行させる命令である。命令1:(add r1,r2,r3)は、レジスタr2の内容とレジスタr3の内容とを加算して、加算結果をレジスタr1に格納する演算処理を実行させる。同様に、命令2:(add r5,r1,r4)は、レジスタr1の内容とレジスタr4の内容とを加算して、加算結果をレジスタr5に格納する演算処理を実行させる。したがって、命令1→命令2の順に連続して命令が発行される場合には、命令1の演算結果を用いて命令2を実行する。
また、命令1:(vadd r1,r2,r3)及び命令2:(vadd r5,r1,r4)はベクトルデータを複数サイクルに渡って処理させる命令である。命令1:(vadd r1,r2,r3)は、レジスタr2の内容とレジスタr3の内容とを加算して、加算結果をレジスタr1に格納する演算処理を実行させる。同様に、命令2:(vadd r5,r1,r4)は、レジスタr1の内容とレジスタr4の内容とを加算して、加算結果をレジスタr5に格納する演算処理を実行させる。なお、命令1:(vadd r1,r2,r3)及び命令2:(vadd r5,r1,r4)はそれぞれ8サイクルで実行完了するものとする。したがって、命令1→命令2の順に連続して命令が発行される場合には、命令1の演算結果を用いて命令2を実行する。
図6(A)に示す6ステージ構成のスカラプロセッサは、命令デコードステージIDとレジスタ読み出しステージRRとが分離しているので、命令2におけるレジスタ読み出しステージRRの前にフォワーディングを行うか否かの判定結果が得られている。したがって、第1サイクルでは命令1の処理を実行し、第2サイクルではレジスタからのデータ読み出しを行うことなく、フォワーディングにより供給される命令1の演算結果を用いて命令2の処理を実行する。そのため、命令1の処理を実行する第1サイクルでは通常の読み出しを行うためにレジスタファイルからのデータ読み出しに係る信号は変化する。しかし、命令2の処理を実行する第2サイクルではフォワーディングによりソースデータが供給されるので、レジスタファイルからのデータ読み出しに係る信号が変化することを抑止することができ、消費電力を低減することができる。
図6(B)に示す5ステージ構成のスカラプロセッサは、命令デコードステージIDにてレジスタからのデータ読み出しを実行するため、フォワーディングを行うか否かの判定結果に応じてレジスタからのデータ読み出しを行うように制御すると遅延時間が増大してしまう。したがって、第1サイクルで命令1の処理を実行し、フォワーディングにより供給された命令1の演算結果を用いて第2サイクルで命令2の処理を実行するとしても、遅延時間の観点からは命令2の処理の実行に際してレジスタファイルからのデータ読み出しを行うことが好ましい。すなわち、遅延時間を増大させることなく、命令1及び命令2の処理を実行するには、命令1の処理を実行する第1サイクル及び命令2の処理を実行する第2サイクルともに通常の読み出しを行うことが好ましく、レジスタファイルからのデータ読み出しに係る信号は各サイクルで変化することになる。なお、遅延時間が増大しても不都合がない場合には、フォワーディングを行うか否かの判定結果に応じてレジスタからのデータ読み出しを行うように制御し、命令2の処理を実行する第2サイクルでは、レジスタファイルからのデータ読み出しに係る信号が変化することを抑止するようにしても良い。
図6(C)に示す6ステージ構成のベクトルプロセッサは、第1〜第8サイクルにおいてベクトル実行パイプラインp0で命令1の処理を実行し、第2〜第9サイクルにおいてベクトル実行パイプラインp1で命令2の処理を実行する。6ステージ構成のベクトルプロセッサにおいては、命令デコードステージIDとレジスタ読み出しステージRRとが分離しているので、命令2におけるレジスタ読み出しステージRRの前にフォワーディングを行うか否かの判定結果が得られている。すなわち、命令1の処理はレジスタファイルからのデータを用いて実行し、命令2の処理はレジスタファイルからのデータ読み出しを行うことなく、フォワーディングにより供給される命令1の演算結果を用いて実行する。つまり、命令2の処理の実行においては、レジスタファイルからのデータ読み出しを行う必要が一切ない。したがって、第2〜第9サイクルにおける命令2の処理の実行では、レジスタファイルからのデータ読み出しに係る信号が変化することを抑止することができ、消費電力を低減することができる。
図6(D)に示す5ステージ構成のベクトルプロセッサは、第1〜第8サイクルにおいてベクトル実行パイプラインp0で命令1の処理を実行し、第2〜第9サイクルにおいてベクトル実行パイプラインp1で命令2の処理を実行する。このとき、命令1の処理はレジスタファイルからのデータを用いて実行し、命令2の処理はフォワーディングにより供給される命令1の演算結果を用いて実行する。このプロセッサは、命令デコードステージIDにてレジスタからのデータ読み出しを実行するため、フォワーディングを行うか否かの判定結果に応じてレジスタからのデータ読み出しを行うように制御すると遅延時間が増大してしまう。したがって、フォワーディングにより供給される命令1の演算結果を用いて命令2の処理を実行するとしても、命令2の1サイクル目(第2サイクル)においてはレジスタファイルからのデータ読み出しを行うことが遅延時間の観点からは好ましい。つまり、遅延時間を増大させることなく命令1及び命令2の処理を実行するには、命令2の実行に際して1サイクル目だけレジスタファイルからのデータ読み出しを行う。しかし、命令2の2サイクル目以降では、フォワーディングを行うとの判定結果が得られているので、レジスタファイルからのデータ読み出しを行う必要がない。したがって、第3〜第9サイクルにおける命令2の処理の実行では、レジスタファイルからのデータ読み出しに係る信号が変化することを抑止することができ、消費電力を低減することができる。
なお、各実施形態では、レジスタファイルからのデータ供給が不要なサイクルとして、先行する命令と後続の命令との間に真の依存関係があり、かつ先行する命令の演算結果がフォワーディングにより後続の命令のソースデータとして供給されるときを例に説明した。しかし、この例に限定されず、命令が発行されないサイクル等を含めてレジスタファイルからのデータの供給が不要なサイクルにおいて、レジスタファイルに入力される読み出しオペランド指定信号を前のサイクルと同じ状態に維持することで、無駄な電力消費を抑制しプロセッサにおける消費電力を低減することができる。
また、前記実施形態は、何れも本発明を実施するにあたっての具体化のほんの一例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。
本発明の諸態様を付記として以下に示す。
(付記1)
読み出された命令をデコードし、デコード結果を基に処理データが格納されているレジスタを指定する第1の指定信号を出力するデコード部と、
前記デコード部での前記デコード結果を基に発行された命令に従って、処理データを用いて当該命令に基づく処理を実行する処理部と、
前記デコード部より出力された前記第1の指定信号に応じて、第2の指定信号を制御し出力する指定信号制御部と、
処理データを保持する複数のレジスタを有するとともに、前記指定信号制御部より出力された前記第2の指定信号を受けて、当該第2の指定信号で指定されたレジスタに格納されている処理データを出力するレジスタファイルとを備え、
前記指定信号制御部は、前記レジスタファイルから前記処理部への処理データの供給が不要なサイクルでは、出力する前記第2の指定信号を維持することを特徴とするプロセッサ。
(付記2)
前記指定信号制御部は、出力した前記第2の指定信号を保持する保持部と、
前記保持部に保持した前記第2の指定信号及び前記デコード部より出力された前記第1の指定信号が入力され、当該前記第2の指定信号又は当該第1の指定信号を選択し前記レジスタファイルに前記第2の指定信号として出力する信号選択部とを有することを特徴とする付記1記載のプロセッサ。
(付記3)
前記処理部での処理結果をフォワーディングするフォワーディング部を備え、
前記フォワーディング部によるフォワーディングで前記処理部へ処理データが供給される場合には、前記指定信号制御部は、出力する前記第2の指定信号を維持することを特徴とする付記1又は2記載のプロセッサ。
(付記4)
前記レジスタファイルから出力された処理データを前記処理部に供給するか、又は前記フォワーディング部によるフォワーディングで前記処理部に処理データを供給するかを制御する制御信号に基づいて、前記指定信号制御部は、出力する前記第2の指定信号を制御することを特徴とする付記3記載のプロセッサ。
(付記5)
前記指定信号制御部は、前記処理部に対して命令が発行されないサイクルでは、出力する前記第2の指定信号を維持することを特徴とする付記1〜4の何れか1項に記載のプロセッサ。
(付記6)
前記プロセッサは、読み出された命令をパイプライン処理するとともに、命令デコードステージにて前記レジスタファイルからの処理データの読み出し動作を行うプロセッサであり、
複数のサイクルに渡って命令に係る処理が実行されるマルチサイクル命令を実行するとき、前記処理部に供給する処理データがフォワーディングにより供給される場合に、前記指定信号制御部は、1サイクル目では入力される前記第1の指定信号に合わせて出力する前記第2の指定信号を変化させ、2サイクル目以降では出力する前記第2の指定信号を維持することを特徴とする付記1〜5の何れか1項に記載のプロセッサ。
(付記7)
読み出された命令をデコードし、デコード結果を基に処理データが格納されているレジスタを指定する第1の指定信号を出力するデコード部と、
前記デコード部での前記デコード結果を基に発行された命令に従って、処理データを用いて当該命令に基づく処理を実行する処理部と、
前記デコード部より出力された前記第1の指定信号を第2の指定信号として出力する指定信号制御部と、
処理データを保持する複数のレジスタを有するとともに、前記指定信号制御部より出力された前記第2の指定信号を受けて、当該第2の指定信号で指定されたレジスタに格納されている処理データを出力するレジスタファイルとを備え、
前記指定信号制御部は、前記レジスタファイルから前記処理部への処理データの供給が不要なサイクルでは、前記第1の指定信号にかかわらず、前記第2の指定信号が変化することを抑止することを特徴とするプロセッサ。