JP2006260381A - 演算処理装置 - Google Patents

演算処理装置 Download PDF

Info

Publication number
JP2006260381A
JP2006260381A JP2005079336A JP2005079336A JP2006260381A JP 2006260381 A JP2006260381 A JP 2006260381A JP 2005079336 A JP2005079336 A JP 2005079336A JP 2005079336 A JP2005079336 A JP 2005079336A JP 2006260381 A JP2006260381 A JP 2006260381A
Authority
JP
Japan
Prior art keywords
instruction
module
processing
mode
addition
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Withdrawn
Application number
JP2005079336A
Other languages
English (en)
Inventor
Norinao Hagiwara
典尚 萩原
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Seiko Epson Corp
Original Assignee
Seiko Epson Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Seiko Epson Corp filed Critical Seiko Epson Corp
Priority to JP2005079336A priority Critical patent/JP2006260381A/ja
Publication of JP2006260381A publication Critical patent/JP2006260381A/ja
Withdrawn legal-status Critical Current

Links

Images

Landscapes

  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Complex Calculations (AREA)

Abstract

【課題】回路規模の増大を抑制しつつ、1つの命令で実行可能な処理のバリエーションを増加させる。
【解決手段】デコード部40で解読される命令の所定位置に、その命令にモードを付与するためのビット値が設定し、モード判定部40aは、命令の所定位置に設定されたビット値に基づいて、その命令に付与されたモードを判定し、デコード部40は、命令に付与されたモードに基づいて、その命令で指定された処理を実行するベクトル演算器10c、10dを起動するとともに、その命令で指定された処理と異なる処理を実行するベクトル演算器10c、10dを起動するとともに、異なる読み出し先のベクトルレジスタ20bを各ベクトル演算器10c、10dに割り当てる。
【選択図】図2

Description

