(57)【要約】      （修正有）【課題】回路規模の増大を抑制しつつ、１つの命令で実行可能な処理のバリエーションを増加させる。【解決手段】デコード部４０で解読される命令の所定位置に、その命令にモードを付与するためのビット値が設定し、モード判定部４０ａは、命令の所定位置に設定されたビット値に基づいて、その命令に付与されたモードを判定し、デコード部４０は、命令に付与されたモードに基づいて、その命令で指定された処理を実行するベクトル演算器１０ｃ、１０ｄを起動するとともに、その命令で指定された処理と異なる処理を実行するベクトル演算器１０ｃ、１０ｄを起動するとともに、異なる読み出し先のベクトルレジスタ２０ｂを各ベクトル演算器１０ｃ、１０ｄに割り当てる。【選択図】図２
2006260381.tif 000002
【特許請求の範囲】
【請求項１】
命令で指定された演算処理を行う複数のモジュールと、
前記命令の所定位置に設定されたビット値に基づいて、前記命令に付与されたモードを判定するモード判定部とを備え、
前記モードの判定結果に基づいて、前記命令で指定された処理と異なる処理を実行させることを特徴とする演算処理装置。
【請求項２】
命令で指定された演算処理を行うモジュールと、
前記モジュールで行われた処理結果の書き込み先である複数のディスティネーションレジスタと、
前記モジュールで処理されるデータの読み出し先である複数のソースレジスタと、
前記命令の所定位置に設定されたビット値に基づいて、前記命令に付与されたモードを判定するモード判定部とを備え、
前記モードの判定結果に基づいて、前記命令で指定された読み出し先を変更することを特徴とする演算処理装置。
【請求項３】
命令で指定された演算処理を行う複数のモジュールと、
前記モジュールで行われた処理結果の書き込み先である複数のディスティネーションレジスタと、
前記モジュールで処理されるデータの読み出し先である複数のソースレジスタと、
前記命令の所定位置に設定されたビット値に基づいて、前記命令に付与されたモードを判定するモード判定部とを備え、
前記モードの判定結果に基づいて、１つの命令ごとに複数のモジュールを起動することを特徴とする演算処理装置。
【請求項４】
前記ビット値は、
前記ディスティネーションレジスタを指定する領域の最下位ビットまたは前記ソースレジスを指定する領域の最下位ビットに設定されることを特徴とする請求項３記載の演算処理装置。
【請求項５】
前記モードの判定結果に基づいて、偶数番目のソースレジスタから読み出した値についての前記命令で指定された処理を第１モジュールに実行させ、前記第１モジュールによる処理結果を偶数番目のディスティネーションレジスタに格納するとともに、奇数番目のソースレジスタから読み出した値についての前記命令で指定された処理を第２モジュールに実行させ、前記第２モジュールによる処理結果を奇数番目のディスティネーションレジスタに格納することを特徴とする請求項３または４記載の演算処理装置。
【請求項６】
前記モードの判定結果に基づいて、偶数番目のソースレジスタから読み出した値についての前記命令で指定された処理を第１モジュールに実行させ、前記第１モジュールによる処理結果を偶数番目のディスティネーションレジスタに格納するとともに、奇数番目および偶数番目のソースレジスタから読み出した値についての前記命令で指定された処理を第２モジュールに実行させ、前記第２モジュールによる処理結果を奇数番目のディスティネーションレジスタに格納することを特徴とする請求項３から５のいずれか１項記載の演算処理装置。
【請求項７】
前記モードの判定結果に基づいて、奇数番目および偶数番目のソースレジスタから読み出した値についての前記命令で指定された処理を第１モジュールに実行させ、前記第１モジュールによる処理結果を偶数番目のディスティネーションレジスタに格納するとともに、奇数番目のソースレジスタから読み出した値についての前記命令で指定された処理を第２モジュールに実行させ、前記第２モジュールによる処理結果を奇数番目のディスティネーションレジスタに格納することを特徴とする請求項３から６のいずれか１項記載の演算処理装置。
【請求項８】
前記モードの判定結果に基づいて、偶数番目のソースレジスタから読み出した値についての前記命令で指定された処理を第１モジュールに実行させ、前記第１モジュールによる処理結果を偶数番目のディスティネーションレジスタに格納するとともに、奇数番目のソースレジスタから読み出した値についての前記命令で指定された処理と異なる処理を第２モジュールに実行させ、前記第２モジュールによる処理結果を奇数番目のディスティネーションレジスタに格納することを特徴とする請求項３から７のいずれか１項記載の演算処理装置。
【請求項９】
前記モードの判定結果に基づいて、前記第１モジュールと前記第２モジュールとに対して異なる処理を交互に行わせることを特徴とする請求項５から８のいずれか１項記載の演算処理装置。
【請求項１０】
前記モードの判定結果に基づいて、前記第１モジュールによる処理結果の最上位ビットのキャリーを前記第２モジュールによる処理結果の最下位ビットに加算することを特徴とする請求項５から９のいずれか１項記載の演算処理装置。
【請求項１１】
前記モードの判定結果に基づいて、前記偶数番目のソースレジスから読み出された値および前記奇数番目のソースレジスから読み出された値を前記ビット値で表現される値だけシフトさせることを特徴とする請求項５から１０のいずれか１項記載の演算処理装置。
【請求項１２】
前記モードの判定結果に基づいて、第１モジュールによる処理結果の所定のビットと第２モジュールによる処理結果の所定のビットとを入れ替えることを特徴とする請求項５から１１のいずれか１項記載の演算処理装置。
【請求項１３】
ベクトル演算処理ユニットに実行させる命令を解読するステップと、
前記命令の所定位置に設定されたビット値に基づいて、前記命令に付与されたモードを判定するステップと、
前記モードの判定結果に基づいて、前記命令で指定された処理を行う第１ベクトル演算処理ユニットを起動させるとともに、前記命令で指定された処理と異なる処理を行う第２ベクトル演算処理ユニットを起動させるステップとをコンピュータに実行させることを特徴とする演算処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置に関し、特に、１つの命令で複数のベクトル演算処理ユニットを起動させる方法に適用して好適なものである。
【背景技術】
【０００２】
ベクトル処理装置では、処理速度を上げるために、複数のベクトルレジスタと複数のベクトル演算器と複数のデータ転送回路とを設けることが行われている。
また、例えば、特許文献１には、同時に実行できるベクトル命令の数を増やすために、複数のベクトルレジスタとベクトル演算器とデータ転送回路を含むベクトル演算処理ユニットを複数用意し、１つのベクトル命令を発行する時に各ベクトル演算処理ユニットごとに処理されるベクトル要素数を指示することにより、全体として本来処理される要素数だけベクトル処理を行わせる方法が開示されている。
【特許文献１】特開昭６１−９５４７７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかしながら、特許文献１に開示された方法では、ベクトル命令の要素数（ｎ個）を分割して各演算処理ユニットに分配しているため、ベクトル命令の要素の分割や分配を司る回路が複雑化するという問題があった。また、特許文献１に開示された方法では、各演算処理ユニットでの処理やソースレジスタの指定にバリエーションを持たせられないため、処理の効率化を図るためには多数の命令を用意しなければならないという問題があった。
【０００４】
そこで、本発明の目的は、回路規模の増大を抑制しつつ、１つの命令で実行可能な処理のバリエーションを増加させることが可能な演算処理装置を提供することである。
【課題を解決するための手段】
【０００５】
上述した課題を解決するために、本発明の一態様に係る演算処理装置によれば、命令で指定された演算処理を行う複数のモジュールと、前記命令の所定位置に設定されたビット値に基づいて、前記命令に付与されたモードを判定するモード判定部とを備え、前記モードの判定結果に基づいて、前記命令で指定された処理と異なる処理を実行させることを特徴とする。
【０００６】
これにより、命令の所定位置に設定されるビット値を変更することで、種類の異なる複数の処理を１つの命令で実行させることができる。このため、１つの命令で実行可能な処理にバリエーションを持たせることが可能となり、回路規模の増大を抑制しつつ、処理の効率化を図ることが可能となるとともに、プログラミングの自由度を向上させることができる。
【０００７】
また、本発明の一態様に係る演算処理装置によれば、命令で指定された演算処理を行うモジュールと、前記モジュールで行われた処理結果の書き込み先である複数のディスティネーションレジスタと、前記モジュールで処理されるデータの読み出し先である複数のソースレジスタと、前記命令の所定位置に設定されたビット値に基づいて、前記命令に付与されたモードを判定するモード判定部とを備え、前記モードの判定結果に基づいて、前記命令で指定された読み出し先を変更することを特徴とする。
【０００８】
これにより、命令の所定位置に設定されるビット値を変更することで、複数のモジュールに異なるソースレジスタを１つの命令で割り当てることができ、１つの命令で実行可能な処理にバリエーションを持たせることが可能となる。
また、本発明の一態様に係る演算処理装置によれば、命令で指定された演算処理を行う複数のモジュールと、前記モジュールで行われた処理結果の書き込み先である複数のディスティネーションレジスタと、前記モジュールで処理されるデータの読み出し先である複数のソースレジスタと、前記命令の所定位置に設定されたビット値に基づいて、前記命令に付与されたモードを判定するモード判定部とを備え、前記モードの判定結果に基づいて、１つの命令ごとに複数のモジュールを起動することを特徴とする。
【０００９】
これにより、命令の所定位置に設定されるビット値を変更することで、種類の異なる複数のモジュールを１つの命令で起動させることができ、１つの命令で実行可能な処理にバリエーションを持たせることが可能となる。
また、本発明の一態様に係る演算処理装置によれば、前記ビット値は、前記ディスティネーションレジスタを指定する領域の最下位ビットまたは前記ソースレジスを指定する領域の最下位ビットに設定されることを特徴とする。
【００１０】
これにより、モード判定を行わせるためのビット値をハードウェアで未使用となっている領域に設定することができる。このため、命令で指定される本来の処理を正常に実行させることを可能としつつ、その命令で指定される処理とは異なる処理を実行させるためのモードをその命令に付与することができ、１つの命令で実行可能な処理にバリエーションを持たせることが可能となる。
【００１１】
また、本発明の一態様に係る演算処理装置によれば、前記モードの判定結果に基づいて、偶数番目のソースレジスタから読み出した値についての前記命令で指定された処理を第１モジュールに実行させ、前記第１モジュールによる処理結果を偶数番目のディスティネーションレジスタに格納するとともに、奇数番目のソースレジスタから読み出した値についての前記命令で指定された処理を第２モジュールに実行させ、前記第２モジュールによる処理結果を奇数番目のディスティネーションレジスタに格納することを特徴とする。
【００１２】
これにより、偶数番目のレジスタが専用に割り当てられるモジュールと、奇数番目のレジスタが専用に割り当てられるモジュールとを分けることができる。このため、ディスティネーションレジスタを指定する領域の最下位ビットおよびソースレジスを指定する領域の最下位ビットを空き領域とすることが可能となり、モード判定を行わせるためのビット値をハードウェアで未使用となっている領域に設定することができる。
【００１３】
また、本発明の一態様に係る演算処理装置によれば、前記モードの判定結果に基づいて、偶数番目のソースレジスタから読み出した値についての前記命令で指定された処理を第１モジュールに実行させ、前記第１モジュールによる処理結果を偶数番目のディスティネーションレジスタに格納するとともに、奇数番目および偶数番目のソースレジスタから読み出した値についての前記命令で指定された処理を第２モジュールに実行させ、前記第２モジュールによる処理結果を奇数番目のディスティネーションレジスタに格納することを特徴とする。
【００１４】
これにより、ある命令で第２モジュールに対して奇数番目のレジスタが割り当てられている場合においても、その命令の所定位置のビット値を変更することで、その同一の命令にて第２モジュールに対して偶数番目のレジスタを割り当てることができ、１つの命令で実行可能な処理にバリエーションを持たせることが可能となる。
また、本発明の一態様に係る演算処理装置によれば、前記モードの判定結果に基づいて、奇数番目および偶数番目のソースレジスタから読み出した値についての前記命令で指定された処理を第１モジュールに実行させ、前記第１モジュールによる処理結果を偶数番目のディスティネーションレジスタに格納するとともに、奇数番目のソースレジスタから読み出した値についての前記命令で指定された処理を第２モジュールに実行させ、前記第２モジュールによる処理結果を奇数番目のディスティネーションレジスタに格納することを特徴とする。
【００１５】
これにより、ある命令で第１モジュールに対して偶数番目のレジスタが割り当てられている場合においても、その命令の所定位置のビット値を変更することで、その同一の命令にて第１モジュールに対して奇数番目のレジスタを割り当てることができ、１つの命令で実行可能な処理にバリエーションを持たせることが可能となる。
また、本発明の一態様に係る演算処理装置によれば、前記モードの判定結果に基づいて、偶数番目のソースレジスタから読み出した値についての前記命令で指定された処理を第１モジュールに実行させ、前記第１モジュールによる処理結果を偶数番目のディスティネーションレジスタに格納するとともに、奇数番目のソースレジスタから読み出した値についての前記命令で指定された処理と異なる処理を第２モジュールに実行させ、前記第２モジュールによる処理結果を奇数番目のディスティネーションレジスタに格納することを特徴とする。
【００１６】
これにより、ある命令で第１モジュールに対して加算演算、乗算演算またはフルワード演算が指定されている場合においても、その命令の所定位置のビット値を変更することで、その同一の命令にて第２モジュールに対して減算演算、除算演算またはハーフワード演算を実行させることができ、１つの命令で実行可能な処理にバリエーションを持たせることが可能となる。
【００１７】
また、本発明の一態様に係る演算処理装置によれば、前記モードの判定結果に基づいて、前記第１モジュールと前記第２モジュールとに対して異なる処理を交互に行わせることを特徴とする。
これにより、偶数番目のレジスタの要素ごとに複数の異なる処理を実行させることが可能となるとともに、奇数番目のレジスタの要素ごとに複数の異なる処理を実行させることが可能となり、１つの命令で実行可能な処理にバリエーションを持たせることが可能となる。
【００１８】
また、本発明の一態様に係る演算処理装置によれば、前記モードの判定結果に基づいて、前記第１モジュールによる処理結果の最上位ビットのキャリーを前記第２モジュールによる処理結果の最下位ビットに加算することを特徴とする。
これにより、第１モジュールによる処理結果を下位ビット、第２モジュールによる処理結果を上位ビットとして、第１モジュールによる処理結果と第２モジュールによる処理結果とを１つの値に統合させることが可能となり、１つの命令で実行可能な処理にバリエーションを持たせることが可能となる。
【００１９】
また、本発明の一態様に係る演算処理装置によれば、前記モードの判定結果に基づいて、前記偶数番目のソースレジスから読み出された値および前記奇数番目のソースレジスから読み出された値を前記ビット値で表現される値だけシフトさせることを特徴とする。
これにより、命令の所定位置に設定されるビット値を組み合わせることでシフト量を変化させることが可能となり、１つの命令で指定可能なシフト量にバリエーションを持たせることが可能となる。
【００２０】
また、本発明の一態様に係る演算処理装置によれば、前記モードの判定結果に基づいて、第１モジュールによる処理結果の所定のビットと第２モジュールによる処理結果の所定のビットとを入れ替えることを特徴とする。
これにより、１つの命令で複数のモジュールに処理を実行させることが可能となるとともに、それらのモジュールで得られた所定のビットを入れ替えた結果を得ることが可能となり、１つの命令で実行可能な処理にバリエーションを持たせることが可能となる。
【００２１】
また、本発明の一態様に係る演算処理プログラムによれば、ベクトル演算処理ユニットに実行させる命令を解読するステップと、前記命令の所定位置に設定されたビット値に基づいて、前記命令に付与されたモードを判定するステップと、前記モードの判定結果に基づいて、前記命令で指定された処理を行う第１ベクトル演算処理ユニットを起動させるとともに、前記命令で指定された処理と異なる処理を行う第２ベクトル演算処理ユニットを起動させるステップとをコンピュータに実行させることを特徴とする。
【００２２】
これにより、命令の所定位置に設定されるビット値を変更することで、種類の異なる複数のモジュールを１つの命令で起動させることができ、１つの命令で実行可能な処理にバリエーションを持たせることが可能となる。
【発明を実施するための最良の形態】
【００２３】
以下、本発明の実施形態に係る演算処理装置について図面を参照しながら説明する。なお、以下の実施形態では、図１のコンピュータシステムにおいて、複数の演算器を備える図２のベクトル演算処理プロセッサ１００の各演算器を並列に動作させることによりパイプライン処理を行う場合を例にとって説明する。
図１は、本発明の一実施形態に係るコンピュータシステムの概略構成を示すブロック図である。
【００２４】
図１において、コンピュータシステムには、複数の演算器を備えるベクトル演算処理プロセッサ１００、所定領域にあらかじめベクトル演算処理プロセッサ１００の制御プログラム等を格納するメインメモリ１１０、データを入力可能なヒューマンインターフェースとしての入力部１２０、ディスプレイ等のデータを出力可能な出力部１３０、ネットワーク等を介して外部との通信を行う通信部１４０が設けられている。
【００２５】
ここで、メインメモリ１１０には、プログラムを格納するプログラム・テキスト領域１１１、定数などのデータを予め格納する初期化済みデータ領域１１２、定数などのデータを格納するための事前に確保された未初期化データ領域１１３、プログラム実行時に動的に確保されるヒープ領域１１４およびスタック領域１１５ならびにその他論理的に区分された記憶領域を有している。
【００２６】
そして、制御プログラムは、ベクトル演算処理プロセッサ１００が直接実行可能な低水準言語（例えば、機械語）で構成されており、高水準言語（例えば、Ｃ言語）により記述されたアセンブリソースコード２００を、アセンブラ２１０およびリンカ２２０からなる命令コード生成系により低水準言語にコンパイルし、実行プログラム２３０として生成される。そして、生成された制御プログラムは、図示しないハードディスク等の補助記憶装置に格納されるが、ベクトル演算処理プロセッサ１００が実行するときは、プログラムローダ２４０によりメインメモリ１１０の記憶領域のうちプログラム・テキスト領域１１１に配置され、実行可能な状態に置かれる。なお、アセンブラ２１０、リンカ２２０およびプログラムローダ２４０は、一般にソフトウェアにより構成することができる。
【００２７】
図２は、図１のベクトル演算処理プロセッサ１００の概略構成を示すブロック図である。
図２において、ベクトル演算処理プロセッサ１００には、メインメモリ１１０に対してアクセスを行うアクセス部１００ａおよびアクセス部１００ａを介して読み出された命令コードに基づいて並列演算処理を行う演算処理部１００ｂが設けられている。
【００２８】
そして、アクセス部１００ａは、汎用外部バス１１１を介してメインメモリ１１０にアクセスするメモリアクセス部１と、演算処理部１００ｂ自体が使用可能なローカルメモリ２と、ローカルメモリ２とメインメモリ１１０との間でデータ転送を行うＤＭＡ３と、データキャッシュを行うデータキャッシュメモリ４と、プログラムキャッシュを行うプログラムキャッシュメモリ５と、演算処理部１００ｂおよびその他のモジュールが共用して使用可能な共有メモリ６とを備えている。ここで、ローカルメモリ２、キャッシュメモリ４、５および共有メモリ６は、その一端がメモリアクセス部１に接続され、ＤＭＡ３、キャッシュメモリ４、５および共有メモリ６は、その他端が汎用外部バス１１１に接続されている。
【００２９】
演算処理部１００ｂは、スカラー演算を行う複数のスカラー演算器１０ａ、１０ｂと、ベクトル演算を行う複数のベクトル演算器１０ｃ、１０ｄと、スカラー演算器１０ａ、１０ｂがスカラー演算に利用するスカラーレジスタ２０ａと、ベクトル演算器１０ｃ、１０ｄがベクトル演算に利用するベクトルレジスタ２０ｂと、メモリアクセス部１を介してメインメモリ１１０およびプログラムキャッシュ５から命令を読み出すフェッチ部３０と、フェッチ部３０で読み出した命令の内容を解読するデコード部４０とを備え、デコード部４０は、モード判定部４０ａを備えている。そして、デコード部４０は、解読した命令に基づいて、スカラー演算器１０ａ、１０ｂ、ベクトル演算器１０ｃ、１０ｄ、スカラーレジスタ２０ａおよびベクトルレジスタ２０ｂに実行ユニット制御信号を出力し、これらのユニットを起動することにより、命令で指定される処理をこれらのユニットに実行させることができる。
【００３０】
ここで、デコード部４０で解読される命令の所定位置には、その命令にモードを付与するためのビット値が設定することができる。そして、モード判定部４０ａは、命令の所定位置に設定されたビット値に基づいて、その命令に付与されたモードを判定することができる。そして、デコード部４０は、命令に付与されたモードに基づいて、その命令で指定された処理を実行するベクトル演算器１０ｃ、１０ｄを起動するとともに、その命令で指定された処理と異なる処理を実行するベクトル演算器１０ｃ、１０ｄを起動することができる。また、デコード部４０は、命令に付与されたモードに基づいて、複数のベクトル演算器１０ｃ、１０ｄを起動するとともに、異なる読み出し先のベクトルレジスタ２０ｂを各ベクトル演算器１０ｃ、１０ｄに割り当てることができる。
【００３１】
図３は、図２のスカラーレジスタ２０ａおよびベクトルレジスタ２０ｂの概略構成を示すブロック図である。
図３において、スカラーレジスタ２０ａには、例えば、３２ビット分のデータをそれぞれ記憶する記憶領域ＳＲ０〜ＳＲ１５を１６本だけ設けることができる。また、例えば、ベクトルの要素数が８であるとすると、３２ビット分のデータをそれぞれ記憶する８個の記憶領域ＶＲ０［０］〜ＶＲ０［７］で１本分のベクトルレジスタを構成することができる。そして、ベクトルレジスタ２０ｂには、例えば、３２ビット分のデータをそれぞれ記憶する６４個の記憶領域ＶＲ０［０］〜ＶＲ０［７］、ＶＲ１［０］〜ＶＲ１［７］、ＶＲ２［０］〜ＶＲ２［７］、ＶＲ３［０］〜ＶＲ３［７］、ＶＲ４［０］〜ＶＲ４［７］、ＶＲ５［０］〜ＶＲ５［７］、ＶＲ６［０］〜ＶＲ６［７］、ＶＲ７［０］〜ＶＲ７［７］を設けることで、８本分のベクトルレジスタを設けることができる。
【００３２】
図４は、図２のベクトル演算処理プロセッサ１００のベクトル加算処理を示す図である。
図４において、ベクトル命令において、例えば、オペコードｏｐｅｃｏｄｅにて加算が指定され、リピートアマウントｒｐｔａｍｔで８が指定され、ディスティネーションレジスタｄｓｔとして図３のベクトルレジスタＶＲ０が指定され、ソースレジスタｓｒｃ１、ｓｒｃ２として図３のベクトルレジスタＶＲ１、ＶＲ２がそれぞれ指定されていたものとする。この場合、図２のベクトル演算器１０ｃ、１０ｄから加算器Ａ１が選択され、ベクトルレジスタＶＲ１に格納されている要素ａ０〜ａ７およびベクトルレジスタＶＲ２に格納されている要素ｘ０〜ｘ７が加算器Ａ１に順次送られる。そして、加算器Ａ１にて各要素ごとに加算が行われた後、その加算結果がベクトルレジスタＶＲ０に格納される。
【００３３】
図５は、ベクトル命令のデータ構造を示す図である。
図５において、ベクトル命令には、乗算や加算などの命令の種類を定義するオペコードｏｐｅｃｏｄｅおよびベクトル演算の実行回数を定義するリピートアマウントｒｐｔａｍｔが設けられている。また、ベクトル命令では、書き込み先のディスティネーションレジスタｄｓｔおよび読み出し先のソースレジスタｓｒｃ１、ｓｒｃ２を指定することができる。
【００３４】
そして、例えば、独立して加減算／シフト処理を行うことが可能な２つの加減算／シフト・ユニットＡ、Ｂがあるものとして、３２ビットの加減算／シフト命令を例にとって説明する。この場合、図４の加減算／シフト命令の２７ビット目が０、かつ０ビット目が０であるとすると、加減算／シフト・ユニットＡにて加減算／シフト命令が実行される。そして、この時の命令は、アセンブラで以下のように記述することができる。
【００３５】
ＡＤＤＷ［ｎ］  ％ＶＲ０，％ＶＲ２，％ＶＲ４
ここで、この命令では、ベクトルレジスタの記憶領域ＶＲ２、ＶＲ４にそれぞれ格納された値が加算され、その加算結果がベクトルレジスタの記憶領域ＶＲ０に書き込まれる。
なお、ＡＤＤＷは、ソースレジスタｓｒｃ１、ｓｒｃ２にそれぞれ格納されたワードを加算し、その加算結果をディスティネーションレジスタｄｓｔに書き込むことを意味している。そして、ｓｈｍａｔで指定されたビット数分だけ加算結果の算術右シフトを行うことができる。
【００３６】
また、図４の加減算／シフト命令の２７ビット目が０、かつ０ビット目が１であるとすると、加減算／シフト・ユニットＢにて加減算／シフト命令が実行される。そして、この時の命令は、アセンブラで以下のように記述することができる。
ＡＤＤＷ［ｎ］  ％ＶＲ１，％ＶＲ３，％ＶＲ５
ここで、この命令では、ベクトルレジスタの記憶領域ＶＲ３、ＶＲ５にそれぞれ格納された値が加算され、その加算結果がベクトルレジスタの記憶領域ＶＲ１に書き込まれる。
【００３７】
また、図４の加減算／シフト命令の２７ビット目が１であるとすると、加減算／シフト・ユニットＡ、Ｂの双方にて加減算／シフト命令が実行される。そして、この時の命令は、アセンブラで以下のように記述することができる。
ＡＤＤ２Ｗ［ｎ］  ％ＶＲ０，％ＶＲ２，％ＶＲ４
ここで、この命令では、ベクトルレジスタの記憶領域ＶＲ２、ＶＲ４にそれぞれ格納された値が加減算／シフト・ユニットＡにて加算され、その加算結果がベクトルレジスタの記憶領域ＶＲ０に書き込まれるとともに、ベクトルレジスタの記憶領域ＶＲ３、ＶＲ５にそれぞれ格納された値が加減算／シフト・ユニットＢにて加算され、その加算結果がベクトルレジスタの記憶領域ＶＲ１に書き込まれる。なお、ＡＤＤ２Ｗは、ＡＤＤＷのデュアル・ユニット命令の発行を意味している。
【００３８】
なお、上述した説明では、加減算／シフト命令を例にとって説明したが、イミディエイト加減算／シフト命令についても同様に適用することができる。
そして、図４の加減算／シフト命令の２７ビット目が１の場合、加減算／シフト命令のソースレジスタｓｒｃ１、ｓｒｃ２の指定領域の各最下位ビット（図４の加減算／シフト命令の５ビット目および１０ビット目）ならびにディスティネーションレジスタｄｓｔの指定領域の最下位ビット（図４の加減算／シフト命令の０ビット目）は必ず全てが０になる。このため、これらの３ビット分（図４の加減算／シフト命令の０ビット目、５ビット目および１０ビット目）は元々ハードウェアで使用する必要はなく、固定値として持たせることができる。
【００３９】
従って、加減算／シフト命令のソースレジスタｓｒｃ１、ｓｒｃ２の指定領域の各最下位ビットまたはディスティネーションレジスタｄｓｔの指定領域の最下位ビットに設定されるビット値を変更することで、加減算／シフト命令で指定される本来の処理を正常に実行させることを可能としつつ、その加減算／シフト命令で指定される処理とは異なる処理を実行させるためのモードをその加減算／シフト命令に付与することができ、１つの加減算／シフト命令で実行可能な処理にバリエーションを持たせることが可能となる。
【００４０】
例えば、加減算／シフト命令のソースレジスタｓｒｃ１の指定領域の最下位ビットに０を設定し、アセンブラで以下のように記述したものとする。
ＡＤＤ２Ｗ［ｎ］  ％ＶＲ０，％ＶＲ２，％ＶＲ４
この場合、ベクトルレジスタの記憶領域ＶＲ２、ＶＲ４にそれぞれ格納された値が加減算／シフト・ユニットＡにて加算され、その加算結果がベクトルレジスタの記憶領域ＶＲ０に書き込まれるとともに、ベクトルレジスタの記憶領域ＶＲ３、ＶＲ５にそれぞれ格納された値が加減算／シフト・ユニットＢにて加算され、その加算結果がベクトルレジスタの記憶領域ＶＲ１に書き込まれる。
【００４１】
例えば、加減算／シフト命令のソースレジスタｓｒｃ１の指定領域の最下位ビットに０を設定し、アセンブラで以下のように記述したものとする。
ＡＤＤ２Ｗ［ｎ］  ％ＶＲ０，％ＶＲ２，％ＶＲ４
この場合、加減算／シフト命令にて以下の処理を実行させることができる。
ＶＲ０←ＶＲ２＋ＶＲ４
ＶＲ１←ＶＲ３＋ＶＲ５
すわわち、ベクトルレジスタの記憶領域ＶＲ２、ＶＲ４にそれぞれ格納された値を加減算／シフト・ユニットＡにて加算させ、その加算結果をベクトルレジスタの記憶領域ＶＲ０に書き込ませるとともに、ベクトルレジスタの記憶領域ＶＲ３、ＶＲ５にそれぞれ格納された値を加減算／シフト・ユニットＢにて加算させ、その加算結果をベクトルレジスタの記憶領域ＶＲ１に書き込ませることができる。
【００４２】
また、例えば、加減算／シフト命令のソースレジスタｓｒｃ１の指定領域の最下位ビットに１を設定し、アセンブラで以下のように記述したものとする。
ＡＤＤ２Ｗ［ｎ］  ％ＶＲ０，％ＶＲ２，％ＶＲ４，／ｓｒｃ１ｅ
この場合、加減算／シフト命令にて以下の処理を実行させることができる。
ＶＲ０←ＶＲ２＋ＶＲ４
ＶＲ１←ＶＲ２＋ＶＲ５
すわわち、ベクトルレジスタの記憶領域ＶＲ２、ＶＲ４にそれぞれ格納された値を加減算／シフト・ユニットＡにて加算させ、その加算結果をベクトルレジスタの記憶領域ＶＲ０に書き込ませるとともに、ベクトルレジスタの記憶領域ＶＲ２、ＶＲ５にそれぞれ格納された値を加減算／シフト・ユニットＢにて加算させ、その加算結果をベクトルレジスタの記憶領域ＶＲ１に書き込ませることができる。
【００４３】
これにより、加減算／シフト命令で加減算／シフト・ユニットＢに対して奇数番目のレジスタが割り当てられている場合においても、その加減算／シフト命令のソースレジスタｓｒｃ１の指定領域の最下位ビットに１を変更することで、その加減算／シフト命令にて加減算／シフト・ユニットＢに対して偶数番目のレジスタを割り当てることができ、１つの加減算／シフト命令で実行可能な処理にバリエーションを持たせることが可能となる。
【００４４】
また、例えば、加減算／シフト命令のディスティネーションレジスタｄｓｔの指定領域の最下位ビットに０を設定し、アセンブラで以下のように記述したものとする。
ＡＤＤ２Ｗ［ｎ］  ％ＶＲ０，％ＶＲ２，％ＶＲ４
この場合、加減算／シフト命令にて以下の処理を実行させることができる。
ＶＲ０←ＶＲ２＋ＶＲ４
ＶＲ１←ＶＲ３＋ＶＲ５
すわわち、ベクトルレジスタの記憶領域ＶＲ２、ＶＲ４にそれぞれ格納された値を加減算／シフト・ユニットＡにて加算させ、その加算結果をベクトルレジスタの記憶領域ＶＲ０に書き込ませるとともに、ベクトルレジスタの記憶領域ＶＲ３、ＶＲ５にそれぞれ格納された値を加減算／シフト・ユニットＢにて加算させ、その加算結果をベクトルレジスタの記憶領域ＶＲ１に書き込ませることができる。
【００４５】
また、例えば、加減算／シフト命令のディスティネーションレジスタｄｓｔの指定領域の最下位ビットに１を設定し、アセンブラで以下のように記述したものとする。
ＡＤＤ２Ｗ［ｎ］  ％ＶＲ０，％ＶＲ２，％ＶＲ４，／ｄｓｔｅ
この場合、加減算／シフト命令にて以下の処理を実行させることができる。
ＶＲ０←ＶＲ２＋ＶＲ４
ＶＲ１←ＶＲ３−ＶＲ５
すわわち、ベクトルレジスタの記憶領域ＶＲ２、ＶＲ４にそれぞれ格納された値を加減算／シフト・ユニットＡにて加算させ、その加算結果をベクトルレジスタの記憶領域ＶＲ０に書き込ませるとともに、ベクトルレジスタの記憶領域ＶＲ３、ＶＲ５にそれぞれ格納された値を加減算／シフト・ユニットＢにて減算させ、その減算結果をベクトルレジスタの記憶領域ＶＲ１に書き込ませることができる。
【００４６】
これにより、加減算／シフト命令で加減算／シフト・ユニットＢに対して加算演算が指定されている場合においても、その加減算／シフト命令のディスティネーションレジスタｄｓｔの指定領域の最下位ビットに１を変更することで、その加減算／シフト命令にて加減算／シフト・ユニットＢに対して減算演算を実行させることができ、１つの加減算／シフト命令で実行可能な処理にバリエーションを持たせることが可能となる。
【００４７】
また、加減算／シフト命令のソースレジスタｓｒｃ１、ｓｒｃ２の指定領域の各最下位ビットおよびディスティネーションレジスタｄｓｔの指定領域の最下位ビットごとに意味を持たせるのではなく、これら３ビット分の組み合わせを使用して８通りのバリエーションを持たせることもできる。この場合、１つの加減算／シフト命令に８通りのモードを設定することができ、例えば、以下に示す（１）〜（９）の処理を任意に選択して実行させることができる。
【００４８】
（１）アセンブラで以下のように記述したものとする。
ＡＤＤ２Ｗ［ｎ］  ％ＶＲ０，％ＶＲ２，％ＶＲ４，／ｓｏｍｅ＿ｏｐｔｉｏｎ
この場合、加減算／シフト命令のモード設定にて以下の処理を実行させることができる。
ＶＲ０←ＶＲ２＋ＶＲ４
ＶＲ１←ＶＲ２＋ＶＲ５
すわわち、ベクトルレジスタの記憶領域ＶＲ２、ＶＲ４にそれぞれ格納された値を加減算／シフト・ユニットＡにて加算させ、その加算結果をベクトルレジスタの記憶領域ＶＲ０に書き込ませるとともに、ベクトルレジスタの記憶領域ＶＲ２、ＶＲ５にそれぞれ格納された値を加減算／シフト・ユニットＢにて加算させ、その加算結果をベクトルレジスタの記憶領域ＶＲ１に書き込ませることができる。
【００４９】
これにより、加減算／シフト命令において、加減算／シフト・ユニットＢに対してソースレジスタｓｒｃ１として奇数番目のレジスタが割り当てられている場合においても、その加減算／シフト命令のモードを変更することで、加減算／シフト・ユニットＢに対してソースレジスタｓｒｃ１として偶数番目のレジスタを割り当てることができる。
【００５０】
（２）アセンブラで以下のように記述したものとする。
ＡＤＤ２Ｗ［ｎ］  ％ＶＲ０，％ＶＲ２，％ＶＲ４，／ｓｏｍｅ＿ｏｐｔｉｏｎ
この場合、加減算／シフト命令のモード設定にて以下の処理を実行させることができる。
ＶＲ０←ＶＲ３＋ＶＲ４
ＶＲ１←ＶＲ３＋ＶＲ５
すわわち、ベクトルレジスタの記憶領域ＶＲ３、ＶＲ４にそれぞれ格納された値を加減算／シフト・ユニットＡにて加算させ、その加算結果をベクトルレジスタの記憶領域ＶＲ０に書き込ませるとともに、ベクトルレジスタの記憶領域ＶＲ３、ＶＲ５にそれぞれ格納された値を加減算／シフト・ユニットＢにて加算させ、その加算結果をベクトルレジスタの記憶領域ＶＲ１に書き込ませることができる。
【００５１】
これにより、加減算／シフト命令において、加減算／シフト・ユニットＡに対してソースレジスタｓｒｃ１として偶数番目のレジスタが割り当てられている場合においても、その加減算／シフト命令のモードを変更することで、加減算／シフト・ユニットＡに対してソースレジスタｓｒｃ１として奇数番目のレジスタを割り当てることができる。
【００５２】
（３）アセンブラで以下のように記述したものとする。
ＡＤＤ２Ｗ［ｎ］  ％ＶＲ０，％ＶＲ２，％ＶＲ４，／ｓｏｍｅ＿ｏｐｔｉｏｎ
この場合、加減算／シフト命令のモード設定にて以下の処理を実行させることができる。
ＶＲ０←ＶＲ２＋ＶＲ４
ＶＲ１←ＶＲ３＋ＶＲ４
すわわち、ベクトルレジスタの記憶領域ＶＲ２、ＶＲ４にそれぞれ格納された値を加減算／シフト・ユニットＡにて加算させ、その加算結果をベクトルレジスタの記憶領域ＶＲ０に書き込ませるとともに、ベクトルレジスタの記憶領域ＶＲ３、ＶＲ４にそれぞれ格納された値を加減算／シフト・ユニットＢにて加算させ、その加算結果をベクトルレジスタの記憶領域ＶＲ１に書き込ませることができる。
【００５３】
これにより、加減算／シフト命令において、加減算／シフト・ユニットＢに対してソースレジスタｓｒｃ２として奇数番目のレジスタが割り当てられている場合においても、その加減算／シフト命令のモードを変更することで、加減算／シフト・ユニットＢに対してソースレジスタｓｒｃ２として偶数番目のレジスタを割り当てることができる。
【００５４】
（４）アセンブラで以下のように記述したものとする。
ＡＤＤ２Ｗ［ｎ］  ％ＶＲ０，％ＶＲ２，％ＶＲ４，／ｓｏｍｅ＿ｏｐｔｉｏｎ
この場合、加減算／シフト命令のモード設定にて以下の処理を実行させることができる。
ＶＲ０←ＶＲ２＋ＶＲ５
ＶＲ１←ＶＲ３＋ＶＲ５
すわわち、ベクトルレジスタの記憶領域ＶＲ２、ＶＲ５にそれぞれ格納された値を加減算／シフト・ユニットＡにて加算させ、その加算結果をベクトルレジスタの記憶領域ＶＲ０に書き込ませるとともに、ベクトルレジスタの記憶領域ＶＲ３、ＶＲ５にそれぞれ格納された値を加減算／シフト・ユニットＢにて加算させ、その加算結果をベクトルレジスタの記憶領域ＶＲ１に書き込ませることができる。
【００５５】
これにより、加減算／シフト命令において、加減算／シフト・ユニットＡに対してソースレジスタｓｒｃ２として偶数番目のレジスタが割り当てられている場合においても、その加減算／シフト命令のモードを変更することで、加減算／シフト・ユニットＡに対してソースレジスタｓｒｃ２として奇数番目のレジスタを割り当てることができる。
【００５６】
（５）アセンブラで以下のように記述したものとする。
ＡＤＤ２Ｗ［ｎ］  ％ＶＲ０，％ＶＲ２，％ＶＲ４，／ｓｏｍｅ＿ｏｐｔｉｏｎ
この場合、加減算／シフト命令のモード設定にて以下の処理を実行させることができる。
ＶＲ０←ＶＲ２＋ＶＲ４
ＶＲ１←ＶＲ３−ＶＲ５
すわわち、ベクトルレジスタの記憶領域ＶＲ２、ＶＲ４にそれぞれ格納された値を加減算／シフト・ユニットＡにて加算させ、その加算結果をベクトルレジスタの記憶領域ＶＲ０に書き込ませるとともに、ベクトルレジスタの記憶領域ＶＲ３、ＶＲ５にそれぞれ格納された値を加減算／シフト・ユニットＢにて減算させ、その減算結果をベクトルレジスタの記憶領域ＶＲ１に書き込ませることができる。
【００５７】
これにより、加減算／シフト命令において、加減算／シフト・ユニットＢに対して加算演算が指定されている場合においても、その加減算／シフト命令のモードを変更することで、加減算／シフト・ユニットＢに対して減算演算を実行させることができる。
なお、上述した例では、アセンブラにて加算命令（ＡＤＤＷ）を指定した方法を例にとって説明したが、アセンブラにて減算命令（ＳＵＢＷ）を指定するようにしてもよく、この場合、加減算／シフト・ユニットＡにて減算処理を行わせるとともに、加減算／シフト・ユニットＢにて加算処理を行わせることができる。
【００５８】
（６）アセンブラで以下のように記述したものとする。
ＡＤＤ２Ｗ［ｎ］  ％ＶＲ０，％ＶＲ２，％ＶＲ４，／ｓｏｍｅ＿ｏｐｔｉｏｎ
この場合、加減算／シフト命令のモード設定にて以下の処理を実行させることができる。
ＶＲ０←ＶＲ２＋ＶＲ４（＝ＡＤＤＷ）
ＶＲ１ｈ←ＶＲ３ｈ＋ＶＲ５ｈ（＝ＡＤＤ２Ｈ）
すわわち、ベクトルレジスタの記憶領域ＶＲ２、ＶＲ４にそれぞれ格納されたフルワードを加減算／シフト・ユニットＡにて加算させ、その加算結果をベクトルレジスタの記憶領域ＶＲ０に書き込ませるとともに、ベクトルレジスタの記憶領域ＶＲ３ｈ、ＶＲ５ｈにそれぞれ格納されたハーフワードを加減算／シフト・ユニットＢにて加算させ、その加算結果をベクトルレジスタの記憶領域ＶＲ１ｈに書き込ませることができる。
【００５９】
これにより、加減算／シフト命令において、加減算／シフト・ユニットＢに対してフルワード演算が指定されている場合においても、その加減算／シフト命令のモードを変更することで、加減算／シフト・ユニットＢに対してハーフワード演算を実行させることができる。
【００６０】
（７）アセンブラで以下のように記述したものとする。
ＡＤＤ２Ｗ［ｎ］  ％ＶＲ０，％ＶＲ２，％ＶＲ４，／ｓｏｍｅ＿ｏｐｔｉｏｎ
この場合、加減算／シフト命令のモード設定にて以下の処理を実行させることができる。
偶数番目の要素：ＶＲ０←ＶＲ２＋ＶＲ４，ＶＲ１←ＶＲ３＋ＶＲ５
奇数番目の要素：ＶＲ０←ＶＲ２−ＶＲ４，ＶＲ１←ＶＲ３−ＶＲ５
すわわち、ベクトルレジスタの記憶領域ＶＲ２、ＶＲ４にそれぞれ格納された値を加減算／シフト・ユニットＡにて加算させ、その加算結果をベクトルレジスタの記憶領域ＶＲ０に書き込ませるとともに、ベクトルレジスタの記憶領域ＶＲ２、ＶＲ４にそれぞれ格納された値を加減算／シフト・ユニットＢにて減算させ、その減算結果をベクトルレジスタの記憶領域ＶＲ０に書き込ませることができる。さらに、ベクトルレジスタの記憶領域ＶＲ３、ＶＲ５にそれぞれ格納された値を加減算／シフト・ユニットＡにて加算させ、その加算結果をベクトルレジスタの記憶領域ＶＲ１に書き込ませるとともに、ベクトルレジスタの記憶領域ＶＲ３、ＶＲ５にそれぞれ格納された値を加減算／シフト・ユニットＢにて減算させ、その減算結果をベクトルレジスタの記憶領域ＶＲ１に書き込ませることができる。
【００６１】
これにより、加減算／シフト命令において、加減算／シフト・ユニットＡ、Ｂに対して加算演算が指定されている場合においても、その加減算／シフト命令のモードを変更することで、加減算／シフト・ユニットＡ、Ｂに対して加算演算と減算演算とを交互に実行させることができる。
【００６２】
（８）アセンブラで以下のように記述したものとする。
ＡＤＤ２Ｗ［ｎ］  ％ＶＲ０，％ＶＲ２，％ＶＲ４，／ｓｏｍｅ＿ｏｐｔｉｏｎ
この場合、加減算／シフト命令のモード設定にて以下の処理を実行させることができる。
下位３２ビット：ＶＲ０←ＶＲ２＋ＶＲ４（ＶＲ２＋ＶＲ４のキャリーを加減算／シフト・ユニットＢに伝播させる。）
上位３２ビット：ＶＲ１←ＶＲ３＋ＶＲ５
すわわち、ベクトルレジスタの記憶領域ＶＲ２、ＶＲ４にそれぞれ格納された値を加減算／シフト・ユニットＡにて加算させ、その加算結果をベクトルレジスタの記憶領域ＶＲ０に書き込ませるとともに、ベクトルレジスタの記憶領域ＶＲ３、ＶＲ５にそれぞれ格納された値を加減算／シフト・ユニットＢにて加算させ、その加算結果をベクトルレジスタの記憶領域ＶＲ１に書き込ませる。そして、加減算／シフト・ユニットＡにて得られた演算結果の３２ビット目のキャリーを減算／シフト・ユニットＢの最下位ビットに加算することができる。
【００６３】
これにより、加減算／シフト命令において、加減算／シフト・ユニットＡ、Ｂに対して加算演算が指定されている場合においても、その加減算／シフト命令のモードを変更することで、加減算／シフト・ユニットＡ、Ｂにてそれぞれ得られた３２ビットの加算結果から６４ビットの加算結果を得ることができる。
【００６４】
（９）加減算／シフト・ユニットＡ、Ｂにてそれぞれ得られた演算結果に関して、加減算／シフト・ユニットＡにて得られた演算結果の下位１６ビットと加減算／シフト・ユニットＢにて得られた演算結果の下位１６ビットとを入れ替えるようすることもできる。
（１０）また、（１）〜（９）の処理と組み合わせができない処理として、加減算／シフト命令のモード設定にてシフト量を設定することができる。
【００６５】
ここで、アセンブラで以下のように記述したものとする。
ＡＤＤ２Ｗ［ｎ］  ％ＶＲ０，％ＶＲ２，％ＶＲ４，／ｓｈｉｆｔ＝＃ｍ
この場合、加減算／シフト命令の空き領域の３ビットによって表現される０〜７をシフト量とすることで、以下の処理を実行させることができる。
ＶＲ０←（ＶＲ２＜＜ｍ）＋ＶＲ４
ＶＲ１←（ＶＲ３＜＜ｍ）＋ＶＲ５
すわわち、ベクトルレジスタの記憶領域ＶＲ２に格納された値をｍビット分だけシフトさせ、そのｍビット分だけシフトされた値とベクトルレジスタの記憶領域ＶＲ４に格納された値を加減算／シフト・ユニットＡにて加算させ、その加算結果をベクトルレジスタの記憶領域ＶＲ０に書き込ませる。また、ベクトルレジスタの記憶領域ＶＲ３に格納された値をｍビット分だけシフトさせ、そのｍビット分だけシフトされた値とベクトルレジスタの記憶領域ＶＲ５に格納された値を加減算／シフト・ユニットＢにて加算させ、その加算結果をベクトルレジスタの記憶領域ＶＲ１に書き込ませる。
【００６６】
これにより、加減算／シフト命令において、ソースレジスタｓｒｃ１に格納されている値のシフト量が指定されていない場合においても、その加減算／シフト命令のモードを変更することで、ソースレジスタｓｒｃ１に格納されている値をシフトさせてから、加減算／シフト・ユニットＡ、Ｂにて処理を行わせることができる。
【図面の簡単な説明】
【００６７】
【図１】一実施形態に係るコンピュータシステムの概略構成を示すブロック図。
【図２】図１のベクトル演算処理プロセッサ１００の概略構成を示すブロック図。
【図３】図２のレジスタ２０ａ、２０ｂの概略構成を示すブロック図。
【図４】図２のベクトル演算処理プロセッサ１００のベクトル加算処理を示す図。
【図５】ベクトル命令のデータ構造を示す図である。
【符号の説明】
【００６８】
１００  ベクトル処理プロセッサ、１００ａ  アクセス部、１  メモリアクセス部、２  ローカルメモリ、３  ＤＭＡ、４  データキャッシュメモリ、５  プログラムキャッシュメモリ、６  共有メモリ、１００ｂ  演算処理部、１０ａ、１０ｂ  スカラー演算器、１０ｃ、１０ｄ  ベクトル演算器、１１ａ、１１ｂ  乗算器、Ａ１、１１ｃ、１１ｄ  加算器、２０ａ  スカラーレジスタ、２０ｂ  ベクトルレジスタ、３０  フェッチ部、４０  デコード部、４０ａ  モード判定部、１１０  メインメモリ、１１１  プログラムテキスト領域、１１２  初期化済みデータ領域、１１３  未初期化データ領域、１１４  ヒープ領域、１１５  スタック領域、２００  アセンブリソースコード、２１０  アセンブラ、２２０  リンカ、２３０  実行プログラム、２４０  プログラムローダ、ＶＲ０〜ＶＲ２  ベクトルレジスタ
【図１】
2006260381.tif 000003
【図２】
2006260381.tif 000004
【図３】
2006260381.tif 000005
【図４】
2006260381.tif 000006
【図５】
2006260381.tif 000007