(57)【特許請求の範囲】
【請求項１】
複数の命令を保持する保持部と、
前記保持部から入力される前記複数の命令のうち、先行命令と前記先行命令に続く後続命令とのデータ依存関係を検出するデータ依存検出部と、
前記データ依存検出部での検出結果に基づいて、命令の発行を制御する命令発行制御部とを有し、
前記命令発行制御部は、
前記先行命令と前記後続命令とのデータ依存関係がある場合に、前記先行命令と同じ命令種類を有する新規の命令を生成し、生成した前記新規の命令を前記先行命令と前記後続命令との間に発行し、
前記新規の命令の生成では、
前記先行命令とデータ依存関係にある前記後続命令の第１レジスタの識別情報から前記新規の命令の第２レジスタの識別情報を決定し、
前記先行命令の第２レジスタの識別情報と前記新規の命令の第２レジスタの識別情報との差分を算出し、
算出した前記差分と前記先行命令の第１レジスタの識別情報とから前記新規の命令の第１レジスタの識別情報を決定し、
前記先行命令の処理完了サイクルと所定のベクトル長とから前記新規の命令の処理完了サイクルを決定することを特徴とするベクトル処理装置の命令制御回路。
【請求項２】
前記命令発行制御部は、前記先行命令と前記新規の命令と前記所定のベクトル長とに基づいて、前記先行命令による処理のうち、前記先行命令と前記新規の命令とで重複する処理を除いた処理に要するサイクルを決定し、決定した前記サイクルに前記先行命令の処理完了サイクルを変更することを特徴とする請求項１記載のベクトル処理装置の命令制御回路。
【請求項３】
前記命令発行制御部は、
前記先行命令と前記後続命令とにＲＡＷハザードに対応するデータ依存関係がある場合には、
前記先行命令とデータ依存関係にある前記後続命令のソースレジスタの識別情報から前記新規の命令のデスティネーションレジスタの識別情報を決定し、
前記先行命令のデスティネーションレジスタの識別情報と前記新規の命令のデスティネーションレジスタの識別情報との差分を算出し、
算出した前記差分と前記先行命令のソースレジスタの識別情報とから前記新規の命令のソースレジスタの識別情報を決定することを特徴とする請求項１又は２記載のベクトル処理装置の命令制御回路。
【請求項４】
前記命令発行制御部は、
前記先行命令と前記後続命令とにＷＡＲハザードに対応するデータ依存関係がある場合には、
前記先行命令とデータ依存関係にある前記後続命令のデスティネーションレジスタの識別情報から前記新規の命令の第１ソースレジスタの識別情報を決定し、
前記後続命令とデータ依存関係にある前記先行命令の第１ソースレジスタの識別情報と前記新規の命令の第１ソースレジスタの識別情報との差分を算出し、
算出した前記差分と前記先行命令の第２ソースレジスタの識別情報及びデスティネーションレジスタの識別情報とから前記新規の命令の第２ソースレジスタの識別情報及びデスティネーションレジスタの識別情報を決定することを特徴とする請求項１又は２記載のベクトル処理装置の命令制御回路。
【請求項５】
前記命令発行制御部は、前記データ依存検出部での検出結果に応じて、前記保持部からの命令を発行するか、生成した前記新規の命令を発行するかを選択することを特徴とする請求項１〜４の何れか１項に記載のベクトル処理装置の命令制御回路。
【請求項６】
複数の命令を保持する保持部と、
前記保持部から入力される前記複数の命令のうち、先行命令と前記先行命令に続く後続命令とのデータ依存関係を検出するデータ依存検出部と、
前記データ依存検出部での検出結果に基づいて、命令の発行を制御する命令発行制御部と、
並列に動作可能であって、各々が独立して前記命令発行制御部から発行される命令を受けて、当該命令に応じたベクトル演算処理を実行する複数の命令実行部とを有し、
前記命令発行制御部は、
前記先行命令と前記後続命令とのデータ依存関係がある場合に、前記先行命令と同じ命令種類を有する新規の命令を生成し、生成した前記新規の命令を前記先行命令と前記後続命令との間に発行し、
前記新規の命令の生成では、
前記先行命令とデータ依存関係にある前記後続命令の第１レジスタの識別情報から前記新規の命令の第２レジスタの識別情報を決定し、
前記先行命令の第２レジスタの識別情報と前記新規の命令の第２レジスタの識別情報との差分を算出し、
算出した前記差分と前記先行命令の第１レジスタの識別情報とから前記新規の命令の第１レジスタの識別情報を決定し、
前記先行命令の処理完了サイクルと所定のベクトル長とから前記新規の命令の処理完了サイクルを決定することを特徴とするプロセッサ。
【請求項７】
ベクトル処理装置が有するデータ依存検出部が、複数の命令を保持する保持部から入力される前記複数の命令のうち、先行命令と前記先行命令に続く後続命令とのデータ依存関係を検出し、
ベクトル処理装置が有する命令発行制御部が、前記データ依存関係の検出結果に基づいて命令の発行を制御し、
前記先行命令と前記後続命令とのデータ依存関係がある場合に、前記命令発行制御部が、前記先行命令と同じ命令種類を有する新規の命令を生成し、生成した前記新規の命令を前記先行命令と前記後続命令との間に発行し、
前記新規の命令の生成では、
前記先行命令とデータ依存関係にある前記後続命令の第１レジスタの識別情報から前記新規の命令の第２レジスタの識別情報を決定し、
前記先行命令の第２レジスタの識別情報と前記新規の命令の第２レジスタの識別情報との差分を算出し、
算出した前記差分と前記先行命令の第１レジスタの識別情報とから前記新規の命令の第１レジスタの識別情報を決定し、
前記先行命令の処理完了サイクルと所定のベクトル長とから前記新規の命令の処理完了サイクルを決定することを特徴とするベクトル処理装置の命令制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、命令制御回路、プロセッサ、及び命令制御方法に関する。
【背景技術】
【０００２】
ベクトル処理装置（ベクトルプロセッサ）は、ベクトルレジスタファイルに格納された配列型のデータに対して、命令に応じた演算処理等をパイプライン的に行う。ベクトル処理装置は、図１８に示すように複数の実行パイプラインを有し、各実行パイプラインが配列データをそれぞれ処理する。
【０００３】
図１８は、ベクトル処理装置の構成例を示すブロック図である。図１８において、ＩＦは命令フェッチステージ、ＩＤは命令デコードステージ、ＥＸは演算実行ステージである。ベクトル処理装置は、命令バッファ１０１、データ依存検出部１０２、命令発行制御部１０３、実行パイプライン１０４、ベクトルレジスタファイル１０５、及びマルチプレクサ回路１０６を有する。図１８は、パイプラインＡ、Ｂ、Ｃ及びＤの４つの実行パイプライン１０４を有するベクトル処理装置を示している。
【０００４】
命令バッファ１０１は、記憶装置から読み出された命令（ベクトル命令）が格納される。データ依存検出部１０２は、先行して実行される先行命令で指定されるベクトルレジスタと、その先行命令の後に続く後続命令で指定されるベクトルレジスタとが重複するか否かを判定することで、先行命令と後続命令とのデータ依存関係の検出を行う。命令発行制御部１０３は、命令バッファ１０１に格納されている命令及びデータ依存検出部１０２での検出結果を受けて、命令を実行パイプライン１０４に発行する。命令発行制御部１０３は、実行パイプライン１０４があいたら次の命令を命令バッファ１０１に要求し、データ依存関係及び実行パイプライン１０４の空き状態に応じて、どの実行パイプライン１０４に命令を発行するかを決定して命令を発行する。
【０００５】
実行パイプライン１０４は、命令発行制御部１０３から受けた命令に従って、配列データに対する処理を実行する。実行パイプライン１０４の各々は、シーケンサ１０７及び演算部１０８を有する。シーケンサ１０７は、命令発行制御部１０３から受けた命令の実行に係る制御を行う。シーケンサ１０７は、例えば命令実行を指示したり、ベクトルレジスタファイル１０５に対するデータの読み出しや書き込みの実行を指示したりする。演算部１０８は、複数の演算器１０９を有し、シーケンサ１０７からの指示に従って処理を実行する。ここで、本明細書においては、説明の便宜上、演算部１０８は８個の１６ビット演算器１０９を有するものとし、３２ビットデータについては２個の演算器を用いて処理を行うものとする。
【０００６】
ベクトルレジスタファイル１０５は、配列データが格納されている。ベクトルレジスタファイル１０５に格納されている配列データは、マルチプレクサ回路１０６を介して実行パイプライン１０４に供給される。なお、ベクトルレジスタファイル１０５にはまだ書き込まれていないが、すでに演算結果として生成されている配列データが、マルチプレクサ回路１０６を介して実行パイプライン１０４に供給可能になっている。
【０００７】
配列データのサイズ、すなわち配列要素の個数は、ベクトル長（ＶＬ）によって指定される。ベクトル長（ＶＬ）によって指定された個数の配列要素は、１つの配列レジスタを構成し、１つの配列レジスタに対して１つの論理ベクトルレジスタ番号が対応する。各配列要素のサイズは、ベクトル処理装置が扱うデータ語長に応じて割り当てられる。論理ベクトルレジスタ番号に対応する物理ベクトルレジスタ番号の先頭値は２のべき乗の値となる。ベクトル長（ＶＬ）が２のべき乗である場合には、ベクトル長（ＶＬ）に論理ベクトルレジスタ番号を乗算した値が、その論理ベクトルレジスタ番号に対応する物理ベクトルレジスタ番号の開始値となる。また、ベクトル長（ＶＬ）が２のべき乗でない場合には、ベクトル長（ＶＬ）以上の２のべき乗の値のうちで最小の値に論理ベクトルレジスタ番号を乗算した値が、その論理ベクトルレジスタ番号に対応する物理ベクトルレジスタ番号の開始値となる。
【０００８】
以下の説明では、ｉ、ｊを添え字として、vriが論理ベクトルレジスタ番号ｉのレジスタを表し、vr[j]が物理ベクトルレジスタ番号ｊのレジスタを表すものとする。ベクトル処理装置が扱うデータ語長がＨａｌｆｗｏｒｄ（１６ビット）である場合には、レジスタvr[j]の１つが１つの配列要素に対応し、データ語長がＷｏｒｄ（３２ビット）である場合には、レジスタvr[j]の２つを組としたものが１つの配列要素に対応する。
【０００９】
例えば、ベクトル長（ＶＬ）が２のべき乗である３２の場合におけるベクトルレジスタの論理ベクトルレジスタ番号と物理ベクトルレジスタ番号との対応、及び演算処理が実行されるときの処理順序は、図１９に示すようになる。また、例えば、ベクトル長（ＶＬ）が２のべき乗でない４０の場合におけるベクトルレジスタの論理ベクトルレジスタ番号と物理ベクトルレジスタ番号との対応、及び演算処理が実行されるときの処理順序は、図２０に示すようになる。
【００１０】
図１９（Ａ）に示すようにデータ語長がＨａｌｆｗｏｒｄである場合には、論理番号ｉのベクトルレジスタvriは、物理番号（３２×ｉ）〜（３２×ｉ＋３１）のベクトルレジスタvr[32×i]〜vr[32×i＋31]が対応する。そして、例えばＨａｌｆｗｏｒｄ演算命令で論理番号０のベクトルレジスタvr0が指定された場合には、１サイクル目では物理番号０〜７のベクトルレジスタvr[0]〜vr[7]が処理対象になり、２サイクル目では物理番号８〜１５のベクトルレジスタvr[8]〜vr[15]が処理対象になる。また、３サイクル目では物理番号１６〜２３のベクトルレジスタvr[16]〜vr[23]が処理対象になり、４サイクル目では物理番号２４〜３１のベクトルレジスタvr[24]〜vr[31]が処理対象になる。
【００１１】
また、図１９（Ｂ）に示すようにデータ語長がＷｏｒｄである場合には、論理番号ｉのベクトルレジスタvriは、物理番号（３２×ｉ）〜（３２×ｉ＋６３）のベクトルレジスタvr[32×i]〜vr[32×i＋63]が対応する。そして、例えばＷｏｒｄ演算命令で論理番号０のベクトルレジスタvr0が指定された場合には、１サイクル目では物理番号０〜７のベクトルレジスタvr[0]〜vr[7]が処理対象になり、２サイクル目では物理番号８〜１５のベクトルレジスタvr[8]〜vr[15]が処理対象になる。３サイクル目では物理番号１６〜２３のベクトルレジスタvr[16]〜vr[23]が処理対象になり、４サイクル目では物理番号２４〜３１のベクトルレジスタvr[24]〜vr[31]が処理対象になり、５サイクル目では物理番号３２〜３９のベクトルレジスタvr[32]〜vr[39]が処理対象になる。また、６サイクル目では物理番号４０〜４７のベクトルレジスタvr[40]〜vr[47]が処理対象になり、７サイクル目では物理番号４８〜５５のベクトルレジスタvr[48]〜vr[55]が処理対象になり、８サイクル目では物理番号５６〜６３のベクトルレジスタvr[56]〜vr[63]が処理対象になる。
【００１２】
図２０（Ａ）に示すようにデータ語長がＨａｌｆｗｏｒｄである場合には、論理番号ｉのベクトルレジスタvriは、物理番号（６４×ｉ）〜（６４×ｉ＋３９）のベクトルレジスタvr[64×i]〜vr[64×i＋39]が対応する。そして、例えばＨａｌｆｗｏｒｄ演算命令で論理番号０のベクトルレジスタvr0が指定された場合には、１サイクル目から４サイクル目において処理対象になるレジスタはベクトル長（ＶＬ）が３２である場合と同様である。さらに５サイクル目で物理番号３２〜３９のベクトルレジスタvr[32]〜vr[39]が処理対象になる。
【００１３】
また、図２０（Ｂ）に示すようにデータ語長がＷｏｒｄである場合には、論理番号ｉのベクトルレジスタvriは、物理番号（６４×ｉ）〜（６４×ｉ＋７９）のベクトルレジスタvr[64×i]〜vr[64×i＋79]が対応する。そして、例えばＷｏｒｄ演算命令で論理番号０のベクトルレジスタvr0が指定された場合には、１サイクル目〜８サイクル目において処理対象になるレジスタはベクトル長（ＶＬ）が３２である場合と同様である。さらに、９サイクル目で物理番号６４〜７１のベクトルレジスタvr[64]〜vr[71]が処理対象になり、１０サイクル目で物理番号７２〜７９のベクトルレジスタvr[72]〜vr[79]が処理対象になる。
【００１４】
図１８に示したベクトル処理装置は、“ＩＮＳ  Ａ，Ｂ，Ｃ”という命令を受けると、論理ベクトルレジスタ番号Ａのベクトルレジスタ及び論理ベクトルレジスタ番号Ｂのベクトルレジスタにおける対応するデータを用いて命令ＩＮＳに応じた演算処理を行い、処理結果を論理ベクトルレジスタ番号Ｃのベクトルレジスタに格納する。
【００１５】
例えば、Ｈａｌｆｗｏｒｄ演算命令“vaddh  vr1,vr6,vr7”が、ある実行パイプライン１０４に発行されたとする。命令“vaddh  vr1,vr6,vr7”は、論理番号１のベクトルレジスタvr1と論理番号６のベクトルレジスタvr6とのデータを加算した結果を論理番号７のベクトルレジスタvr7に格納させる命令である。この命令を受けた実行パイプライン１０４は、１サイクル目において下記の演算処理を実行する。
vr[224]＝vr[32]＋vr[192]
vr[225]＝vr[33]＋vr[193]
・・・
vr[231]＝vr[39]＋vr[199]
以降、ベクトル長（ＶＬ）が３２である場合には４サイクル目まで処理対象とするベクトルレジスタをサイクル毎に変更して演算処理を行い、ベクトル長（ＶＬ）が４０である場合には５サイクル目まで処理対象とするベクトルレジスタをサイクル毎に変更して演算処理を行う。
【００１６】
また、例えば、Ｗｏｒｄ演算命令“vadd  vr2,vr4,vr0”が、ある実行パイプライン１０４に発行されたとする。命令“vadd  vr2,vr4,vr0”は、論理番号２のベクトルレジスタvr2と論理番号４のベクトルレジスタvr4とのデータを加算した結果を論理番号０のベクトルレジスタvr0に格納させる命令である。この命令を受けた実行パイプライン１０４は、１サイクル目において下記の演算処理を実行する。
vr[1-0]＝vr[65-64]＋vr[129-128]
vr[3-2]＝vr[67-66]＋vr[131-130]
vr[5-4]＝vr[69-68]＋vr[133-132]
vr[7-6]＝vr[71-70]＋vr[135-134]
以降、ベクトル長（ＶＬ）が３２である場合には８サイクル目まで処理対象とするベクトルレジスタをサイクル毎に変更して演算処理を行い、ベクトル長（ＶＬ）が４０である場合には１０サイクル目まで処理対象とするベクトルレジスタをサイクル毎に変更して演算処理を行う。
【００１７】
このようにベクトル処理装置では、１つの命令が１つの実行パイプラインで複数サイクルに渡って実行される。実行パイプラインは、１つの命令について処理が完了するまでの複数サイクルに渡って占有される。また、ベクトル処理装置が有する各実行パイプラインは、並列に動作可能である。したがって、先行命令で指定されたレジスタと後続命令で指定されたレジスタとが重複する場合には、重複するレジスタへのアクセスを適切に行って先行命令及び後続命令の各処理に反映させるために、相互の命令の発行タイミングを調整する必要がある。そのため、ベクトル処理装置は、命令発行時に、先行命令と後続命令との間のデータ依存関係の有無を判定する。
【００１８】
データ依存関係に係るハザード（データ・ハザード）には、ＲＡＷ（read after write）ハザードやＷＡＲ（write after read）ハザードなどがある。ＲＡＷハザードは、先行命令でベクトルレジスタへ書き込みを行った後に、後続命令が先行命令で書き込みを行ったベクトルレジスタを使用して行う処理において、後続命令での読み出しが先行命令での書き込みより前に行われるというハザードである。また、ＷＡＲハザードは、先行命令でベクトルレジスタの読み出しを行った後に、後続命令で同一のベクトルレジスタへ書き込みを行う処理において、後続命令での書き込みが先行命令での読み出しより前に行われるというハザードである。
【００１９】
先行命令と後続命令との間でデータ依存関係が検出された場合には、ベクトル処理装置は、先行命令における処理が行われるまで一定のサイクルだけ後続命令の発行を遅延させ、データ・ハザードをストール（停止）によって回避するように制御する。図２１は、データ・ハザードを回避する動作例を示す図である。なお、図２１に示した例におけるベクトル長（ＶＬ）は３２である。
【００２０】
図２１（Ａ）は、ＲＡＷハザードの回避に係る命令の発行タイミングの例を示している。先行命令として“vadd  vr2,vr4,vr0”をパイプラインＡに発行し、それに続く後続命令として“vaddh  vr1,vr6,vr7”をパイプラインＢに発行する例を示している。命令“vadd  vr2,vr4,vr0”は、論理番号２のベクトルレジスタvr2と論理番号４のベクトルレジスタvr4とのデータを加算した結果を論理番号０のベクトルレジスタvr0に格納するＷｏｒｄ演算命令である。また、命令“vaddh  vr1,vr6,vr7”は、論理番号１のベクトルレジスタvr1と論理番号６のベクトルレジスタvr6とのデータを加算した結果を論理番号７のベクトルレジスタvr7に格納するＨａｌｆｗｏｒｄ演算命令である。図２１（Ａ）において、命令“vadd  vr2,vr4,vr0”については、演算結果が書き込まれるデスティネーションレジスタである論理番号０のベクトルレジスタvr0の物理番号（先頭値）を各サイクル毎に示している。また、命令“vaddh  vr1,vr6,vr7”については、演算処理に用いるデータが読み出されるソースレジスタである論理番号１のベクトルレジスタvr1の物理番号（先頭値）を各サイクル毎に示している。
【００２１】
先行命令“vadd  vr2,vr4,vr0”による処理及び後続命令“vaddh  vr1,vr6,vr7”による処理において、物理番号３２〜６３のベクトルレジスタvr[32]〜vr[63]が重複する。例えば、物理番号３２〜３９のベクトルレジスタvr[32]〜vr[39]は、後続命令“vaddh  vr1,vr6,vr7”の処理では、はじめのサイクルでデータの読み出しが行われるが、先行命令“vadd  vr2,vr4,vr0”の処理では５サイクル目でデータの書き込みが行われる。先行命令の処理結果を後続命令の処理に反映させるには、後続命令“vaddh  vr1,vr6,vr7”での物理番号３２〜３９のベクトルレジスタvr[32]〜vr[39]からのデータの読み出しは、サイクル５より後に行う必要がある。そのため、サイクル２〜サイクル５では、ＲＡＷハザードによるストールを発生させ、後続命令“vaddh  vr1,vr6,vr7”はサイクル６に発行される。
【００２２】
図２１（Ｂ）は、ＷＡＲハザードの回避に係る命令の発行タイミングの例を示している。先行命令として“vadd  vr0,vr4,vr2”をパイプラインＡに発行し、それに続く後続命令として“vaddh  vr6,vr7,vr1”をパイプラインＢに発行する例を示している。命令“vadd  vr0,vr4,vr2”は、論理番号０のベクトルレジスタvr0と論理番号４のベクトルレジスタvr4とのデータを加算した結果を論理番号２のベクトルレジスタvr2に格納するＷｏｒｄ演算命令である。また、命令“vaddh  vr6,vr7,vr1”は、論理番号６のベクトルレジスタvr6と論理番号７のベクトルレジスタvr7とのデータを加算した結果を論理番号１のベクトルレジスタvr1に格納するＨａｌｆｗｏｒｄ演算命令である。図２１（Ｂ）において、命令“vadd  vr0,vr4,vr2”については、演算処理に用いるデータが読み出されるソースレジスタである論理番号０のベクトルレジスタvr0の物理番号（先頭値）を各サイクル毎に示している。また、命令“vaddh  vr6,vr7,vr1”については、演算結果が書き込まれるデスティネーションレジスタである論理番号１のベクトルレジスタvr1の物理番号（先頭値）を各サイクル毎に示している。
【００２３】
先行命令“vadd  vr0,vr4,vr2”による処理及び後続命令“vaddh  vr6,vr7,vr1”による処理において、物理番号３２〜６３のベクトルレジスタvr[32]〜vr[63]が重複する。例えば、物理番号３２〜３９のベクトルレジスタvr[32]〜vr[39]は、後続命令“vaddh  vr6,vr7,vr1”の処理では、はじめのサイクルでデータの書き込みが行われるが、先行命令“vadd  vr0,vr4,vr2”の処理では５サイクル目でデータの読み出しが行われる。先行命令での処理を後続命令の処理結果が書き込まれる前に行うには、後続命令“vaddh  vr6,vr7,vr1”での物理番号３２〜３９のベクトルレジスタvr[32]〜vr[39]へのデータの書き込みを、サイクル５より後に行うようにすれば良い。そのため、サイクル２〜サイクル５では、ＷＡＲハザードによるストールを発生させ、後続命令“vaddh  vr6,vr7,vr1”はサイクル６に発行される。
【００２４】
また、下記特許文献１には、レジスタ干渉があり（先行命令と後続命令との間にデータ依存関係を有し）、かつ先行命令が後続命令より長い処理時間を要する場合に、後続命令の開始時期を設定することで、先行命令の実行完了まで待つ必要をなくし、処理性能を改善する技術が提案されている。
【先行技術文献】
【特許文献】
【００２５】
【特許文献１】特開昭６０−１７８５８０号公報
【発明の概要】
【発明が解決しようとする課題】
【００２６】
しかしながら、ベクトル処理装置では、配列型のデータを扱うため、データ・ハザードによるストールを発生させるとストール期間が長くなるという問題がある。例えば、無線ベースバンド処理のような分野では、データ語長が異なるデータを扱うことがある。そのため、例えば先行のＷｏｒｄ命令の処理途中から処理結果を格納するベクトルレジスタを、後続のＨａｌｆｗｏｒｄ命令が使用する場合には、後続命令で使用するベクトルレジスタへの先行命令による書き込みが完了するまで、後続命令を長い期間ストールさせる必要があるという問題があった。
【００２７】
本発明の目的は、先行命令と後続命令の間でのＲＡＷハザード及びＷＡＲハザードを、ストールを発生させることなく回避でき、後続命令を効率良く発行できる命令制御回路、プロセッサ、及び命令制御方法を提供することにある。
【課題を解決するための手段】
【００２８】
命令制御回路の一態様は、複数の命令を保持する保持部と、保持部から入力される複数の命令のうち、先行命令と後続命令とのデータ依存関係を検出するデータ依存検出部と、その検出結果に基づいて、命令の発行を制御する命令発行制御部とを有する。命令発行制御部は、先行命令と後続命令とのデータ依存関係がある場合に、先行命令と同じ命令種類を有する新規の命令を生成して先行命令と後続命令との間に発行する。先行命令とデータ依存関係にある後続命令の第１レジスタの識別情報から新規の命令の第２レジスタの識別情報を決定し、先行命令の第２レジスタの識別情報と新規の命令の第２レジスタの識別情報との差分を算出し、算出した差分と先行命令の第１レジスタの識別情報とから新規の命令の第１レジスタの識別情報を決定し、先行命令の処理完了サイクルと所定のベクトル長とから新規の命令の処理完了サイクルを決定し、新規の命令を生成する。
【発明の効果】
【００２９】
開示の命令制御回路は、先行命令と後続命令とのデータ依存関係がある場合に、新規の命令を生成して先行命令と後続命令との間に発行することで、先行命令と後続命令とのデータ・ハザードを、ストールを発生させることなく回避し、後続命令を効率良く発行することができる。
【図面の簡単な説明】
【００３０】
【図１】本発明の第１の実施形態における命令発行制御部の構成例を示す図である。
【図２】本実施形態及び従来技術による命令発行制御の例を示すフローチャートである。
【図３】第１の実施形態における命令発行制御部の動作例を示すフローチャートである。
【図４】第１の実施形態及び一般的な技術での処理動作例（ＶＬ＝３２、ＲＡＷハザード回避）を示す図である。
【図５】第１の実施形態及び一般的な技術での処理動作例（ＶＬ＝４０、ＲＡＷハザード回避）を示す図である。
【図６】第１の実施形態及び一般的な技術での処理動作例（ＶＬ＝３２、ＲＡＷハザード回避）を示す図である。
【図７】第１の実施形態及び一般的な技術での処理動作例（ＶＬ＝４０、ＲＡＷハザード回避）を示す図である。
【図８】本発明の第２の実施形態における命令発行制御部の構成例を示す図である。
【図９】第２の実施形態における命令発行制御部の動作例を示すフローチャートである。
【図１０】第２の実施形態及び一般的な技術での処理動作例（ＶＬ＝３２、ＲＡＷハザード回避）を示す図である。
【図１１】第２の実施形態及び一般的な技術での処理動作例（ＶＬ＝４０、ＲＡＷハザード回避）を示す図である。
【図１２】第２の実施形態及び一般的な技術での処理動作例（ＶＬ＝３２、ＲＡＷハザード回避）を示す図である。
【図１３】第２の実施形態及び一般的な技術での処理動作例（ＶＬ＝４０、ＲＡＷハザード回避）を示す図である。
【図１４】第２の実施形態及び一般的な技術での処理動作例（ＶＬ＝３２、ＷＡＲハザード回避）を示す図である。
【図１５】第２の実施形態及び一般的な技術での処理動作例（ＶＬ＝４０、ＷＡＲハザード回避）を示す図である。
【図１６】第２の実施形態及び一般的な技術での処理動作例（ＶＬ＝３２、ＷＡＲハザード回避）を示す図である。
【図１７】第２の実施形態及び一般的な技術での処理動作例（ＶＬ＝４０、ＷＡＲハザード回避）を示す図である。
【図１８】ベクトル処理装置の構成例を示す図である。
【図１９】ベクトルレジスタの論理番号と物理番号との対応、及び処理順序の例を示す図である。
【図２０】ベクトルレジスタの論理番号と物理番号との対応、及び処理順序の例を示す図である。
【図２１】データ・ハザードを回避する動作例を示す図である。
【発明を実施するための形態】
【００３１】
以下、本発明の実施形態を図面に基づいて説明する。
本発明の実施形態におけるベクトル処理装置（ベクトルプロセッサ）の全体構成は、図１８に示したベクトル処理装置と同様であるので、その説明は省略する。なお、図１８においては、４つの実行パイプラインを有するベクトル処理装置を例示したが、これに限定されない。本実施形態におけるベクトル処理装置は、複数の実行パイプラインを有していれば良く、ベクトル処理装置が有する実行パイプラインの数は任意である。以下では、本発明の実施形態によるベクトル処理装置における命令発行制御について説明する。
【００３２】
なお、以下の説明では、データ語長がＨａｌｆｗｏｒｄ（１６ビット）であって、論理ベクトルレジスタ番号Ａのベクトルレジスタと論理ベクトルレジスタ番号Ｂのベクトルレジスタとのデータを加算し、その処理結果を論理ベクトルレジスタ番号Ｃのベクトルレジスタに格納するＨａｌｆｗｏｒｄ演算命令を“vaddh  A,B,C”と記す。また、データ語長がＷｏｒｄ（３２ビット）であって、論理ベクトルレジスタ番号Ａのベクトルレジスタと論理ベクトルレジスタ番号Ｂのベクトルレジスタとのデータを加算し、その処理結果を論理ベクトルレジスタ番号Ｃのベクトルレジスタに格納するＷｏｒｄ演算命令を“vadd  A,B,C”と記す。また、ベクトルレジスタの論理ベクトルレジスタ番号を、単に論理番号とも称し、ベクトルレジスタの物理ベクトルレジスタ番号を、単に物理番号とも称する。
【００３３】
（第１の実施形態）
本発明の第１の実施形態について説明する。
図１は、第１の実施形態における命令発行制御部の構成例を示すブロック図である。図１において、命令バッファ１１、データ依存検出部１２、及び命令発行制御部１３Ａは、図１８に示した命令バッファ１０１、データ依存検出部１０２、及び命令発行制御部１０３にそれぞれ対応する。
【００３４】
命令バッファ１１は、記憶装置等から読み出された命令（ベクトル命令）が格納される。データ依存検出部１２は、先行して実行される先行命令ＩＮＳＡで指定されるベクトルレジスタと、その後に続く後続命令ＩＮＳＢで指定されるベクトルレジスタとが重複するか否かを判定することで、先行命令と後続命令とのデータ依存関係の検出を行う。
【００３５】
命令発行制御部１３Ａは、命令バッファ１１に格納されている命令及びデータ依存検出部１２での検出結果を受けて、命令を実行パイプラインに発行する。命令発行制御部１３Ａは、デコード部２１、第１の処理完了サイクル算出部２２、マルチプレクサ回路２３、２４、命令発行制御テーブル２５、及び命令生成部２６を有する。命令生成部２６は、演算部２７、２８、２９、及び第２の処理完了サイクル算出部３０を有する。
【００３６】
命令発行制御部１３Ａは、データ依存関係及び実行パイプラインの空き状態に応じて、次の命令をどの実行パイプラインに発行するかを決定し発行する。命令発行制御部１３Ａは、データ依存検出部１２から供給される検出結果ＳＢに基づき、通常は実行パイプラインがあいたら命令バッファ１１に対して命令の発行要求ＳＡを出力する。その発行要求ＳＡに対する応答として命令バッファ１１から命令発行制御部１３Ａに次の命令が供給されると、デコード部２１は供給された命令をデコードする。また、第１の処理完了サイクル算出部２２は、デコード部２１でのデコード結果より得られるデータ語長の情報及びレジスタＲＶＬに格納されているベクトル長（ＶＬ）の情報に基づいて、命令の処理完了サイクルを算出する。そして、デコード部２１でのデコード結果及び第１の処理完了サイクル算出部２２で算出した処理完了サイクルが、マルチプレクサ回路２３を介して実行パイプラインのシーケンサに出力され、命令に応じた演算処理が実行される。また、シーケンサに発行したデコード部２１でのデコード結果及び第１の処理完了サイクル算出部２２で算出した処理完了サイクルは、マルチプレクサ回路２４を介して命令発行制御テーブル２５に登録される。命令発行制御テーブル２５に登録される情報には、命令種類、ソースレジスタの論理番号（ｓｒｃ１、ｓｒｃ２）、デスティネーションレジスタの論理番号（ｄｓｔ１）、及び処理完了サイクルが含まれる。
【００３７】
ここで、例えば先行命令がＷｏｒｄ演算命令であり、後続命令がＨａｌｆｗｏｒｄ演算命令であって、先行命令と後続命令の間にＲＡＷハザードに対応するデータ依存関係を有する場合、従来の命令発行制御部は、図２（Ａ）に示すような命令発行の制御を行う。先行命令と後続命令の間にＲＡＷハザードに対応するデータ依存関係があると判定すると（Ｓ１０１のＹＥＳ）、先行命令でベクトルレジスタへの書き込みが完了するまで後続命令を発行できない、すなわちストールさせる（Ｓ１０２）。
【００３８】
それに対して、第１の実施形態における命令発行制御部１３Ａは、例えば先行のＷｏｒｄ演算命令と後続のＨａｌｆｗｏｒｄ演算命令の間にＲＡＷハザードに対応するデータ依存関係を有する場合には、図２（Ｂ）に示すような命令発行の制御を行う。命令発行制御部１３Ａは、データ依存検出部１２からの検出結果ＳＢにより先行命令と後続命令の間にＲＡＷハザードに対応するデータ依存関係があると判定すると（Ｓ１１のＹＥＳ）、先行命令における後半部分の処理と等価となる新規の命令を生成する（Ｓ１２）。なお、先行命令における後半部分の処理（後半処理）とは、先行命令の処理のうち、後続命令との間でＲＡＷハザードに対応するデータ依存関係を持つベクトルレジスタに書き込みを行う処理である。次に、命令発行制御部１３Ａは、生成した新規の命令を空き状態の実行パイプラインに発行し（Ｓ１３）、その後に後続命令を空き状態の実行パイプラインに発行する。
【００３９】
図３は、第１の実施形態における命令発行制御部１３Ａの動作例を示すフローチャートである。図３に示すように先行命令と後続命令の間にＲＡＷハザードに対応するデータ依存関係が検出されると（Ｓ２１）、命令発行制御部１３Ａの命令生成部２６は、まず先行命令の情報を命令発行制御テーブル２５から取得する。取得する先行命令の情報は、命令種類、ソースレジスタの論理番号、デスティネーションレジスタの論理番号、及び処理完了サイクルを含む。命令生成部２６は、得られた先行命令の情報に基づいて、図３に示すフローチャートの順序で、新規の命令に必要な各情報を抽出及び算出した上で、新規の命令を生成する。以下に、図３のフローチャートに基づいて、新規の命令に必要な各情報の抽出及び算出について説明する。
【００４０】
命令生成部２６は、得られた先行命令の命令種類を、新規の命令の命令種類にする（Ｓ２２）。次に、命令生成部２６は、データ依存検出部１２にある後続命令から先行命令とデータ依存関係にあるソースレジスタの論理番号を取得して、新規の命令のデスティネーションレジスタの論理番号にする（Ｓ２３）。次に、命令生成部２６は、新規の命令のデスティネーションレジスタの論理番号と先行命令のデスティネーションレジスタの論理番号との差分を演算部２７で算出する（Ｓ２４）。続いて、命令生成部２６は、演算部２７によって算出された差分値を、先行命令のソースレジスタの論理番号に演算部２８、２９で加算して、加算によって得られた結果を、新規の命令のソースレジスタの論理番号にする（Ｓ２５）。以上のようにして、新規の命令のソースレジスタの論理番号及びデスティネーションレジスタの論理番号が得られる。
【００４１】
次に、命令生成部２６は、新規の命令の処理完了サイクルを第２の処理完了サイクル算出部３０で算出する（Ｓ２６）。この算出処理では、まずレジスタＲＶＬに設定されているベクトル長（ＶＬ）の情報に基づいて、先行命令における前半部分で処理されるベクトル長（ＶＬ）を算出する。先行命令における前半部分で処理されるベクトル長（ＶＬ）は、ＣＥＩＬＰＯＷ２（ＶＬ）／２で算出できる。ここで、ＣＥＩＬＰＯＷ２（Ｘ）は、Ｘ以上の最小の２のべき乗の値をとる関数であり、例えばＣＥＩＬＰＯＷ２（３２）＝３２であり、ＣＥＩＬＰＯＷ２（４０）＝６４である。そして、算出された先行命令における前半部分で処理されるベクトル長（ＶＬ）を１サイクルに処理するレジスタ数で割ることで、先行命令における前半部分の処理の処理完了サイクルを算出する。本実施形態において１サイクルに処理するレジスタ数は、例えばデータ語長がＷｏｒｄの場合には４であり、データ語長がＨａｌｆｗｏｒｄの場合には８である。続いて、先行命令の処理完了サイクルから先行命令における前半部分の処理の処理完了サイクルを減算し、新規の命令の処理完了サイクルを算出する。
【００４２】
次に、命令発行制御部１３Ａは、命令生成部２６で生成された新規の命令及び処理完了サイクルを、マルチプレクサ回路２３を介して実行パイプラインのシーケンサに出力するとともに、マルチプレクサ回路２４を介して命令発行制御テーブル２５に登録する（Ｓ２７）。なお、命令バッファ１１から読み出した命令と生成した新規の命令とのマルチプレクサ回路２３、２４による選択は、データ依存検出部１２からの検出結果ＳＢ、すなわちデータ依存関係の有無に応じて決める。
【００４３】
このように、先行命令と後続命令の間にＲＡＷハザードに対応するデータ依存関係を有する場合には、命令生成部２６で生成された新規の命令を後続命令の前に発行し、その後に後続命令を発行する。後続命令で読み出すベクトルレジスタは、生成した新規の命令によって書き込むため、処理結果が保証される。したがって、従来発生していたような、ストールを発生させることなく、先行命令と後続命令の間でのＲＡＷハザードを回避し、後続命令を効率良く発行することができる。
【００４４】
例えば、ベクトル長（ＶＬ）が３２で、先行命令がＷｏｒｄの加算命令“vadd  vr2,vr4,vr0”であり、後続命令がＨａｌｆｗｏｒｄの加算命令“vaddh  vr1,vr6,vr7”である場合の処理動作例を図４に示す。先行命令“vadd  vr2,vr4,vr0”による処理及び後続命令“vaddh  vr1,vr6,vr7”による処理においては、物理番号３２〜６３のベクトルレジスタvr[32]〜vr[63]についてＲＡＷハザードに対応するデータ依存関係がある。
【００４５】
図４（Ａ）に示されるように一般的なベクトル処理装置では、例えばサイクル１で先行命令“vadd  vr2,vr4,vr0”がパイプラインＡに発行されると、サイクル５で物理番号３２〜３９のベクトルレジスタvr[32]〜vr[39]に処理結果が書き込まれる。したがって、サイクル２〜サイクル５では、ＲＡＷハザードによるストールを発生させ、はじめのサイクルで物理番号３２〜３９のベクトルレジスタvr[32]〜vr[39]からデータを読み出す後続命令“vaddh  vr1,vr6,vr7”はサイクル６に発行される。
【００４６】
一方、図４（Ｂ）に示されるように第１の実施形態におけるベクトル処理装置では、例えばサイクル１で先行命令“vadd  vr2,vr4,vr0”がパイプラインＡに発行され、その命令がパイプラインＡで実行される。先行命令と後続命令の間にＲＡＷハザードに対応するデータ依存関係があるので、命令発行制御部１３Ａは、先行命令における後半部分の処理と等価となる新規の命令“vadd'  vr3,vr5,vr1”を生成し、サイクル２でパイプラインＢに発行する。なお、生成された命令であることを示すためにvadd'と記したが、演算自体はvaddと同様である（以下も同様）。これにより、物理番号３２〜６３のベクトルレジスタvr[32]〜vr[63]に対し、先行命令“vadd  vr2,vr4,vr0”により行われる処理と同じ処理が、サイクル２から実行される。そのため、先行命令“vadd  vr2,vr4,vr0”での処理を待つことなく、続くサイクル３で後続命令“vaddh  vr1,vr6,vr7”をパイプラインＣに発行でき、その命令を実行することができる。
【００４７】
また、例えば、ベクトル長（ＶＬ）が４０で、先行命令がＷｏｒｄの加算命令“vadd  vr2,vr4,vr0”であり、後続命令がＨａｌｆｗｏｒｄの加算命令“vaddh  vr1,vr6,vr7”である場合の処理動作例を図５に示す。先行命令“vadd  vr2,vr4,vr0”による処理及び後続命令“vaddh  vr1,vr6,vr7”による処理においては、物理番号６４〜７９のベクトルレジスタvr[64]〜vr[79]についてＲＡＷハザードに対応するデータ依存関係がある。
【００４８】
図５（Ａ）に示されるように一般的なベクトル処理装置では、例えばサイクル１で先行命令“vadd  vr2,vr4,vr0”がパイプラインＡに発行されると、サイクル９で物理番号６４〜７１のベクトルレジスタvr[64]〜vr[71]に処理結果が書き込まれる。したがって、サイクル２〜サイクル９では、ＲＡＷハザードによるストールを発生させ、はじめのサイクルで物理番号６４〜７１のベクトルレジスタvr[64]〜vr[71]からデータを読み出す後続命令“vaddh  vr1,vr6,vr7”はサイクル１０に発行される。
【００４９】
一方、図５（Ｂ）に示されるように第１の実施形態におけるベクトル処理装置では、例えばサイクル１で先行命令“vadd  vr2,vr4,vr0”がパイプラインＡに発行され、その命令がパイプラインＡで実行される。先行命令と後続命令の間にＲＡＷハザードに対応するデータ依存関係があるので、命令発行制御部１３Ａは、先行命令における後半部分の処理と等価となる新規の命令“vadd'  vr3,vr5,vr1”を生成し、サイクル２でパイプラインＢに発行する。これにより、物理番号６４〜７９のベクトルレジスタvr[64]〜vr[79]に対し、先行命令“vadd  vr2,vr4,vr0”により行われる処理と同じ処理が、サイクル２から実行される。そのため、先行命令“vadd  vr2,vr4,vr0”での処理を待つことなく、続くサイクル３で後続命令“vaddh  vr1,vr6,vr7”をパイプラインＣに発行でき、その命令を実行することができる。
【００５０】
なお、図４（Ａ）、（Ｂ）及び図５（Ａ）、（Ｂ）において、命令“vadd  vr2,vr4,vr0”については、デスティネーションレジスタである論理番号０のベクトルレジスタvr0の物理番号（先頭値）を各サイクル毎に示している。また、命令“vadd'  vr3,vr5,vr1”については、デスティネーションレジスタである論理番号１のベクトルレジスタvr1の物理番号（先頭値）を各サイクル毎に示している。また、命令“vaddh  vr1,vr6,vr7”については、ソースレジスタである論理番号１のベクトルレジスタvr1の物理番号（先頭値）を各サイクル毎に示している。
【００５１】
先行命令がＷｏｒｄの演算命令であり、後続命令がＨａｌｆｗｏｒｄの演算命令である場合について一例を示したが、先行命令及び後続命令がともにＷｏｒｄの演算命令である場合も同様に処理可能である。例えば、ベクトル長（ＶＬ）が３２で、先行命令がＷｏｒｄの加算命令“vadd  vr4,vr6,vr0”であり、後続命令がＷｏｒｄの加算命令“vadd  vr1,vr8,vr10”である場合の処理動作例を図６に示す。先行命令“vadd  vr4,vr6,vr0”による処理及び後続命令“vadd  vr1,vr8,vr10”による処理においては、物理番号３２〜６３のベクトルレジスタvr[32]〜vr[63]についてＲＡＷハザードに対応するデータ依存関係がある。
【００５２】
図６（Ａ）に示されるように一般的なベクトル処理装置では、例えばサイクル１で先行命令“vadd  vr4,vr6,vr0”がパイプラインＡに発行されると、サイクル５で物理番号３２〜３９のベクトルレジスタvr[32]〜vr[39]に処理結果が書き込まれる。したがって、サイクル２〜サイクル５では、ＲＡＷハザードによるストールを発生させ、はじめのサイクルで物理番号３２〜３９のベクトルレジスタvr[32]〜vr[39]からデータを読み出す後続命令“vadd  vr1,vr8,vr10”はサイクル６に発行される。
【００５３】
一方、図６（Ｂ）に示されるように第１の実施形態におけるベクトル処理装置では、例えばサイクル１で先行命令“vadd  vr4,vr6,vr0”がパイプラインＡに発行され、その命令がパイプラインＡで実行される。先行命令と後続命令の間にＲＡＷハザードに対応するデータ依存関係があるので、命令発行制御部１３Ａは、先行命令における後半部分の処理と等価となる新規の命令“vadd'  vr5,vr7,vr1”を生成し、サイクル２でパイプラインＢに発行する。これにより、物理番号３２〜６３のベクトルレジスタvr[32]〜vr[63]に対し、先行命令“vadd  vr4,vr6,vr0”により行われる処理と同じ処理が、サイクル２から実行される。そのため、先行命令“vadd  vr4,vr6,vr0”での処理を待つことなく、続くサイクル３で後続命令“vadd  vr1,vr8,vr10”をパイプラインＣに発行でき、その命令を実行することができる。
【００５４】
また、例えば、ベクトル長（ＶＬ）が４０で、先行命令がＷｏｒｄの加算命令“vadd  vr4,vr6,vr0”であり、後続命令がＷｏｒｄの加算命令“vadd  vr1,vr8,vr10”である場合の処理動作例を図７に示す。先行命令“vadd  vr4,vr6,vr0”による処理及び後続命令“vadd  vr1,vr8,vr10”による処理においては、物理番号６４〜７９のベクトルレジスタvr[64]〜vr[79]についてＲＡＷハザードに対応するデータ依存関係がある。
【００５５】
図７（Ａ）に示されるように一般的なベクトル処理装置では、例えばサイクル１で先行命令“vadd  vr4,vr6,vr0”がパイプラインＡに発行されると、サイクル９で物理番号６４〜７１のベクトルレジスタvr[64]〜vr[71]に処理結果が書き込まれる。したがって、サイクル２〜サイクル９では、ＲＡＷハザードによるストールを発生させ、はじめのサイクルで物理番号６４〜７１のベクトルレジスタvr[64]〜vr[71]からデータを読み出す後続命令“vadd  vr1,vr8,vr10”はサイクル１０に発行される。
【００５６】
一方、図７（Ｂ）に示されるように第１の実施形態におけるベクトル処理装置では、例えばサイクル１で先行命令“vadd  vr4,vr6,vr0”がパイプラインＡに発行され、その命令がパイプラインＡで実行される。先行命令と後続命令の間にＲＡＷハザードに対応するデータ依存関係があるので、命令発行制御部１３Ａは、先行命令における後半部分の処理と等価となる新規の命令“vadd'  vr5,vr7,vr1”を生成し、サイクル２でパイプラインＢに発行する。これにより、物理番号６４〜７９のベクトルレジスタvr[64]〜vr[79]に対し、先行命令“vadd  vr4,vr6,vr0”により行われる処理と同じ処理が、サイクル２から実行される。そのため、先行命令“vadd  vr4,vr6,vr0”での処理を待つことなく、続くサイクル３で後続命令“vadd  vr1,vr8,vr10”をパイプラインＣに発行でき、その命令を実行することができる。
【００５７】
なお、図６（Ａ）、（Ｂ）及び図７（Ａ）、（Ｂ）において、命令“vadd  vr4,vr6,vr0”については、デスティネーションレジスタである論理番号０のベクトルレジスタvr0の物理番号（先頭値）を各サイクル毎に示している。また、命令“vadd'  vr5,vr7,vr1”については、デスティネーションレジスタである論理番号１のベクトルレジスタvr1の物理番号（先頭値）を各サイクル毎に示している。また、命令“vadd  vr1,vr8,vr10”については、ソースレジスタである論理番号１のベクトルレジスタvr1の物理番号（先頭値）を各サイクル毎に示している。
【００５８】
（第２の実施形態）
次に、本発明の第２の実施形態について説明する。
前述した第１の実施形態におけるベクトル処理装置によれば、先行命令と後続命令の間でのＲＡＷハザードを回避することができる。しかし、生成された新規の命令で実行されるため、先行命令での後半部分の処理はなくても良い。また、先行命令と後続命令の間でのＷＡＲハザードを回避できるようにするには、処理結果を保証するために、先行命令での後半部分の処理を実行しないように制御する必要がある。
【００５９】
以下に説明する第２の実施形態におけるベクトル処理装置は、先行命令における後半部分の処理と等価な新規の命令を発行する場合には、新規の命令を発行した後、先行命令の処理完了サイクルを変更して先行命令での後半部分の処理を中止するものである。
【００６０】
図８は、第２の実施形態における命令発行制御部の構成例を示すブロック図である。この図８において、図１に示した構成要素等と同一の機能を有する構成要素等には同一の符号を付し、重複する説明は省略する。図８において、命令バッファ１１、データ依存検出部１２、及び命令発行制御部１３Ｂは、図１８に示した命令バッファ１０１、データ依存検出部１０２、及び命令発行制御部１０３にそれぞれ対応する。
【００６１】
第２の実施形態における命令発行制御部１３Ｂは、デコード部２１、第１の処理完了サイクル算出部２２、マルチプレクサ回路２３、２４、命令発行制御テーブル２５、及び命令生成部２６に加え、前半処理完了サイクル変更部３１を有する。前半処理完了サイクル変更部３１は、第２の処理完了サイクル算出部３０で算出された先行命令における前半部分の処理の処理完了サイクルを受ける。前半処理完了サイクル変更部３１は、その先行命令における前半部分の処理の処理完了サイクルを、先行命令を実行している実行パイプラインのシーケンサに出力するとともに、命令発行制御テーブル２５に登録する。
【００６２】
例えば、前半処理完了サイクル変更部３１は、先行命令における前半部分の処理の処理完了サイクルをイネーブル信号にのせて、先行命令を実行している実行パイプラインのシーケンサに出力する。シーケンサは、命令発行制御部１３Ｂからのイネーブル信号を受けると、すでに入力した処理完了サイクルを前半部分の処理の処理完了サイクルで上書きし、上書きしたサイクルまで処理を実行することで、後半部分の処理を中止する。
【００６３】
第２の実施形態における命令発行制御部１３Ｂの動作は、基本的には第１の実施形態における命令発行制御部１３Ａの動作と同様であるが、先行命令と後続命令の間にＲＡＷハザード又はＷＡＲハザードに対応するデータ依存関係が検出された場合の動作が異なる。図９は、第２の実施形態における命令発行制御部１３Ｂの動作例を示すフローチャートである。先行命令と後続命令の間にＲＡＷハザード又はＷＡＲハザードに対応するデータ依存関係が検出されると（Ｓ３１）、ステップＳ３２以降の処理を実行する。ステップＳ３２〜ステップＳ３６までの処理は、図３に示した第１の実施形態におけるステップＳ２２〜ステップＳ２６までの処理に対応する。
【００６４】
なお、ＷＡＲハザードに対応するデータ依存関係が検出された場合には、ステップＳ３３では、命令生成部２６が、後続命令から先行命令とデータ依存関係にあるデスティネーションレジスタの論理番号を取得し、新規の命令の第１ソースレジスタの論理番号にする。また、ステップＳ３４では、命令生成部２６が、新規の命令の第１ソースレジスタの論理番号と先行命令で後続命令とデータ依存関係にある第１ソースレジスタの論理番号との差分を算出する。そして、ステップＳ３５では、命令生成部２６が、算出した差分値を、先行命令の第２ソースレジスタの論理番号及びデスティネーションレジスタの論理番号に加算し、得られた結果を新規の命令の第２ソースレジスタの論理番号及びデスティネーションレジスタの論理番号にする。
【００６５】
ステップＳ３７にて、命令生成部２６及び前半処理完了サイクル変更部３１は、ステップＳ３６において算出される先行命令における前半部分の処理の処理完了サイクルを、先行命令の処理完了サイクルにする。次に、ステップＳ３８にて、命令発行制御部１３Ｂは、命令生成部２６で生成された新規の命令及び処理完了サイクルを、マルチプレクサ回路２３を介して実行パイプラインのシーケンサに出力するとともに、マルチプレクサ回路２４を介して命令発行制御テーブル２５に登録する。また、前半処理完了サイクル変更部３１は、先行命令の処理完了サイクルを、先行命令を実行している実行パイプラインのシーケンサに出力するとともに、命令発行制御テーブル２５に登録する。
【００６６】
このように、先行命令と後続命令の間にＲＡＷハザード又はＷＡＲハザードに対応するデータ依存関係を有する場合には、命令生成部２６で生成された新規の命令を後続命令の前に発行し、その後に後続命令を発行する。また、先行命令の処理完了サイクルを先行命令における前半部分の処理の処理完了サイクルに変更する。例えば、ＲＡＷハザードに対応するデータ依存関係を有する場合には、後続命令で読み出すベクトルレジスタは、生成した新規の命令によって書き込むため、処理結果が保証される。さらに、先行命令による無駄なベクトルレジスタへの書き込み処理を中断することができる。また、例えばＷＡＲハザードに対応するデータ依存関係を有する場合には、後続命令で書き込むベクトルレジスタは、生成した新規の命令によって先に読み出すため、処理結果が保証される。さらに、先行命令における後半部分の処理を中断することで処理結果が保証される。したがって、従来発生していたような、ストールを発生させることなく、先行命令と後続命令の間でのＲＡＷハザード及びＷＡＲハザードを回避し、後続命令を効率良く発行することができる。また、先行命令による不要な処理を中断して先行命令を実行している実行パイプラインを速やかに開放することができ、命令を効率良く発行することができる。
【００６７】
例えば、ベクトル長（ＶＬ）が３２で、先行命令がＷｏｒｄの加算命令“vadd  vr2,vr4,vr0”であり、後続命令がＨａｌｆｗｏｒｄの加算命令“vaddh  vr1,vr6,vr7”である場合の処理動作例を図１０に示す。先行命令“vadd  vr2,vr4,vr0”による処理及び後続命令“vaddh  vr1,vr6,vr7”による処理においては、物理番号３２〜６３のベクトルレジスタvr[32]〜vr[63]についてＲＡＷハザードに対応するデータ依存関係がある。
【００６８】
図１０（Ａ）に示されるように一般的なベクトル処理装置での処理動作は、図４（Ａ）に示した処理動作と同様である。すなわち、サイクル２〜サイクル５では、ＲＡＷハザードによるストールを発生させ、後続命令“vaddh  vr1,vr6,vr7”はサイクル６に発行される。
【００６９】
一方、図１０（Ｂ）に示されるように第２の実施形態におけるベクトル処理装置では、例えばサイクル１で先行命令“vadd  vr2,vr4,vr0”がパイプラインＡに発行され、その命令がパイプラインＡで実行される。先行命令と後続命令の間にＲＡＷハザードに対応するデータ依存関係があるので、命令発行制御部１３Ｂは、先行命令における後半部分の処理と等価な新規の命令“vadd'  vr3,vr5,vr1”を生成し、サイクル２でパイプラインＢに発行する。これにより、物理番号３２〜６３のベクトルレジスタvr[32]〜vr[63]に対し、先行命令“vadd  vr2,vr4,vr0”により行われる処理と同じ処理が、サイクル２から実行される。そのため、続くサイクル３で後続命令“vaddh  vr1,vr6,vr7”をパイプラインＣに発行でき、その命令を実行することができる。また、先行命令“vadd  vr2,vr4,vr0”による物理番号３２〜６３のベクトルレジスタvr[32]〜vr[63]に係る処理は不要であるので、サイクル４で先行命令“vadd  vr2,vr4,vr0”の処理を完了し、パイプラインＡが開放される。
【００７０】
また、例えば、ベクトル長（ＶＬ）が４０で、先行命令がＷｏｒｄの加算命令“vadd  vr2,vr4,vr0”であり、後続命令がＨａｌｆｗｏｒｄの加算命令“vaddh  vr1,vr6,vr7”である場合の処理動作例を図１１に示す。先行命令“vadd  vr2,vr4,vr0”による処理及び後続命令“vaddh  vr1,vr6,vr7”による処理においては、物理番号６４〜７９のベクトルレジスタvr[64]〜vr[79]についてＲＡＷハザードに対応するデータ依存関係がある。
【００７１】
図１１（Ａ）に示されるように一般的なベクトル処理装置での処理動作は、図５（Ａ）に示した処理動作と同様である。すなわち、サイクル２〜サイクル９では、ＲＡＷハザードによるストールを発生させ、後続命令“vaddh  vr1,vr6,vr7”はサイクル１０に発行される。
【００７２】
一方、図１１（Ｂ）に示されるように第２の実施形態におけるベクトル処理装置では、例えばサイクル１で先行命令“vadd  vr2,vr4,vr0”がパイプラインＡに発行され、その命令がパイプラインＡで実行される。先行命令と後続命令の間にＲＡＷハザードに対応するデータ依存関係があるので、命令発行制御部１３Ｂは、先行命令における後半部分の処理と等価な新規の命令“vadd'  vr3,vr5,vr1”を生成し、サイクル２でパイプラインＢに発行する。これにより、物理番号６４〜７９のベクトルレジスタvr[64]〜vr[79]に対し、先行命令“vadd  vr2,vr4,vr0”により行われる処理と同じ処理が、サイクル２から実行される。そのため、続くサイクル３で後続命令“vaddh  vr1,vr6,vr7”をパイプラインＣに発行でき、その命令を実行することができる。また、先行命令“vadd  vr2,vr4,vr0”による物理番号６４〜７９のベクトルレジスタvr[64]〜vr[79]に係る処理は不要であるので、サイクル８で先行命令“vadd  vr2,vr4,vr0”の処理を完了し、パイプラインＡが開放される。
【００７３】
なお、図１０（Ａ）、（Ｂ）及び図１１（Ａ）、（Ｂ）において、命令“vadd  vr2,vr4,vr0”については、デスティネーションレジスタである論理番号０のベクトルレジスタvr0の物理番号（先頭値）を各サイクル毎に示している。また、命令“vadd'  vr3,vr5,vr1”については、デスティネーションレジスタである論理番号１のベクトルレジスタvr1の物理番号（先頭値）を各サイクル毎に示している。また、命令“vaddh  vr1,vr6,vr7”については、ソースレジスタである論理番号１のベクトルレジスタvr1の物理番号（先頭値）を各サイクル毎に示している。
【００７４】
先行命令及び後続命令がともにＷｏｒｄの演算命令である場合も同様に処理可能である。例えば、ベクトル長（ＶＬ）が３２で、先行命令がＷｏｒｄの加算命令“vadd  vr4,vr6,vr0”であり、後続命令がＷｏｒｄの加算命令“vadd  vr1,vr8,vr10”である場合の処理動作例を図１２に示す。先行命令“vadd  vr4,vr6,vr0”による処理及び後続命令“vadd  vr1,vr8,vr10”による処理においては、物理番号３２〜６３のベクトルレジスタvr[32]〜vr[63]についてＲＡＷハザードに対応するデータ依存関係がある。
【００７５】
図１２（Ａ）に示されるように一般的なベクトル処理装置での処理動作は、図６（Ａ）に示した処理動作と同様である。すなわち、サイクル２〜サイクル５では、ＲＡＷハザードによるストールを発生させ、後続命令“vadd  vr1,vr8,vr10”はサイクル６に発行される。
【００７６】
一方、図１２（Ｂ）に示されるように第２の実施形態におけるベクトル処理装置では、例えばサイクル１で先行命令“vadd  vr4,vr6,vr0”がパイプラインＡに発行され、その命令がパイプラインＡで実行される。先行命令と後続命令の間にＲＡＷハザードに対応するデータ依存関係があるので、命令発行制御部１３Ｂは、先行命令における後半部分の処理と等価な新規の命令“vadd'  vr5,vr7,vr1”を生成し、サイクル２でパイプラインＢに発行する。これにより、物理番号３２〜６３のベクトルレジスタvr[32]〜vr[63]に対し、先行命令“vadd  vr4,vr6,vr0”により行われる処理と同じ処理が、サイクル２から実行される。そのため、続くサイクル３で後続命令“vadd  vr1,vr8,vr10”をパイプラインＣに発行でき、その命令を実行することができる。また、先行命令“vadd  vr4,vr6,vr0”による物理番号３２〜６３のベクトルレジスタvr[32]〜vr[63]に係る処理は不要であるので、サイクル４で先行命令“vadd  vr4,vr6,vr0”の処理を完了し、パイプラインＡが開放される。
【００７７】
また、例えば、ベクトル長（ＶＬ）が４０で、先行命令がＷｏｒｄの加算命令“vadd  vr4,vr6,vr0”であり、後続命令がＷｏｒｄの加算命令“vadd  vr1,vr8,vr10”である場合の処理動作例を図１３に示す。先行命令“vadd  vr4,vr6,vr0”による処理及び後続命令“vadd  vr1,vr8,vr10”による処理においては、物理番号６４〜７９のベクトルレジスタvr[64]〜vr[79]についてＲＡＷハザードに対応するデータ依存関係がある。
【００７８】
図１３（Ａ）に示されるように一般的なベクトル処理装置での処理動作は、図７（Ａ）に示した処理動作と同様である。すなわち、サイクル２〜サイクル９では、ＲＡＷハザードによるストールを発生させ、後続命令“vadd  vr1,vr8,vr10”はサイクル１０に発行される。
【００７９】
一方、図１３（Ｂ）に示されるように第２の実施形態におけるベクトル処理装置では、例えばサイクル１で先行命令“vadd  vr4,vr6,vr0”がパイプラインＡに発行され、その命令がパイプラインＡで実行される。先行命令と後続命令の間にＲＡＷハザードに対応するデータ依存関係があるので、命令発行制御部１３Ｂは、先行命令における後半部分の処理と等価な新規の命令“vadd'  vr5,vr7,vr1”を生成し、サイクル２でパイプラインＢに発行する。これにより、物理番号６４〜７９のベクトルレジスタvr[64]〜vr[79]に対し、先行命令“vadd  vr4,vr6,vr0”により行われる処理と同じ処理が、サイクル２から実行される。そのため、続くサイクル３で後続命令“vadd  vr1,vr8,vr10”をパイプラインＣに発行でき、その命令を実行することができる。また、先行命令“vadd  vr4,vr6,vr0”による物理番号６４〜７９のベクトルレジスタvr[64]〜vr[79]に係る処理は不要であるので、サイクル８で先行命令“vadd  vr4,vr6,vr0”の処理を完了し、パイプラインＡが開放される。
【００８０】
なお、図１２（Ａ）、（Ｂ）及び図１３（Ａ）、（Ｂ）において、命令“vadd  vr4,vr6,vr0”については、デスティネーションレジスタである論理番号０のベクトルレジスタvr0の物理番号（先頭値）を各サイクル毎に示している。また、命令“vadd'  vr5,vr7,vr1”については、デスティネーションレジスタである論理番号１のベクトルレジスタvr1の物理番号（先頭値）を各サイクル毎に示している。また、命令“vadd  vr1,vr8,vr10”については、ソースレジスタである論理番号１のベクトルレジスタvr1の物理番号（先頭値）を各サイクル毎に示している。
【００８１】
次に、先行命令と後続命令の間にＷＡＲハザードに対応するデータ依存関係がある場合の例を示す。例えば、ベクトル長（ＶＬ）が３２で、先行命令がＷｏｒｄの加算命令“vadd  vr0,vr4,vr2”であり、後続命令がＨａｌｆｗｏｒｄの加算命令“vaddh  vr6,vr7,vr1”である場合の処理動作例を図１４に示す。先行命令“vadd  vr0,vr4,vr2”による処理及び後続命令“vaddh  vr6,vr7,vr1”による処理においては、物理番号３２〜６３のベクトルレジスタvr[32]〜vr[63]についてＷＡＲハザードに対応するデータ依存関係がある。
【００８２】
図１４（Ａ）に示されるように一般的なベクトル処理装置では、例えばサイクル１で先行命令“vadd  vr0,vr4,vr2”がパイプラインＡに発行されると、サイクル５で物理番号３２〜３９のベクトルレジスタvr[32]〜vr[39]からデータが読み出される。したがって、サイクル２〜サイクル５では、ＷＡＲハザードによるストールを発生させ、はじめのサイクルで物理番号３２〜３９のベクトルレジスタvr[32]〜vr[39]に処理結果を書き込む後続命令“vaddh  vr6,vr7,vr1”はサイクル６に発行される。
【００８３】
一方、図１４（Ｂ）に示されるように第２の実施形態におけるベクトル処理装置では、例えばサイクル１で先行命令“vadd  vr0,vr4,vr2”がパイプラインＡに発行され、その命令がパイプラインＡで実行される。先行命令と後続命令の間にＷＡＲハザードに対応するデータ依存関係があるので、命令発行制御部１３Ｂは、先行命令における後半部分の処理と等価な新規の命令“vadd'  vr1,vr5,vr3”を生成し、サイクル２でパイプラインＢに発行する。これにより、物理番号３２〜６３のベクトルレジスタvr[32]〜vr[63]に対し、先行命令“vadd  vr0,vr4,vr2”により行われる処理と同じ処理が、サイクル２から実行される。そのため、続くサイクル３で後続命令“vaddh  vr6,vr7,vr1”をパイプラインＣに発行でき、その命令を実行することができる。また、先行命令“vadd  vr0,vr4,vr2”による物理番号３２〜６３のベクトルレジスタvr[32]〜vr[63]に係る処理は不要であるので、サイクル４で先行命令“vadd  vr0,vr4,vr2”の処理を完了し、パイプラインＡが開放される。
【００８４】
また、例えば、ベクトル長（ＶＬ）が４０で、先行命令がＷｏｒｄの加算命令“vadd  vr0,vr4,vr2”であり、後続命令がＨａｌｆｗｏｒｄの加算命令“vaddh  vr6,vr7,vr1”である場合の処理動作例を図１５に示す。先行命令“vadd  vr0,vr4,vr2”による処理及び後続命令“vaddh  vr6,vr7,vr1”による処理においては、物理番号６４〜７９のベクトルレジスタvr[64]〜vr[79]についてＷＡＲハザードに対応するデータ依存関係がある。
【００８５】
図１５（Ａ）に示されるように一般的なベクトル処理装置では、例えばサイクル１で先行命令“vadd  vr0,vr4,vr2”がパイプラインＡに発行されると、サイクル９で物理番号６４〜７１のベクトルレジスタvr[64]〜vr[71]からデータが読み出される。したがって、サイクル２〜サイクル９では、ＷＡＲハザードによるストールを発生させ、はじめのサイクルで物理番号６４〜７１のベクトルレジスタvr[64]〜vr[71]に処理結果を書き込む後続命令“vaddh  vr6,vr7,vr1”はサイクル１０に発行される。
【００８６】
一方、図１５（Ｂ）に示されるように第２の実施形態におけるベクトル処理装置では、例えばサイクル１で先行命令“vadd  vr0,vr4,vr2”がパイプラインＡに発行され、その命令がパイプラインＡで実行される。先行命令と後続命令の間にＷＡＲハザードに対応するデータ依存関係があるので、命令発行制御部１３Ｂは、先行命令における後半部分の処理と等価な新規の命令“vadd'  vr1,vr5,vr3”を生成し、サイクル２でパイプラインＢに発行する。これにより、物理番号６４〜７９のベクトルレジスタvr[64]〜vr[79]に対し、先行命令“vadd  vr0,vr4,vr2”により行われる処理と同じ処理が、サイクル２から実行される。そのため、続くサイクル３で後続命令“vaddh  vr6,vr7,vr1”をパイプラインＣに発行でき、その命令を実行することができる。また、先行命令“vadd  vr0,vr4,vr2”による物理番号６４〜７９のベクトルレジスタvr[64]〜vr[79]に係る処理は不要であるので、サイクル８で先行命令“vadd  vr0,vr4,vr2”の処理を完了し、パイプラインＡが開放される。
【００８７】
なお、図１４（Ａ）、（Ｂ）及び図１５（Ａ）、（Ｂ）において、命令“vadd  vr0,vr4,vr2”については、ソースレジスタである論理番号０のベクトルレジスタvr0の物理番号（先頭値）を各サイクル毎に示している。また、命令“vadd'  vr1,vr5,vr3”については、ソースレジスタである論理番号１のベクトルレジスタvr1の物理番号（先頭値）を各サイクル毎に示している。また、命令“vaddh  vr6,vr7,vr1”については、デスティネーションレジスタである論理番号１のベクトルレジスタvr1の物理番号（先頭値）を各サイクル毎に示している。
【００８８】
先行命令及び後続命令がともにＷｏｒｄの演算命令である場合も同様に処理可能である。例えば、ベクトル長（ＶＬ）が３２で、先行命令がＷｏｒｄの加算命令“vadd  vr0,vr4,vr6”であり、後続命令がＷｏｒｄの加算命令“vadd  vr8,vr10,vr1”である場合の処理動作例を図１６に示す。先行命令“vadd  vr0,vr4,vr6”による処理及び後続命令“vadd  vr8,vr10,vr1”による処理においては、物理番号３２〜６３のベクトルレジスタvr[32]〜vr[63]についてＷＡＲハザードに対応するデータ依存関係がある。
【００８９】
図１６（Ａ）に示されるように一般的なベクトル処理装置では、例えばサイクル１で先行命令“vadd  vr0,vr4,vr6”がパイプラインＡに発行されると、サイクル５で物理番号３２〜３９のベクトルレジスタvr[32]〜vr[39]からデータが読み出される。したがって、サイクル２〜サイクル５では、ＷＡＲハザードによるストールを発生させ、はじめのサイクルで物理番号３２〜３９のベクトルレジスタvr[32]〜vr[39]に処理結果を書き込む後続命令“vadd  vr8,vr10,vr1”はサイクル６に発行される。
【００９０】
一方、図１６（Ｂ）に示されるように第２の実施形態におけるベクトル処理装置では、例えばサイクル１で先行命令“vadd  vr0,vr4,vr6”がパイプラインＡに発行され、その命令がパイプラインＡで実行される。先行命令と後続命令の間にＷＡＲハザードに対応するデータ依存関係があるので、命令発行制御部１３Ｂは、先行命令における後半部分の処理と等価な新規の命令“vadd'  vr1,vr5,vr7”を生成し、サイクル２でパイプラインＢに発行する。これにより、物理番号３２〜６３のベクトルレジスタvr[32]〜vr[63]に対し、先行命令“vadd  vr0,vr4,vr6”により行われる処理と同じ処理が、サイクル２から実行される。そのため、続くサイクル３で後続命令“vadd  vr8,vr10,vr1”をパイプラインＣに発行でき、その命令を実行することができる。また、先行命令“vadd  vr0,vr4,vr6”による物理番号３２〜６３のベクトルレジスタvr[32]〜vr[63]に係る処理は不要であるので、サイクル４で先行命令“vadd  vr0,vr4,vr6”の処理を完了し、パイプラインＡが開放される。
【００９１】
また、例えば、ベクトル長（ＶＬ）が４０で、先行命令がＷｏｒｄの加算命令“vadd  vr0,vr4,vr6”であり、後続命令がＷｏｒｄの加算命令“vadd  vr8,vr10,vr1”である場合の処理動作例を図１７に示す。先行命令“vadd  vr0,vr4,vr6”による処理及び後続命令“vadd  vr8,vr10,vr1”による処理においては、物理番号６４〜７９のベクトルレジスタvr[64]〜vr[79]についてＷＡＲハザードに対応するデータ依存関係がある。
【００９２】
図１７（Ａ）に示されるように一般的なベクトル処理装置では、例えばサイクル１で先行命令“vadd  vr0,vr4,vr6”がパイプラインＡに発行されると、サイクル９で物理番号６４〜７１のベクトルレジスタvr[64]〜vr[71]からデータが読み出される。したがって、サイクル２〜サイクル９では、ＷＡＲハザードによるストールを発生させ、はじめのサイクルで物理番号６４〜７１のベクトルレジスタvr[64]〜vr[71]に処理結果を書き込む後続命令“vadd  vr8,vr10,vr1”はサイクル１０に発行される。
【００９３】
一方、図１７（Ｂ）に示されるように第２の実施形態におけるベクトル処理装置では、例えばサイクル１で先行命令“vadd  vr0,vr4,vr6”がパイプラインＡに発行され、その命令がパイプラインＡで実行される。先行命令と後続命令の間にＷＡＲハザードに対応するデータ依存関係があるので、命令発行制御部１３Ｂは、先行命令における後半部分の処理と等価な新規の命令“vadd'  vr1,vr5,vr7”を生成し、サイクル２でパイプラインＢに発行する。これにより、物理番号６４〜７９のベクトルレジスタvr[64]〜vr[79]に対し、先行命令“vadd  vr0,vr4,vr6”により行われる処理と同じ処理が、サイクル２から実行される。そのため、続くサイクル３で後続命令“vadd  vr8,vr10,vr1”をパイプラインＣに発行でき、その命令を実行することができる。また、先行命令“vadd  vr0,vr4,vr6”による物理番号６４〜７９のベクトルレジスタvr[64]〜vr[79]に係る処理は不要であるので、サイクル８で先行命令“vadd  vr0,vr4,vr6”の処理を完了し、パイプラインＡが開放される。
【００９４】
なお、図１６（Ａ）、（Ｂ）及び図１７（Ａ）、（Ｂ）において、命令“vadd  vr0,vr4,vr6”については、ソースレジスタである論理番号０のベクトルレジスタvr0の物理番号（先頭値）を各サイクル毎に示している。また、命令“vadd'  vr1,vr5,vr7”については、ソースレジスタである論理番号１のベクトルレジスタvr1の物理番号（先頭値）を各サイクル毎に示している。また、命令“vadd  vr8,vr10,vr1”については、デスティネーションレジスタである論理番号１のベクトルレジスタvr1の物理番号（先頭値）を各サイクル毎に示している。
【００９５】
なお、前記実施形態は、何れも本発明を実施するにあたっての具体化のほんの一例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【００９６】
１１  命令バッファ
１２  データ依存検出部
１３Ａ、１３Ｂ  命令発行制御部
２１  デコード部
２２  第１の処理完了サイクル算出部
２３、２４  マルチプレクサ回路
２５  命令発行制御テーブル
２６  命令生成部
２７、２８、２９  演算部
３０  第２の処理完了サイクル算出部
３１  前半処理完了サイクル変更部
１０１  命令バッファ
１０２  データ依存検出部
１０３  命令発行制御部
１０４  実行パイプライン
１０５  ベクトルレジスタファイル
１０６  マルチプレクサ回路
１０７  シーケンサ
１０８  演算部
【図１】
0005751181.tif 000002
【図２】
0005751181.tif 000003
【図３】
0005751181.tif 000004
【図４】
0005751181.tif 000005
【図５】
0005751181.tif 000006
【図６】
0005751181.tif 000007
【図７】
0005751181.tif 000008
【図８】
0005751181.tif 000009
【図９】
0005751181.tif 000010
【図１０】
0005751181.tif 000011
【図１１】
0005751181.tif 000012
【図１２】
0005751181.tif 000013
【図１３】
0005751181.tif 000014
【図１４】
0005751181.tif 000015
【図１５】
0005751181.tif 000016
【図１６】
0005751181.tif 000017
【図１７】
0005751181.tif 000018
【図１８】
0005751181.tif 000019
【図１９】
0005751181.tif 000020
【図２０】
0005751181.tif 000021
【図２１】
0005751181.tif 000022