本発明は、演算処理装置に関し、特に、1つの命令で複数のベクトル演算処理ユニットを起動させる方法に適用して好適なものである。
ベクトル処理装置では、処理速度を上げるために、複数のベクトルレジスタと複数のベクトル演算器と複数のデータ転送回路とを設けることが行われている。
また、例えば、特許文献1には、同時に実行できるベクトル命令の数を増やすために、複数のベクトルレジスタとベクトル演算器とデータ転送回路を含むベクトル演算処理ユニットを複数用意し、1つのベクトル命令を発行する時に各ベクトル演算処理ユニットごとに処理されるベクトル要素数を指示することにより、全体として本来処理される要素数だけベクトル処理を行わせる方法が開示されている。
特開昭61−95477号公報
しかしながら、特許文献1に開示された方法では、ベクトル命令の要素数(n個)を分割して各演算処理ユニットに分配しているため、ベクトル命令の要素の分割や分配を司る回路が複雑化するという問題があった。また、特許文献1に開示された方法では、各演算処理ユニットでの処理やソースレジスタの指定にバリエーションを持たせられないため、処理の効率化を図るためには多数の命令を用意しなければならないという問題があった。
そこで、本発明の目的は、回路規模の増大を抑制しつつ、1つの命令で実行可能な処理のバリエーションを増加させることが可能な演算処理装置を提供することである。
上述した課題を解決するために、本発明の一態様に係る演算処理装置によれば、命令で指定された演算処理を行う複数のモジュールと、前記命令の所定位置に設定されたビット値に基づいて、前記命令に付与されたモードを判定するモード判定部とを備え、前記モードの判定結果に基づいて、前記命令で指定された処理と異なる処理を実行させることを特徴とする。
これにより、命令の所定位置に設定されるビット値を変更することで、種類の異なる複数の処理を1つの命令で実行させることができる。このため、1つの命令で実行可能な処理にバリエーションを持たせることが可能となり、回路規模の増大を抑制しつつ、処理の効率化を図ることが可能となるとともに、プログラミングの自由度を向上させることができる。
また、本発明の一態様に係る演算処理装置によれば、命令で指定された演算処理を行うモジュールと、前記モジュールで行われた処理結果の書き込み先である複数のディスティネーションレジスタと、前記モジュールで処理されるデータの読み出し先である複数のソースレジスタと、前記命令の所定位置に設定されたビット値に基づいて、前記命令に付与されたモードを判定するモード判定部とを備え、前記モードの判定結果に基づいて、前記命令で指定された読み出し先を変更することを特徴とする。
これにより、命令の所定位置に設定されるビット値を変更することで、複数のモジュールに異なるソースレジスタを1つの命令で割り当てることができ、1つの命令で実行可能な処理にバリエーションを持たせることが可能となる。
また、本発明の一態様に係る演算処理装置によれば、命令で指定された演算処理を行う複数のモジュールと、前記モジュールで行われた処理結果の書き込み先である複数のディスティネーションレジスタと、前記モジュールで処理されるデータの読み出し先である複数のソースレジスタと、前記命令の所定位置に設定されたビット値に基づいて、前記命令に付与されたモードを判定するモード判定部とを備え、前記モードの判定結果に基づいて、1つの命令ごとに複数のモジュールを起動することを特徴とする。
これにより、命令の所定位置に設定されるビット値を変更することで、種類の異なる複数のモジュールを1つの命令で起動させることができ、1つの命令で実行可能な処理にバリエーションを持たせることが可能となる。
また、本発明の一態様に係る演算処理装置によれば、前記ビット値は、前記ディスティネーションレジスタを指定する領域の最下位ビットまたは前記ソースレジスを指定する領域の最下位ビットに設定されることを特徴とする。
これにより、モード判定を行わせるためのビット値をハードウェアで未使用となっている領域に設定することができる。このため、命令で指定される本来の処理を正常に実行させることを可能としつつ、その命令で指定される処理とは異なる処理を実行させるためのモードをその命令に付与することができ、1つの命令で実行可能な処理にバリエーションを持たせることが可能となる。
また、本発明の一態様に係る演算処理装置によれば、前記モードの判定結果に基づいて、偶数番目のソースレジスタから読み出した値についての前記命令で指定された処理を第1モジュールに実行させ、前記第1モジュールによる処理結果を偶数番目のディスティネーションレジスタに格納するとともに、奇数番目のソースレジスタから読み出した値についての前記命令で指定された処理を第2モジュールに実行させ、前記第2モジュールによる処理結果を奇数番目のディスティネーションレジスタに格納することを特徴とする。
これにより、偶数番目のレジスタが専用に割り当てられるモジュールと、奇数番目のレジスタが専用に割り当てられるモジュールとを分けることができる。このため、ディスティネーションレジスタを指定する領域の最下位ビットおよびソースレジスを指定する領域の最下位ビットを空き領域とすることが可能となり、モード判定を行わせるためのビット値をハードウェアで未使用となっている領域に設定することができる。
また、本発明の一態様に係る演算処理装置によれば、前記モードの判定結果に基づいて、偶数番目のソースレジスタから読み出した値についての前記命令で指定された処理を第1モジュールに実行させ、前記第1モジュールによる処理結果を偶数番目のディスティネーションレジスタに格納するとともに、奇数番目および偶数番目のソースレジスタから読み出した値についての前記命令で指定された処理を第2モジュールに実行させ、前記第2モジュールによる処理結果を奇数番目のディスティネーションレジスタに格納することを特徴とする。
これにより、ある命令で第2モジュールに対して奇数番目のレジスタが割り当てられている場合においても、その命令の所定位置のビット値を変更することで、その同一の命令にて第2モジュールに対して偶数番目のレジスタを割り当てることができ、1つの命令で実行可能な処理にバリエーションを持たせることが可能となる。
また、本発明の一態様に係る演算処理装置によれば、前記モードの判定結果に基づいて、奇数番目および偶数番目のソースレジスタから読み出した値についての前記命令で指定された処理を第1モジュールに実行させ、前記第1モジュールによる処理結果を偶数番目のディスティネーションレジスタに格納するとともに、奇数番目のソースレジスタから読み出した値についての前記命令で指定された処理を第2モジュールに実行させ、前記第2モジュールによる処理結果を奇数番目のディスティネーションレジスタに格納することを特徴とする。
これにより、ある命令で第1モジュールに対して偶数番目のレジスタが割り当てられている場合においても、その命令の所定位置のビット値を変更することで、その同一の命令にて第1モジュールに対して奇数番目のレジスタを割り当てることができ、1つの命令で実行可能な処理にバリエーションを持たせることが可能となる。
また、本発明の一態様に係る演算処理装置によれば、前記モードの判定結果に基づいて、偶数番目のソースレジスタから読み出した値についての前記命令で指定された処理を第1モジュールに実行させ、前記第1モジュールによる処理結果を偶数番目のディスティネーションレジスタに格納するとともに、奇数番目のソースレジスタから読み出した値についての前記命令で指定された処理と異なる処理を第2モジュールに実行させ、前記第2モジュールによる処理結果を奇数番目のディスティネーションレジスタに格納することを特徴とする。
これにより、ある命令で第1モジュールに対して加算演算、乗算演算またはフルワード演算が指定されている場合においても、その命令の所定位置のビット値を変更することで、その同一の命令にて第2モジュールに対して減算演算、除算演算またはハーフワード演算を実行させることができ、1つの命令で実行可能な処理にバリエーションを持たせることが可能となる。
また、本発明の一態様に係る演算処理装置によれば、前記モードの判定結果に基づいて、前記第1モジュールと前記第2モジュールとに対して異なる処理を交互に行わせることを特徴とする。
これにより、偶数番目のレジスタの要素ごとに複数の異なる処理を実行させることが可能となるとともに、奇数番目のレジスタの要素ごとに複数の異なる処理を実行させることが可能となり、1つの命令で実行可能な処理にバリエーションを持たせることが可能となる。
また、本発明の一態様に係る演算処理装置によれば、前記モードの判定結果に基づいて、前記第1モジュールによる処理結果の最上位ビットのキャリーを前記第2モジュールによる処理結果の最下位ビットに加算することを特徴とする。
これにより、第1モジュールによる処理結果を下位ビット、第2モジュールによる処理結果を上位ビットとして、第1モジュールによる処理結果と第2モジュールによる処理結果とを1つの値に統合させることが可能となり、1つの命令で実行可能な処理にバリエーションを持たせることが可能となる。
また、本発明の一態様に係る演算処理装置によれば、前記モードの判定結果に基づいて、前記偶数番目のソースレジスから読み出された値および前記奇数番目のソースレジスから読み出された値を前記ビット値で表現される値だけシフトさせることを特徴とする。
これにより、命令の所定位置に設定されるビット値を組み合わせることでシフト量を変化させることが可能となり、1つの命令で指定可能なシフト量にバリエーションを持たせることが可能となる。
また、本発明の一態様に係る演算処理装置によれば、前記モードの判定結果に基づいて、第1モジュールによる処理結果の所定のビットと第2モジュールによる処理結果の所定のビットとを入れ替えることを特徴とする。
これにより、1つの命令で複数のモジュールに処理を実行させることが可能となるとともに、それらのモジュールで得られた所定のビットを入れ替えた結果を得ることが可能となり、1つの命令で実行可能な処理にバリエーションを持たせることが可能となる。
また、本発明の一態様に係る演算処理プログラムによれば、ベクトル演算処理ユニットに実行させる命令を解読するステップと、前記命令の所定位置に設定されたビット値に基づいて、前記命令に付与されたモードを判定するステップと、前記モードの判定結果に基づいて、前記命令で指定された処理を行う第1ベクトル演算処理ユニットを起動させるとともに、前記命令で指定された処理と異なる処理を行う第2ベクトル演算処理ユニットを起動させるステップとをコンピュータに実行させることを特徴とする。
これにより、命令の所定位置に設定されるビット値を変更することで、種類の異なる複数のモジュールを1つの命令で起動させることができ、1つの命令で実行可能な処理にバリエーションを持たせることが可能となる。
以下、本発明の実施形態に係る演算処理装置について図面を参照しながら説明する。なお、以下の実施形態では、図1のコンピュータシステムにおいて、複数の演算器を備える図2のベクトル演算処理プロセッサ100の各演算器を並列に動作させることによりパイプライン処理を行う場合を例にとって説明する。
図1は、本発明の一実施形態に係るコンピュータシステムの概略構成を示すブロック図である。
図1において、コンピュータシステムには、複数の演算器を備えるベクトル演算処理プロセッサ100、所定領域にあらかじめベクトル演算処理プロセッサ100の制御プログラム等を格納するメインメモリ110、データを入力可能なヒューマンインターフェースとしての入力部120、ディスプレイ等のデータを出力可能な出力部130、ネットワーク等を介して外部との通信を行う通信部140が設けられている。
ここで、メインメモリ110には、プログラムを格納するプログラム・テキスト領域111、定数などのデータを予め格納する初期化済みデータ領域112、定数などのデータを格納するための事前に確保された未初期化データ領域113、プログラム実行時に動的に確保されるヒープ領域114およびスタック領域115ならびにその他論理的に区分された記憶領域を有している。
そして、制御プログラムは、ベクトル演算処理プロセッサ100が直接実行可能な低水準言語(例えば、機械語)で構成されており、高水準言語(例えば、C言語)により記述されたアセンブリソースコード200を、アセンブラ210およびリンカ220からなる命令コード生成系により低水準言語にコンパイルし、実行プログラム230として生成される。そして、生成された制御プログラムは、図示しないハードディスク等の補助記憶装置に格納されるが、ベクトル演算処理プロセッサ100が実行するときは、プログラムローダ240によりメインメモリ110の記憶領域のうちプログラム・テキスト領域111に配置され、実行可能な状態に置かれる。なお、アセンブラ210、リンカ220およびプログラムローダ240は、一般にソフトウェアにより構成することができる。
図2は、図1のベクトル演算処理プロセッサ100の概略構成を示すブロック図である。
図2において、ベクトル演算処理プロセッサ100には、メインメモリ110に対してアクセスを行うアクセス部100aおよびアクセス部100aを介して読み出された命令コードに基づいて並列演算処理を行う演算処理部100bが設けられている。
そして、アクセス部100aは、汎用外部バス111を介してメインメモリ110にアクセスするメモリアクセス部1と、演算処理部100b自体が使用可能なローカルメモリ2と、ローカルメモリ2とメインメモリ110との間でデータ転送を行うDMA3と、データキャッシュを行うデータキャッシュメモリ4と、プログラムキャッシュを行うプログラムキャッシュメモリ5と、演算処理部100bおよびその他のモジュールが共用して使用可能な共有メモリ6とを備えている。ここで、ローカルメモリ2、キャッシュメモリ4、5および共有メモリ6は、その一端がメモリアクセス部1に接続され、DMA3、キャッシュメモリ4、5および共有メモリ6は、その他端が汎用外部バス111に接続されている。
演算処理部100bは、スカラー演算を行う複数のスカラー演算器10a、10bと、ベクトル演算を行う複数のベクトル演算器10c、10dと、スカラー演算器10a、10bがスカラー演算に利用するスカラーレジスタ20aと、ベクトル演算器10c、10dがベクトル演算に利用するベクトルレジスタ20bと、メモリアクセス部1を介してメインメモリ110およびプログラムキャッシュ5から命令を読み出すフェッチ部30と、フェッチ部30で読み出した命令の内容を解読するデコード部40とを備え、デコード部40は、モード判定部40aを備えている。そして、デコード部40は、解読した命令に基づいて、スカラー演算器10a、10b、ベクトル演算器10c、10d、スカラーレジスタ20aおよびベクトルレジスタ20bに実行ユニット制御信号を出力し、これらのユニットを起動することにより、命令で指定される処理をこれらのユニットに実行させることができる。
ここで、デコード部40で解読される命令の所定位置には、その命令にモードを付与するためのビット値が設定することができる。そして、モード判定部40aは、命令の所定位置に設定されたビット値に基づいて、その命令に付与されたモードを判定することができる。そして、デコード部40は、命令に付与されたモードに基づいて、その命令で指定された処理を実行するベクトル演算器10c、10dを起動するとともに、その命令で指定された処理と異なる処理を実行するベクトル演算器10c、10dを起動することができる。また、デコード部40は、命令に付与されたモードに基づいて、複数のベクトル演算器10c、10dを起動するとともに、異なる読み出し先のベクトルレジスタ20bを各ベクトル演算器10c、10dに割り当てることができる。
図3は、図2のスカラーレジスタ20aおよびベクトルレジスタ20bの概略構成を示すブロック図である。
図3において、スカラーレジスタ20aには、例えば、32ビット分のデータをそれぞれ記憶する記憶領域SR0〜SR15を16本だけ設けることができる。また、例えば、ベクトルの要素数が8であるとすると、32ビット分のデータをそれぞれ記憶する8個の記憶領域VR0[0]〜VR0[7]で1本分のベクトルレジスタを構成することができる。そして、ベクトルレジスタ20bには、例えば、32ビット分のデータをそれぞれ記憶する64個の記憶領域VR0[0]〜VR0[7]、VR1[0]〜VR1[7]、VR2[0]〜VR2[7]、VR3[0]〜VR3[7]、VR4[0]〜VR4[7]、VR5[0]〜VR5[7]、VR6[0]〜VR6[7]、VR7[0]〜VR7[7]を設けることで、8本分のベクトルレジスタを設けることができる。
図4は、図2のベクトル演算処理プロセッサ100のベクトル加算処理を示す図である。
図4において、ベクトル命令において、例えば、オペコードopecodeにて加算が指定され、リピートアマウントrptamtで8が指定され、ディスティネーションレジスタdstとして図3のベクトルレジスタVR0が指定され、ソースレジスタsrc1、src2として図3のベクトルレジスタVR1、VR2がそれぞれ指定されていたものとする。この場合、図2のベクトル演算器10c、10dから加算器A1が選択され、ベクトルレジスタVR1に格納されている要素a0〜a7およびベクトルレジスタVR2に格納されている要素x0〜x7が加算器A1に順次送られる。そして、加算器A1にて各要素ごとに加算が行われた後、その加算結果がベクトルレジスタVR0に格納される。
図5は、ベクトル命令のデータ構造を示す図である。
図5において、ベクトル命令には、乗算や加算などの命令の種類を定義するオペコードopecodeおよびベクトル演算の実行回数を定義するリピートアマウントrptamtが設けられている。また、ベクトル命令では、書き込み先のディスティネーションレジスタdstおよび読み出し先のソースレジスタsrc1、src2を指定することができる。
そして、例えば、独立して加減算/シフト処理を行うことが可能な2つの加減算/シフト・ユニットA、Bがあるものとして、32ビットの加減算/シフト命令を例にとって説明する。この場合、図4の加減算/シフト命令の27ビット目が0、かつ0ビット目が0であるとすると、加減算/シフト・ユニットAにて加減算/シフト命令が実行される。そして、この時の命令は、アセンブラで以下のように記述することができる。
ADDW[n] %VR0,%VR2,%VR4
ここで、この命令では、ベクトルレジスタの記憶領域VR2、VR4にそれぞれ格納された値が加算され、その加算結果がベクトルレジスタの記憶領域VR0に書き込まれる。
なお、ADDWは、ソースレジスタsrc1、src2にそれぞれ格納されたワードを加算し、その加算結果をディスティネーションレジスタdstに書き込むことを意味している。そして、shmatで指定されたビット数分だけ加算結果の算術右シフトを行うことができる。
また、図4の加減算/シフト命令の27ビット目が0、かつ0ビット目が1であるとすると、加減算/シフト・ユニットBにて加減算/シフト命令が実行される。そして、この時の命令は、アセンブラで以下のように記述することができる。
ADDW[n] %VR1,%VR3,%VR5
ここで、この命令では、ベクトルレジスタの記憶領域VR3、VR5にそれぞれ格納された値が加算され、その加算結果がベクトルレジスタの記憶領域VR1に書き込まれる。
また、図4の加減算/シフト命令の27ビット目が1であるとすると、加減算/シフト・ユニットA、Bの双方にて加減算/シフト命令が実行される。そして、この時の命令は、アセンブラで以下のように記述することができる。
ADD2W[n] %VR0,%VR2,%VR4
ここで、この命令では、ベクトルレジスタの記憶領域VR2、VR4にそれぞれ格納された値が加減算/シフト・ユニットAにて加算され、その加算結果がベクトルレジスタの記憶領域VR0に書き込まれるとともに、ベクトルレジスタの記憶領域VR3、VR5にそれぞれ格納された値が加減算/シフト・ユニットBにて加算され、その加算結果がベクトルレジスタの記憶領域VR1に書き込まれる。なお、ADD2Wは、ADDWのデュアル・ユニット命令の発行を意味している。
なお、上述した説明では、加減算/シフト命令を例にとって説明したが、イミディエイト加減算/シフト命令についても同様に適用することができる。
そして、図4の加減算/シフト命令の27ビット目が1の場合、加減算/シフト命令のソースレジスタsrc1、src2の指定領域の各最下位ビット(図4の加減算/シフト命令の5ビット目および10ビット目)ならびにディスティネーションレジスタdstの指定領域の最下位ビット(図4の加減算/シフト命令の0ビット目)は必ず全てが0になる。このため、これらの3ビット分(図4の加減算/シフト命令の0ビット目、5ビット目および10ビット目)は元々ハードウェアで使用する必要はなく、固定値として持たせることができる。
従って、加減算/シフト命令のソースレジスタsrc1、src2の指定領域の各最下位ビットまたはディスティネーションレジスタdstの指定領域の最下位ビットに設定されるビット値を変更することで、加減算/シフト命令で指定される本来の処理を正常に実行させることを可能としつつ、その加減算/シフト命令で指定される処理とは異なる処理を実行させるためのモードをその加減算/シフト命令に付与することができ、1つの加減算/シフト命令で実行可能な処理にバリエーションを持たせることが可能となる。
例えば、加減算/シフト命令のソースレジスタsrc1の指定領域の最下位ビットに0を設定し、アセンブラで以下のように記述したものとする。
ADD2W[n] %VR0,%VR2,%VR4
この場合、ベクトルレジスタの記憶領域VR2、VR4にそれぞれ格納された値が加減算/シフト・ユニットAにて加算され、その加算結果がベクトルレジスタの記憶領域VR0に書き込まれるとともに、ベクトルレジスタの記憶領域VR3、VR5にそれぞれ格納された値が加減算/シフト・ユニットBにて加算され、その加算結果がベクトルレジスタの記憶領域VR1に書き込まれる。
例えば、加減算/シフト命令のソースレジスタsrc1の指定領域の最下位ビットに0を設定し、アセンブラで以下のように記述したものとする。
ADD2W[n] %VR0,%VR2,%VR4
この場合、加減算/シフト命令にて以下の処理を実行させることができる。
VR0←VR2+VR4
VR1←VR3+VR5
すわわち、ベクトルレジスタの記憶領域VR2、VR4にそれぞれ格納された値を加減算/シフト・ユニットAにて加算させ、その加算結果をベクトルレジスタの記憶領域VR0に書き込ませるとともに、ベクトルレジスタの記憶領域VR3、VR5にそれぞれ格納された値を加減算/シフト・ユニットBにて加算させ、その加算結果をベクトルレジスタの記憶領域VR1に書き込ませることができる。
また、例えば、加減算/シフト命令のソースレジスタsrc1の指定領域の最下位ビットに1を設定し、アセンブラで以下のように記述したものとする。
ADD2W[n] %VR0,%VR2,%VR4,/src1e
この場合、加減算/シフト命令にて以下の処理を実行させることができる。
VR0←VR2+VR4
VR1←VR2+VR5
すわわち、ベクトルレジスタの記憶領域VR2、VR4にそれぞれ格納された値を加減算/シフト・ユニットAにて加算させ、その加算結果をベクトルレジスタの記憶領域VR0に書き込ませるとともに、ベクトルレジスタの記憶領域VR2、VR5にそれぞれ格納された値を加減算/シフト・ユニットBにて加算させ、その加算結果をベクトルレジスタの記憶領域VR1に書き込ませることができる。
これにより、加減算/シフト命令で加減算/シフト・ユニットBに対して奇数番目のレジスタが割り当てられている場合においても、その加減算/シフト命令のソースレジスタsrc1の指定領域の最下位ビットに1を変更することで、その加減算/シフト命令にて加減算/シフト・ユニットBに対して偶数番目のレジスタを割り当てることができ、1つの加減算/シフト命令で実行可能な処理にバリエーションを持たせることが可能となる。
また、例えば、加減算/シフト命令のディスティネーションレジスタdstの指定領域の最下位ビットに0を設定し、アセンブラで以下のように記述したものとする。
ADD2W[n] %VR0,%VR2,%VR4
この場合、加減算/シフト命令にて以下の処理を実行させることができる。
VR0←VR2+VR4
VR1←VR3+VR5
すわわち、ベクトルレジスタの記憶領域VR2、VR4にそれぞれ格納された値を加減算/シフト・ユニットAにて加算させ、その加算結果をベクトルレジスタの記憶領域VR0に書き込ませるとともに、ベクトルレジスタの記憶領域VR3、VR5にそれぞれ格納された値を加減算/シフト・ユニットBにて加算させ、その加算結果をベクトルレジスタの記憶領域VR1に書き込ませることができる。
また、例えば、加減算/シフト命令のディスティネーションレジスタdstの指定領域の最下位ビットに1を設定し、アセンブラで以下のように記述したものとする。
ADD2W[n] %VR0,%VR2,%VR4,/dste
この場合、加減算/シフト命令にて以下の処理を実行させることができる。
VR0←VR2+VR4
VR1←VR3−VR5
すわわち、ベクトルレジスタの記憶領域VR2、VR4にそれぞれ格納された値を加減算/シフト・ユニットAにて加算させ、その加算結果をベクトルレジスタの記憶領域VR0に書き込ませるとともに、ベクトルレジスタの記憶領域VR3、VR5にそれぞれ格納された値を加減算/シフト・ユニットBにて減算させ、その減算結果をベクトルレジスタの記憶領域VR1に書き込ませることができる。
これにより、加減算/シフト命令で加減算/シフト・ユニットBに対して加算演算が指定されている場合においても、その加減算/シフト命令のディスティネーションレジスタdstの指定領域の最下位ビットに1を変更することで、その加減算/シフト命令にて加減算/シフト・ユニットBに対して減算演算を実行させることができ、1つの加減算/シフト命令で実行可能な処理にバリエーションを持たせることが可能となる。
また、加減算/シフト命令のソースレジスタsrc1、src2の指定領域の各最下位ビットおよびディスティネーションレジスタdstの指定領域の最下位ビットごとに意味を持たせるのではなく、これら3ビット分の組み合わせを使用して8通りのバリエーションを持たせることもできる。この場合、1つの加減算/シフト命令に8通りのモードを設定することができ、例えば、以下に示す(1)〜(9)の処理を任意に選択して実行させることができる。
(1)アセンブラで以下のように記述したものとする。
ADD2W[n] %VR0,%VR2,%VR4,/some_option
この場合、加減算/シフト命令のモード設定にて以下の処理を実行させることができる。
VR0←VR2+VR4
VR1←VR2+VR5
すわわち、ベクトルレジスタの記憶領域VR2、VR4にそれぞれ格納された値を加減算/シフト・ユニットAにて加算させ、その加算結果をベクトルレジスタの記憶領域VR0に書き込ませるとともに、ベクトルレジスタの記憶領域VR2、VR5にそれぞれ格納された値を加減算/シフト・ユニットBにて加算させ、その加算結果をベクトルレジスタの記憶領域VR1に書き込ませることができる。
これにより、加減算/シフト命令において、加減算/シフト・ユニットBに対してソースレジスタsrc1として奇数番目のレジスタが割り当てられている場合においても、その加減算/シフト命令のモードを変更することで、加減算/シフト・ユニットBに対してソースレジスタsrc1として偶数番目のレジスタを割り当てることができる。
(2)アセンブラで以下のように記述したものとする。
ADD2W[n] %VR0,%VR2,%VR4,/some_option
この場合、加減算/シフト命令のモード設定にて以下の処理を実行させることができる。
VR0←VR3+VR4
VR1←VR3+VR5
すわわち、ベクトルレジスタの記憶領域VR3、VR4にそれぞれ格納された値を加減算/シフト・ユニットAにて加算させ、その加算結果をベクトルレジスタの記憶領域VR0に書き込ませるとともに、ベクトルレジスタの記憶領域VR3、VR5にそれぞれ格納された値を加減算/シフト・ユニットBにて加算させ、その加算結果をベクトルレジスタの記憶領域VR1に書き込ませることができる。
これにより、加減算/シフト命令において、加減算/シフト・ユニットAに対してソースレジスタsrc1として偶数番目のレジスタが割り当てられている場合においても、その加減算/シフト命令のモードを変更することで、加減算/シフト・ユニットAに対してソースレジスタsrc1として奇数番目のレジスタを割り当てることができる。
(3)アセンブラで以下のように記述したものとする。
ADD2W[n] %VR0,%VR2,%VR4,/some_option
この場合、加減算/シフト命令のモード設定にて以下の処理を実行させることができる。
VR0←VR2+VR4
VR1←VR3+VR4
すわわち、ベクトルレジスタの記憶領域VR2、VR4にそれぞれ格納された値を加減算/シフト・ユニットAにて加算させ、その加算結果をベクトルレジスタの記憶領域VR0に書き込ませるとともに、ベクトルレジスタの記憶領域VR3、VR4にそれぞれ格納された値を加減算/シフト・ユニットBにて加算させ、その加算結果をベクトルレジスタの記憶領域VR1に書き込ませることができる。
これにより、加減算/シフト命令において、加減算/シフト・ユニットBに対してソースレジスタsrc2として奇数番目のレジスタが割り当てられている場合においても、その加減算/シフト命令のモードを変更することで、加減算/シフト・ユニットBに対してソースレジスタsrc2として偶数番目のレジスタを割り当てることができる。
(4)アセンブラで以下のように記述したものとする。
ADD2W[n] %VR0,%VR2,%VR4,/some_option
この場合、加減算/シフト命令のモード設定にて以下の処理を実行させることができる。
VR0←VR2+VR5
VR1←VR3+VR5
すわわち、ベクトルレジスタの記憶領域VR2、VR5にそれぞれ格納された値を加減算/シフト・ユニットAにて加算させ、その加算結果をベクトルレジスタの記憶領域VR0に書き込ませるとともに、ベクトルレジスタの記憶領域VR3、VR5にそれぞれ格納された値を加減算/シフト・ユニットBにて加算させ、その加算結果をベクトルレジスタの記憶領域VR1に書き込ませることができる。
これにより、加減算/シフト命令において、加減算/シフト・ユニットAに対してソースレジスタsrc2として偶数番目のレジスタが割り当てられている場合においても、その加減算/シフト命令のモードを変更することで、加減算/シフト・ユニットAに対してソースレジスタsrc2として奇数番目のレジスタを割り当てることができる。
(5)アセンブラで以下のように記述したものとする。
ADD2W[n] %VR0,%VR2,%VR4,/some_option
この場合、加減算/シフト命令のモード設定にて以下の処理を実行させることができる。
VR0←VR2+VR4
VR1←VR3−VR5
すわわち、ベクトルレジスタの記憶領域VR2、VR4にそれぞれ格納された値を加減算/シフト・ユニットAにて加算させ、その加算結果をベクトルレジスタの記憶領域VR0に書き込ませるとともに、ベクトルレジスタの記憶領域VR3、VR5にそれぞれ格納された値を加減算/シフト・ユニットBにて減算させ、その減算結果をベクトルレジスタの記憶領域VR1に書き込ませることができる。
これにより、加減算/シフト命令において、加減算/シフト・ユニットBに対して加算演算が指定されている場合においても、その加減算/シフト命令のモードを変更することで、加減算/シフト・ユニットBに対して減算演算を実行させることができる。
なお、上述した例では、アセンブラにて加算命令(ADDW)を指定した方法を例にとって説明したが、アセンブラにて減算命令(SUBW)を指定するようにしてもよく、この場合、加減算/シフト・ユニットAにて減算処理を行わせるとともに、加減算/シフト・ユニットBにて加算処理を行わせることができる。
(6)アセンブラで以下のように記述したものとする。
ADD2W[n] %VR0,%VR2,%VR4,/some_option
この場合、加減算/シフト命令のモード設定にて以下の処理を実行させることができる。
VR0←VR2+VR4(=ADDW)
VR1h←VR3h+VR5h(=ADD2H)
すわわち、ベクトルレジスタの記憶領域VR2、VR4にそれぞれ格納されたフルワードを加減算/シフト・ユニットAにて加算させ、その加算結果をベクトルレジスタの記憶領域VR0に書き込ませるとともに、ベクトルレジスタの記憶領域VR3h、VR5hにそれぞれ格納されたハーフワードを加減算/シフト・ユニットBにて加算させ、その加算結果をベクトルレジスタの記憶領域VR1hに書き込ませることができる。
これにより、加減算/シフト命令において、加減算/シフト・ユニットBに対してフルワード演算が指定されている場合においても、その加減算/シフト命令のモードを変更することで、加減算/シフト・ユニットBに対してハーフワード演算を実行させることができる。
(7)アセンブラで以下のように記述したものとする。
ADD2W[n] %VR0,%VR2,%VR4,/some_option
この場合、加減算/シフト命令のモード設定にて以下の処理を実行させることができる。
偶数番目の要素:VR0←VR2+VR4,VR1←VR3+VR5
奇数番目の要素:VR0←VR2−VR4,VR1←VR3−VR5
すわわち、ベクトルレジスタの記憶領域VR2、VR4にそれぞれ格納された値を加減算/シフト・ユニットAにて加算させ、その加算結果をベクトルレジスタの記憶領域VR0に書き込ませるとともに、ベクトルレジスタの記憶領域VR2、VR4にそれぞれ格納された値を加減算/シフト・ユニットBにて減算させ、その減算結果をベクトルレジスタの記憶領域VR0に書き込ませることができる。さらに、ベクトルレジスタの記憶領域VR3、VR5にそれぞれ格納された値を加減算/シフト・ユニットAにて加算させ、その加算結果をベクトルレジスタの記憶領域VR1に書き込ませるとともに、ベクトルレジスタの記憶領域VR3、VR5にそれぞれ格納された値を加減算/シフト・ユニットBにて減算させ、その減算結果をベクトルレジスタの記憶領域VR1に書き込ませることができる。
これにより、加減算/シフト命令において、加減算/シフト・ユニットA、Bに対して加算演算が指定されている場合においても、その加減算/シフト命令のモードを変更することで、加減算/シフト・ユニットA、Bに対して加算演算と減算演算とを交互に実行させることができる。
(8)アセンブラで以下のように記述したものとする。
ADD2W[n] %VR0,%VR2,%VR4,/some_option
この場合、加減算/シフト命令のモード設定にて以下の処理を実行させることができる。
下位32ビット:VR0←VR2+VR4(VR2+VR4のキャリーを加減算/シフト・ユニットBに伝播させる。)
上位32ビット:VR1←VR3+VR5
すわわち、ベクトルレジスタの記憶領域VR2、VR4にそれぞれ格納された値を加減算/シフト・ユニットAにて加算させ、その加算結果をベクトルレジスタの記憶領域VR0に書き込ませるとともに、ベクトルレジスタの記憶領域VR3、VR5にそれぞれ格納された値を加減算/シフト・ユニットBにて加算させ、その加算結果をベクトルレジスタの記憶領域VR1に書き込ませる。そして、加減算/シフト・ユニットAにて得られた演算結果の32ビット目のキャリーを減算/シフト・ユニットBの最下位ビットに加算することができる。
これにより、加減算/シフト命令において、加減算/シフト・ユニットA、Bに対して加算演算が指定されている場合においても、その加減算/シフト命令のモードを変更することで、加減算/シフト・ユニットA、Bにてそれぞれ得られた32ビットの加算結果から64ビットの加算結果を得ることができる。
(9)加減算/シフト・ユニットA、Bにてそれぞれ得られた演算結果に関して、加減算/シフト・ユニットAにて得られた演算結果の下位16ビットと加減算/シフト・ユニットBにて得られた演算結果の下位16ビットとを入れ替えるようすることもできる。
(10)また、(1)〜(9)の処理と組み合わせができない処理として、加減算/シフト命令のモード設定にてシフト量を設定することができる。
ここで、アセンブラで以下のように記述したものとする。
ADD2W[n] %VR0,%VR2,%VR4,/shift=#m
この場合、加減算/シフト命令の空き領域の3ビットによって表現される0〜7をシフト量とすることで、以下の処理を実行させることができる。
VR0←(VR2<<m)+VR4
VR1←(VR3<<m)+VR5
すわわち、ベクトルレジスタの記憶領域VR2に格納された値をmビット分だけシフトさせ、そのmビット分だけシフトされた値とベクトルレジスタの記憶領域VR4に格納された値を加減算/シフト・ユニットAにて加算させ、その加算結果をベクトルレジスタの記憶領域VR0に書き込ませる。また、ベクトルレジスタの記憶領域VR3に格納された値をmビット分だけシフトさせ、そのmビット分だけシフトされた値とベクトルレジスタの記憶領域VR5に格納された値を加減算/シフト・ユニットBにて加算させ、その加算結果をベクトルレジスタの記憶領域VR1に書き込ませる。
これにより、加減算/シフト命令において、ソースレジスタsrc1に格納されている値のシフト量が指定されていない場合においても、その加減算/シフト命令のモードを変更することで、ソースレジスタsrc1に格納されている値をシフトさせてから、加減算/シフト・ユニットA、Bにて処理を行わせることができる。
一実施形態に係るコンピュータシステムの概略構成を示すブロック図。 図1のベクトル演算処理プロセッサ100の概略構成を示すブロック図。 図2のレジスタ20a、20bの概略構成を示すブロック図。 図2のベクトル演算処理プロセッサ100のベクトル加算処理を示す図。 ベクトル命令のデータ構造を示す図である。
符号の説明
100 ベクトル処理プロセッサ、100a アクセス部、1 メモリアクセス部、2 ローカルメモリ、3 DMA、4 データキャッシュメモリ、5 プログラムキャッシュメモリ、6 共有メモリ、100b 演算処理部、10a、10b スカラー演算器、10c、10d ベクトル演算器、11a、11b 乗算器、A1、11c、11d 加算器、20a スカラーレジスタ、20b ベクトルレジスタ、30 フェッチ部、40 デコード部、40a モード判定部、110 メインメモリ、111 プログラムテキスト領域、112 初期化済みデータ領域、113 未初期化データ領域、114 ヒープ領域、115 スタック領域、200 アセンブリソースコード、210 アセンブラ、220 リンカ、230 実行プログラム、240 プログラムローダ、VR0〜VR2 ベクトルレジスタ

