ベクトル演算装置が知られている。図1は、ベクトル演算装置の構成の一例を示すブロック図である。このベクトル演算装置は、演算部101と、演算制御部102と、演算制御パス103とを具備する。演算部101は、ベクトル演算が可能である。演算制御部102は、命令発行制御を行い、演算部101を制御する。演算制御パス103は、演算部101と演算制御部102とを接続し、演算制御部102から演算部101に対して制御信号を送る。
演算部101は、VR0_111−0〜VRn_111−n(図1ではn=3とする。以下同じ。)と、演算器0_112−0〜演算器m_112−m(図1ではm=1とする。以下同じ。)と、クロスバ113と、ストアセレクタ116と、定数部117と、定数パス118−0〜118−mと、VRリードパス119−0〜119−nと、演算結果パス101A−0〜101A−mと、バイパスパス101B−0〜101B−mと、VRライトパス101C−0〜101C−nと、ストアパス101Eとを備える。
VR(ベクトルレジスタ)0_111−0〜VRn_111−n(図1ではn=3とする。以下同じ。)は、複数の要素数で構成され、演算のオペランドとなるベクトルデータを保持する。演算器0_112−0〜演算器m_112−m(図1ではm=1とする。以下同じ。)は、VR0_111−0〜VRn_111−nのデータ、又は定数を用いてベクトル演算が可能である。演算器0_112−0〜演算器m_112−mの個数は、VR0_111−0〜VRn_111−nの個数と同数である必要はない。クロスバ113は、演算器0_112−0〜演算器m_112−mの演算結果を、VR0_111−0〜VRn_111−nのうちの任意のVRへ振り分ける。ストアセレクタ116は、VR0_111−0〜VRn_111−nのデータをメモリに書き込む際、VR0_111−0〜VRn_111−nから読み出したデータを選択する。定数部117は、定数を使用した演算を行う場合、定数を発生させる。ここでは、VRの数は4(n=3)、演算器の数は2(m=1)とする。
定数パス118−0〜118−mは、演算器0_112−0〜演算器m_112−mに、演算に用いる定数を供給する。VRリードパス119−0〜119−nは、VR0_111−0〜VRn_111−nと演算器0_112−0〜演算器m_112−m及びストアセレクタ116とを接続する。演算結果パス101A−0〜101A−mは、演算器0_112−0〜演算器m_112−mとクロスバ113とを接続する。バイパスパス101B−0〜101B−mは、演算結果パス101A−0〜101A−mそれぞれに対応し、1つの演算結果パス101Aを全ての演算器0_112−0〜演算器m_112−mに接続し、演算結果を入力オペランドとして演算器0_112−0〜演算器m_112−mに供給する。VRライトパス101C−0〜101C−nは、クロスバ113とVR0_111−0〜VRn_111−nとを接続する。ストアパス101Eは、ストアセレクタ116からメモリアクセス部(図示されず)にストアデータを送る。
演算制御部102は、命令の発行によって、演算部1の制御を行う命令発行部121を備える。
命令発行部121は、バイパス部213と発行部214とを含む。バイパス部213は、VR0_111−0〜VRn_111−nを介さずに、バイパスパス部101B−0〜101B−mから演算器0_112−0〜演算器m_112−mへデータを供給し、バイパス演算を制御する。発行部214は、全ての命令の発行を行う。
次に、図1の場合において、同一のVRに対して、先行Read、後続Write(Write after Read、以下R−Wと略す)の依存関係の場合の動作について説明する。ここで対象となる3命令を、以下の3命令とする。ここでは、以下の3命令において、VR0に関し、命令1で読み出し、命令2で書き込みを行い、命令2での書き込みを命令3で読み出す演算を行う。命令2と命令3と間は、真の依存関係となり、順序保障が必要となる。
命令1:VR0とVR1をベクトル加算し、結果をVR2に格納
(vfad:VR2←VR0、VR1)。
命令2:定数CとVR3をベクトル乗算し、結果をVR0に格納
(vfmp:VR0←定数C、VR3)。
命令3:VR0とVR1をベクトル加算し、結果をVR3に格納
(vfad:VR3←VR0、VR1)。
ここでは各命令で演算する要素数は4とする。また、命令2の演算結果は、VRを介して命令3へ供給されるものとする。
次に、図1のベクトル演算装置の動作について説明する。図2は、図1のベクトル演算装置の動作を示すフローチャートである。S101で、発行部214において、命令間の依存関係を分析する。命令1と命令2との間にR−Wの依存関係が有ると判別され、命令2と命令3との間に、先行Write、後続Read(Read after Write、以下W−Rと略す)の依存関係が有ると判別される。命令1は、命令1より先行する命令との依存関係が無いため、S102へ進む。命令2、命令3は、自身より先行する命令との依存関係が検出されなくなるまで、時刻毎にS101を繰り返す。以降、命令1の動作を説明する。
S102で、バイパス部213にて、バイパス演算が可能か判定される。ここでは、命令1はVRからオペランドデータを読み出すため、バイパスは不可能と判定され、S108に進む。S108で、発行部214において、演算リソースの状態から、命令1が発行可能か判定する。発行可能な場合は、S109へ進む。発行が不可能な場合は、S101へ戻る。S109で、発行部214にて、命令1が発行される。このとき、演算制御パス103を通じ、VR0とVR1の内容を演算器0で演算し、演算結果をVR2へ書き込む指示が、演算部101へ送られる。S110で、命令1が使用するVRが読み出される。S106で、命令1の演算(VR0とVR1をベクトル加算)が行われる。S107で、命令1の演算結果が、VRに書き込まれる(結果をVR2に格納)。命令2、命令3に関しても、命令1と同様のフローに従って処理される。
次に、上記命令1、2、3の動作について説明をする。図3は、図2の動作における命令1、2、3の動作を示すタイムチャートである。この図は、命令1、2におけるR−Wの依存関係、命令2、3におけるW−Rの依存関係を示している。時刻10で、命令1(vfad)に関し、S101、S102、S108、S109が処理され、命令1が発行される。図中、「1 vfad」は、発行された命令が命令1:vfadであることを示している。その後、時刻13で、命令1によりVR0、VR1の読み出しが始まり、演算が開始される。命令1は4要素であるため、4時刻連続して、VRの読み出しと演算が行われる。図中、「VR0 Read Start」はVR0からのデータの読み出しが始まることを示している。また、「VR0、VR1」は演算器への入力がVR0、VR1のデータであること、「1 vfad」は実行される演算が命令1:vfadであることをそれぞれ示している。そして、時刻20で、命令1の演算結果のVR2への書き込みが始まる。図中、「VR2」は演算結果の書き込み先がVR2であることを示している。
時刻12で、命令2(vfmp)に関し、S101、S102、S108、S109が処理され、命令2が発行される。以降の命令2の動作は、命令1を2時刻遅らせたものと同様である。その後、時刻19で、命令3(vfad)に関し、S101、S102、S108、S109が処理され、命令3が発行される。以降の命令2の動作は、命令1を9時刻遅らせたものと同様である。命令2に関し、時刻22でVR0に書き込みが開始され、命令3に関し、時刻22でVR0を読み出しが開始される。
命令1、2、3が発行される順序は、VRの依存関係により、命令順となっている。
次に、図1のベクトル演算装置の場合において、同一VRに対して、先行でWrite、後続でWrite(Write after Write、以下W−Wと略す)の依存関係の場合の動作について説明する。ここで対象となる3命令を、以下の3命令とする。ここでは、以下の3命令において、VR0に関し、命令1で書き込み、命令2で書き込みを行い、命令3で読み出す演算を行う。ただし、命令2と命令3との間は、真の依存関係となり、順序保障が必要となる。
命令1:VR0とVR1をベクトル加算し、結果をVR0に格納
(vfad:VR0←VR0、VR1)
命令2:定数CとVR3をベクトル乗算し、結果をVR0に格納
(vfmp:VR0←定数C、VR3)
命令3:VR0とVR1をベクトル加算し、結果をVR3に格納
(vfad:VR3←VR0、VR1)
ここでは各命令で演算する要素数は4とする。
次に、図1のベクトル演算装置の動作について、図2のフローチャートを用いて説明する。この動作は、R−W依存の動作の説明にて、R−WをW−Wと読み替えた場合と同様である。
次に、上記命令1、2、3の動作について説明をする。図4は、図2の動作における命令1、2、3の動作を示すタイムチャートである。この図は、命令1、2におけるW−Wの依存関係、命令2、3におけるW−Rの依存関係を示している。
時刻10で、図3で示したR−W依存と同様に、命令1(vfad)が発行される。時刻13で、R−W依存関係の場合と同様に命令1によりVR0、VR1の読み出しが始まり、演算が開始される。図中、「VR0、VR1」は演算器への入力がVR0、VR1のデータであること、「1 vfad」は実行される演算が命令1:vfadであることをそれぞれ示している。時刻20では、R−W依存関係の場合と同様に命令1の演算結果のVR0への書き込みが始まる。図中、「VR0」は演算結果の書き込み先がVR0であることを示している。また、「VR0 Write Start」はVR0へのデータの書き込みが始まることを示している。時刻23では、命令1の演算結果のVR0への書き込みが終わる。
時刻14で、図3で示したR−W依存と同様に、命令2(vfmp)が発行される。以降の命令2の動作は、命令1を4時刻遅らせたものと同様である。時刻21で、図3で示したR−W依存と同様に、命令3(vfad)が発行される。以降の命令3の動作は、命令1を11時刻遅らせたものと同様である。
命令1に関し、時刻23でVR0へ書き込みが終了し、命令2に関し、時刻24でVR0へ書き込みが開始され、命令3に関し、時刻24でVR0から読み出しが開始される。
命令1、2、3が発行される順序は、VRの依存関係により、命令順となっている。
次に、図1の場合において、同一VRに対して、W−W依存の動作、及び、ストア命令の動作について説明する。ここで、対象となる3命令を、以下の3命令とする。ここでは、以下の3命令において、VR0に関し、命令1で書き込み、命令2で書き込みを行い、命令3で読み出す演算を行う。ただし、命令2と命令3間は、真の依存関係となり、順序保障が必要となる。
命令1:VR0とVR1をベクトル加算し、結果をVR0に格納
(vfad:VR0←VR0、VR1)
命令2:定数CとVR3をベクトル乗算し、結果をVR0に格納
(vfmp:VR0←定数C、VR3)
命令3:VR0をメモリにストア
(vst:M←VR0)
ここでは各命令で演算する要素数は4とする。
次に、図1のベクトル演算装置の動作について、図2のフローチャートを用いて説明する。これは、W−W依存動作の説明と同様である。ただし、S106で、ストアパス使用、S107でメモリへ送出と読み替える。
次に、上記命令1、2、3の動作について説明をする。図5は、図2の動作における命令1、2、3の動作を示すタイムチャートである。この図は、命令1、2におけるW−Wの依存関係、及び命令3がストア命令である場合の命令2、3におけるR−Wの依存関係の動作を示している。時刻10で、図4で示したW−W依存と同様に、命令1(vfad)が発行される。以降の命令1の動作は、図4で示したW−W依存と同様である。時刻14で、図4で示したW−W依存と同様に、命令2(vfmp)が発行される。以降の命令2の動作は、図4で示したW−W依存と同様である。時刻21で、図4で示したW−W依存と同様に、命令3(vst)が発行される。時刻24で、S110が処理され、VR0が読み出される。時刻28で、S106、S107が処理される。VR0から読み出したデータは、ストアパスを経由し、メモリへ送られる。命令1に関し、時刻23でVR0へ書き込みが終了し、命令2に関し、時刻24でVR0へ書き込みが開始され、命令3に関し、時刻24でVR0から読み出しが開始される。
命令1、2、3が発行される順序は、VRの依存関係により、命令順となっている。
次に、図1の場合において、バイパス演算の動作について説明する。ここで対象となる3命令を、以下の3命令とする。ここでは、以下の3命令において、VR0に関し、命令1で読み出し、命令2で書き込みを行い、命令3で読み出す演算を行う。ただし、命令2と命令3間は、真の依存関係となり、順序保障が必要となる。
命令1:VR0とVR1をベクトル加算し、結果をVR2に格納
(vfad:VR2←VR0、VR1)
命令2:定数CとVR3をベクトル乗算し、結果をVR0に格納
(vfmp:VR0←定数C、VR3)
命令3:VR0とVR1をベクトル加算し、結果をVR3に格納
(vfad:VR3←VR0、VR1)
ここでは、各命令で演算する要素数は4とする。
次に、図1のベクトル演算装置の動作について、図2のフローチャートを用いて説明する。これは、命令1、2に関し、R−W依存と同様である。命令3に関し、次のフローで動作する。
S101で、命令2の発行後、依存関係が無くなり、S102へ進む。S102で、バイパス部213にて、バイパス演算が可能か判定される。ここでは、命令3は命令2の演算結果を、バイパスパス101B−0〜101B−1経由で受け取るバイパス演算が可能と判定され、S103へ進む。バイパス演算が不可能な場合は、S108へ進み、R−W依存の命令3と同様である。
S103で、発行部214において、演算リソースの状態から、命令3がバイパス演算として発行可能か判定する。発行可能な場合は、S104へ進む。発行が不可能な場合は、S101へ戻る。S104で、発行部214にて、命令3が発行される。このとき、演算制御パス103を通じ、バイパスパス101B−1からのデータ及びVR1の内容を用いて、演算器0_112−0で演算し、演算結果をVR3へ書き込む指示が、演算部1へ送られる。S105で、命令3のVR0に相当するデータは、バイパスパス101B−1を使用して演算器0_112−0へ供給され、VR1が読み出される。S106で、命令3の演算が行われる。S107で、命令3の演算結果が、VRに書き込まれる。
次に、上記命令1、2、3の動作について説明をする。図6は、図2の動作における命令1、2、3の動作を示すタイムチャートである。この図は、命令1、2におけるR−Wの依存関係、命令2、3におけるW−Rの依存関係で、かつバイパス演算の動作を示している。
時刻10で、図3で示したR−W依存と同様に、命令1(vfad)が発行される。図中、「1 vfad」は、発行された命令が命令1:vfadであることを示している。その後、時刻13で、命令1によりVR0、VR1の読み出しが始まり、演算が開始される。命令1は4要素であるため、4時刻連続して、VRの読み出しと演算が行われる。図中、「VR0 Read Start」はVR0からのデータの読み出しが始まることを示している。また、「VR0、VR1」は演算器への入力がVR0、VR1のデータであること、「1 vfad」は実行される演算が命令1:vfadであることをそれぞれ示している。そして、時刻20で、命令1の演算結果のVR2への書き込みが始まる。図中、「VR2」は演算結果の書き込み先がVR2であることを示している。
時刻12で、図3で示したR−W依存と同様に、命令2(vfmp)が発行される。以降の命令2の動作は、命令1を2時刻遅らせたものと同様である。時刻17で、命令3に関し、S101、S102、S103、S104が処理され、命令3(vfad)が発行される。時刻20で、命令3に関し、S105、S106が処理され、VR0に相当するデータは、バイパスパス101B−1を使用して演算器0_112−0へ供給され、VR1が読み出される。演算器0_112−0では、命令3の演算が行われる。時刻27で、命令3に関し、S106−S107が処理され、VR3に演算結果が書き込まれる。
特開2006−268168号公報にベクトル命令管理回路、ベクトル処理装置、ベクトル命令管理方法、ベクトル処理方法、ベクトル命令管理プログラム、および、ベクトル処理プログラムが開示されている。このベクトル命令管理回路は、以下の動作を行う手段を有する。入力した後続ベクトル命令により書き込みが指定された論理ベクトルレジスタと同一論理ベクトルレジスタに書き込みを行う先行ベクトル命令が存在しなければ、事前に設定された論理にしたがって、後続ベクトル命令の論理ベクトルレジスタ番号に対し物理ベクトルレジスタ番号を割り付ける。同一論理ベクトルレジスタに書き込みを行う1以上の先行ベクトル命令が存在すれば、後続ベクトル命令のマスクフラグが有効を示しているか、または、後続ベクトル命令のベクトル長≦(あるいは、<)最新先行ベクトル命令のベクトル長であると、後続ベクトル命令の論理ベクトルレジスタ番号に対し最新先行ベクトル命令に割り付けられたものと同一の物理ベクトルレジスタ番号を割り付ける。後続ベクトル命令のマスクフラグが有効を示しておらず、かつ、後続ベクトル命令のベクトル長≦(あるいは、<)最新先行ベクトル命令のベクトル長でないと、後続ベクトル命令の論理ベクトルレジスタ番号に対し実行中のすべての先行ベクトル命令に割り付けられた物理ベクトルレジスタ番号とは異なる物理ベクトルレジスタ番号を割り付ける。
特開平5−224927号公報(対応米国特許:US5511172(A))にプロセッサが開示されている。このプロセッサは、複数の実行ユニットを有し、メモリにある命令列の命令を並列に処理する。
このプロセッサは、命令種別判別手段と、命令並列発行手段と、分岐判定手段と、実行結果管理手段とを備える。命令種別判別手段は、実行前の命令列に含まれ、条件が他の命令に依存する条件分岐命令の種類を判別する。命令並列発行手段は、分岐の成否が決定されるまでの間、条件分岐命令の種類に応じて、実行ユニットに対して、分岐先の命令列及び/又は後続する命令列の命令を実行ユニットに対して並列発行する。分岐判定手段は、前記条件分岐が依存する他の命令が実行されたとき、条件分岐命令の分岐の成否を判定する。実行結果管理手段は、条件分岐命令の分岐の成否の判定結果によって、命令列の実行結果の有効無効を識別する。
特開平7−334487号公報にベクトル演算装置が開示されている。このベクトル演算装置は、ベクトルデータを保持する複数のベクトルレジスタと、前記ベクトルレジスタから得た複数のベクトルデータに対する演算を実行する幾つかのベクトル演算器と、前記ベクトルレジスタおよび前記ベクトル演算器を用いた演算の実行状態を管理して続く命令の実行を指示する命令実行管理部とを有する。このベクトル演算装置は、(A)第1の選択回路と、(B)第2の選択回路と、(C)タイミング指示手段と、(D)第1の選択制御手段と、(E)第2の選択制御手段と、を備える。第1の選択回路は、前記ベクトル演算器に入力される第1の入力データを前記ベクトル演算器の第1の入力に対応させた第1のベクトルレジスタの読出しデータと前記第1のベクトルレジスタへの書込みデータとを選択する。第2の選択回路は、前記ベクトル演算器に入力される第2の入力データを前記ベクトル演算器の第2の入力に対応させた第2のベクトルレジスタの読出しデータと前記第2のベクトルレジスタへの書込みデータとを選択する。タイミング指示手段は、前記命令実行管理部にあって実行しようとする命令が連続にデータを処理する命令であり、先行する命令の結果の書込みデータを前記ベクトルレジスタの1つに書込むときに、書込まれるタイミングを示すタイミング指示回路が複数の前記ベクトルレジスタに対応してそれぞれ存在する。第1の選択制御手段は、前記命令実行管理部にあって実行しようとする命令が前記ベクトル演算器の使用命令であり、前記ベクトル演算器の第1の入力データとして使用する前記ベクトルレジスタが先行する命令により書込み動作を行っているときには、前記タイミング指示手段からの信号により前記第1の選択回路を前記第1のベクトルレジスタへの書込みデータ側に切替える。第2の選択制御手段は、前記命令実行管理部にあって実行しようとする命令が前記ベクトル演算器の使用命令であり、前記ベクトル演算器の第2の入力データとして使用する前記ベクトルレジスタが先行する命令により書込み動作を行っているときには、前記タイミング指示手段からの信号により前記第2の選択回路を前記第2のベクトルレジスタへの書込みデータ側に切替える。
特開平10−40105号公報(対応米国特許:US6298435(B1))にリネーム・レジスタを割り付ける方法及びプロセッサが開示されている。このプロセッサは、一組のN個の物理リネーム・レジスタと、前記N個の物理リネーム・レジスタのうちの一つが命令の結果を受け取り得る状態になる前に、前記N個の物理リネーム・レジスタのうちの一つを該命令に割り付ける事前割り付け回路とを含む。
以下、本発明のベクトル演算装置及びベクトル演算方法の実施の形態に関して、添付図面を参照して説明する。
(第1の実施の形態)
まず、本発明の第1の実施の形態に係るベクトル演算装置の構成について説明する。図7は、本発明の第1の実施の形態に係るベクトル演算装置の構成を示すブロック図である。このベクトル演算装置は、演算部1と、演算制御部2と、演算制御パス3とを具備する。演算部1は、ベクトル演算が可能である。演算制御部2は、命令の発行制御を行い、演算部1を制御する。演算制御パス3は、演算部1と演算制御部2とを接続し、演算制御部2から演算部1に対して制御信号を送る。
演算部1、演算制御部2、及び演算制御パス3とは、ハードウェア、ソフトウェア、及びハードウェアとソフトウェアとの組み合わせのいずれかにより実現可能である。例えば、演算部1及び演算制御パス3はそれらの機能を有する回路として、演算制御部2はCPUやメインメモリと協働し、その機能を有するプログラムとして実現可能である。
演算部1は、VR0_11−0〜VRn_11−n(図7ではn=3とする。以下同じ。)と、演算器0_12−0〜演算器m_12−m(図7ではm=1とする。以下同じ。)と、クロスバ13と、演算結果セレクタ14と、データバッファ15と、ストアセレクタ16と、定数部17と、定数パス18−0〜18−mと、VRリードパス19−0〜19−nと、演算結果パス1A−0〜1A−mと、バイパスパス1B−0〜1B−mと、VRライトパス1C−0〜1C−nと、バッファパス1Dと、ストアパス1Eと、セレクトパス1Fとを備える。
VR(ベクトルレジスタ)0_11−0〜VRn_11−n(図7ではn=3とする。以下同じ。)は、複数のワード(以下、要素数ともいう)で構成され、演算の対象(以下、オペランドともいう)となるベクトルデータを保持する。VR0_11−0〜VRn_11−nに対しては、命令で指定された数の要素を1マシンサイクル(以下、時刻ともいう)に1要素ずつ読み出し、書き込みが可能である。
演算器0_12−0〜演算器m_12−m(図7ではm=1とする。以下同じ。)は、VR0_11−0〜VRn_11−nのデータ、又は定数を用いてベクトル演算が可能である。演算器0_12−0〜演算器m_12−mは、複数のオペランドが入力可能であり、各オペランドとして1時刻に1要素のベクトルデータ、もしくは、定数を受け取り、1時刻に1要素の演算結果を出力する事が可能である。演算器0_12−0〜演算器m_12−mの個数は、VR0_11−0〜VRn_11−nの個数と同数である必要はない。
演算結果セレクタ14は、演算器0_12−0〜演算器m_12−mの演算結果を選択し、後述のデータバッファ15へ出力する。データバッファ15は、複数VR分の容量を持ち、演算結果セレクタ14の選択したデータを保持し、演算結果を一時的に保持する。
クロスバ13は、演算器0_12−0〜演算器m_12−mの演算結果、又は、後述のデータバッファ15からのデータを、VR0_11−0〜VRn_11−nのうちの任意のVRへ振り分ける。ストアセレクタ16は、VR0_11−0〜VRn_11−nのデータをメモリに書き込む際、VR0_11−0〜VRn_11−nから読み出したデータを選択し、後述のストアパス1Eへ出力する。定数部17は、定数を使用した演算を行う場合に、定数を発生させる。
定数パス18−0〜18−mは、定数部17から、演算器0_12−0〜演算器m_12−mそれぞれに対し、演算に用いる定数を供給する。VRリードパス19−0〜19−nは、VR0_11−0〜VRn_11−nと、演算器0_12−0〜演算器m_12−m及びストアセレクタ16とを接続する。演算結果パス1A−0〜1A−mは、演算器0_12−0〜演算器m_12−mと、クロスバ13及び演算結果セレクタ14とを接続する。バイパスパス1B−0〜1B−mは、演算結果パス1A−0〜1A−mそれぞれに対応して設けられ、1つの演算結果パスを全ての演算器へ接続して、演算結果を入力オペランドとして演算器に供給する。VRライトパス1C−0〜1C−nは、クロスバ13とVR0_11−0〜VRn_11−nとを接続する。バッファパス1Dは、データバッファ15とクロスバ13とを接続する。ストアパス1Eは、ストアセレクタ16からメモリアクセス部(図示せず)にストアデータを送る。セレクトパス1Fは、演算結果セレクタ14とデータバッファ15とを接続する。
本実施の形態(図7)においては、VRの数は4(n=3)とし、演算器の数は2(m=1)とする。また、VR0(11−0)及びVR1(11−1)は、演算器0(12−0)のそれぞれ第1オペランド及び第2オペランドとして接続されるものとする。同様に、VR2(11−2)及びVR3(11−3)は、演算器1(12−1)のそれぞれ第1オペランド及び第2オペランドとして接続されるものとする。そして、演算器0(12−0)及び演算器1(12−1)は、接続されているVR及び定数を用いたベクトル演算が可能とする。
また、後続の演算は、先行する演算の演算結果がVRに書き込まれる前に、バイパスパス1B−0〜1B−1を経由して当該演算結果をオペランドデータとして受け取り、演算を実行することが可能である。このように、少なくとも1つのオペランドとして、VRを経由せずに演算結果を受け取って行われる演算を、バイパス演算とする。すなわち、演算器は、VRのデータ、演算器の演算結果、又は定数を用いてもベクトル演算が可能である。
演算制御部2は、命令発行部21と、データバッファ管理部22とを備える。命令発行部21は、命令の発行によって、演算部1の制御を行う。データバッファ管理部22は、データバッファ15に格納されているデータの情報を保持する。そして、データバッファ15からVR0_11−0〜VRn_11−nへの書き込み可能な条件を判別し、データバッファ15の管理を行う。
命令発行部21は、ID付加部211と、編集部212と、バイパス部213と、発行部214とを含む。ID付加部211は、全ての命令に対し、命令の識別番号(以下、命令IDという)を付加する。編集部212は、データバッファ15を使用した演算を行う場合、演算結果の書き込み先を命令で指定されたVR0_11−0〜VRn_11−nから、データバッファ15に変更する。また、データバッファ管理部22に保持されている情報を編集し、データバッファ15から特定のVR0_11−0〜VRn_11−nへ書き込むための命令を生成する。バイパス部213は、VR0_11−0〜VRn_11−nを介さずに、バイパスパス1B−0〜1B−mから演算器0_12−0〜演算器m_12−mへデータを供給し、バイパス演算を制御する。発行部214は、データバッファ15を使用の有無を問わず、全ての命令の発行を行う。発行部214は、命令間の依存関係を分析、判定する。発行部214は、演算リソース(例示:演算部1内の各VR、各演算器、各パスの使用状態)の状態に基づいて、命令2が命令1を追い越して発行が可能か否かや、後述されるライトバック命令が発行可能か否かを判定する。
データバッファ管理部22は、情報保持部221と、エントリ制御部222と、ID比較部223と、発行許可部224とを含む。情報保持部221は、データバッファ15に格納されているデータの情報の保持する。エントリ制御部222は、情報保持部221を参照して、データバッファ15のエントリの有無を判別して使用可不可を判別する。ID比較部223は、命令発行部21が発行した命令の命令IDと、情報保持部221に保持している命令IDとを比較する。発行許可部224は、情報保持部221を参照して、データバッファ15内のデータをVRへ書き込む事が可能か判断する。
図8Aは、情報保持部221が保持するデータを示すテーブルである。情報保持部221は、Vビット、ターゲットVR、有効要素数、自命令ID、依存命令ID、及び、Readyビットの各フィールドに情報を保持する。Vビットは、情報保持部221の保持している情報の有効か無効かを示す。有効なら1、無効なら0となる。ターゲットVRは、データバッファ15を使用した命令の書き込み先VR番号を格納し、データバッファ15内のデータの書き込み先VR番号となる。有効要素数は、データバッファ15内に格納されているデータの有効な要素数の情報を格納する。データバッファ15を使用する命令による演算は、有効要素数が示す要素数分が行われたことになる。自命令IDは、データバッファ15を使用した命令の命令IDを格納する。依存命令IDは、データバッファ15を使用した命令と、依存関係を持つ命令の命令IDを格納する。Readyビットは、自命令IDと依存命令IDが一致したことを示す。一致したら1、一致しなければ0とする。情報保持部221は、複数のエントリを持ち、図8Aで示す情報を各エントリに登録可能である。ここでは、1エントリとする。
図9Aは、エントリ制御部222の動作表を示すテーブルである。Vは、情報保持部221に保持しているVビットを意味する。ID一致は、情報保持部221に保持している自命令IDと、命令発行部21が発行した命令IDを比較し、一致すれば1、一致しなければ0とする。Buf使用指示は、命令発行部21が発行した命令に、データバッファ15を使用する指示があれば1、指示がなければ0とする。エントリ操作は、V、ID一致、Buf使用指示で決定され、情報保持部221へ新規に情報を登録する場合はセット、情報保持部221を無効化する場合はリセットとする。この動作表(図9A)に従うと、Vが0、かつ、Buf使用指示がある場合、情報保持部221のエントリに情報をセットする。Vが1、かつ、ID一致があれば、情報保持部221のエントリをリセットする。この動作表において、アスタリスク“*”は、“Don‘t care”とする(以下、各動作表で、同様である)。
図9Bは、Readyビット操作に関するID比較部223の動作表を示すテーブルである。Vは、情報保持部221に保持しているVビットを示す。ID一致は、情報保持部221に保持している依存命令IDと、命令発行部21が発行した命令IDを比較し、一致すれば1、一致しなければ0とする。Ready操作は、V、ID一致で決定され、情報保持部221に保持しているReadyビットを1にするときにセットとする。この動作表(図9B)に従うと、Vが1、かつ、ID一致があれば、Readyビットをセットする。
図9Cは、発行許可部224の動作表を示すテーブルである。Vは、情報保持部221に保持しているVビットを示す。Readyは、情報保持部221に保持しているReadyビットを示す。発行判定は、V、Readyで決定され、情報保持部221に保持している情報に基づいて、データバッファ15内のデータをVRに書き込む動作の許可を意味する。この動作表に従うと、Vが1、かつ、Readyビットが1であれば、発行判定を許可とする。
次に、本実施の形態に係るベクトル演算装置の動作について説明する。ここでは、演算部1は、VR4個、演算器2個の構成を有するとする。命令フォーマット、システム構成、命令発行を制御する際の演算リソースの状態および発行可能な条件については、本発明の本質では無く、本明細書に接した当業者ならば容易に理解できるために省略する。また、ここでは、情報保持部221のエントリ数は1とする。
なお、本発明において、VRの個数、演算器の個数は、上記の場合に限定されない。例えば、VRの個数をVR0〜VR7の8個(n=7)にし、VR0とVR1のペア、又は、VR4とVR5のペアを演算器0_12−0の第1オペランドと第2オペランドとし、VR2とVR3のペア、又は、VR6とVR7のペアを演算器1_12−1の第1オペランドと第2オペランドとする構成も可能である。
また、更に、演算器の個数を演算器0〜演算器3の4個(m=3)にし、VR0とVR1を演算器0の第1オペランドと第2オペランドとし、VR2とVR3を演算器1の第1オペランドと第2オペランドとし、VR4とVR5を演算器2の第1オペランドと第2オペランドとし、VR6とVR7を演算器3の第1オペランドと第2オペランドとする構成も可能である。
このとき、VRの個数n、演算器の個数mに対応して、演算結果パス1A−0〜1A−m、バイパスパス1B−0〜1B−m、VRリードパス1C−0〜1C−nの接続関係と、クロスバ13、演算結果セレクタ14、ストアセレクタ16の接続関係が変化する。
更に、本発明は、1個の演算器のオペランドが上記の場合のような2個に限定されるものではない。すなわち、1個の演算器に対して、1個のオペランドや3個以上のオペランドを有していてもよい。
はじめに、ベクトル演算装置の動作に関し、同一VRに対し、先行命令で読み出し(Read)、後続命令で書き込む(Write)依存関係の場合の動作について説明する。ここでは、以下の3命令において、VR0に関し、命令1で読み出し、命令2で書き込みを行い、命令2での書き込みを命令3で読み出す演算を行う。命令2と命令3間は、真の依存関係となり、順序保障が必要となる。
命令1:VR0とVR1をベクトル加算し、結果をVR2に格納
(vfad:VR2←VR0、VR1)
命令2:定数CとVR3をベクトル乗算し、結果をVR0に格納
(vfmp:VR0←定数C、VR3)
命令3:VR0とVR1をベクトル加算し、結果をVR3に格納
(vfad:VR3←VR0、VR1)
ここでは各命令で演算する要素数は4とする。
図10は、本発明の第1の実施の形態に係るベクトル演算装置の動作を示すフローチャートである。まず、ステップS11で、ID付加部211が、各命令にIDを付加する。ここでは、命令1、2、3のIDはそれぞれ1、2、3とする。次に、ステップS12で、発行部214が、命令間の依存関係を分析する。命令1と命令2との間に、先行Read、後続Write(Write after Read、以下R−Wと略す)の依存関係、命令2と命令3間に、先行Write、後続Read(Read after Write、以下W−Rと略す)の依存関係があると判る。ここでは、R−Wの依存関係の有無に着目する。命令1と命令2と間には、R−Wの依存関係が有ると判別され、ステップS13に進む。R−Wの依存関係が無ければ、ステップS20(後述)へ進む。
ステップS13で、エントリ制御部222が、情報保持部221を参照し、データバッファ15が未使用状態か判定する。未使用状態であれば、データバッファ15が使用可能と判断し、ステップS14に進む。空きが無ければ、ステップS19(後述)へ進む。図8Bは、情報保持部221が保持するデータの内容の一例を示す。この場合、Vは0、その他の内容はアスタリスク“*”、すなわち“Don‘t care”である。すなわち、Vが0なので、データバッファ15が使用可能と判断される。
ステップS14で、発行部214は、演算リソースの状態(例示:演算部1内の各VR、各演算器、各パスの使用状態)から、命令2が命令1を追い越して発行が可能か判定する。命令2が命令1を追い越して発行可能な場合には、ステップS15へ進む。追い越し発行が不可能な場合には、ステップS19へ進む。ステップS15で、編集部212が、命令2による演算結果をデータバッファ15に書き込むために必要な編集を、その命令2に対して行う。ステップS16で、発行部214が、命令2を発行する。このとき、演算制御パス3を通じ、定数とVR3の内容を、演算器(ここでは、演算器1_12−1とする)で演算し、演算結果をデータバッファ15に書き込む指示(以下、データバッファ使用指示)が、命令2として演算部1へ送られる。
続いて、ステップS17で、エントリ制御部222が、図9Aの動作表に従い、Vが0、命令2がデータバッファ使用指示付きで発行されたので、エントリ操作をセットと判断する。このセットにより、情報保持部221に、命令2に関する情報が登録される。図8Cは、その状態において情報保持部221が保持するデータの内容を示す。このとき、Vに1、ターゲットVRに0(命令2より)、有効要素数に4、自命令IDに2、依存命令IDに1、Readyビットに0がそれぞれセットされる。そして、ステップS18で、演算部1が命令2を実行し、命令2の演算結果をデータバッファ15へ書き込む。
このとき演算部1の演算部1_12−1は、次のような動作を実行する。演算に使用するデータは、VR3_11−3から1時刻に1要素、連続して読み出される。VR3_11−3からのデータは、VRリードパス19−3を経由して、演算器1_12−1へオペランドデータとして供給される。定数Cは、定数部17から定数パス18−1を経由して演算器1_12−1へ供給される。演算器1_12−1は、VRリードパス19−3及び定数パス18−1からのオペランドデータを順次ベクトル演算し、演算結果を演算結果パス1A−1へ出力する。演算結果セレクタ14は、演算結果パス1A−1のデータを選択する。データバッファ15は、演算結果セレクタ14の選択したデータを書き込む。この一連の動作は、要素数4個分を連続して行われる。
ステップS19で、ステップS13でデータバッファ15に空きが無い場合、又は、ステップS14で追い越し発行が不可能な場合、命令2は命令1を追い越して発行されない。また、ステップS20で、ステップS12で依存性が無い場合、図1のベクトル演算装置と同様の発行制御を行う。
次に、上記プロセスにおける命令2の発行後の演算制御部2の動作、すなわち、ステップS16後における演算制御部2での命令IDの比較について説明する。図11は、命令2の発行後の命令IDの比較動作を示すフローチャートである。上記ステップS16において命令1を追い越して命令2が発行され、その後に命令1が発行される。すなわち、ステップS21で、命令発行部21が、命令1を発行する。この命令1の発行により、演算部1は、命令1を実行する。次に、ステップS22で、ID比較部223が、情報保持部221に保持している依存命令ID(図8C)と、命令発行部21で発行された命令の命令IDとを比較する。そして、ID比較部223が、ID一致を検出した場合、図9Bの動作表に従い、Readyビットのセットを判定する。IDが一致すればステップS23へ進む。ここでは、命令1が発行されているので命令IDは1であり、一方依存命令IDは図8Cに示すように1である。従って、ID比較部223は、ID一致を検出し、図9Bの動作表に従い、Readyビットのセットを判定する。ステップS23で、情報保持部221は、Readyビットに1をセットする。図8Dは、この状態において情報保持部221が保持するデータの内容を示す。図8Cのデータに対してReadyビットに1がセットされた状態となる。なお、ステップS22でIDが一致しなければステップS24へ進む。ステップS24、ステップS25は、後述される。
このとき演算部1では、次のような動作により命令1を実行する。演算に使用するデータは、VR0_11−0及びVR1_11−1から1時刻に1要素がデータとして連続して読み出される。VR0_11−0及びVR1_11−1から読み出されたデータは、それぞれVRリードパス19−0及びVRリードパス19−1を経由し、演算器0_12−0へ第1オペランド及び第2オペランドとして供給される。演算器0_12−0は各オペランドデータを順次ベクトル演算し、演算結果を演算結果バス1A−0へ出力する。クロスバ13は、そのデータを受信し、命令1で指定されたVR(ここではVR2_11−2)へ、その受信したデータを送信する。その送信されたデータは、クロスバ13からVRライトパス1C−2を経由し、VR0_11−2に書き込まれる。この一連の動作は、要素数4個分を連続して行われる。
次に、Readyビット点灯(ステップS23)後の演算制御部2の動作、すなわち、データバッファ15からの読み出しと、VRへの書き込みの制御について説明する。図12は、Readyビット点灯後のデータバッファ15からの読み出し制御、及び、VRへの書き込み制御を示すフローチャートである。まず、ステップS31で、発行許可部224が、情報保持部221のReadyビットが点灯しているか(1がセットされているか)判定する。点灯していればステップS32へ進む。点灯していなければ、時刻毎に点灯の判定を繰り返す。次に、ステップS32で、発行許可部224が、Readyビットの点灯を確認すると、図9Cに示す動作表に従い、データバッファ15のデータを読み出し、VRへ書き込む命令(以下、ライトバック命令という)の発行を許可し、命令発行部21へ通知する。ここでは、情報保持部221のターゲットVRに0が登録されているため(図8D)、ライトバック命令によりVR0への書き込みが行われることになる。ただし、ライトバック命令の命令IDは、データバッファ15のデータを生成した演算の元々の命令である命令2と同じである。
次に、ステップS33で、発行部214が、演算部1の状態(例示:演算部1内の各VR、各演算器、各パスの使用状態)から、ライトバック命令が発行可能か判定する。発行可能な場合は、ステップS34へ進む。発行が不可能な場合は、ステップS31に戻る。ステップS34で、編集部212が、情報保持部221の情報(図8D)を、ライトバック命令に必要なフォーマットに編集する。このとき、ターゲットVRは書き込み先VR番号として、有効要素数はデータの要素数となる。ステップS35で、発行部214が、ライトバック命令を発行する。このとき、演算制御パス3を通じ、データバッファ15の内容を、VR0へ書き込む指示がライトバック命令として、演算部1へ送られる。ステップS36で、データバッファ15からデータが読み出される。ステップS37で、演算部1は、ステップS36で読み出されたデータを指定されたVR(VR0)へ書き込む。
このとき演算部1では、次のような動作によりライトバック命令を実行する。まず、データバッファ15から1時刻に1要素がデータとして連続して読み出される。データバッファ15から読み出されたデータは、バッファパス1Dを経由し、クロスバ13へ送信される。クロスバ13は、そのデータを受信し、ライトバック命令で指定されたVR(ここではVR0_11−0)へ、その受信したデータを送信する。その送信されたデータは、クロスバ13からVRライトパス1C−0を経由し、VR0_11−0に書き込まれる。
次に、図11のフローチャートにて、ライトバック命令の発行(ステップS35)後の演算制御部2の動作、すなわち、データバッファ管理部22の制御について説明する。
ステップS21で、命令発行部21がライトバック命令を発行する。ここでは、命令ID(自命令ID)が2で、VR0(ターゲットVR)へのライトバック命令が発行されたものとする。ステップS22で、ID比較部223が、情報保持部221に保持している情報(図8D)の依存命令IDと、命令発行部21で発行された命令のIDを比較する。ここではIDは一致しないため、ステップS24へ進む。
ステップS24では、ID比較部223が、情報保持部221に保持している自命令IDと、命令発行部21で発行された命令のIDを比較する。IDの一致が検出された場合には、ステップS25へ進む。ID一致が検出されない場合には、ステップS22へ戻る。この場合、ID比較部223は、情報保持部221に保持している自命令IDと、命令発行部21で発行された命令のIDの一致を検出する。ステップS25で、エントリ管理部222は、図9Aの動作表に従い、エントリ操作を行う。このとき、Vは1、ステップS24でID一致が検出されたため、エントリをリセットする。エントリのリセットとは、情報保持部221のVを0にし、そのエントリを無効化することである。図8Bに情報保持部221の内容を示す。エントリ制御部222の制御により、リセットされため、Vは0となる。
上記ライトバック命令の発行後、命令発行部21は命令3を発行する。このとき演算部1では、次のような動作により命令3を実行する。演算に使用するデータは、VR0_11−0及びVR1_11−1から1時刻に1要素がデータとして連続して読み出される。VR0_11−0及びVR1_11−1から読み出されたデータは、それぞれVRリードパス19−0及びVRリードパス19−1を経由し、演算器0_12−0へ第1オペランド及び第2オペランドとして供給される。演算器0_12−0は各オペランドデータを順次ベクトル演算し、演算結果を演算結果バス1A−0へ出力する。クロスバ13は、そのデータを受信し、命令3で指定されたVR(ここではVR3_11−3)へ、その受信したデータを送信する。その送信されたデータは、クロスバ13からVRライトパス1C−3を経由し、VR0_11−3に書き込まれる。この一連の動作は、要素数4個分を連続して行われる。
次に、上記命令1、2、3の動作について図13、図10、図11、図12を参照して説明する。ここで、図13は、図7のベクトル演算装置の動作における命令1、2、3の動作を示すタイムチャートである。ここでは、時刻0より前に、命令1、2、3に対し、ID付加部211において、命令IDがそれぞれ1、2、3と付加され(ステップS11)、発行部214に到達しているものとする。また、ここでは要素数を4とし、VRからの読み出し、書き込みは要素数分の時間を要する。先頭要素のVR読み出しからVR書き込みまでの時間(以下、演算レイテンシという)は7時刻とする。
時刻0で、ステップS12、ステップS13、ステップS14、ステップS15、ステップS16、ステップS17が処理される。発行部214が、命令2を発行して、演算部1においてデータバッファ15が使用される。図中、「2 vfmp」は、発行された命令が命令2:vfmpであることを示している。
時刻3で、VR3_11−3からデータの読み出しが開始され、そのデータ及び定数Cが演算器1_12−1へ供給され、演算が開始される。VR3_11−3からのデータの読み出し、そのデータ及び定数Cの演算器1_12−1への供給、及び、演算器1_12−1での演算は、要素数分の時間連続して行われる。ここでは、要素数4なので4時刻間(時刻3〜時刻6)、行われる。また、命令発行(時刻0)の2時刻後(時刻3)から、VR3のデータの読み出し、そのデータ及び定数の演算器3への供給が開始されるものとする。図中、「C、VR3」は演算器への入力が定数C及びVR3のデータであること、「2 vfmp」は実行される演算が命令2:vfmpであることをそれぞれ示している。
時刻8で、ステップS18が処理される。データバッファ15への書き込みが行われ、要素数分連続して時刻11まで行われる。ここでは、演算の開始から5時刻後(時刻8)にデータバッファ15への書き込みが行われるものとする。図中、「Writeデータバッファ」は演算結果をデータバッファ15へ書き込むことを示している。
時刻10で、ステップS21、ステップS22、ステップS23が処理される。発行部214が、命令1を発行し、情報保持部221の依存命令IDと、発行部214が発行した命令IDが一致し、Readyビットがセットされる。図中、「1 vfad」は、発行された命令が命令1:vfadであることを示している。
時刻11で、ステップS31、ステップS32、ステップS33、ステップS34、ステップS35が処理される。Readyビットの点灯が確認され、発行許可部21が発行を許可し、VR0へ書き込むライトバック命令(以下、図中では「WB命令」)が発行される。更に、ステップS21、ステップS22、ステップS24、ステップS25が処理される。情報保持部221の自命令IDと、発行部214が発行したライトバック命令の命令IDが一致し、情報保持部221のエントリをリセットする。
時刻14で、ステップS36が処理される。データバッファ15の読み出しが開始される。図中、「Readデータバッファ」はデータバッファ15からデータを読み出すこと、「VR0」は読み出し先がVR0であることをそれぞれ示している。
時刻16で、ステップS37が処理される。データバッファ15から読み出されたデータの、VR0への書き込みが開始される。図中、「VR0 Write Start」はデータバッファ15のデータのVR0への書き込みが開始されることを示している。
時刻13で、命令1によりVR0、VR1の読み出しが開始され、演算が開始される。命令1は4要素であるため、4時刻連続して、VRの読み出しと演算が行われる。図中、「VR0 Read Start」はVR0からのデータの読み出しが開始されることを示している。また、「VR0、VR1」は演算器への入力がVR0、VR1のデータであること、「1 vfad」は実行される演算が命令1:vfadであることをそれぞれ示している。
時刻20で、命令1の演算結果のVR2への書き込みが開始される。図中、「VR2」は演算結果の書き込み先がVR2であることを示している。
時刻14で、命令3の命令が発行される。図中、「3 vfad」は、発行された命令が命令3:vfadであることを示している。
時刻17で、命令3によりVR0とVR1の読み出しが開始され、演算が開始される。図中、「VR0 Read Start」はVR0からのデータの読み出しが開始されることを示している。また、「VR0、VR1」は演算器への入力がVR0、VR1のデータであること、「3 vfad」は実行される演算が命令3:vfadであることをそれぞれ示している。
時刻24で、命令3の演算結果のVR3への書き込みが開始される。図中、「VR3」は演算結果の書き込み先がVR3であることを示している。
本実施の形態では、VR0に関し、R−W依存関係にある命令1と命令2において、命令2がデータバッファ15を使用し、命令1を追い越して発行される。先行する命令1のVR0読み出し後に、命令2によるVR0書き込みがライトバック命令を用いてデータバッファ15から行われることになり、VR0に関し順序保障されている。命令2の結果を使う命令3は、時刻14で発行される。
すなわち、図13に示すように、演算制御部2において時刻0で命令2の発行に関する処理が実行される。その命令2に対応して、演算部1において時刻3〜時刻8で命令2に関する処理(処理すべき複数の要素のうちの先頭の第1要素)が実行される。
その後、演算制御部2において、時刻10で命令1の発行に関する処理が実行され、時刻11で命令2の演算結果についてライトバック命令の発行に関する処理が実行され、時刻14で命令3の発行に関する処理が実行される。
それら命令1、命令2に関するライトバック命令、及び命令3に対応して、演算部1において、時刻13〜時刻20で命令1に関する処理(第1要素)が実行され、時刻14〜時刻16でライトバック命令に関する処理(第1要素)が実行され、時刻17〜時刻24で命令3に関する処理(第1要素)が実行される。
次に、図7のベクトル演算装置の場合において、同一VRに対して、先行でWrite、後続でWrite(Write after Write、以下W−Wと略す)の依存関係の場合の動作について説明する。ここでは、以下の3命令において、VR0に関し、命令1で書き込み、命令2で書き込みを行い、命令3で読み出す演算を行う。ただし、命令2と命令3間は、真の依存関係となり、順序保障が必要となる。
命令1:VR0とVR1をベクトル加算し、結果をVR0に格納
(vfad VR0←VR0、VR1)
命令2:定数CとVR3をベクトル乗算し、結果をVR0に格納
(vfmp VR0←定数C、VR3)
命令3:VR0とVR1をベクトル加算し、結果をVR3に格納
(vfad VR3←VR0、VR1)
ここでは各命令で演算する要素数は4とする。
次に、図7のベクトル演算装置の動作について、図10のフローチャートで説明する。
ステップS11は、R−W依存関係の場合の動作と同様である。ステップS12で、発行部214が、命令間の依存関係を分析する。命令1と命令2との間に、W−Wの依存関係、命令2と命令3との間に、W−R依存関係があると判る。ここでは、W−Wの依存関係の有無に着目する。命令1と命令2との間には、W−W依存関係が有ると判別され、ステップS13に進む。W−W依存関係が無ければ、ステップS20に進む。ステップS13からステップS20は、R−W依存関係の場合と同様である。
次に、図7のベクトル演算装置の動作について、図11のフローチャートにて、命令2の発行後の命令IDの比較について説明する。ステップS21からステップS23は、R−W依存関係の場合と同様である。
次に、図7のベクトル演算装置の動作について、図12のフローチャートにて、Readyビット点灯後のデータバッファ15からの読み出しと、VRへの書き込みの制御について説明する。ステップS31からステップS37は、R−W依存関係の場合と同様である。
次に、図7のベクトル演算装置の動作について、図11のフローチャートにて、ライトバック命令の発行後のデータバッファ管理部22の制御について説明する。ステップS21からステップS25は、R−W依存関係の場合と同様である。
次に、上記命令1、2、3の動作について図14、図10、図11、図12を参照して説明する。図14は、図7のベクトル演算装置の動作における命令1、2、3の動作を示すタイムチャートである。ここでは、時刻0より前に、命令1、2、3に対し、ID付加部211において、命令IDがそれぞれ1、2、3と付加され(ステップS11)、発行部214に到達しているものとする。また、ここでは要素数、演算レイテンシは、R−W依存関係の場合と同様である。
時刻0、3、8、10は、R−W依存関係の場合と同様である。
時刻11で、ステップS31、ステップS32、ステップS33が処理され、ライトバック命令は、ステップS33では発行不可能と判断される。R−W依存関係の場合と同様に、Readyビットの点灯が確認され、発行許可部224により発行が許可される。
時刻13で、R−W依存関係の場合と同様に命令1による演算が開始される。図中、「VR0、VR1」は演算器への入力がVR0、VR1のデータであること、「1 vfad」は実行される演算が命令1:vfadであることをそれぞれ示している。
時刻20では、R−W依存関係の場合と同様に命令1の演算結果のVR0への書き込みが開始される。図中、「VR0」は演算結果の書き込み先がVR0であることを示している。また、「VR0 Write Start」はVR0へのデータの書き込みが開始されることを示している。
時刻23では、命令1の演算結果のVR2への書き込みが終わる。
時刻19で、ステップS33で発行可能と判断されて、ステップS34、S35が処理される。VR0へ書き込むライトバック命令が発行される。更に、ステップS21、ステップS22、ステップS24、ステップS25が処理される。情報保持部221の自命令IDと、発行部214が発行したライトバック命令の命令IDが一致し、情報保持部221のエントリをリセットする。
時刻22で、ステップS36が処理される。データバッファ15からのデータの読み出しが開始される。図中、「Readデータバッファ」はデータバッファ15からのデータの読み出しが始まること、「VR0」は読み出し先がVR0であることをそれぞれ示している。
時刻24で、ステップS37が処理される。データバッファ15から読み出されたデータの、VR0への書き込みが開始される。図中、「VR0 Write Start」はデータバッファ15からのデータのVR0への書き込みが開始されることを示している。
時刻21で、命令3の命令が発行される。図中、「3 vfad」は、発行された命令が命令3:vfadであることを示している。
時刻24で、命令3により、VR0とVR1のデータの読み出しが開始され、演算が開始される。図中、「VR0 Read Start」はVR0からのデータの読み出しが開始されることを示している。また、「VR0、VR1」は演算器への入力がVR0、VR1のデータであること、「3 vfad」は実行される演算が命令3:vfadであることをそれぞれ示している。
時刻31で、命令3の演算結果のVR3への書き込みが開始される。図中、「VR3」は演算結果の書き込み先がVR3であることを示している。
本実施の形態では、VR0に関し、W−W依存関係にある命令1と命令2において、先行する命令1のVR0書き込み終了直後に、後続の命令2のVR0書き込みがライトバック命令を用いて行われることになり、VR0の依存関係は守られている。また、命令2の結果を使う命令3は、ライトバック命令の発行時刻19の後の時刻21で発行される。
すなわち、図14に示すように、演算制御部2において時刻0で命令2の発行に関する処理が実行される。その命令2に対応して、演算部1において時刻3〜時刻8で命令2に関する処理(処理すべき複数の要素のうちの先頭の第1要素)が実行される。
その後、演算制御部2において、時刻10で命令1の発行に関する処理が実行され、時刻19で命令2の演算結果についてライトバック命令の発行に関する処理が実行され、時刻21で命令3の発行に関する処理が実行される。
それら命令1、命令2に関するライトバック命令、及び命令3に対応して、演算部1において、時刻13〜時刻20で命令1に関する処理(第1要素)が実行され、時刻22〜時刻24でライトバック命令に関する処理(第1要素)が実行され、時刻24〜時刻31で命令3に関する処理(第1要素)が実行される。
上記(図10など)に示すように、本実施の形態のベクトル演算装置は、ベクトル演算が可能な演算部と、演算部を制御する演算制御部とを具備している。演算部は、複数のレジスタと、複数のレジスタに格納されたデータを用いてベクトル演算を実行する複数の演算器と、複数の演算器の演算結果データを一時的に格納可能なデータバッファとを備えている。演算制御部は、演算部へベクトル演算に関する複数の命令を発行する命令発行部と、データバッファの管理に関する管理情報を保持するデータバッファ管理部とを備えている。命令発行部は、複数の命令に基づいて、複数のレジスタのうちの同一レジスタにおける複数の命令の依存関係を判定する。データバッファ管理部は、依存関係がある場合、管理情報に基づいて、データバッファの使用が可能か否かを判定する。命令発行部は、データバッファの使用が可能な場合、演算部の状態に基づいて、複数の命令のうち、第1命令と第2命令との間で順番変更が可能か否かを判定する。命令発行部は、順番変更が可能な場合、演算結果データをデータバッファに格納するように第2命令を編集して発行する。データバッファ管理部は、編集された第2命令の発行に基づいて、データバッファの出力先レジスタ及び順番変更の変更相手である第1命令の情報を管理情報に格納する。複数の演算器のうちの一つは、編集された第2命令に基づいて、ベクトル演算を実行して演算結果データを出力する。データバッファは、出力された演算結果データを一時的に格納する。
更に、上記(図11、図12など)に示すように、本実施の形態のベクトル演算装置は、命令発行部は、第1命令を発行する。複数の演算器は、第1命令に基づいて、複数のレジスタのデータを用いたベクトル演算を実行して演算結果データを複数のレジスタいずれかへ出力する。データバッファ管理部は、管理情報を参照して、発行された第1命令が変更相手であることを検出して、管理情報に格納する。命令発行部は、管理情報を参照して、データバッファに格納された演算結果データを、出力先レジスタに出力する出力命令を発行する。データバッファ管理部は、出力命令の発行に応答して、管理情報をリセットする。出力命令に基づいて、データバッファに格納された演算結果データは、出力先レジスタである複数のレジスタのいずれかに出力される。複数の演算器は、第1命令及び第2命令を除く複数の命令に基づいて、複数のレジスタのデータを用いたベクトル演算を実行して演算結果データを出力する。
本実施の形態は、以下の効果を有する。
第1の効果は、VRのR−W依存関係、及び、W−W依存関係のある後続命令が、先行命令を追い越して命令発行することが可能となり、システム性能の向上が図れることである。その理由は、データバッファ15に演算結果を一時的に保持することで、レジスタリネーミングと同様の効果が得られるからである。
第2の効果は、第1の効果で追い越した後続命令の演算結果を使用する命令の発行が早められ、システム性能の向上が図れることである。その理由は、データバッファ15に後続命令の演算結果を一時的に保持することで、第1の効果で先行命令のVRリードの直後に、後続命令による演算結果のVRライトが行われるため、後続命令の演算結果を使用する命令によるVRリードのタイミングを早めることが可能となるからである。
(第2の実施の形態)
まず、本発明の第2の実施の形態に係るベクトル演算装置の構成について説明する。図15は、本発明の第2の実施の形態に係るベクトル演算装置の構成を示すブロック図である。このベクトル演算装置は、図7に示す第1の実施の形態に係るベクトル演算装置に、以下の構成を追加/変更している。
演算制御部2のデータバッファ管理部22は、更に、VR番号比較部225を備える。VR番号比較部225は、情報保持部221に保持しているターゲットVR番号と、発行部214内にある命令の読み出しVR番号とを比較し、VR番号の一致を検出する。
また、演算部1は、更に、ストアパスセレクタ1Gと、ストアデータバッファパス1Hと、ストアセレクタパス1Jと、ストアパス1Kとを備える。ストアパスセレクタ1Gは、ストアセレクタ16及びデータバッファ15からのデータを選択する。ストアデータバッファパス1Hは、データバッファ15とストアパスセレクタ1Gとを接続する。ストアセレクタパス1Jは、ストアセレクタ16とストアパスセレクタ1Gとを接続する。ストアパス1Kはストアパスセレクタ1Gからメモリアクセス部(図示せず)にストアデータを送る(図7に示す第1の実施の形態に係るストアパス1Eは使用されていない)。
図9Dは、VR番号比較部225の動作表を示すテーブルである。Vは、情報保持部221に保持しているVビットを示す。VR番号比較は、情報保持部221に保持しているターゲットVR番号と、発行部214内にある(後続)命令の読み出しVR番号を比較し、一致していれば1、一致していなければ0とする。データ供給は、VとVR番号比較で決定され、データバッファ15に保持しているデータを、後続の命令のオペランドとして供給できる場合は、可能となる。この動作表(図9D)に従うと、Vが1、かつ、VR番号が一致していれば、データバッファ15に保持しているデータを、後続の命令のオペランドとして供給可能となる。
次に、本実施の形態に係るベクトル演算装置の動作について説明する。まず、W−W依存関係の場合の動作と、メモリへの書き込み命令(以下、ストア命令という)の動作について説明する。ここでは、以下の3命令において、VR0に関し、命令1で書き込み、命令2で書き込みを行い、命令3で読み出す演算を行う。ただし、命令2と命令3間は、真の依存関係となり、順序保障が必要となる。
命令1:VR0とVR1をベクトル加算し、結果をVR0に格納
(vfad VR0←VR0、VR1)
命令2:定数CとVR3をベクトル乗算し、結果をVR0に格納
(vfmp VR0←定数C、VR3)
命令3:VR0をメモリにストア
(vst M←VR0)
ここでは各命令で演算する要素数は4とする。
図10のフローチャートで、動作の説明を行う。ステップS11からステップS20は、第1の実施の形態のW−W依存関係の場合と同様である。
次に、命令3の動作について説明する。図16は、命令3の動作を示すフローチャートである。ステップS41で、VR番号比較部225が、情報保持部221に保持しているターゲットVR番号と、発行部214内にある命令の読み出しVR番号とを比較する。VR番号比較部225は、図9Dの動作表に従い、VR番号の一致を検出し、データバッファ15からデータ供給が可能かを判定する。命令3が発行部214に存在する場合、VR番号比較部225がVR番号の一致を検出し、データバッファ15から命令3がストアするデータの供給が可能と判定される。一致しない場合には、時刻毎に判定を繰り返す。ステップS42で、発行部214が、演算部1の状態から、命令3が発行可能か判定する。発行可能な場合には、ステップS43へ進む。発行が不可能な場合は、ステップS41に戻る。
ステップS43で、編集部212が、命令3を、データバッファ15のデータを使用するために必要なフォーマットに編集する。このとき、命令3によりメモリに書き込まれるデータは、データバッファ15に格納されているデータ、有効要素数はデータの要素数となる。ステップS44で、発行部214が、命令3を発行する。このとき、発行部214が、演算制御パス3を通じ、データバッファ15の内容を命令3のストアデータとして供給する指示が、演算部1へ送られる。ステップS45で、データバッファ15からデータが読み出される。ステップS46で、ストアパスセレクタ1Gが、ストアデータバッファパス1Hを選択する。データバッファ15からの読み出しデータは、ストアデータバッファパス1Hを経由しストアパス1Kへ送られる。ストアパスセレクタ1Gでは、ストアデータバッファパス1Hを選択し、ストアパス1Kを経由してメモリへ書き込まれる。
図11のフローチャートにおいて、ステップS21からステップS25は、第1の実施の形態のW−W依存関係の場合と同様である。
図12のフローチャートにおいて、ステップS31からステップS37は、第1の実施の形態のW−W依存関係の場合と同様である。
次に、上記命令1、2、3の動作について図17、図10、図11、図12、図16を参照して説明する。ここで、図17は、図15のベクトル演算装置の動作における命令1、2、3の動作を示すタイムチャートである。ここでは、時刻0より前に、命令1、2、3に対し、ID付加部211において、命令IDがそれぞれ1、2、3と付加され(ステップS11)、発行部214に到達しているものとする。また、ここでは要素数、演算レイテンシは、第1の実施の形態のW−W依存関係の場合と同様である。
時刻0で、ステップS12、ステップS13、ステップS14、ステップS15、ステップS16、ステップS17が処理される。発行部214が、命令2を発行して、演算部1においてデータバッファ15が使用される。図中、「2 vfmp」は、発行された命令が命令2:vfmpであることを示している。
時刻3での命令2の処理は、第1の実施の形態のW−W依存関係の場合と同様である。
時刻8での命令2の処理は、第1の実施の形態のW−W依存関係の場合と同様である。
時刻5で、命令3に関し、ステップS41からステップS44が処理される。命令3はデータバッファ15を読み出す命令として、発行される。図中、「3 vst」は、発行された命令が命令3:vstであることを示している。
時刻8で、命令3に対するデータバッファ15からのデータ供給が開始され、ストアデータバッファパス1Hにデータが送られる。この時、ストアパスセレクタ1Gでは、ストアデータバッファパス1H側が選択され、ストアパス1Kに、データバッファ15からのデータが送られる。図中、「Readデータバッファ」はデータバッファ15からデータを読み出すことを示している。また、「VR0」は演算器への入力がVR0のデータであること、「3 vst」は実行される演算が命令3:vstであることをそれぞれ示している。
時刻12で、メモリへデータが送られる。ここでは、データバッファ15の読み出しの4時刻後にメモリへデータが送られるものとする。図中、「メモリ」はデータの送信先がメモリであることを示している。
時刻10以降の命令1の処理は、第1の実施の形態のW−W依存関係の場合と同様である。
時刻19以降のVR0へのライトバック命令の処理は、第1の実施の形態のW−W依存関係の場合と同様である。
すなわち、図17に示すように、演算制御部2において、時刻0で命令2の発行に関する処理が実行され、時刻5で命令3の発行に関する処理が実行される。
その命令2、及び命令3に対応して、演算部1において、時刻3〜時刻8で命令2に関する処理(処理すべき複数の要素のうちの先頭の第1要素)が実行され、時刻8〜時刻12で命令3に関する処理(第1要素)が実行される。
その後、演算制御部2において、時刻10で命令1の発行に関する処理が実行され、時刻19で命令2の演算結果についてライトバック命令の発行に関する処理が実行される。
それら命令1、及び命令2に関するライトバック命令に対応して、演算部1において、時刻13〜時刻20で命令1に関する処理(第1要素)が実行され、時刻22〜時刻24でライトバック命令に関する処理(第1要素)が実行される。
上記(図10など)に示すように、本実施の形態のベクトル演算装置は、ベクトル演算が可能な演算部と、演算部を制御する演算制御部とを具備している。演算部は、複数のレジスタと、複数のレジスタに格納されたデータを用いてベクトル演算を実行する複数の演算器と、複数の演算器の演算結果データを一時的に格納可能なデータバッファとを備えている。演算制御部は、演算部へベクトル演算に関する複数の命令を発行する命令発行部と、データバッファの管理に関する管理情報を保持するデータバッファ管理部とを備えている。命令発行部は、複数の命令に基づいて、複数のレジスタのうちの同一レジスタにおける複数の命令の依存関係を判定する。データバッファ管理部は、依存関係がある場合、管理情報に基づいて、データバッファの使用が可能か否かを判定する。命令発行部は、データバッファの使用が可能な場合、演算部の状態に基づいて、複数の命令のうち、第1命令と第2命令との間で順番変更が可能か否かを判定する。命令発行部は、順番変更が可能な場合、演算結果データをデータバッファに格納するように第2命令を編集して発行する。データバッファ管理部は、編集された第2命令の発行に基づいて、データバッファの出力先レジスタ及び順番変更の変更相手である第1命令の情報を管理情報に格納する。複数の演算器のうちの一つは、編集された第2命令に基づいて、ベクトル演算を実行して演算結果データを出力する。データバッファは、出力された演算結果データを一時的に格納する。
更に、上記(図11、図12、図16など)に示すように、本実施の形態のベクトル演算装置は、データバッファ管理部は、複数の命令のうちの第3命令について、複数のレジスタのうちの第3命令が対象とするレジスタと、出力先レジスタとが等しい場合、管理情報に基づいて、データバッファの演算結果データが使用可能か否かを判定する。命令発行部は、データバッファの演算結果データが使用可能な場合、演算部の状態に基づいて、データバッファの演算結果データを使用するように第3命令を編集して発行する。編集された第3命令に基づいて、データバッファの演算結果データが第3命令での出力先へ出力される。命令発行部は、第1命令を発行する。複数の演算器は、第1命令に基づいて、複数のレジスタのデータを用いたベクトル演算を実行して演算結果データを複数のレジスタいずれかへ出力する。データバッファ管理部は、管理情報を参照して、発行された第1命令が変更相手であることを検出して、管理情報に格納する。命令発行部は、管理情報を参照して、データバッファに格納された演算結果データを、出力先レジスタに出力する出力命令を発行する。データバッファ管理部は、出力命令の発行に応答して、管理情報をリセットする。出力命令に基づいて、データバッファに格納された演算結果データは、出力先レジスタである複数のレジスタのいずれかに出力される。
本実施の形態は、以下の効果を有する。
まず、第1の実施の形態に示される第1〜第2の効果を得ることができる。加えて、第3の効果として、ストア命令に対しても、データバッファ15からデータ供給を行うことで、ストア命令の実行タイミングを早めることが可能となり、システム性能の向上が図れることである。
(第3の実施の形態)
まず、本発明の第3の実施の形態に係るベクトル演算装置の構成について説明する。図18は、本発明の第3の実施の形態に係るベクトル演算装置の構成を示すブロック図である。このベクトル演算装置は、図15に示す第2の実施の形態に係るベクトル演算装置に、以下の構成を追加/変更している。
演算制御部2のデータバッファ管理部22は、更に、バイパス検出部226を備える。バイパス検出部226は、データバッファ15にあるデータを、後続演算のオペランドとしてデータ供給が可能かを検出する。
また、演算部1は、更に、データバッファバイパスパス1Lを備える。データバッファバイパスパス1Lは、バッファパス1Dから各演算器の第1オペランド及び第2オペランドとしてデータを供給可能である。
図9Eは、バイパス検出部226の動作表を示すテーブルである。Vは、情報保持部221に保持しているVビットを示す。データ供給は、VR番号比較部225において、図9Dの動作表のデータ供給を示す。図9Dの動作表に従い、データ供給が可能であれば1、可能でなければ0とする。パス未使用は、データバッファバイパスパス1Lの使用状況を示す。データバッファバイパスパス1Lが他の演算で未使用であれば1、使用中であれば0とする。バイパス判定は、V、データ供給、パス未使用で決定される。後続命令は、データバッファ15に保持しているデータを用いて、バイパス演算が可能な場合は、可能となる。図9Eの動作表に従うと、Vが1、かつ、データ供給が1、かつ、パス未使用が1であれば、後続命令は、データバッファ15に保持しているデータを用いて、バイパス演算が可能となる。
次に、次に、本実施の形態に係るベクトル演算装置の動作について説明する。まず、後続の演算命令のオペランドデータとして、データバッファ15からデータの供給を行う演算について説明する。ここでは、以下の3命令において、VR0に関し、命令1で読み出し、命令2で書き込みを行い、命令3で読み出す演算を行う。ただし、命令2と命令3間は、真の依存関係となり、順序保障が必要となる。命令3は、データバッファ15のデータを用いたバイパス演算(以下、バッファバイパス演算という)を行う。
命令1:VR0とVR1をベクトル加算し、結果をVR2に格納
(vfad VR2←VR0、VR1)
命令2:定数CとVR3をベクトル乗算し、結果をVR0に格納
(vfmp VR0←定数C、VR3)
命令3:VR0とVR1をベクトル加算し、結果をVR3に格納
(vfad VR3←VR0、VR1)
ここでは、各命令で演算する要素数は4とする。
また、命令1と命令2との間に、W−W依存関係がある場合(例えば、命令1がVR0に書き込む)も、バッファバイパス演算に関しては同様に可能である。
図10のフローチャートで、動作の説明を行う。ステップS11からステップS20は、第1の実施の形態のR−W依存関係の場合と同様である。
図11のフローチャートにおいて、ステップS21からステップS25は、第1の実施の形態のR−W依存関係の場合と同様である。
次に、命令3の動作について説明する。図19は、命令3の動作を示すフローチャートである。ステップS51で、VR番号比較部225は、情報保持部221に保持しているターゲットVR番号と、発行部214内にある命令の読み出しVR番号とを比較する。VR番号比較部225は、図9Dの動作表に従い、VR番号の一致を検出し、データバッファ15からデータ供給が可能かを判定する。命令3が発行部214に存在する場合、VR番号比較部225はVR番号の一致を検出する。一致を検出しなければ、時刻毎に判定を繰り返す。ステップS52で、バイパス判定部226は、命令3がバッファバイパス可能か判定する。バイパス判定部226は、図9Eの動作表に従い、命令3がバッファバイパス演算が可能と判定さする。バッファバイパス演算が不可能と判定した場合、ステップS51に戻る。ステップS53で、発行部214が、演算部1の状態から、命令3がバッファバイパス演算として発行可能か判定する。発行可能な場合、ステップS54へ進む。発行が不可能な場合は、ステップS51に戻る。
ステップS54で、編集部212が、命令3を、バッファバイパス演算に必要なフォーマットに編集する。このとき、編集部212は、データバッファ15からオペランドデータが供給される読み出しVR番号を、データバッファ15からの読み出しと変更する。ステップS55で、発行部214が、命令3を発行する。このとき演算制御パス3を通じ、データバッファ15の内容を読み出し、命令3のオペランドデータとして扱う指示が、演算部1へ送られる。
ステップS56で、データバッファ15からデータが読み出される。ステップS57で、ステップS56のデータは、データバッファ−バイパスパス1Lを経由し、命令3が使用する演算器へ供給され、命令3は、バッファバイパス演算として演算される。
図12のフローチャートにおいて、ステップS31からステップS37は、第1の実施の形態のR−W依存関係の場合と同様である。
次に、上記命令1、2、3の動作について図20、図10、図11、図12、図19を参照して説明する。ここで、図20は、図18の動作における命令1、2、3の動作を示すタイムチャートである。ここでは、時刻0より前に、命令1、2、3に対し、ID付加部211において、命令IDがそれぞれ1、2、3と付加され(ステップS11)、発行部214に到達しているものとする。ここでは要素数、演算レイテンシは、第1の実施の形態のR−W依存関係の場合と同様である。
時刻0で、ステップS12、ステップS13、ステップS14、ステップS15、ステップS16、ステップS17が処理される。発行部214が、命令2を発行し、演算部1においてデータバッファ15が使用される。図中、「2 vfmp」は、発行された命令が命令2:vfmpであることを示している。
時刻3での命令2の処理は、第1の実施の形態のR−W依存関係の場合と同様である。
時刻8での命令2の処理は、第1の実施の形態のR−W依存関係の場合と同様である。
時刻5で、命令3に関し、ステップS51からステップS55が処理される。命令3は、バッファバイパス演算する命令として発行される。図中、「3 vfad」は、発行された命令が命令3:vfadであることを示している。
時刻8で、命令3に対するデータバッファ15からのデータ供給が開始され、データバッファバイパスパス1Lを経由し、命令3が使用する演算器へデータが送られる。図中、「Readデータバッファ」はデータバッファ15からデータを読み出すことを示している。また、「VR0、VR1」は演算器への入力がVR0、VR1のデータであること、「3 vfad」は実行される演算が命令3:vfadであることをそれぞれ示している。
時刻15で、命令3の演算結果がVR3に書き込まれる。図中、「VR3」はデータの書き込み先がVR3であることを示している。
時刻10以降の命令1の処理は、第1の実施の形態のR−W依存関係の場合と同様である。
時刻11以降のライトバック命令の処理は、第1の実施の形態のR−W依存関係の場合と同様である。
すなわち、図20に示すように、演算制御部2において、時刻0で命令2の発行に関する処理が実行され、時刻5で命令3の発行に関する処理が実行される。
その命令2、及び命令3に対応して、演算部1において、時刻3〜時刻8で命令2に関する処理(処理すべき複数の要素のうちの先頭の第1要素)が実行され、時刻8〜時刻15で命令3に関する処理(第1要素)が実行される。
その後、演算制御部2において、時刻10で命令1の発行に関する処理が実行され、時刻11で命令2の演算結果についてライトバック命令の発行に関する処理が実行される。
それら命令1、及び命令2に関するライトバック命令に対応して、演算部1において、時刻13〜時刻20で命令1に関する処理(第1要素)が実行され、時刻14〜時刻16でライトバック命令に関する処理(第1要素)が実行される。
また、命令1と命令2との間にW−W依存関係がある場合も、バッファバイパス演算に関しては同様に可能である。この場合、第1の実施の形態のR−W依存関係を、第1の実施の形態のW−W依存関係と読み替える。
上記(図10など)に示すように、本実施の形態のベクトル演算装置は、ベクトル演算が可能な演算部と、演算部を制御する演算制御部とを具備している。演算部は、複数のレジスタと、複数のレジスタに格納されたデータを用いてベクトル演算を実行する複数の演算器と、複数の演算器の演算結果データを一時的に格納可能なデータバッファとを備えている。演算制御部は、演算部へベクトル演算に関する複数の命令を発行する命令発行部と、データバッファの管理に関する管理情報を保持するデータバッファ管理部とを備えている。命令発行部は、複数の命令に基づいて、複数のレジスタのうちの同一レジスタにおける複数の命令の依存関係を判定する。データバッファ管理部は、依存関係がある場合、管理情報に基づいて、データバッファの使用が可能か否かを判定する。命令発行部は、データバッファの使用が可能な場合、演算部の状態に基づいて、複数の命令のうち、第1命令と第2命令との間で順番変更が可能か否かを判定する。命令発行部は、順番変更が可能な場合、演算結果データをデータバッファに格納するように第2命令を編集して発行する。データバッファ管理部は、編集された第2命令の発行に基づいて、データバッファの出力先レジスタ及び順番変更の変更相手である第1命令の情報を管理情報に格納する。複数の演算器のうちの一つは、編集された第2命令に基づいて、ベクトル演算を実行して演算結果データを出力する。データバッファは、出力された演算結果データを一時的に格納する。
更に、上記(図11、図12、図19など)に示すように、本実施の形態のベクトル演算装置は、前記データバッファ管理部は、前記複数の命令のうちの第3命令について、前記複数のレジスタのうちの前記第3命令が対象とするレジスタと、前記出力先レジスタとが等しい場合、前記管理情報に基づいて、前記データバッファの演算結果データが使用可能か否かを判定する。前記命令発行部は、前記データバッファの演算結果データが使用可能な場合、前記演算部の状態に基づいて、前記データバッファの演算結果データを使用するように前記第3命令を編集して発行する。前記編集された第3命令に基づいて、前記データバッファの演算結果データが前記第3命令での出力先へ出力する。前記命令発行部は、前記第1命令を発行する。前記データバッファ管理部は、前記管理情報を参照して、前記発行された第1命令が前記変更相手であることを検出して、前記管理情報に格納する。前記命令発行部は、前記管理情報を参照して、前記データバッファに格納された演算結果データを、前記出力先レジスタに出力する出力命令を発行する。前記データバッファ管理部は、前記出力命令の発行に応答して、前記管理情報をリセットする。前記出力命令に基づいて、前記データバッファに格納された演算結果データは、前記出力先レジスタである前記複数のレジスタのいずれかに出力される。前記複数の演算器は、前記第1命令に基づいて、前記複数のレジスタのデータを用いたベクトル演算を実行して演算結果データを出力する。
本実施の形態は、以下の効果を有する。
まず、第1の実施の形態及び第2の実施の形態に示される第1〜第3の効果を得ることができる。加えて、第4の効果として、データバッファ15から後続演算へのデータ供給を行うことで、後続演算の実行タイミングを早める事が可能となり、システム性能の向上が図れることである。
以上示されるように、本発明は複数のワード(要素)で構成されているベクトルレジスタを使用したベクトル演算において、レジスタリネーミング用のレジスタを用いずに、レジスタリネーミングと同等の機能を有するベクトル演算装置を提供することが出来る。
本発明のプログラム、データ構造は、コンピュータ読取可能な記憶媒体に記録され、その記憶媒体から情報処理装置に読み込まれても良い。
本発明は上記各実施の形態に限定されず、本発明の技術思想の範囲内において、各実施の形態は適宜変形又は変更され得ることは明らかである。なお、技術的な矛盾の発生しない限り、各実施の形態に記載された技術は、他の実施の形態に単独で又は組み合わせて適用することが可能である。