(57)【要約】【課題】処理速度、或いは、プログラムの実行速度を向上させることができる情報処理装置の提供を図る。【解決手段】ベクトルレジスタファイル（３２）がベクトル長により物理番号と論理番号が変化する情報処理装置であって、ベクトル長を指定するベクトル長レジスタ３１と、前記ベクトル長レジスタによるベクトル長の第１値ＶＬと、ベクトル長を変化させる命令によるベクトル長の第２値ＶＬ’を比較する比較器２１と、前記比較器からの比較結果に従って、実行中の先行命令に続く後続命令の発行可否を判定する発行可否判定回路２２と、を有するように構成する。【選択図】図７
2011227610.tif 000002
【特許請求の範囲】
【請求項１】
ベクトルレジスタファイルがベクトル長により物理番号と論理番号が変化する情報処理装置であって、
ベクトル長を指定するベクトル長レジスタと、
前記ベクトル長レジスタによるベクトル長の第１値と、ベクトル長を変化させる命令によるベクトル長の第２値を比較する比較器と、
前記比較器からの比較結果に従って、実行中の先行命令に続く後続命令の発行可否を判定する発行可否判定回路と、を有することを特徴とする情報処理装置。
【請求項２】
請求項１に記載の情報処理装置において、
前記比較結果が、前記第２値が前記第１値よりも大きいか，或いは，等しいとき、前記発行可否判定回路は、前記先行命令の実行完了を待つことなく前記後続命令を発行することを特徴とする情報処理装置。
【請求項３】
請求項２に記載の情報処理装置において、
前記比較結果が、前記第２値が前記第１値よりも小さいとき、前記発行可否判定回路は、前記先行命令の実行完了を待って前記後続命令を発行することを特徴とする情報処理装置。
【請求項４】
請求項１〜３のいずれか１項に記載の情報処理装置において、
該情報処理装置は、複数のベクトル実行パイプラインを有し、
前記ベクトル長レジスタは、ベクトル命令が発行される際、該ベクトル長レジスタによるベクトル長の前記第１値を前記各ベクトル実行パイプラインに分配することを特徴とする情報処理装置。
【請求項５】
請求項４に記載の情報処理装置において、
前記各ベクトル実行パイプラインは、ベクトル長が前記第１値から前記第２値に変化しても、実行中の前記先行命令に対して前記ベクトル長レジスタから分配された前記第１値を用いてマルチサイクル動作を行うことを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この出願で言及する実施例は、情報処理装置に関する。
【背景技術】
【０００２】
従来、情報処理装置（プロセッサ）として、ベクトルユニット（ベクタユニット）が提供されている。このベクトルユニットは、配列型のデータを効率的に並列処理するための演算装置であり、ベクトル型スーパーコンピュータに広く用いられている。
【０００３】
具体的に、ベクトルユニットは、配列データ（例えば、６４要素の１次元配列）を処理する４本の演算実行パイプラインを有し、各パイプラインの演算ステージには、８個のＳＩＭＤ（Single Instruction Multiple Data）演算器を搭載している。そして、ベクトル命令を、１サイクルに１命令毎、適切な実行パイプラインに発行する。
【０００４】
１つのベクトル命令は、１つの実行パイプラインで複数サイクルに渡って実行され、また、各実行パイプラインは、並列に動作する。例えば、ベクトル長（ＶＬ長）が６４の配列であれば、６４要素／８演算器＝８サイクルで配列に対する演算を実行する。ここで、１サイクル１命令発行とした場合は、通常、レジスタ干渉があっても、データのフォワーディングが可能なため、ストールは生じない。
【０００５】
ところで、従来、ベクトル長更新命令に注目して命令実行速度の短縮を図った情報処理装置が提案されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平０２−２５０１７４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
前述したようなベクトルユニット（プロセッサ）において、ベクトルレジスタファイルがベクトル長（ＶＬ長）により物理番号と論理番号が変化するような構成となっているものがある。
【０００８】
この場合、ベクトル長を指定するレジスタ（ＶＬレジスタ）の内容を変化させる命令（ｓｅｔＶＬ命令）を発行すると、ベクトルレジスタファイルの物理番号と論理番号の対応が変化してしまうため、発行可能かどうかを判断するレジスタ干渉の検出が困難になる。
【０００９】
このような問題を避けるため、通常、先行する全てのベクトル命令の実行が完了するまでストールするように制御している。そのため、ベクトルユニットの処理性能が大きく低下、すなわち、ベクトルユニットにより処理されるプログラムの実行速度が低下することになる。
【００１０】
そこで、ｓｅｔＶＬ命令を命令バッファに入れる際に、命令バッファ内の先行のｓｅｔＶＬ命令により更新されるＶＬ値が、現在、実行パイプラインに設定されているＶＬ値と同じかどうかを検出する情報処理装置が提案されている。
【００１１】
この情報処理装置は、ｓｅｔＶＬ命令により更新されるＶＬ値が実行パイプラインに設定されているＶＬ値と同じであれば、そのｓｅｔＶＬ命令自体を無効化する（命令バッファに入れない）という制御を行うものである。
【００１２】
しかしながら、この方式では、ＶＬ値が変化しない場合に効果が限定されることになり、また、命令を無効化してしまうために、ＶＬ値が変化しない場合にしか対応することができないという問題がある。
【００１３】
さらに、命令の無効化により、そのｓｅｔＶＬ命令の１命令を減らすことが可能であったとしても、それは、ベクトルレジスタファイルがＶＬ長により物理番号と論理番号が変化しない構成を前提とするものである。
【００１４】
すなわち、ベクトルレジスタファイルがＶＬ長により物理番号と論理番号が変化する場合には、ｓｅｔＶＬ命令によるストールを回避しなければならず、その点の考慮がなされていない。
【課題を解決するための手段】
【００１５】
一実施形態の情報処理装置によれば、ベクトルレジスタファイルがベクトル長により物理番号と論理番号が変化する情報処理装置であって、ベクトル長レジスタと、比較器と、発行可否判定回路と、を有することを特徴とする情報処理装置が提供される。
【００１６】
前記ベクトル長レジスタは、ベクトル長を指定し、また、前記比較器は、前記ベクトル長レジスタによるベクトル長の第１値と、ベクトル長を変化させる命令によるベクトル長の第２値を比較する。さらに、前記発行可否判定回路は、前記比較器からの比較結果に従って、実行中の先行命令に続く後続命令の発行可否を判定する。
【発明の効果】
【００１７】
開示の情報処理装置は、処理速度、或いは、プログラムの実行速度を向上させることができるという効果を奏する。
【図面の簡単な説明】
【００１８】
【図１】情報処理装置の一例を概略的に示すブロック図である。
【図２】図１の情報処理装置におけるレジスタファイルの動作を説明するための図である。
【図３】図１の情報処理装置における演算器の動作を説明するための図である。
【図４】ｓｅｔＶＬ命令によりＶＬ値が途中で変化する場合を説明するための図である。
【図５】ｓｅｔＶＬ命令がストールする原因を説明するための図である。
【図６】本実施例の情報処理装置を概略的に示すブロック図である。
【図７】図６の情報処理装置の要部を説明するためのブロック図である。
【図８】本実施例の情報処理装置におけるＶＬの変化による命令発行タイミングを説明するための図である。
【図９】本実施例の情報処理装置の動作を説明するための図である。
【図１０】ＶＬ値が小から大に変化する場合の具体例を説明するための図である。
【発明を実施するための形態】
【００１９】
まず、情報処理装置の実施例を詳述する前に、情報処理装置およびその問題点を図１〜図５を参照して説明する。
【００２０】
図１は、情報処理装置（プロセッサ）の一例を概略的に示すブロック図である。図１において、参照符号１は命令バッファ、２はスケジューラ、３はレジスタファイル群、ｐｓはスカラ実行パイプライン、そして、ｐ０〜ｐ３はベクトル実行パイプラインを示す。
【００２１】
なお、図１におけるＩＦ，ＩＤおよびＥＸは、プロセッサの内部処理部を示し、ＩＦは、命令を命令バッファ（命令キャッシュ）１から読み出す命令フェッチ（Instruction Fetch）部を示す。
【００２２】
また、ＩＤは、例えば、スケジューラ２により制御信号を生成し、レジスタファイルをレジスタ指定子で参照する命令デコード（Instruction Decode）部を示す。
【００２３】
さらに、ＥＸは、例えば、スカラ実行パイプラインｐｓ、並びに、ベクトル実行パイプラインｐ０〜ｐ３により、数値の計算やロード／ストアのデータ或いはアドレスの分岐先の計算を行う実行（Execution）部を示す。
【００２４】
図１に示すプロセッサは、ベクトル実行パイプラインが４本（ｐ０，ｐ１，ｐ２，ｐ３）で通常のベクトル命令を実行し、また、スカラ実行パイプラインが１本（ｐｓ）でｓｅｔＶＬ命令を含む１データ処理の命令を実行する場合を想定している。ここで、ｓｅｔＶＬ命令は、ベクトルユニットにおいてベクトル長を変化させる命令である。
【００２５】
なお、命令は、１サイクルで１命令を発行し、また、各ベクトル実行パイプラインｐ０〜ｐ３は、それぞれ８個（８並列）の演算器を有するものを想定している。
【００２６】
図２は、図１の情報処理装置におけるレジスタファイルの動作を説明するための図であり、ＶＬ長（ベクトル長）によりベクトルレジスタファイルの物理番号と論理番号が変化する様子を説明するためのものである。
【００２７】
なお、図２は、ベクトルレジスタＶＲが、１ワード×５１２エントリの場合を示す。ここで、ＶＬ長，レジスタファイルの物理番号および論理番号は、次の関係を有している。
（物理ＶＲ番号）＝（論理ＶＲ番号）＊（ＶＬ以上の最初の２のべき乗数）
【００２８】
具体的に、ＶＬ＝６４の時、論理番号０はベクトルレジスタファイルの物理番号０〜６３に対応し、論理番号１はベクトルレジスタファイルの物理番号６４〜１２７に対応し、そして、論理番号２はベクトルレジスタファイルの物理番号１２８〜１９１に対応する。
【００２９】
また、ＶＬ＝３２の時、論理番号０はベクトルレジスタファイルの物理番号０〜３１に対応し、論理番号１はベクトルレジスタファイルの物理番号３２〜６３に対応し、そして、論理番号２はベクトルレジスタファイルの物理番号６４〜９５に対応する。
【００３０】
すなわち、図１のプロセッサにおいて、ベクトルレジスタファイルの物理番号，ＶＬ＝６４の時の論理番号，および，ＶＬ＝３２の時の論理番号は、図２のような関係になっている。
【００３１】
図３は、図１の情報処理装置における演算器の動作を説明するための図であり、１サイクル１命令発行で、各ベクトル実行パイプラインｐ０〜ｐ３がＶＬ／８サイクルを実行し、１サイクルで８データ演算するＳＩＭＤ構成（並列動作の演算器が８個）を想定している。なお、各段は、それぞれベクトル実行パイプラインｐ０〜ｐ３の処理を表している。
【００３２】
まず、１サイクル１命令発行の構成では、通常、レジスタ干渉していても、フォワーディングが可能なため、命令の連続発行が可能である。すなわち、もし、レジスタ干渉していたら、レジスタファイルに書き込まれていないタイミングでフォワーディングすればよい。従って、フォワーディングのためだけにレジスタ干渉を検出することになる。
【００３３】
なお、フォワーディングとは、レジスタファイルにまだ書き戻されていないが、既に生成されている演算結果を次に発行する命令のソースとして使用するように制御する手法である。
【００３４】
図３の例では、全てＶＬ＝６４であり、各ベクトル実行パイプラインｐ０〜ｐ３が１サイクルで８データ演算するＳＩＭＤ構成となっているので、それぞれ８サイクルで命令を実行している。
【００３５】
従って、１サイクル毎に各命令の先頭領域ＰＰ１〜ＰＰ４が順に配置（発行）される。ここで、例えば、領域ＰＰ１では、物理番号１９２（＝３×６４）から１９９のデータが生成される。また、例えば、領域ＰＰ２では、物理番号１９２から１９９が参照されても、ストールせずに命令発行が可能であることが分かる。
【００３６】
図４は、ｓｅｔＶＬ命令によりＶＬ値が途中で変化する場合を説明するための図である。図４に示されるように、ＶＬ値を途中でＶＬ＝３２からＶＬ＝６４に変化させるｓｅｔＶＬ命令（ｓｅｔＶＬ＃６４）は、先行するベクトル命令ｖａｄｄ，ｖｍｕｌ（ＶＬ＝３２）が全て完了するまで発行されない。
【００３７】
図４の例では、ＶＬ＝３２の（先行）命令ｖａｄｄおよびｖｍｕｌは、１サイクル毎に領域ＰＰ５およびＰＰ６として順に発行される。
【００３８】
これに対して、ＶＬ＝３２からＶＬ＝６４に変化させるｓｅｔＶＬ命令（ｓｅｔＶＬ＃６４）は、ＶＬ＝３２の先行するベクトル命令ｖａｄｄおよびｖｍｕｌが全て完了した後のサイクル６で領域ＰＰ７として発行される。さらに、ＶＬ＝６４の後続命令ｖｍｕｌは、次のサイクル（サイクル７）で領域ＰＰ８として発行される。
【００３９】
従って、図４における第３〜第５サイクルにバブルが発生し、プロセッサの処理速度の低下、或いは、プログラムの実行速度の低下を招くことになる。
【００４０】
図５は、ｓｅｔＶＬ命令がストールする原因を説明するための図であり、ベクトルレジスタＶＲが、１ワード×５１２エントリの場合を示している。まず、ＶＬ長が変化すると、最適な発行制御をするためには、複雑な依存関係の検出が必要になる。
【００４１】
具体的に、図５の例では、ＶＬ＝６４の先行命令のデスティネーション（ｄｓｔ）のｖｒ１（論理番号１：物理番号６４〜１２７）が、ＶＬ＝３２となった後の後続命令のソース（ｓｒｃ）のｖｒ３（論理番号３：物理番号９６〜１２７）に干渉するのが分かる。
【００４２】
すなわち、ＶＬ長が変化すると、単に、ベクトルレジスタファイルの先頭の物理番号の干渉検出だけでなく、ＶＬ値の変化や命令間の距離を加味した複雑な干渉検出が必要になる。そこで、制御を容易にするために、一律にレジスタ干渉があると想定し、先行命令が完了するまで後続命令（ｓｅｔＶＬ命令）をブロックするのが一般的である。
【００４３】
このように、ベクトル長を変化させる命令（ｓｅｔＶＬ命令）を発行する場合、通常は先行する全てのベクトル命令の実行が完了するのを待って発行するため、プロセッサの処理速度，或いは，プログラムの実行速度が低下することになっている。
【００４４】
以下、情報処理装置の実施例を、添付図面を参照して詳述する。図６は、本実施例の情報処理装置（プロセッサ，ベクトルユニット）を概略的に示すブロック図である。図６において、参照符号１は命令バッファ、２０はスケジューラ、３０はレジスタファイル群、ｐｓはスカラ実行パイプライン、そして、ｐ０〜ｐ３はベクトル実行パイプラインを示す。
【００４５】
なお、図６におけるＩＦ，ＩＤおよびＥＸは、プロセッサの内部処理部を示し、ＩＦは、命令を命令バッファ１から読み出す命令フェッチ部を示す。また、ＩＤは、例えば、スケジューラ２により制御信号を生成し、レジスタファイルをレジスタ指定子で参照する命令デコード部を示す。
【００４６】
さらに、ＥＸは、例えば、スカラ実行パイプラインｐｓ、並びに、ベクトル実行パイプラインｐ０〜ｐ３により、数値の計算やロード／ストアのデータ或いはアドレスの分岐先の計算を行う実行部を示す。
【００４７】
図６に示すプロセッサは、図１のプロセッサと同様に、４本のベクトル実行パイプラインｐ０〜ｐ３、および、１本のスカラ実行パイプラインｐｓを有する。ここで、ｓｅｔＶＬ命令は、ベクトルユニットにおいてベクトル長を変化させる命令である。
【００４８】
なお、命令は、１サイクルで１命令を発行し、また、各ベクトル実行パイプラインｐ０〜ｐ３は、それぞれ８個の演算器を有するものを想定している。もちろん、プロセッサは、このような構成に限定されないのはいうまでもない。
【００４９】
図６に示されるように、レジスタファイル群３０のベクトル長レジスタ（ＶＬレジスタ）の値は、ｓｅｔＶＬ命令によりその値が変化してしまうため、例えば、命令発行時にその時点のＶＬ値を各ベクトル実行パイプラインｐ０〜ｐ３に分配するようになっている。
【００５０】
なお、前述した図１，図４および図５を参照して説明したｓｅｔＶＬ命令の発行により常にストールするプロセッサでは、ＶＬレジスタ３１の値を各ベクトル実行パイプラインｐ０〜ｐ３に分配する必要はない。
【００５１】
図７は、図６の情報処理装置の要部を説明するためのブロック図である。図７に示されるように、レジスタファイル群３０は、ＶＬレジスタ３１およびベクトルレジスタ（ＶＲ）３２を有し、また、スケジューラ２０は、比較器２１および発行可否判定回路２１を有する。
【００５２】
比較器２１は、例えば、命令バッファ１からのｓｅｔＶＬ＃ｉ命令によるＶＬ’値（ｉ）とＶＬレジスタ３１からのＶＬ値を比較し、その比較結果を発行可否判定回路２１に供給する。
【００５３】
発行可否判定回路２１は、比較器２１からの比較結果により、ＶＬ値が小から大に変化するか等しい場合、すなわち、ＶＬ≦ＶＬ’に変化する場合を検出し、この場合には、ストールすることなくそのｓｅｔＶＬ命令を発行するようになっている。
【００５４】
これにより、ベクトルレジスタファイルがＶＬ長により物理番号と論理番号が変化するプロセッサにおいて、ｓｅｔＶＬ命令が発行されても複雑なレジスタ干渉の検出を行わずに、後続命令の発行可能なケースを検出し、ストールせずに発行すること可能になる。
【００５５】
例えば、レジスタ干渉の検出はＶＬ値が変化しない通常の場合と同様に先頭レジスタ番号のみとし、レジスタが干渉していたら通常の場合と同様の発行制御を行い、干渉していない場合は一律に先頭以外のレジスタが干渉しているとみなし、レジスタファイルに書き戻されるのが保障されるタイミングを待って発行する。ＶＬ長、パイプライン段数、実行パイプラインの演算器個数に依存するが、多くの場合に連続して発行が可能である。
【００５６】
なお、発行可否判定回路２１は、比較器２１からの比較結果により、ＶＬ値が大から小に変化する場合、すなわち、ＶＬ＞ＶＬ’に変化する場合には、例えば、従前と同様に、後続命令の発行を停止する処理（ストール処理）等を行うことになる。
【００５７】
図８は、本実施例の情報処理装置におけるＶＬの変化による命令発行タイミングを説明するための図である。
【００５８】
ここで、図８（ａ）はｓｅｔＶＬ命令以外の命令が発行された場合を示し、また、図８（ｂ）はＶＬ値が大から小に変化するｓｅｔＶＬ命令が発行された場合を示し、そして、図８（ｃ）はＶＬ値が小から大に変化するｓｅｔＶＬ命令が発行された場合を示す。
【００５９】
まず、図８（ａ）のように、ベクトル長を指定するＶＬを変化させるｓｅｔＶＬ命令以外の命令発行の場合、レジスタ干渉（ｖｒ１：論理番号１）がある時でも、次サイクルで連続発行が可能である（図８（ａ）中の領域ＰＰ１１→領域ＰＰ１２を参照）。
【００６０】
従って、ｓｅｔＶＬ命令以外の命令発行の場合、レジスタ干渉の検出は、先頭番号のみでよく、また、この例ではレイテンシが１なのでフォワーディングのためだけに使用されることになる。
【００６１】
次に、図８（ｂ）のように、ｓｅｔＶＬ命令の発行であって、そのｓｅｔＶＬ命令によるＶＬ値の変化が大から小の場合（例えば、ＶＬ＝６４からＶＬ＝３２に変化する場合）、前述した図４および図５と同様に、命令発行可能なタイミングの検出が複雑になる。
【００６２】
すなわち、図８（ｂ）の例では、パイプラインｐ１による処理のベクトルレジスタファイルの先頭論理番号１，０，７（ｖｒ１，ｖｒ０，ｖｒ７）と、パイプラインｐ３による処理の先頭論理番号４，３，２（ｖｒ４，ｖｒ３，ｖｒ２）は干渉していない。
【００６３】
しかしながら、例えば、パイプラインｐ１による領域ＰＰ２１は、パイプラインｐ３による処理の領域ＰＰ２２と干渉することになる。
【００６４】
すなわち、ｓｅｔＶＬ命令によるＶＬ値の変化が大から小の場合、先頭の論理番号のみの照合では不十分であり、例えば、先行命令の全ての物理番号との干渉検出が必要になる。
【００６５】
そのため、命令発行がｓｅｔＶＬ命令でＶＬ値の変化が大から小の場合、例えば、サイクル９が終了するタイミングＬ１まで命令発行をブロックし、ｓｅｔＶＬ命令を含む後続命令は、サイクル１０以降に発行されるようになっている。
【００６６】
すなわち、命令ｓｅｔＶＬ３２は、サイクル３の領域ＰＰ２４で発行できず、最適にはサイクル７で発行可能であるが、サイクル１０の領域ＰＰ２５で発行され、また、命令ｖａｄｄは、サイクル４の領域ＰＰ２２から発行できず、最適にはサイクル８で発行可能であるが、サイクル１１の領域ＰＰ２３から発行されることになる。
【００６７】
そして、図８（ｃ）のように、ｓｅｔＶＬ命令の発行であって、そのｓｅｔＶＬ命令によるＶＬ値の変化が小から大の場合（例えば、ＶＬ＝３２からＶＬ＝６４に変化する場合）、並びに、変化しない場合には、ｓｅｔＶＬ命令以外の命令と同様に処理する。
【００６８】
すなわち、図８（ｃ）に示されるように、ＶＬ＝３２からＶＬ＝６４に変化する場合、例えば、パイプラインｐ１の処理による領域ＰＰ３１がパイプラインｐ３の処理による領域ＰＰ３２に干渉する（レジスタ干渉がある）時でも、次サイクルで連続発行が可能である。
【００６９】
従って、ｓｅｔＶＬ命令によってＶＬ値の変化が小から大の場合（ＶＬ値が変化しない場合も含む）には、後続命令の発行可／不可の判定に依存関係の検出が不要であり、ｓｅｔＶＬ命令以外の命令が発行される場合と同様に命令発行を行う。
【００７０】
このように、本実施例のプロセッサは、ＶＬ値が小から大に変化するｓｅｔＶＬ命令が発行される場合を検出し、その場合には、ストールしないように制御することで、プロセッサの性能（プログラムの実行速度）の低下を軽減することができる。すなわち、プロセッサの処理速度，或いは，プログラムの実行速度を向上させることができる。
【００７１】
図９は、本実施例の情報処理装置の動作を説明するための図であり、命令発行処理を説明するための図である。
【００７２】
図９に示されるように、命令発行処理が開始すると、まず、オペレーションＯＰＡにおいて、発行命令がｓｅｔＶＬ命令かどうかを判別する。オペレーションＯＰＡにおいて、発行命令がｓｅｔＶＬ命令ではないと判別されるとオペレーションＯＰＢに進み、また、ｓｅｔＶＬ命令であると判別されるとオペレーションＯＰＣに進む。
【００７３】
オペレーションＯＰＢにおいて、発行可否判定回路２２は、その命令の発行可／不可を判定して処理を終了する。これは、前述した図８（ａ）の処理に対応する。
【００７４】
オペレーションＯＰＣにおいて、比較器２１により現在のＶＬ値とｓｅｔＶＬ命令により更新されるＶＬ’値との大小を比較してオペレーションＯＰＤに進む。
【００７５】
オペレーションＯＰＤにおいて、ＶＬとＶＬ’の大小比較により、ＶＬ値が大から小に変化する（ＶＬ＞ＶＬ’）と判別されるとオペレーションＯＰＥに進み、ＶＬ値が小から大に変化するか等しい（ＶＬ≦ＶＬ’）と判別されるとオペレーションＯＰＦに進む。
【００７６】
まず、オペレーションＯＰＥにおいて、発行可否判定回路２２は、先行命令が全て実行完了するまで、そのｓｅｔＶＬ命令をストールすると判定して処理を終了する。これは、前述した図８（ｂ）の処理に対応する。
【００７７】
また、オペレーションＯＰＦにおいて、発行可否判定回路２２は、先行命令の実行完了を待たずに、そのｓｅｔＶＬ命令を発行可と判定して処理を終了する。すなわち、発行命令がｓｅｔＶＬ命令以外の命令の場合と同様の処理を行う。これは、前述した図８（ｃ）の処理に対応する。なお、上記の各オペレーションは、ステップであってもよい。
【００７８】
図１０は、ＶＬ値が小から大に変化する場合の具体例を説明するための図であり、図１０（ａ）は、一般的な情報処理装置による処理の具体例を示し、また、図１０（ｂ）は、本実施例の情報処理装置による処理の具体例を示す。
【００７９】
まず、図１０（ａ）および図１０（ｂ）に示す具体例は、１サイクルで１命令を発行し、演算器構成が８−ＳＩＭＤ（８データ／サイクル処理）で、ベクトル命令によるパイプラインの占有サイクル数がＶＬ／８となっている。
【００８０】
さらに、ベクトルレジスタ（ＶＲ）が１ワード×５１２エントリで、（物理ＶＲ番号）＝（論理ＶＲ番号）＊（ＶＬ以上の最初の２のべき乗数）の関係を有している。そして、一般的なおよび本実施例のプロセッサが、以下のプログラム列を実行する例を示している。
【００８１】
１：setVL 32              //VL = 32
２：vadd vr3, vr0, vr7    //vr3 = vr0 + vr7
３：setVL 64              //VL = 64
４：vadd vr4, vr1, vr2    //vr4 = vr1 + vr2
なお、４番目のｖａｄｄのｖｒ１が、２番目のｖａｄｄのｖｒ３にレジスタ干渉している場合を想定する。
【００８２】
まず、図１０（ａ）に示されるように、一般的なプロセッサでは、例えば、サイクル１でｓｅｔＶＬ命令によりＶＬ値が３２に更新され、また、サイクル２でｖａｄｄ命令が発行され、そして、ＶＬ＝３２なので、４サイクルかけてその命令ｖａｄｄが実行される。
【００８３】
次に、サイクル３〜５では、ｓｅｔＶＬ命令なので、先行の命令１（ｓｅｔＶＬ）および２（Ｖａｄｄ）が完了するサイクル５まで発行を停止し、そして、サイクル６でｓｅｔＶＬ命令が発行される。
【００８４】
さらに、サイクル７でｖａｄｄ命令が発行され、ＶＬ＝６４なので、８サイクルかけてその命令ｖａｄｄが実行される。そして、サイクル１４で、処理が完了する。このように、一般的なプロセッサでは、サイクル３〜５にバブルが発生することになる。
【００８５】
一方、図１０（ｂ）に示されるように、本実施例のプロセッサでは、例えば、サイクル１でｓｅｔＶＬ命令によりＶＬが３２に更新され、また、サイクル２でｖａｄｄ命令が発行され、そして、ＶＬ＝３２なので、４サイクルかけてその命令ｖａｄｄが実行される。
【００８６】
次に、サイクル３において、ｓｅｔＶＬ命令であるが更新するＶＬ値は３２から６４へと小から大に変化するので、ｓｅｔＶＬ命令を発行し、ＶＬを６４に更新する。
【００８７】
さらに、サイクル４でｖａｄｄ命令が発行され、ＶＬ＝６４なので、８サイクルかけてその命令ｖａｄｄが実行される。そして、サイクル１１で、処理が完了する。
【００８８】
このように、本実施例の情報処理装置によれば、ｓｅｔＶＬ命令が発行されても、ＶＬ値が変化する際に、完全にレジスタ干渉を検出する場合に比べて、命令をストールさせないケースを増やすことで、処理速度の向上を図ることができる。
【００８９】
すなわち、本実施例の情報処理装置によれば、例えば、ループにおいてｓｅｔＶＬ命令が使われているようなプログラムを実行する場合でも、命令をストールさせないケースを増やすことで、プログラムの実行速度を向上させることができる。
【００９０】
なお、本実施例の情報処理装置は、ベクトルレジスタファイルがベクトル長により物理番号と論理番号が変化するものであれば、様々な構成を有する情報処理装置に対して幅広く適用することができる。
【符号の説明】
【００９１】
１    命令バッファ
２，２０    スケジューラ
３，３０    レジスタファイル群
２１    比較器
２２    発行可否判定回路
３１    ベクトル長レジスタ（ＶＬレジスタ）
３２    ベクトルレジスタ（ＶＲ）
ｐ０〜ｐ３    ベクトル実行パイプライン
ｐｓ    スカラ実行パイプライン
【図１】
2011227610.tif 000003
【図２】
2011227610.tif 000004
【図３】
2011227610.tif 000005
【図４】
2011227610.tif 000006
【図５】
2011227610.tif 000007
【図６】
2011227610.tif 000008
【図７】
2011227610.tif 000009
【図８】
2011227610.tif 000010
【図９】
2011227610.tif 000011
【図１０】
2011227610.tif 000012