Claims (13)

  1. 命令で指定された演算処理を行う複数のモジュールと、
    前記命令の所定位置に設定されたビット値に基づいて、前記命令に付与されたモードを判定するモード判定部とを備え、
    前記モードの判定結果に基づいて、前記命令で指定された処理と異なる処理を実行させることを特徴とする演算処理装置。
  2. 命令で指定された演算処理を行うモジュールと、
    前記モジュールで行われた処理結果の書き込み先である複数のディスティネーションレジスタと、
    前記モジュールで処理されるデータの読み出し先である複数のソースレジスタと、
    前記命令の所定位置に設定されたビット値に基づいて、前記命令に付与されたモードを判定するモード判定部とを備え、
    前記モードの判定結果に基づいて、前記命令で指定された読み出し先を変更することを特徴とする演算処理装置。
  3. 命令で指定された演算処理を行う複数のモジュールと、
    前記モジュールで行われた処理結果の書き込み先である複数のディスティネーションレジスタと、
    前記モジュールで処理されるデータの読み出し先である複数のソースレジスタと、
    前記命令の所定位置に設定されたビット値に基づいて、前記命令に付与されたモードを判定するモード判定部とを備え、
    前記モードの判定結果に基づいて、1つの命令ごとに複数のモジュールを起動することを特徴とする演算処理装置。
  4. 前記ビット値は、
    前記ディスティネーションレジスタを指定する領域の最下位ビットまたは前記ソースレジスを指定する領域の最下位ビットに設定されることを特徴とする請求項3記載の演算処理装置。
  5. 前記モードの判定結果に基づいて、偶数番目のソースレジスタから読み出した値についての前記命令で指定された処理を第1モジュールに実行させ、前記第1モジュールによる処理結果を偶数番目のディスティネーションレジスタに格納するとともに、奇数番目のソースレジスタから読み出した値についての前記命令で指定された処理を第2モジュールに実行させ、前記第2モジュールによる処理結果を奇数番目のディスティネーションレジスタに格納することを特徴とする請求項3または4記載の演算処理装置。
  6. 前記モードの判定結果に基づいて、偶数番目のソースレジスタから読み出した値についての前記命令で指定された処理を第1モジュールに実行させ、前記第1モジュールによる処理結果を偶数番目のディスティネーションレジスタに格納するとともに、奇数番目および偶数番目のソースレジスタから読み出した値についての前記命令で指定された処理を第2モジュールに実行させ、前記第2モジュールによる処理結果を奇数番目のディスティネーションレジスタに格納することを特徴とする請求項3から5のいずれか1項記載の演算処理装置。
  7. 前記モードの判定結果に基づいて、奇数番目および偶数番目のソースレジスタから読み出した値についての前記命令で指定された処理を第1モジュールに実行させ、前記第1モジュールによる処理結果を偶数番目のディスティネーションレジスタに格納するとともに、奇数番目のソースレジスタから読み出した値についての前記命令で指定された処理を第2モジュールに実行させ、前記第2モジュールによる処理結果を奇数番目のディスティネーションレジスタに格納することを特徴とする請求項3から6のいずれか1項記載の演算処理装置。
  8. 前記モードの判定結果に基づいて、偶数番目のソースレジスタから読み出した値についての前記命令で指定された処理を第1モジュールに実行させ、前記第1モジュールによる処理結果を偶数番目のディスティネーションレジスタに格納するとともに、奇数番目のソースレジスタから読み出した値についての前記命令で指定された処理と異なる処理を第2モジュールに実行させ、前記第2モジュールによる処理結果を奇数番目のディスティネーションレジスタに格納することを特徴とする請求項3から7のいずれか1項記載の演算処理装置。
  9. 前記モードの判定結果に基づいて、前記第1モジュールと前記第2モジュールとに対して異なる処理を交互に行わせることを特徴とする請求項5から8のいずれか1項記載の演算処理装置。
  10. 前記モードの判定結果に基づいて、前記第1モジュールによる処理結果の最上位ビットのキャリーを前記第2モジュールによる処理結果の最下位ビットに加算することを特徴とする請求項5から9のいずれか1項記載の演算処理装置。
  11. 前記モードの判定結果に基づいて、前記偶数番目のソースレジスから読み出された値および前記奇数番目のソースレジスから読み出された値を前記ビット値で表現される値だけシフトさせることを特徴とする請求項5から10のいずれか1項記載の演算処理装置。
  12. 前記モードの判定結果に基づいて、第1モジュールによる処理結果の所定のビットと第2モジュールによる処理結果の所定のビットとを入れ替えることを特徴とする請求項5から11のいずれか1項記載の演算処理装置。
  13. ベクトル演算処理ユニットに実行させる命令を解読するステップと、
    前記命令の所定位置に設定されたビット値に基づいて、前記命令に付与されたモードを判定するステップと、
    前記モードの判定結果に基づいて、前記命令で指定された処理を行う第1ベクトル演算処理ユニットを起動させるとともに、前記命令で指定された処理と異なる処理を行う第2ベクトル演算処理ユニットを起動させるステップとをコンピュータに実行させることを特徴とする演算処理プログラム。
