(57)【要約】  【課題】  定数行列データを従来に比べて少ない命令数で生成でき、それに伴う処理時間を短縮できるコンピュータを提供する。  【解決手段】  命令デコーダ１４による単数の命令をデコードした結果を基に、第１データ変更回路２４が予め保持した定数要素データを組み合わせて定数行列データを構成する複数の定数ベクトルデータを順に生成し、これを演算回路２８を介してレジスタファイル１６に書き込む。  【選択図】  図１
2006155490.tif 000002
【特許請求の範囲】
【請求項１】
定数行列データを用いた演算を行うコンピュータであって、
演算回路と、
前記演算回路の演算に用いられる前記定数行列データを生成する生成回路と、
命令に基づいて前記生成回路を制御する制御回路と
を有し、
前記生成回路は、定数要素データを予め保持し、単数の前記命令による前記制御回路からの制御に基づいて、予め保持した定数要素データを組み合わせて、前記定数行列データを構成する複数の定数ベクトルデータを順に生成する
コンピュータ。
【請求項２】
前記生成回路が生成した前記複数の定数ベクトルデータが書き込まれるメモリ
をさらに有し、
前記演算回路は、前記メモリに記憶された前記複数の定数ベクトルデータを前記定数行列データとして読み出して演算を行う
請求項１に記載のコンピュータ。
【請求項３】
前記生成回路は、前記定数ベクトルデータを構成する複数の定数要素データのうち予め割り当てられた前記定数要素データをそれぞれ並列に出力する複数の生成モジュール回路を有し、
前記生成モジュール回路は、前記単数の命令による前記制御回路からの制御に基づいて、前記予め保持した複数の定数要素データのなかから順に選択した前記定数要素データを、前記割り当てられた前記定数要素データとして前記メモリに書き込むために順に出力する
請求項２に記載のコンピュータ。
【請求項４】
前記メモリは、被演算データを構成する要素データをさらに記憶し、
前記生成モジュール回路は、前記単数の命令による前記制御回路からの制御に基づいて、前記予め保持した複数の定数要素データと、前記メモリから読み出した要素データとのうち選択した１つの要素データを、そのままの正負符号あるいは反転させた正負符号で前記演算回路に出力し、
前記演算回路は、前記命令が前記定数行列データの生成を示す場合に、前記生成モジュール回路から入力した前記要素データを前記メモリに書き込み、それ以外の場合に、前記生成モジュール回路から入力した前記要素データを用いて所定の演算を行う
請求項３に記載のコンピュータ。
【請求項５】
前記生成回路は、前記メモリから第１のベクトルデータを構成する前記要素データを読み出す第１の生成回路と、前記メモリから第２のベクトルデータを構成する前記要素データを読みだす第２の生成回路とを有し、
前記第１の生成回路および前記第２の生成回路の各々は、前記単数のベクトルデータの要素数分の複数の前記生成モジュール回路を有し、
前記第１の生成回路は、当該第１の生成回路を構成する前記複数の生成モジュール回路が並列に出力する前記要素データを第３のベクトルデータの要素データとして前記演算回路に出力し、
前記第２の生成回路は、当該第２の生成回路を構成する前記複数の生成モジュール回路が並列に出力する前記要素データを第４のベクトルデータの要素データとして前記演算回路に出力し、
前記演算回路は、
前記単数の命令による前記制御回路からの制御に基づいて、前記第１の生成回路から入力した前記第３のベクトルデータを構成する各々の前記要素データと、当該要素データに対応して前記第２の生成回路から入力した前記第４のベクトルデータを構成する前記要素データとを用いた所定の演算を並列に行い、その演算結果を加算して得た演算結果データを出力する
請求項４に記載のコンピュータ。
【請求項６】
定数行列データを用いた演算を行うコンピュータであって、
命令メモリと、
データメモリと、
演算回路と、
前記データメモリから読み出した被演算データを前記演算回路に出力する生成回路と、
前記命令メモリから読み出した単数の命令をデコードし、当該デコード結果に基づいて、前記生成回路が前記演算回路に被演算データを出力するように制御する制御回路と
を有し、
前記生成回路は、定数要素データを予め保持し、単数の前記命令による前記制御回路からの制御に基づいて、予め保持した定数要素データを組み合わせて、前記定数行列データを構成する複数の定数ベクトルデータを順に生成する
コンピュータ。
【請求項７】
定数行列データを用いた演算をコンピュータが行うデータ処理方法であって、
命令をデコードする第１の工程と、
前記第１の工程で行われた単数の前記命令のデコード結果に基づいて、前記コンピュータが予め保持した定数要素データを組み合わせて、前記定数行列データを構成する複数の定数ベクトルデータを順に生成する第２の工程と
を有するデータ処理方法。
【請求項８】
定数行列データを用いた演算をコンピュータに実行させるプログラムであって、
命令をデコードする第１の手順と、
前記第１の手順で行われた単数の前記命令のデコード結果に基づいて、前記コンピュータが予め保持した定数要素データを組み合わせて、前記定数行列データを構成する複数の定数ベクトルデータを順に生成する第２の手順と
を単数の命令により前記コンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、定数行列データを生成するコンピュータ、データ処理方法およびプログラムに関する。
【背景技術】
【０００２】
例えば、プロセッサにより単位行列を生成する際に使用されるプログラムは、行列の要素数と同数の行列の単一要素を生成する命令を内包することにより実現されていた。
そのため、プログラムの単位行列生成部の命令数は、生成する単位行列のサイズがｎである場合にはｎ２個となる。
例えば、２ｘ２の単位行列を生成する場合には下記表１に示すように４個の命令が必要になり、４ｘ４の単位行列を生成する場合には下記表２に示すように１６個の命令が必要になる。
【０００３】
［表１］
addi r1, r0, 1
addi r2, r0, 0
addi r3, r0, 0
addi r4, r0, 1
【０００４】
［表２］
addi r1, r0, 1
addi r2, r0, 0
addi r3, r0, 0
addi r4, r0, 0
addi r5, r0, 0
addi r6, r0, 1
addi r7, r0, 0
addi r8, r0, 0
addi r9, r0, 0
addi r10, r0, 0
addi r11, r0, 1
addi r12, r0, 0
addi r13, r0, 0
addi r14, r0, 0
addi r15, r0, 0
addi r16, r0, 1
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、上述したように、生成しようとする単位行列のサイズに対してｎ２ に比例して命令数が増大する。
そのため、プログラムの実行時間が長期化すると共に、プログラムの開発負荷が大きいという問題がある。
同様な問題は、単位行列以外の定数行列データを生成する場合にも生じる。
【０００６】
本発明は上述した従来技術の問題点を解決するために、定数行列データを従来に比べて少ない命令数で生成でき、それに伴う処理時間を短縮できるコンピュータ、データ処理方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
上述した従来技術の問題点を解決し、上述した目的を達成するため、第１の観点の発明のコンピュータは、定数行列データを用いた演算を行うコンピュータであって、演算回路と、前記演算回路の演算に用いられる前記定数行列データを生成する生成回路と、命令に基づいて前記生成回路を制御する制御回路とを有し、前記生成回路は、定数要素データを予め保持し、単数の前記命令による前記制御回路からの制御に基づいて、予め保持した定数要素データを組み合わせて、前記定数行列データを構成する複数の定数ベクトルデータを順に生成する。
【０００８】
第１の観点の発明のコンピュータでは、生成回路が、定数要素データを予め保持し、単数の前記命令による前記制御回路からの制御に基づいて、予め保持した定数要素データを組み合わせて、前記定数行列データを構成する複数の定数ベクトルデータを順に生成する。
【０００９】
第２の観点の発明のコンピュータは、定数行列データを用いた演算を行うコンピュータであって、命令メモリと、データメモリと、演算回路と、前記データメモリから読み出した被演算データを前記演算回路に出力する生成回路と、前記命令メモリから読み出した単数の命令をデコードし、当該デコード結果に基づいて、前記生成回路が前記演算回路に被演算データを出力するように制御する制御回路とを有し、前記生成回路は、定数要素データを予め保持し、単数の前記命令による前記制御回路からの制御に基づいて、予め保持した定数要素データを組み合わせて、前記定数行列データを構成する複数の定数ベクトルデータを順に生成する。
【００１０】
第２の観点の発明のコンピュータでは、制御回路が、命令メモリから読み出した単数の命令をデコードし、当該デコード結果に基づいて、生成回路が前記演算回路に被演算データを出力するように制御する。
そして、単数の前記命令による前記制御回路からの制御に基づいて、前記生成回路は、定数要素データを予め保持し、予め保持した定数要素データを組み合わせて、前記定数行列データを構成する複数の定数ベクトルデータを順に生成する。
【００１１】
第３の観点の発明のデータ処理方法は、定数行列データを用いた演算をコンピュータが行うデータ処理方法であって、命令をデコードする第１の工程と、前記第１の工程で行われた単数の前記命令のデコード結果に基づいて、前記コンピュータが予め保持した定数要素データを組み合わせて、前記定数行列データを構成する複数の定数ベクトルデータを順に生成する第２の工程とを有する。
【００１２】
第４の観点の発明のプログラムは、定数行列データを用いた演算をコンピュータに実行させるプログラムであって、命令をデコードする第１の手順と、前記第１の手順で行われた単数の前記命令のデコード結果に基づいて、前記コンピュータが予め保持した定数要素データを組み合わせて、前記定数行列データを構成する複数の定数ベクトルデータを順に生成する第２の手順とを単数の命令により前記コンピュータに実行させる。
【発明の効果】
【００１３】
本発明によれば、定数行列データを従来に比べて少ない命令数で生成でき、それに伴う処理時間を短縮できるコンピュータ、データ処理方法およびプログラムを提供することができる。
【発明を実施するための最良の形態】
【００１４】
以下、本発明の実施形態に係わるコンピュータについて説明する。
先ず、本実施形態の構成要素と、本発明の構成要素との対応関係を説明する。
コンピュータ１が本発明のコンピュータの一例である。演算回路２８が本発明の演算回路の一例である。
繰り返し制御回路１８、第１データ変更回路２４および第２データ変更回路２６が本発明の生成回路の一例である。
命令デコーダ１４が本発明の制御回路の一例である。
また、本実施形態の単位行列データが、本発明の定数行列データの一例である。
また、本実施形態の第１読出しベクトルデータＲＶ２１が本発明の定数ベクトルデータの一例である。
また、命令メモリ２が本発明の命令メモリの一例であり、レジスタファイル１６が本発明のメモリまたはデータメモリの一例である。
また、本実施形態のプログラムＰＲＧが本発明のプログラムの一例である。
【００１５】
図１は、本発明の実施態様に係わるコンピュータ１の全体構成図である。
図１に示すように、コンピュータ１は、例えば、命令メモリ２およびプロセッサ４を有する。
命令メモリ２は、ＲＩＳＣ（Reduced Instruction Set Computer）アーキテクチャ型命令セットとして例えば３個のオペランドを有する３２ビット固定長の命令ＣＯＭＤを記憶する。
【００１６】
図２は、命令メモリ２が記憶する命令ＣＯＭＤを説明するための図である。
図２に示すように、命令ＣＯＭＤは、１つの命令に、機能コードＦＵＮＣ、サイズＳＩＺＥ、書込みオペランドＷＯＰ、第１読出しオペランドＲＯＰ１、並びに第２読出しオペランドＲＯＰ２を有する。
機能コードＦＵＮＣは、命令ＣＯＭＤのオペコードであり、当該命令ＣＯＭＤにより実現される動作を示す。機能コードＦＵＮＣは、例えば、加算命令などの演算の種類や他の動作の種別などを規定する。
本実施形態において、機能コードとしては、例えば、クォータニオン積を示すｑｍｕｌ、内積を示すｄｏｔ、乗算を示すｍｕｌ、加算を示すａｄｄ、減算を示すｓｕｂ、除算を示すｄｉｖ、比較を示すｃｍｐ、並びに単位行列生成を示すｖｍｉｄ            がある。
書込みオペランドＷＯＰは、書込みレジスタ指定データＷ＿Ｒおよび書込み要素指定データＷＥＩを有する。書込みレジスタ指定データＷ＿Ｒは、演算結果ベクトルデータＲＵＳであるベクトルデータを書き込むレジスタファイル１６内のレジスタのアドレスを規定する。
書込み要素指定データＷＥＩは、演算結果ベクトルデータＲＵＳである内積器が出力するスカラー値を書き込みレジスタファイル１６内のレジスタのアドレスを規定する。
書込みレジスタ要素数データＷＲＮは、機能コードＦＵＮＣとサイズＳＩＺＥにより決定され、演算回路２８が出力する演算結果ベクトルデータＲＵＳを構成する要素データの数を示しており、本実施形態では「４」である。
【００１７】
第１読出しオペランドＲＯＰ１は、第１読出しレジスタ指定データＲ＿Ｒ１を有する。
第１読出しレジスタ指定データＲ＿Ｒ１は、後述する第１サイズ変更回路２０に読み出しを行う対象となるレジスタファイル１６内のレジスタのアドレスを規定する。
第１読出しレジスタ要素数データＲＲＮ１は、機能コードＦＵＮＣとサイズＳＩＺＥにより決定され、第１サイズ変更回路２０が読み出しを行うベクトルデータの要素数を規定しており、本実施形態では「４」である。
第２読出しオペランドＲＯＰ２は、第２読出しレジスタ指定データＲ＿Ｒ２を有する。
第２読出しレジスタ指定データＲ＿Ｒ２は、後述する第２サイズ変更回路２２に読み出しを行う対象となるレジスタファイル１６内のレジスタのアドレスを規定する。
第２読出しレジスタ要素数データＲＲＮ２は、機能コードＦＵＮＣとサイズＳＩＺＥにより決定され、第２サイズ変更回路２２が読み出しを行うベクトルデータの要素数を規定しており、本実施形態では「４」である。
【００１８】
繰り返し数データＮ＿ＲＥＰは、機能コードＦＵＮＣおよびサイズＳＩＺＥにより、後述する演算回路２８が単数の命令ＦＵＮＣを基に所定の演算を行う回数（１回以上）を示している。
【００１９】
コンピュータ１のプロセッサ４は、命令メモリ２から読み出した固定長命令に基づいて最大４つの演算を同時に水平実行するＳＩＭＤ型プロセッサである。
なお、本実施形態では、一例として４演算の同時実行を想定して以下説明するが、これに限られず任意の数の演算を同時に実行するようにしても構わない。
【００２０】
図１に示すように、プロセッサ４は、例えば、プログラムカウンタ１２、命令デコーダ１４、レジスタファイル１６、繰り返し制御回路１８、第１サイズ変更回路２０、第２サイズ変更回路２２、第１データ変更回路２４、第２データ変更回路２６および演算回路２８を有する。
【００２１】
［プログラムカウンタ１２］
プログラムカウンタ１２は、プロセッサ４が命令メモリ２から読み出す命令のアドレスＡＤＲを計数するカウンタである。
プロセッサ４は、プログラムカウンタ１２が指し示す命令メモリ２内のアドレスＡＤＲから命令ＣＯＭＤを読み出し、これを命令デコーダ１４に出力する。
【００２２】
［命令デコーダ１４］
命令デコーダ１４は、命令メモリ２から読み出した命令ＣＯＭＤをデコードして、命令ＣＯＭＤが規定する機能コードＦＵＮＣおよびサイズＳＩＺＥを基に、繰り返し数データＮ＿ＲＥＰを生成する。
命令デコーダ１４は、機能コードＦＵＮＣ、繰り返し数データＮ＿ＲＥＰ、書込み要素指定データＷＥＩおよび書込みレジスタ要素数データＷＲＮを繰り返し制御回路１８に出力する。
また、命令デコーダ１４は、第１読出しレジスタ指定データＲ＿Ｒ１、第２読出しレジスタ指定データＲ＿Ｒ２、並びに書込みレジスタ指定データＷ＿Ｒをレジスタファイル１６に出力する。
また、命令デコーダ１４は、第１読出しレジスタ要素数データＲＲＮ１を第１サイズ変更回路２０および繰り返し制御回路１８に出力する。
また、命令デコーダ１４は、第２読出しレジスタ要素数データＲＲＮ２を第２サイズ変更回路２２および繰り返し制御回路１８に出力する。
【００２３】
具体的には、命令デコーダ１４は、機能コードＦＵＮＣの種類に応じて、下記表３に示すパターンで、書込みレジスタ要素数データＷＲＮ、第１読出しレジスタ要素数データＲＲＮ１、第２読出しレジスタ要素数データＲＲＮ２、並びに繰り返し数データＮ＿ＲＥＰを生成する。
表３において、サイズは、図２に示す命令ＣＯＭＤ内のサイズＳＩＺＥを示している。
【００２４】
【表３】
2006155490.tif 000003
【００２５】
上記表３において、単数行列データ生成を示す命令ｖｍｉｄは、第１データ変更回路２４において定数要素データを組み合わせて定数ベクトルデータを生成するため、第１読出しレジスタ要素数データＲＲＮ１および第２読出しレジスタ要素数データＲＲＮ２は「０」になっている。
【００２６】
［レジスタファイル１６］
図３は、図１に示すレジスタファイル１６を説明するための図である。
レジスタファイル１６は、図３に示すように、命令デコーダ１４から入力した第１読出しレジスタ指定データＲ＿Ｒ１が指定するレジスタから予め決められた所定数（本実施形態では「４」）の要素データから構成される第１読出しベクトルデータＲＶ１を読み出して第１サイズ変更回路２０に出力する。このとき、レジスタファイル１６は、第１の読出しベクトルデータＲＶ１を構成する要素データを、繰り返し制御回路１８から入力した読出しイネーブル信号ＲＥ＿Ｘ，ＲＥ＿Ｙ，ＲＥ＿Ｚ，ＲＥ＿Ｗにより指定されたＸ，Ｙ，Ｚ，Ｗ列のレジスタから読み出す。
レジスタファイル１６は、図３に示すように、命令デコーダ１４から入力した第２読出しレジスタ指定データＲ＿Ｒ２が指定するレジスタから予め決められた所定数（本実施形態では「４」）の要素データから構成される第２読出しベクトルデータＲＶ２を読み出して第２サイズ変更回路２２に出力する。このとき、レジスタファイル１６は、第２の読出しベクトルデータＲＶ２を構成する要素データを、繰り返し制御回路１８から入力した読出しイネーブル信号ＲＥ＿Ｘ，ＲＥ＿Ｙ，ＲＥ＿Ｚ，ＲＥ＿Ｗにより指定されたＸ，Ｙ，Ｚ，Ｗ列のレジスタから読み出す。
レジスタファイル１６は、図３に示すように、演算回路２８から入力した演算結果ベクトルデータＲＵＳを、命令デコーダ１４から入力した書込みレジスタ指定データＷ＿Ｒが指定するレジスタに書き込む。このとき、レジスタファイル１６は、演算結果ベクトルデータＲＵＳを構成する要素データを、繰り返し制御回路１８から入力した書込みイネーブル信号ＷＥ＿Ｘ，ＷＥ＿Ｙ，ＷＥ＿Ｚ，ＷＥ＿Ｗにより指定されたＸ，Ｙ，Ｚ，Ｗ列のレジスタに書き込む。
【００２７】
［繰り返し制御回路１８］
図４は、図１に示す繰り返し制御回路１８を説明するための図である。
図４に示すように、繰り返し制御回路１８は、例えば、カウンタ５１および演算制御回路５２を有する。
カウンタ５１は、命令デコーダ１４から繰り返し数データＮ＿ＲＥＰを入力すると、初期値「１」を演算制御回路５２に出力し、レジスタファイル１６からレジスタデータの読出しが行われる度に、繰り返し数データＮ＿ＲＥＰが示す値になるまで、カウント値ＣＯＵＮＴを１ずつインクリメントする。カウンタ５１は、カウント値ＣＯＵＮＴが、繰り返し数データＮ＿ＲＥＰが示す値になると、カウント値ＣＯＵＮＴを「０」にリセットする。
カウンタ５１は、カウント値ＣＯＵＮＴを演算制御回路５２に出力する。
【００２８】
演算制御回路５２は、例えば、下記表４に示すように、レジスタファイル１６から第１サイズ変更回路２０に第１読出しベクトルデータＲＶ１を読み出す際に、命令デコーダ１４から入力した機能コードＦＵＮＣおよび第１読出しレジスタ要素数データＲＲＮ１に基づいて、読出しイネーブル信号ＲＥ＿Ｘを生成し、これをレジスタファイル１６に出力する。
演算制御回路５２は、例えば、下記表４に示すように、レジスタファイル１６から第２サイズ変更回路２２に第２読出しベクトルデータＲＶ２を読み出す際に、命令デコーダ１４から入力した機能コードＦＵＮＣおよび第２読出しレジスタ要素数データＲＲＮ２に基づいて、読出しイネーブル信号ＲＥ＿Ｘを生成し、これをレジスタファイル１６に出力する。
【００２９】
【表４】
2006155490.tif 000004
【００３０】
演算制御回路５２は、命令デコーダ１４から入力した機能コードＦＵＮＣおよびカウンタ５１から入力したカウント値ＣＯＵＮＴに基づいて、下記表５および表６に示すように、第１セレクト信号ＳＷＺ１１〜１４，ＡＢＳ１１〜１４，ＣＳＴ１１〜１４および第１読出し符号反転信号ＮＥＧ１１〜１４を生成し、これらを第１データ変更回路２４に出力する。
また、演算制御回路５２は、下記表５および表６に示すように、命令デコーダ１４から入力した機能コードＦＵＮＣおよびカウンタ５１から入力したカウント値ＣＯＵＮＴに基づいて、下記表３に示すように、第２セレクト信号ＳＷＺ２１〜２４，ＡＢＳ２１〜２４，ＣＳＴ２１〜２４および第２読出し符号反転信号ＮＥＧ２１〜２４を生成し、これらを第２データ変更回路２６に出力する。
また、命令デコーダ１４は、下記表５および表６に示すように、命令デコーダ１４から入力した機能コードＦＵＮＣ、カウンタ５１から入力したカウント値ＣＯＵＮＴ、書込み要素指定データＷＥＩ、並びに書込みレジスタ要素数データＷＲＮに基づいて、書込みイネーブル信号ＷＥ＿Ｘ，ＷＥ＿Ｙ，ＷＥ＿Ｚ，ＷＥ＿Ｗを生成し、これらをレジスタファイル１６に出力する。
また、命令デコーダ１４は、下記表５および表６に示すように、機能コードＦＵＮＣに基づいて、演算セレクト信号Ａ＿Ｓを生成し、これを演算回路２８に出力する。
【００３１】
【表５】
2006155490.tif 000005
【００３２】
【表６】
2006155490.tif 000006
【００３３】
なお、上記表５において、「ＸＹＺＷ」等は、例えば、図６に示す第１データ変更回路２４および第２データ変更回路２６内の処理回路７１〜７４が選択する要素データを示している。例えば、「ＸＹＺＷ」の場合には処理回路７１が要素データＸを選択し、処理回路７２が要素データＹを選択し、処理回路７３が要素データＺを選択し、処理回路７４が要素データＷを選択することを示している。
また、上記表５および表６において、「ＰＰＮＰ」等は、処理回路７１〜７４において符号反転回路８８の結果を出力するか否かを示し、“Ｐ”の場合は符号反転回路８８の結果を出力せず、“Ｎ”の場合は符号反転回路８８の結果を出力する。
また、上記表５において、「ｅｎ（ＷＲＮ）」は、演算制御回路５２が、下記表７に示すように、書込みレジスタ要素数データＷＲＮに応じて、書込みイネーブル信号ＷＥ＿Ｘ、ＷＥ＿Ｙ，ＷＥ＿Ｚ，ＷＥ＿Ｗを生成することを示している。
【００３４】
【表７】
2006155490.tif 000007
【００３５】
また、上記表５において、「ｅｎ（ＷＥＩ）」は、演算制御回路５２が、下記表８に示すように、書込み要素指定データＷＥＩに応じて、書込みイネーブル信号ＷＥ＿Ｘ、ＷＥ＿Ｙ，ＷＥ＿Ｚ，ＷＥ＿Ｗを生成することを示している。
【００３６】
【表８】
2006155490.tif 000008
【００３７】
［第１サイズ変更回路２０および第２サイズ変更回路２２］
図５は、図１に示す第１サイズ変更回路２０の構成図である。
図５に示すように、第１サイズ変更回路２０は、例えば、セレクタ６１，６２，６３，６４、並びに要素数制御回路６５を有する。
第１サイズ変更回路２０は、第１レジスタ読出し数データＲＲＮ１に適合するように、第１読出しベクトルＲＶ１の不要な要素データを強制的に「０」にする。
セレクタ６１〜６４は、それぞれ要素数制御回路６５から入力したセレクタ信号Ｓ６５＿１〜Ｓ６５＿４を基に、割り当てられたセレクタ信号Ｓ６５＿１〜Ｓ６５＿４が第１の論理値（例えば、「１」）を示す場合にレジスタファイル１６から読み出された第１読出しベクトルＲＶ１のそれぞれ要素データＸ，Ｙ，Ｚ，Ｗを選択して出力し、第２の論理値（例えば、「０」）を示す場合に「０」を選択して出力する。
セレクタ６１〜６４から出力されたデータによって第２の読出しベクトルデータＲＶ１１が構成され、これが第１データ変更回路２４に出力される。
要素数制御回路６５は、命令デコーダ１４から入力した第１レジスタ読出し数データＲＲＮ１に基づいて、セレクタ信号Ｓ６５＿１〜Ｓ６５＿４を生成する。
具体的には、要素数制御回路６５は、第１レジスタ読出し数データＲＲＮ１が「４」を示す場合には、セレクタ信号Ｓ６５＿１〜Ｓ６５＿４を全て第１の論理値にする。
また、要素数制御回路６５は、第１レジスタ読出し数データＲＲＮ１が「３」を示す場合には、セレクタ信号Ｓ６５＿１〜Ｓ６５＿３を第１の論理値にし、セレクタ信号Ｓ６５＿４を第２の論理値にする。
また、要素数制御回路６５は、第１レジスタ読出し数データＲＲＮ１が「２」を示す場合には、セレクタ信号Ｓ６５＿１，Ｓ６５＿２を第１の論理値にし、セレクタ信号Ｓ６５＿３，Ｓ６５＿４を第２の論理値にする。
また、要素数制御回路６５は、第１レジスタ読出し数データＲＲＮ１が「１」を示す場合には、セレクタ信号Ｓ６５＿１を第１の論理値にし、セレクタ信号Ｓ６５＿２〜Ｓ６５＿４を第２の論理値にする。
【００３８】
第２サイズ変更回路２２は、命令デコーダ１４から入力した第２レジスタ読出し数データＲＲＮ２に基づいて、第２読出しベクトルデータＲＶ２を処理して第２読出しベクトルデータＲＶ１２を生成する点を除いて、第１サイズ変更回路２０と同様の処理を行う。
【００３９】
［第１データ変更回路２４および第２データ変更回路２６］
図６は、図１に示す第１データ変更回路２４の構成図である。
第１データ変更回路２４は、繰り返し制御回路１８から入力した第１セレクト信号ＳＷＺ１１〜１４，ＡＢＳ１１〜１４，ＣＳＴ１１〜１４および第１読出し符号反転信号ＮＥＧ１１〜１４に基づいて、第１サイズ変更回路２０から入力した第１読出しベクトルデータＲＶ１１を処理して第１読出しベクトルデータＲＶ２１を生成したり、所定のサイズの単位行列データを生成する処理を行う。
【００４０】
図６に示すように、第１データ変更回路２４は、処理回路７１〜７４を有する。
処理回路７１は、繰り返し制御回路１８から入力した第１セレクト信号ＳＷＺ１１，ＡＢＳ１１，ＣＳＴ１１および第１読出し符号反転信号ＮＥＧ１１に基づいて、必要に応じて第１読出しベクトルデータＲＶ１１を用いて、第１読出しベクトルデータＲＶ２１の要素データＸを生成する。
処理回路７２は、繰り返し制御回路１８から入力した第１セレクト信号ＳＷＺ１２，ＡＢＳ１２，ＣＳＴ１２および第１読出し符号反転信号ＮＥＧ１２に基づいて、必要に応じて第１読出しベクトルデータＲＶ１１を用いて、第１読出しベクトルデータＲＶ２１の要素データＹを生成する。
処理回路７２は、繰り返し制御回路１８から入力した第１セレクト信号ＳＷＺ１３，ＡＢＳ１３，ＣＳＴ１３および第１読出し符号反転信号ＮＥＧ１３に基づいて、必要に応じて第１読出しベクトルデータＲＶ１１を用いて、第１読出しベクトルデータＲＶ２１の要素データＺを生成する。
処理回路７２は、繰り返し制御回路１８から入力した第１セレクト信号ＳＷＺ１４，ＡＢＳ１４，ＣＳＴ１４および第１読出し符号反転信号ＮＥＧ１４に基づいて、必要に応じて第１読出しベクトルデータＲＶ１１を用いて、第１読出しベクトルデータＲＶ２１の要素データＷを生成する。
【００４１】
図７は、図６に示す処理回路７１の構成図である。
図７に示すように、処理回路７１は、例えば、セレクタ８１，８２，８３，８４，８６，８７，８９、絶対値生成回路８５、並びに符号反転回路８８を有する。
セレクタ８１は、繰り返し制御回路１８から入力した第１セレクト信号ＳＷＺ１１に基づいて、定数要素データ「０」，「１」，「２」，「３」のうち一つを選択してこれをセレクタ８４に出力する。
セレクタ８２は、繰り返し制御回路１８から入力した第１セレクト信号ＳＷＺ１１に基づいて、定数要素データ「１／２」，「１／３」，「１／４」，「１／６」のうち一つを選択してこれをセレクタ８４に出力する。
セレクタ８１は、繰り返し制御回路１８から入力した第１セレクト信号ＳＷＺ１１に基づいて、第１サイズ変更回路２０から入力した第１読出しベクトルデータＲＶ１１の定数要素データＸ，Ｙ，Ｚ，Ｗのうち一つを選択してこれをセレクタ８６に出力する。
【００４２】
セレクタ８４は、繰り返し制御回路１８から入力した第１セレクト信号ＡＢＳ１１に基づいて、セレクタ８１と８２のうち一方から入力したデータを選択してセレクタ８７に出力する。
絶対値生成回路８５は、セレクタ８３から入力したデータの絶対値をセレクタ８６に出力する。
セレクタ８６は、繰り返し制御回路１８から入力した第１セレクト信号ＡＢＳ１１に基づいて、セレクタ８３から入力したデータと、絶対値生成回路８５から入力したその絶対値とのうち一方を選択してセレクタ８７に出力する。
セレクタ８７は、繰り返し制御回路１８から入力した第１セレクト信号ＣＳＴ１１に基づいて、セレクタ８４と８６とのうち一方から入力したデータを符号反転回路８８およびセレクタ８９に出力する。
符号反転回路８８は、セレクタ８７から入力したデータの符号を反転させてセレクタ８９に出力する。
セレクタ８９は、繰り返し制御回路１８からの符号反転信号ＮＥＧ１１に基づいて、セレクタ８７から入力したデータと、符号反転回路８８から入力したデータとのうち一方を選択して、第１読出しベクトルデータＲＶ２１の要素データＸとして出力する。
【００４３】
処理回路７２，７３，７４は、第１セレクト信号ＳＷＺ１２〜１４，ＡＢＳ１２〜１４，ＣＳＴ１２〜１４、並びに符号反転信号ＮＥＧ１２〜１４に基づいて、第１読出しベクトルデータＲＶ２１の要素データＹ，Ｚ，Ｗを出力する点を除いて処理回路７１と同じである。
【００４４】
なお、第２データ変更回路２６は、第２読出しセレクト信号ＳＷ２１−２４，ＡＢＳ２１−２４，ＣＳＴ２１−２４、並びに第２読出し符号反転信号ＮＥＧ２１−２４に基づいて処理を行う点を除いて、第１データ変更回路２４と同様の構成を有している。
【００４５】
[演算回路２８]
図８は、図１に示す演算回路２８の構成図である。
図８に示すように、演算回路２８は、例えば、演算モジュール回路１０１，１０２，１０３，１０４、総和回路１１０、並びにセレクタ１２１，１２２，１２３，１２４を有する。
演算モジュール回路１０１は、加算器（＋）、減算器（−）、乗算器（ｘ）、除算器（÷）、並びに比較器（≦）を有する。
演算モジュール回路１０１は、第１データ変更回路２４から入力した第１読出しベクトルデータＲＶ２１の要素データＸと、第２データ変更回路２６から入力した第２読出しベクトルデータＲＶ２２の要素データＸとを用いた加算、減算、乗算、除算および比較演算を、加算器（＋）、減算器（−）、乗算器（ｘ）、除算器（÷）、並びに比較器（≦）を用いて並列に行い、その演算結果をそれぞれ並列にセレクタ１２１に出力する。
演算モジュール回路１０２，１０３，１０４は、演算モジュール回路１０１と同じ構成を有し、それぞれ要素データＹ，Ｚ，Ｗを用いて演算を行い、それらの演算結果をそれぞれセレクタ１２２，１２３，１２４に出力する。
また、演算モジュール回路１０１〜１０４は、乗算器（ｘ）の乗算結果を総和回路１１０にも出力する。
【００４６】
総和回路１１０は、演算モジュール回路１０１〜１０４から入力した乗算結果の総和を演算し、その結果をセレクタ１２１〜１２４に出力する。
セレクタ１２１〜１２４は、繰り返し制御回路１８から入力した演算セレクト信号Ａ＿Ｓに基づいて、それぞれ演算モジュール回路１０１〜１０４から入力した加算、減算、乗算、除算および比較演算と、総和回路１１０からの総和演算結果とのうち一つを選択して、それぞれ演算結果ベクトルデータＲＵＳの要素データＸ，Ｙ，Ｚ，Ｗとしてレジスタファイル１６に出力する。
【００４７】
以下、コンピュータ１の動作例を説明する。
［第１の動作例］
当該動作例では、命令デコーダ１４が命令ＣＯＭＤとして、４ｘ４の単位行列を生成する命令ｖｍｉｄを実行した場合を説明する。
この場合には、命令デコーダ１４は、命令ｖｍｉｄをデコードして、「４」を示す繰り返し数Ｎ＿ＲＥＰを繰り返し制御回路１８に出力する。
繰り返し制御回路１８は、図４に示すカウンタ５１でカウント値を生成する。
繰り返し制御回路１８は、当該動作例において、「１」〜「４」の全てのカウント値において、書込みイネーブル信号ＷＥ＿Ｘ，ＷＥ＿Ｙ，ＷＥ＿Ｚ，ＷＥ＿Ｗをアクティブ（「１」）にする。
また、繰り返し制御回路１８は、カウント値が「１」の状態で、図６に示す第１データ変更回路２４の処理回路７１，７２，７３，７４が、それぞれ「１」，「０」，「０」，「０」を出力するように、第１セレクト信号ＳＷＺ１１〜１４、ＡＢＳ１１〜１４、ＣＳＴ１１〜１４および符号反転信号ＮＥＧ１１〜１４を生成し、これを第１データ変更回路２４に出力する。
繰り返し制御回路１８は、「１」〜「４」の全てのカウント値において、図６に示す第２データ変更回路２６の処理回路７１，７２，７３，７４が、それぞれ「０」，「０」，「０」，「０」を出力するように、第２セレクト信号ＳＷＺ２１〜２４、ＡＢＳ２１〜２４、ＣＳＴ２１〜２４および符号反転信号ＮＥＧ２１〜２４を生成し、これを第２データ変更回路２６に出力する。
また、繰り返し制御回路１８は、図８に示す演算回路２８の演算モジュール回路１０１〜１０４が加算器（＋）の演算結果をセレクタ１２１〜１２４で選択するように、演算セレクト信号Ａ＿Ｓを生成し、これを演算回路２８に出力する。
これにより、「１」，「０」，「０」，「０」を示す要素データＸ，Ｙ，Ｚ，Ｗによってされる第１読出しベクトルデータＲＶ２１が第１データ変更回路２４において生成され、これが演算回路２８からそのまま演算結果ベクトルデータＲＵＳとして出力される。
演算結果ベクトルデータＲＵＳは、図９に示すレジスタファイル１６内の書込みレジスタ指定データＷ＿Ｒが指定するレジスタｒｅｇ１１〜１４に書き込まれる。
このとき、第２データ変更回路２６から演算回路２８に出力される第２読出しベクトルデータＲＶ２はゼロベクトルであるため、演算結果ベクトルデータＲＵＳは、第１データ変更回路２４が出力する第１読出しベクトルデータＲＶ２１と同じになる。
【００４８】
次に、繰り返し制御回路１８は、カウント値が「２」の状態で、図６に示す第１データ変更回路２４の処理回路７１，７２，７３，７４が、それぞれ「０」，「１」，「０」，「０」を出力するように、第１セレクト信号ＳＷＺ１１〜１４、ＡＢＳ１１〜１４、ＣＳＴ１１〜１４および符号反転信号ＮＥＧ１１〜１４を生成し、これを第１データ変更回路２４に出力する。
これにより、「０」，「１」，「０」，「０」を示す要素データＸ，Ｙ，Ｚ，Ｗによって構成される演算結果ベクトルデータＲＵＳが、図９に示すレジスタファイル１６内のレジスタｒｅｇ１１〜１４に隣接したレジスタｒｅｇ２１〜２４に書き込まれる。
【００４９】
次に、繰り返し制御回路１８は、カウント値が「３」の状態で、図６に示す第１データ変更回路２４の処理回路７１，７２，７３，７４が、それぞれ「０」，「０」，「１」，「０」を出力するように、第１セレクト信号ＳＷＺ１１〜１４、ＡＢＳ１１〜１４、ＣＳＴ１１〜１４および符号反転信号ＮＥＧ１１〜１４を生成し、これを第１データ変更回路２４に出力する。
これにより、「０」，「０」，「１」，「０」を示す要素データＸ，Ｙ，Ｚ，Ｗによって構成される演算結果ベクトルデータＲＵＳが、図９に示すレジスタファイル１６内のレジスタｒｅｇ２１〜２４に隣接したレジスタｒｅｇ３１〜３４に書き込まれる。
【００５０】
次に、繰り返し制御回路１８は、カウント値が「４」の状態で、図６に示す第１データ変更回路２４の処理回路７１，７２，７３，７４が、それぞれ「０」，「０」，「０」，「１」を出力するように、第１セレクト信号ＳＷＺ１１〜１４、ＡＢＳ１１〜１４、ＣＳＴ１１〜１４および符号反転信号ＮＥＧ１１〜１４を生成し、これを第１データ変更回路２４に出力する。
これにより、「０」，「０」，「０」，「１」を示す要素データＸ，Ｙ，Ｚ，Ｗによって構成される演算結果ベクトルデータＲＵＳが、図９に示すレジスタファイル１６内のレジスタｒｅｇ３１〜３４に隣接したレジスタｒｅｇ４１〜４４に書き込まれる。
【００５１】
そして、命令デコーダ１４は、その後の命令で、上述した手順でレジスタファイル１６に書き込んだ４ｘ４の単位行列データを用いた行列演算を演算回路２８に実行させる。
【００５２】
［第２の動作例］
上述した第１の動作例では、命令ｖｍｉｄに基づいて、単位行列データを構成するベクトルデータを第１データ変更回路２４で生成してレジスタファイル１６に単位行列データを書き込む場合を例示したが、本実施形態では、第１データ変更回路２４で生成した単位行列データを構成するベクトルデータあるいは定数ベクトルデータと、第２サイズ変更回路２２において生成した所定の定数ベクトルデータとを用いた演算を演算回路２８に行わせてもよい。
また、第１データ変更回路２４で生成した単位行列データを構成するベクトルデータあるいは定数ベクトルデータと、第２データ変更回路２６において第２読み出しベクトルデータＲＶ１２を用いて処理を行って生成した第２読出しベクトルデータＲＶ２２とを用いた演算を演算回路２８に行わせてもよい。
【００５３】
［第３の動作例］
本動作例では、プロセッサ４により、クォータニオン積と外積の演算を行う場合を説明する。
ところで、クオータニオンＰは１つのスカラー値ｐと１つ３次元ベクトルＵによって“Ｐ＝［ｐ；Ｕ］”のように表現される。
また、ｐ＝Ａｗ，Ｕ＝（Ａｘ，Ａｙ，Ａｚ）として、虚数単位ｉ、ｊ、ｋを用いて下記式（１）のように表現できる。
【００５４】
［数１］
Ｐ＝ Ａｗ ＋ Ａｘ ｉ ＋ Ａｙ ｊ ＋ Ａｚ ｋ
…（１）
【００５５】
また、虚数単位ｉ、ｊ、ｋの積は下記式（２）の関係を有する。
［数２］
ｉｉ=ｊｊ＝ｋｋ＝ｉｊｋ＝−１
…（２）
【００５６】
さらに、クオータニオンＱを“Ｑ＝［ｑ；Ｖ］”とし、“ｑ＝Ｂｗ，Ｖ＝（Ｂｘ，Ｂｙ，Ｂｚ）”とすると下記式（３）が成り立つ。
【００５７】
［数３］
Ｑ＝ Ｂｗ ＋ Ｂｘ ｉ ＋ Ｂｙ ｊ ＋ Ｂｚ ｋ
…（３）
【００５８】
そして、クォータニオンＰとクォータニオンＱの積ＰＱは、下記式（４）のようになる。
【００５９】
［数４］
ＰＱ＝（ＡｘＢｗ＋ＡｙＢｚ−ＡｚＢｙ＋ＡｗＢｘ）ｉ
＋（―ＡｘＢｚ＋ＡｙＢｗ＋ＡｚＢｘ＋ＡｗＢｙ）ｊ
＋（ＡｘＢｙ−ＡｙＢｘ＋ＡｚＢｗ＋ＡｗＢｚ）ｋ
＋（―ＡｘＢｘ−ＡｙＢｙ−ＡｚＢｚ＋ＡｗＢｗ）
＝  Ｍｘ ｉ ＋ Ｍｙ ｊ ＋ Ｍｚ ｋ  ＋  Ｍｗ
…（４）
【００６０】
また、この積ＰＱは３次元ベクトルＵ，Ｖの内積と外積を用いて下記式（５）のように示せる。
【００６１】
［数５］
ＰＱ = ［ｐｑ―Ｕ・Ｖ；  ｐＶ＋ｑＵ＋Ｕ×Ｖ］
…（５）
【００６２】
但し、「・」は内積、「×」は外積である。そして、ｐ＝０，ｑ＝０のときのクオータニオンＰ、Ｑの積は下記式（６）のようになり、ＰＱのベクトル成分はＵとＶの外積そのものとなる。
【００６３】
［数６］
ＰＱ = ［―Ｕ・Ｖ；  Ｕ×Ｖ］                        …（６）
【００６４】
このような性質をもつクォータニオンという数を利用することで、３次元における回転に関する問題が扱いやすくなることが知られており、３Ｄグラフィックスにおけるオブジェクトの回転や球面補間処理などさまざまに利用されている。
本実施形態の機能コードｑｍｕｌは、このクォータニオン積を計算するためのものである。
本実施形態では、レジスタファイル１６にＡｘ，Ａｙ，Ａｚ，Ａｗの順番に要素Ｘ，Ｙ，Ｚ，Ｗに格納した４次元ベクトルを第１読出しベクトルＲＶ１として、Ｂｘ，Ｂｙ，Ｂｚ，Ｂｗの順番に要素Ｘ，Ｙ，Ｚ，Ｗに格納した４次元ベクトルを第２読出しベクトルＲＶ２として読み出してそれぞれ第１サイズ変更回路２０および第２サイズ変更回路２２においてサイズ処理を行う。
そして、当該サイズ処理によって得られた第１読出しベクトルデータＲＶ１１を第１データ変更回路２４において符号処理して第１読出しベクトルデータＲＶ２１を生成し、こＲを演算回路２８に出力する。
また、当該サイズ処理によって得られた第２読出しベクトルデータＲＶ１２を第２データ変更回路２６において符号処理して第２読出しベクトルデータＲＶ２２を生成し、こＲを演算回路２８に出力する。
そして、演算回路２８において、最初に上記式（４）の第１項（ｉの項）の演算を行う。
次に、同様の演算を、上記式（４）の第２項（ｊの項）、第３項（ｋの項）、並びに第４項（ｗの項）について繰り返し行い、クオータニオンＰ、Ｑの積を算出する。
【００６５】
以上説明したように、コンピュータ１によれば、単数の命令ｖｍｉｄにより、単位行列データを生成してレジスタファイル１６に書き込むことができる。
これにより、プログラムＰＲＧのコード数を従来に比べて大幅に少なくでき、プログラムＰＲＧの開発負荷を低減できると共に、プログラムＰＲＧの信頼性を高めることができる。さらには、キャッシュメモリを効率的に利用することでプログラムＰＲＧの実行時間を短縮できる。
また、コンピュータ１によれば、バグの発生を抑制できる。
また、クオータニオンＰ、Ｑの演算を単数の命令ｑｍｕｌにより行うことができる。これによっても、プログラムＰＲＧのコード数を従来に比べて大幅に少なくでき、プログラムＰＲＧの開発負荷を低減できると共に、プログラムＰＲＧの信頼性を高めることができる。さらには、キャッシュメモリを効率的に利用することでプログラムＰＲＧの実行時間を短縮できる。
【００６６】
また、コンピュータ１をＳＩＭＤ型プロセッサで実現する場合に、これらのプロセッサは、内積器と並び替え回路と符号反転をすでに備えているので、それにわずかなリソースを追加することでコンピュータ１を実現できる。
また、機能コードは共通で、要素数を４にするとクォータニオン積、３にすると外積として機能する。そのため、機能コードとして外積とクォータニオン積を別々に割り当てなくてよくいので機能コードを有効利用できる。
また、コンピュータ１によれば、並び替えや符号反転を施したベクトルデータをレジスタ回路に一時的に格納する必要がないので、レジスタ回路の利用効率がよいし、パイプライン技術を用いて第１データ変更回路２４および第２データ変更回路２６と、演算回路２８とを連続的に高速に動かせるようにした場合にも、クォータニオン積での繰り返し回路による演算器の繰り返し実行も同様に連続的に行うことができる。
また、プログラムＰＲＧは、外積やクォータニオン積は関数として実装され、それを関数コールして利用することが多いと考えられるが、本発明では１命令で処理できるので関数コールではなく関数のインライン展開をして高速化してもプログラムサイズの増大が少ない。
【００６７】
本発明は上述した実施形態には限定されない。
上述した実施形態では、４ｘ４の単位行列データを生成する場合を例示したが、２ｘ２，３ｘ３などのその他のサイズの単位行列データを生成してもよい。
また、上述した実施形態では、本発明の定数行列データとして、単位行列データを例示したが、それ以外の定数行列データを生成してもよい。
また、上述した実施形態では、第１サイズ変更回路２０および第２サイズ変更回路２２を用いる場合を例示したが、これらの機能を図６および図７に示す第１データ変更回路２４および第２データ変更回路２６に持たせてもよい。
【産業上の利用可能性】
【００６８】
本発明は、単数行列データを演算に用いるシステムに適用可能である。
【図面の簡単な説明】
【００６９】
【図１】図１は、本発明の実施態様に係わるコンピュータの全体構成図である。
【図２】図２は、図１に示す命令メモリが記憶する命令ＣＯＭＤを説明するための図である。
【図３】図３は、図１に示すレジスタファイルを説明するための図である。
【図４】図４は、図１に示す繰り返し制御回路を説明するための図である。
【図５】図５は、図１に示す第１，２サイズ変更回路の構成図である。
【図６】図６は、図１に示す第１，２データ変更回路の構成図である。
【図７】図７は、図６に示す処理回路の構成図である。
【図８】図８は、図１に示す演算回路の構成図である。
【図９】図９は、演算回路の演算結果ベクトルデータをレジスタファイルに書き込む動作例を説明するための図である。
【符号の説明】
【００７０】
１…コンピュータ、２…命令メモリ、４…プロセッサ、１２…プログラムカウンタ、１４…命令デコーダ、１６…レジスタファイル、１８…繰り返し制御回路、２０…第１サイズ変更回路、２２…第２サイズ変更回路、２４…第１データ変更回路、２６…第２データ変更回路、２８…演算回路、５１…カウンタ、５２…演算制御回路、６１〜６４…セレクタ、６５…要素数制御回路、７１〜７４…セレクタ、８１，８２，８３，８４，８６，８７，８９…セレクタ、８５…絶対値生成回路、８８…符号反転回路、１０１〜１０４…演算モジュール回路、１２１〜１２４…セレクタ
【図１】
2006155490.tif 000009
【図２】
2006155490.tif 000010
【図３】
2006155490.tif 000011
【図４】
2006155490.tif 000012
【図５】
2006155490.tif 000013
【図６】
2006155490.tif 000014
【図７】
2006155490.tif 000015
【図８】
2006155490.tif 000016
【図９】
2006155490.tif 000017