JP2005079336A 2005-03-18 2005-03-18 演算処理装置 Withdrawn JP2006260381A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2005079336A JP2006260381A (ja) 2005-03-18 2005-03-18 演算処理装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2005079336A JP2006260381A (ja) 2005-03-18 2005-03-18 演算処理装置

Publications (1)

Publication Number Publication Date
JP2006260381A true JP2006260381A (ja) 2006-09-28

Family

ID=37099518

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005079336A Withdrawn JP2006260381A (ja) 2005-03-18 2005-03-18 演算処理装置

Country Status (1)

Country Link
JP (1) JP2006260381A (ja)

Similar Documents

Publication Publication Date Title
JP3655403B2 (ja) データ処理装置
KR102413832B1 (ko) 벡터 곱셈 덧셈 명령
JP3983857B2 (ja) ベクトルレジスタの複数バンクを用いた単一命令複数データ処理
JP5573134B2 (ja) ベクトル型計算機及びベクトル型計算機の命令制御方法
CN107851013B (zh) 数据处理装置和方法
JP4349265B2 (ja) プロセッサ
US8145804B2 (en) Systems and methods for transferring data to maintain preferred slot positions in a bi-endian processor
JP6920277B2 (ja) 広いデータ要素のためのレジスタのペアを用いた偶数要素演算および奇数要素演算を有する混合幅simd演算
JP2019511056A (ja) 複素数乗算命令
JP5326314B2 (ja) プロセサおよび情報処理装置
JP2004086837A (ja) データ処理装置
JP2021507348A (ja) ベクトル・キャリー付き加算命令
JP2002215606A (ja) データ処理装置
US8938485B1 (en) Integer division using floating-point reciprocal
KR19980018071A (ko) 멀티미디어 신호 프로세서의 단일 명령 다중 데이터 처리
JP4444305B2 (ja) 半導体装置
JP2003241960A (ja) プロセッサ、該プロセッサにおける演算命令処理方法及び演算制御方法
JP3841820B2 (ja) マイクロコンピュータ
JP2020502669A (ja) ベクトル生成命令
JP2006260381A (ja) 演算処理装置
JP2002132497A (ja) 単一命令多重データ処理
JP4916151B2 (ja) 並列演算装置
JP4989899B2 (ja) 半導体演算処理装置
JP2001092633A (ja) 複数の結果を出力する命令を有する演算装置
JP2009059187A (ja) マイクロプロセッサおよびデータ処理方法

Legal Events

Date Code Title Description
RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20070404

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080312

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20090219

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20090224

A761 Written withdrawal of application

Free format text: JAPANESE INTERMEDIATE CODE: A761

Effective date: 20090424