(57)【要約】【課題】  ＳＩＭＤ型プロセッサにおける演算命令に先立ったデータ整列命令を不要とし、演算効率を向上させる。【解決手段】  行列データはメモリバンク３１０乃至３１３に分散格納される。メモリバンク３１０乃至３１３から読み出された行列データは読出し制御回路３６０および３７０によって並び替えられて演算器に供給される。演算器による演算結果は書込み制御回路３５０によって並び替えられてメモリバンク３１０乃至３１３に書き込まれる。アドレス生成回路３２０乃至３４０はメモリバンク３１０乃至３１３に分散格納された行列データを縦方向または横方向に走査するためのアドレスを生成する。【選択図】      図９
2005309499.tif 000002
【特許請求の範囲】
【請求項１】
複数のメモリバンクと、
読出しレジスタ指定および読出しレジスタ走査方向に基づいて前記複数のメモリバンクに対して個別に読出しアドレスを供給する読出しアドレス生成回路と、
前記読出しアドレスに従って前記複数のメモリバンクから読み出された複数の読出しデータの配置を前記読出しレジスタ指定および読出しレジスタ変位に基づいて制御する読出し制御回路と、
前記読出し制御回路によって配置制御された複数の読出しデータを対象として複数の演算処理を行う演算器と
を具備することを特徴とするプロセッサ。
【請求項２】
前記読出しレジスタ走査方向は、前記複数のメモリバンクに対する読出しアドレスが同一であるかまたは一定間隔で変化するかを指定することを特徴とする請求項１記載のプロセッサ。
【請求項３】
前記演算器は、前記複数の演算処理として積和演算を行うことを特徴とする請求項１記載のプロセッサ。
【請求項４】
複数のメモリバンクと、
書込みレジスタ指定および書込みレジスタ走査方向に基づいて前記複数のメモリバンクに対して個別に書込みアドレスを供給する書込みアドレス生成回路と、
複数のデータに対して複数の演算処理を行って複数の書込みデータを出力する演算器と、
前記演算器から出力された前記複数の書込みデータの配置を前記書込みレジスタ指定、書込みレジスタ変位および書込みレジスタ要素数に基づいて制御して前記複数のメモリバンクに供給する書込み制御回路と
を具備することを特徴とするプロセッサ。
【請求項５】
前記書込みレジスタ走査方向は、前記複数のメモリバンクに対する書込みアドレスが同一であるかまたは一定間隔で変化するかを指定することを特徴とする請求項４記載のプロセッサ。
【請求項６】
前記演算器は、前記複数の演算処理として積和演算を行うことを特徴とする請求項４記載のプロセッサ。
【請求項７】
複数のメモリバンクと、
読出しレジスタ指定および読出しレジスタ走査方向に基づいて前記複数のメモリバンクに対して個別に読出しアドレスを供給する読出しアドレス生成回路と、
前記読出しアドレスに従って前記複数のメモリバンクから読み出された複数の読出しデータの配置を前記読出しレジスタ指定および読出しレジスタ変位に基づいて制御する読出し制御回路と、
前記読出し制御回路によって配置制御された複数の読出しデータを対象として複数の演算処理を行って複数の書込みデータを出力する演算器と、
書込みレジスタ指定および書込みレジスタ走査方向に基づいて前記複数のメモリバンクに対して個別に書込みアドレスを供給する書込みアドレス生成回路と、
前記演算器から出力された前記複数の書込みデータの配置を前記書込みレジスタ指定、書込みレジスタ変位および書込みレジスタ要素数に基づいて制御して前記複数のメモリバンクに供給する書込み制御回路と
を具備することを特徴とするプロセッサ。
【請求項８】
前記読出しレジスタ走査方向は、前記複数のメモリバンクに対する読出しアドレスが同一であるかまたは一定間隔で変化するかを指定し、
前記書込みレジスタ走査方向は、前記複数のメモリバンクに対する書込みアドレスが同一であるかまたは一定間隔で変化するかを指定することを特徴とする請求項７記載のプロセッサ。
【請求項９】
前記演算器は、前記複数の演算処理として積和演算を行うことを特徴とする請求項７記載のプロセッサ。
【請求項１０】
プログラムに含まれる命令をデコードする命令デコーダと、
複数のメモリバンクと、
前記命令デコーダによってデコードされた読出しレジスタ指定および読出しレジスタ走査方向に基づいて前記複数のメモリバンクに対して個別に読出しアドレスを供給する読出しアドレス生成回路と、
前記読出しアドレスに従って前記複数のメモリバンクから読み出された複数の読出しデータの配置を前記命令デコーダによってデコードされた前記読出しレジスタ指定および読出しレジスタ変位に基づいて制御する読出し制御回路と、
前記読出し制御回路によって配置制御された複数の読出しデータを対象として複数の演算処理を行って複数の書込みデータを出力する演算器と、
前記命令デコーダによってデコードされた書込みレジスタ指定および書込みレジスタ走査方向に基づいて前記複数のメモリバンクに対して個別に書込みアドレスを供給する書込みアドレス生成回路と、
前記演算器から出力された前記複数の書込みデータの配置を前記命令デコーダによってデコードされた前記書込みレジスタ指定、書込みレジスタ変位および書込みレジスタ要素数に基づいて制御して前記複数のメモリバンクに供給する書込み制御回路と
を具備することを特徴とするプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＳＩＭＤ（Single Instruction Multiple Data：単一命令複数データ）型プロセッサに関し、特に行列データへのアクセスを柔軟に行うＳＩＭＤ型プロセッサに関する。
【背景技術】
【０００２】
２次元画像処理や３次元グラフィックス等で必要となる行列演算処理をＳＩＭＤ型プロセッサにより実現する場合、演算命令の演算形式に合致するように予めデータ整列を行なう必要がある。例えばデータ整列命令として、インテル社が開発したマルチメディア向け命令セットＳＳＥ（Streaming SIMD Extensions）やモトローラ社が開発したマルチメディア向け命令セットAltiVec等において、各種データ整列命令が記述されている（例えば、非特許文献１および非特許文献２参照。）。
【０００３】
例えば、４行４列の行列Ａと行列Ｂの内積演算を行い、その結果を行列Ｄに格納する場合の例を挙げる。この内積演算における各演算式は以下のような積和演算により表される。
Ｄ［０］［０］  ＝  Ａ［０］［０］×Ｂ［０］［０］＋Ａ［０］［１］×Ｂ［１］［０］＋Ａ［０］［２］×Ｂ［２］［０］＋Ａ［０］［３］×Ｂ［３］［０］
Ｄ［０］［１］  ＝  Ａ［０］［０］×Ｂ［０］［１］＋Ａ［０］［１］×Ｂ［１］［１］＋Ａ［０］［２］×Ｂ［２］［１］＋Ａ［０］［３］×Ｂ［３］［１］
Ｄ［０］［２］  ＝  Ａ［０］［０］×Ｂ［０］［２］＋Ａ［０］［１］×Ｂ［１］［２］＋Ａ［０］［２］×Ｂ［２］［２］＋Ａ［０］［３］×Ｂ［３］［２］
Ｄ［０］［３］  ＝  Ａ［０］［０］×Ｂ［０］［３］＋Ａ［０］［１］×Ｂ［１］［３］＋Ａ［０］［２］×Ｂ［２］［３］＋Ａ［０］［３］×Ｂ［３］［３］
Ｄ［１］［０］  ＝  Ａ［１］［０］×Ｂ［０］［０］＋Ａ［１］［１］×Ｂ［１］［０］＋Ａ［１］［２］×Ｂ［２］［０］＋Ａ［１］［３］×Ｂ［３］［０］
Ｄ［１］［１］  ＝  Ａ［１］［０］×Ｂ［０］［１］＋Ａ［１］［１］×Ｂ［１］［１］＋Ａ［１］［２］×Ｂ［２］［１］＋Ａ［１］［３］×Ｂ［３］［１］
Ｄ［１］［２］  ＝  Ａ［１］［０］×Ｂ［０］［２］＋Ａ［１］［１］×Ｂ［１］［２］＋Ａ［１］［２］×Ｂ［２］［２］＋Ａ［１］［３］×Ｂ［３］［２］
Ｄ［１］［３］  ＝  Ａ［１］［０］×Ｂ［０］［３］＋Ａ［１］［１］×Ｂ［１］［３］＋Ａ［１］［２］×Ｂ［２］［３］＋Ａ［１］［３］×Ｂ［３］［３］
Ｄ［２］［０］  ＝  Ａ［２］［０］×Ｂ［０］［０］＋Ａ［２］［１］×Ｂ［１］［０］＋Ａ［２］［２］×Ｂ［２］［０］＋Ａ［２］［３］×Ｂ［３］［０］
Ｄ［２］［１］  ＝  Ａ［２］［０］×Ｂ［０］［１］＋Ａ［２］［１］×Ｂ［１］［１］＋Ａ［２］［２］×Ｂ［２］［１］＋Ａ［２］［３］×Ｂ［３］［１］
Ｄ［２］［２］  ＝  Ａ［２］［０］×Ｂ［０］［２］＋Ａ［２］［１］×Ｂ［１］［２］＋Ａ［２］［２］×Ｂ［２］［２］＋Ａ［２］［３］×Ｂ［３］［２］
Ｄ［２］［３］  ＝  Ａ［２］［０］×Ｂ［０］［３］＋Ａ［２］［１］×Ｂ［１］［３］＋Ａ［２］［２］×Ｂ［２］［３］＋Ａ［２］［３］×Ｂ［３］［３］
Ｄ［３］［０］  ＝  Ａ［３］［０］×Ｂ［０］［０］＋Ａ［３］［１］×Ｂ［１］［０］＋Ａ［３］［２］×Ｂ［２］［０］＋Ａ［３］［３］×Ｂ［３］［０］
Ｄ［３］［１］  ＝  Ａ［３］［０］×Ｂ［０］［１］＋Ａ［３］［１］×Ｂ［１］［１］＋Ａ［３］［２］×Ｂ［２］［１］＋Ａ［３］［３］×Ｂ［３］［１］
Ｄ［３］［２］  ＝  Ａ［３］［０］×Ｂ［０］［２］＋Ａ［３］［１］×Ｂ［１］［２］＋Ａ［３］［２］×Ｂ［２］［２］＋Ａ［３］［３］×Ｂ［３］［２］
Ｄ［３］［３］  ＝  Ａ［３］［０］×Ｂ［０］［３］＋Ａ［３］［１］×Ｂ［１］［３］＋Ａ［３］［２］×Ｂ［２］［３］＋Ａ［３］［３］×Ｂ［３］［３］
【０００４】
ここで、データ整列命令および演算命令を定義する。まず、データ整列命令ＭＥＲＧＥＨ命令は、形式「ＭＥＲＧＥＨ  ｄ，ａ，ｂ」で与えられ、以下の動作を行う。
Ｒ［ｄ］［０］  ＝Ｒ［ｂ］［２］
Ｒ［ｄ］［１］  ＝Ｒ［ａ］［２］
Ｒ［ｄ］［２］  ＝Ｒ［ｂ］［３］
Ｒ［ｄ］［３］  ＝Ｒ［ａ］［３］
【０００５】
また、データ整列命令ＭＥＲＧＥＬ命令は、形式「ＭＥＲＧＥＬ  ｄ，ａ，ｂ」で与えられ、以下の動作を行う。
Ｒ［ｄ］［０］  ＝Ｒ［ｂ］［０］
Ｒ［ｄ］［１］  ＝Ｒ［ａ］［０］
Ｒ［ｄ］［２］  ＝Ｒ［ｂ］［１］
Ｒ［ｄ］［３］  ＝Ｒ［ａ］［１］
【０００６】
また、演算命令ＤＯＴ命令は、形式「ＤＯＴ  ｄ，ａ，ｂ」で与えられ、以下の動作を行う。
Ｒ［ｄ］［０］  ＝Ｒ［ａ］［０］×Ｒ［ｂ］［０］＋Ｒ［ａ］［１］×Ｒ［ｂ］［１］＋Ｒ［ａ］［２］×Ｒ［ｂ］［２］＋Ｒ［ａ］［３］×Ｒ［ｂ］［３］
【０００７】
ここで、レジスタファイルＲは、１６行４列で構成され、行列Ａは以下のように格納されるものとする。
Ｒ［０］［０］、Ｒ［０］［１］、Ｒ［０］［２］、Ｒ［０］［３］、
Ｒ［１］［０］、Ｒ［１］［１］、Ｒ［１］［２］、Ｒ［１］［３］、
Ｒ［２］［０］、Ｒ［２］［１］、Ｒ［２］［２］、Ｒ［２］［３］、
Ｒ［３］［０］、Ｒ［３］［１］、Ｒ［３］［２］、Ｒ［３］［３］
【０００８】
また、行列Ｂは以下のように格納されるものとする。
Ｒ［４］［０］、Ｒ［４］［１］、Ｒ［４］［２］、Ｒ［４］［３］、
Ｒ［５］［０］、Ｒ［５］［１］、Ｒ［５］［２］、Ｒ［５］［３］、
Ｒ［６］［０］、Ｒ［６］［１］、Ｒ［６］［２］、Ｒ［６］［３］、
Ｒ［７］［０］、Ｒ［７］［１］、Ｒ［７］［２］、Ｒ［７］［３］
【０００９】
また、行列Ｄは以下のように格納されるものとする。
Ｒ［８］［０］、Ｒ［８］［１］、Ｒ［８］［２］、Ｒ［８］［３］、
Ｒ［９］［０］、Ｒ［９］［１］、Ｒ［９］［２］、Ｒ［９］［３］、
Ｒ［１０］［０］、Ｒ［１０］［１］、Ｒ［１０］［２］、Ｒ［１０］［３］、
Ｒ［１１］［０］、Ｒ［１１］［１］、Ｒ［１１］［２］、Ｒ［１１］［３］
【００１０】
以上において、４行４列の行列ＡおよびＢの内積演算を行なうプログラムは、例えば以下のように記述される。
ＭＥＲＧＥＨ  １２，  ０，  ２
ＭＥＲＧＥＨ  １３，  １，  ３
ＭＥＲＧＥＬ  １４，  ０，  ２
ＭＥＲＧＥＬ  １５，  １，  ３
ＭＥＲＧＥＨ    ０，１２，１３
ＭＥＲＧＥＬ    １，１２，１３
ＭＥＲＧＥＨ    ２，１４，１５
ＭＥＲＧＥＬ    ３，１４，１５
ＤＯＴ        １２，  ０，  ４
ＤＯＴ        １３，  ０，  ５
ＤＯＴ        １４，  ０，  ６
ＤＯＴ        １５，  ０，  ７
ＭＥＲＧＥＬ  １２，１２，１３
ＭＥＲＧＥＬ  １４，１４，１５
ＭＥＲＧＥＬ    ８，１２，１４
ＤＯＴ        １２，  １，  ４
ＤＯＴ        １３，  １，  ５
ＤＯＴ        １４，  １，  ６
ＤＯＴ        １５，  １，  ７
ＭＥＲＧＥＬ  １２，１２，１３
ＭＥＲＧＥＬ  １４，１４，１５
ＭＥＲＧＥＬ    ９，１２，１４
ＤＯＴ        １２，  ２，  ４
ＤＯＴ        １３，  ２，  ５
ＤＯＴ        １４，  ２，  ６
ＤＯＴ        １５，  ２，  ７
ＭＥＲＧＥＬ  １２，１２，１３
ＭＥＲＧＥＬ  １４，１４，１５
ＭＥＲＧＥＬ  １０，１２，１４
ＤＯＴ        １２，  ３，  ４
ＤＯＴ        １３，  ３，  ５
ＤＯＴ        １４，  ３，  ６
ＤＯＴ        １５，  ３，  ７
ＭＥＲＧＥＬ  １２，１２，１３
ＭＥＲＧＥＬ  １４，１４，１５
ＭＥＲＧＥＬ  １１，１２，１４
【００１１】
これにより、従来技術によって演算命令に先立ってデータ転送命令を実行する場合には、４行４列の内積演算のために例えば計３６命令を要することがわかる。
【非特許文献１】「IA-32 Intel(R) Architecture Software Developer's Manual Volume 1: Basic Architecture」、Intel Corporation、２００４年
【非特許文献２】「AltiVec Technology Programming Interface Manual」、Motorola Inc.、１９９９年６月
【発明の開示】
【発明が解決しようとする課題】
【００１２】
上述の従来技術では演算命令に先立ってデータ整列命令を実行しているが、このようなデータ整列命令は実質的な演算を行なわないため、演算効率を著しく低下させる要因となる。
【００１３】
そこで、本発明は、ＳＩＭＤ型プロセッサにおける演算命令に先立ったデータ整列命令を不要とし、演算効率を向上させることを目的とする。
【課題を解決するための手段】
【００１４】
上記課題を解決するために本発明の請求項１記載のプロセッサは、複数のメモリバンクと、読出しレジスタ指定および読出しレジスタ走査方向に基づいて上記複数のメモリバンクに対して個別に読出しアドレスを供給する読出しアドレス生成回路と、上記読出しアドレスに従って上記複数のメモリバンクから読み出された複数の読出しデータの配置を上記読出しレジスタ指定および読出しレジスタ変位に基づいて制御する読出し制御回路と、上記読出し制御回路によって配置制御された複数の読出しデータを対象として複数の演算処理を行う演算器とを具備する。これにより、複数のメモリバンクに格納されている複数のデータの配置を制御した上で演算器に供給するという作用をもたらす。
【００１５】
また、本発明の請求項２記載のプロセッサは、請求項１記載のプロセッサにおいて、上記読出しレジスタ走査方向が上記複数のメモリバンクに対する読出しアドレスが同一であるかまたは一定間隔で変化するかを指定するものである。これにより、複数のメモリバンクに格納されている複数のデータを所望の走査方向によって走査して読み出すという作用をもたらす。
【００１６】
また、本発明の請求項３記載のプロセッサは、請求項１記載のプロセッサにおいて、上記演算器が上記複数の演算処理として積和演算を行うものである。これにより、複数のメモリバンクに格納されている行列データについて内積演算を行うことを可能にするという作用をもたらす。
【００１７】
また、本発明の請求項４記載のプロセッサは、複数のメモリバンクと、書込みレジスタ指定および書込みレジスタ走査方向に基づいて上記複数のメモリバンクに対して個別に書込みアドレスを供給する書込みアドレス生成回路と、複数のデータに対して複数の演算処理を行って複数の書込みデータを出力する演算器と、上記演算器から出力された上記複数の書込みデータの配置を上記書込みレジスタ指定、書込みレジスタ変位および書込みレジスタ要素数に基づいて制御して上記複数のメモリバンクに供給する書込み制御回路とを具備する。これにより、演算器から出力される複数の書込みデータの配置を制御した上で複数のメモリバンクに供給するという作用をもたらす。
【００１８】
また、本発明の請求項５記載のプロセッサは、請求項４記載のプロセッサにおいて、上記書込みレジスタ走査方向は、上記複数のメモリバンクに対する書込みアドレスが同一であるかまたは一定間隔で変化するかを指定するものである。これにより、複数のメモリバンクに対して所望の走査方向によって走査して複数のデータを書き込むという作用をもたらす。
【００１９】
また、本発明の請求項６記載のプロセッサは、請求項４記載のプロセッサにおいて、上記演算器が上記複数の演算処理として積和演算を行うものである。これにより、複数のメモリバンクに格納されている行列データについて内積演算を行うことを可能にするという作用をもたらす。
【００２０】
また、本発明の請求項７記載のプロセッサは、複数のメモリバンクと、読出しレジスタ指定および読出しレジスタ走査方向に基づいて上記複数のメモリバンクに対して個別に読出しアドレスを供給する読出しアドレス生成回路と、上記読出しアドレスに従って上記複数のメモリバンクから読み出された複数の読出しデータの配置を上記読出しレジスタ指定および読出しレジスタ変位に基づいて制御する読出し制御回路と、上記読出し制御回路によって配置制御された複数の読出しデータを対象として複数の演算処理を行って複数の書込みデータを出力する演算器と、書込みレジスタ指定および書込みレジスタ走査方向に基づいて上記複数のメモリバンクに対して個別に書込みアドレスを供給する書込みアドレス生成回路と、上記演算器から出力された上記複数の書込みデータの配置を上記書込みレジスタ指定、書込みレジスタ変位および書込みレジスタ要素数に基づいて制御して上記複数のメモリバンクに供給する書込み制御回路とを具備する。これにより、複数のメモリバンクに格納されている複数のデータの配置を制御した上で演算器に供給するとともに、演算器から出力される複数の書込みデータの配置を制御した上で複数のメモリバンクに供給するという作用をもたらす。
【００２１】
また、本発明の請求項８記載のプロセッサは、請求項７記載のプロセッサにおいて、上記読出しレジスタ走査方向が上記複数のメモリバンクに対する読出しアドレスが同一であるかまたは一定間隔で変化するかを指定し、上記書込みレジスタ走査方向が上記複数のメモリバンクに対する書込みアドレスが同一であるかまたは一定間隔で変化するかを指定するものである。これにより、複数のメモリバンクに格納されている複数のデータを所望の走査方向によって走査して読み出すとともに、複数のメモリバンクに対して所望の走査方向によって走査して複数のデータを書き込むという作用をもたらす。
【００２２】
また、本発明の請求項９記載のプロセッサは、請求項７記載のプロセッサにおいて、上記演算器が上記複数の演算処理として積和演算を行うものである。これにより、複数のメモリバンクに格納されている行列データについて内積演算を行うことを可能にするという作用をもたらす。
【００２３】
また、本発明の請求項１０記載のプロセッサは、プログラムに含まれる命令をデコードする命令デコーダと、複数のメモリバンクと、上記命令デコーダによってデコードされた読出しレジスタ指定および読出しレジスタ走査方向に基づいて上記複数のメモリバンクに対して個別に読出しアドレスを供給する読出しアドレス生成回路と、上記読出しアドレスに従って上記複数のメモリバンクから読み出された複数の読出しデータの配置を上記命令デコーダによってデコードされた上記読出しレジスタ指定および読出しレジスタ変位に基づいて制御する読出し制御回路と、上記読出し制御回路によって配置制御された複数の読出しデータを対象として複数の演算処理を行って複数の書込みデータを出力する演算器と、上記命令デコーダによってデコードされた書込みレジスタ指定および書込みレジスタ走査方向に基づいて上記複数のメモリバンクに対して個別に書込みアドレスを供給する書込みアドレス生成回路と、上記演算器から出力された上記複数の書込みデータの配置を上記命令デコーダによってデコードされた上記書込みレジスタ指定、書込みレジスタ変位および書込みレジスタ要素数に基づいて制御して上記複数のメモリバンクに供給する書込み制御回路とを具備する。これにより、命令デコーダによってデコードされた結果に従って、複数のメモリバンクに格納されている複数のデータの配置を制御した上で演算器に供給するとともに、演算器から出力される複数の書込みデータの配置を制御した上で複数のメモリバンクに供給するという作用をもたらす。
【発明の効果】
【００２４】
本発明によれば、ＳＩＭＤ型プロセッサにおいて演算命令に先立ったデータ整列命令を不要とし、演算効率を向上させるという優れた効果を奏し得る。
【発明を実施するための最良の形態】
【００２５】
次に本発明の実施の形態について図面を参照して詳細に説明する。
【００２６】
図１は、本発明の実施の形態におけるＳＩＭＤ型プロセッサ１００の構成例を示す図である。このＳＩＭＤ型プロセッサ１００は、プログラムカウンタ１１０と、命令デコーダ１２０と、レジスタファイル１３０と、演算器１４０とを備える。このＳＩＭＤ型プロセッサ１００は、命令メモリ４００に接続し、もしくはそれを内蔵する。この命令メモリ４００はＲＩＳＣ（Reduced Instruction Set Computer）アーキテクチャ型命令セットとして例えば３個のオペランドを有する３２ビット固定長命令が格納される。プロセッサ１００はその固定長命令を４つ同時に水平実行するＳＩＭＤ型プロセッサとして実現される。なお、ここでは一例として４命令の同時実行を想定して以下説明するが、これに限られず任意の数の命令を同時に実行するようにしても構わない。
【００２７】
プログラムカウンタ１１０は、命令メモリ４００における命令の読出しアドレスを計数するカウンタである。このプログラムカウンタ１１０により指示されたアドレス１１９によって命令メモリ４００から命令４０９の読出しが行われて、命令デコーダ１２０に供給される。命令デコーダ１２０は、命令メモリ４００から読み出された命令４０９をデコードして、命令のオペコードやその命令に必要とされるオペランドを抽出する。レジスタファイル１３０は、デコードされたオペランドによりアクセスされ、読出しおよび書込みが行われる。演算器１４０は、デコードされたオペコードに基づいて、読み出されたオペランドに対して所定の演算を行う。この演算器１４０による演算結果は、デコードされたオペランドに基づいて、レジスタファイル１３０に書き込まれる。
【００２８】
図２は、本発明の実施の形態における命令フォーマットの形式例を示す図である。この命令フォーマットでは、１つの命令に、機能コード２１０、書込みオペランド２２０と、第１読出しオペランド２３０、および、第２読出しオペランド２４０の各フィールドが存在する。機能コード２１０は、命令のオペコードであり、当該命令により実現される動作を示す。この機能コード２１０では、例えば、加算命令などの演算の種類や他の動作の種別などが定義される。
【００２９】
書込みオペランド２２０には、書込みレジスタ指定２２１、書込みレジスタ走査方向２２２、書込みレジスタ変位２２３、および、書込みレジスタ要素数２２４の各フィールドが存在する。書込みレジスタ指定２２１は、書込みレジスタのアドレスを定義する。書込みレジスタ走査方向２２２は、書込みレジスタに対して書込みを行う際の行列の縦横何れかの方向を定義する。書込みレジスタ変位２２３は、書込みレジスタに対して書込みを行う際の横方向の変位を定義する。書込みレジスタ要素数２２４は、書込みレジスタに対して書込みを行う際の要素数を定義する。
【００３０】
第１読出しオペランド２３０には、第１読出しレジスタ指定２３１、第１読出しレジスタ走査方向２３２、第１読出しレジスタ変位２３３、および、第１読出しレジスタ要素数２３４の各フィールドが存在する。第１読出しレジスタ指定２３１は、第１読出しレジスタのアドレスを定義する。第１読出しレジスタ走査方向２３２は、第１読出しレジスタから読出しを行う際の行列の縦横何れかの方向を定義する。第１読出しレジスタ変位２３３は、第１読出しレジスタから読出しを行う際の横方向の変位を定義する。第１読出しレジスタ要素数２３４は、第１読出しレジスタから読出しを行う際の要素数を定義する。
【００３１】
第２読出しオペランド２４０には、第２読出しレジスタ指定２４１、第２読出しレジスタ走査方向２４２、第２読出しレジスタ変位２４３、および、第２読出しレジスタ要素数２４４の各フィールドが存在する。第２読出しレジスタ指定２４１は、第２読出しレジスタのアドレスを定義する。第２読出しレジスタ走査方向２４２は、第２読出しレジスタから読出しを行う際の行列の縦横何れかの方向を定義する。第２読出しレジスタ変位２４３は、第２読出しレジスタから読出しを行う際の横方向の変位を定義する。第２読出しレジスタ要素数２４４は、第２読出しレジスタから読出しを行う際の要素数を定義する。
【００３２】
図３は、本発明の実施の形態における命令デコーダ１２０によるデコード例を示す図である。この命令デコーダ１２０は、命令メモリ４００から読み出された命令４０９をデコードして、上述の各フィールドを抽出する。すなわち、機能コード２１０を機能コード１２１０に、第１読出しレジスタ指定２３１を第１読出しレジスタ指定１２３１に、第１読出しレジスタ走査方向２３２を第１読出しレジスタ走査方向１２３２に、第１読出しレジスタ変位２３３を第１読出しレジスタ変位１２３３に、第１読出しレジスタ要素数２３４を第１読出しレジスタ要素数１２３４にそれぞれ出力する。
【００３３】
また、第２読出しレジスタ指定２４１を第２読出しレジスタ指定１２４１に、第２読出しレジスタ走査方向２４２を第２読出しレジスタ走査方向１２４２に、第２読出しレジスタ変位２４３を第２読出しレジスタ変位１２４３に、第２読出しレジスタ要素数２４４を第２読出しレジスタ要素数１２４４にそれぞれ出力する。また、書込みレジスタ指定２２１を書込みレジスタ指定１２２１に、書込みレジスタ走査方向２２２を書込みレジスタ走査方向１２２２に、書込みレジスタ変位２２３を書込みレジスタ変位１２２３に、書込みレジスタ要素数２２４を書込みレジスタ要素数１２２４にそれぞれ出力する。
【００３４】
図４は、本発明の実施の形態におけるレジスタ指定の一例を示す図である。ここでは、アクセス対象のレジスタファイルが、後述のようにメモリバンクに分割されていることを想定する。レジスタ指定の内容を上位ビットと下位ビットとに分けると、上位ビットは行列を単位として付与されるマトリックス番号として認識され、下位ビットはそのマトリックスの内部における行番号として認識される。
【００３５】
例えば、それぞれ４つの行を有する４つの行列（マトリックス）において何れか１つの行を指定する場合、２ビットのマトリックス番号２１１および２ビットの行番号２１２の計４ビットによりレジスタ指定を行うことができる。これらマトリックス番号２１１および行番号２１２により、メモリバンク３１９の行、すなわちレジスタが特定される。
【００３６】
このレジスタ指定は、書込みレジスタ指定２２１、第１読出しレジスタ指定２３１、および、第２読出しレジスタ指定２４１において用いられる。
【００３７】
図５は、本発明の実施の形態における走査方向の態様を示す図である。走査方向のコードとして「０」が指定された場合には、図５（ａ）のように行列を横方向にアクセスすることを意味する。例えば、行列Ａ［ｉ］［ｊ］に対して走査方向のコード「０」が指定された場合には、インデックス「ｉ」が固定され、インデックス「ｊ」が変化する方向にアクセスが行われることになる。
【００３８】
一方、走査方向のコードとして「１」が指定された場合には、図５（ｂ）のように行列を縦方向にアクセスすることを意味する。例えば、行列Ａ［ｉ］［ｊ］に対して走査方向のコード「１」が指定された場合には、インデックス「ｊ」が固定され、インデックス「ｉ」が変化する方向にアクセスが行われることになる。
【００３９】
この走査方向は、書込みレジスタ走査方向２２２、第１読出しレジスタ走査方向２３２、および、第２読出しレジスタ走査方向２４２において用いられる。
【００４０】
また、書込みレジスタ変位２２３、第１読出しレジスタ変位２３３、および、第２読出しレジスタ変位２４３において用いられる変位は、図５の行列における横方向の変位であり、書込みまたは読出しの開始位置の"ずれ"が定義される。
【００４１】
また、書込みレジスタ要素数２２４、第１読出しレジスタ要素数２３４、および、第２読出しレジスタ要素数２４４において用いられる要素数は、一度にアクセスされるデータの数を意味する。例えば、ｎ行ｎ列の行列に対して縦横何れかの方向にｎ要素のデータを同時にアクセスするよう構成することができる。なお、この要素数の表現形式として、例えば最大４要素の場合に２ビットを使用する場合には、１要素のときは「０（００ｂ）」、２要素のときは「１（０１ｂ）」、３要素のときは「２（１０ｂ）」、４要素のときは「３（１１ｂ）」という具合に表現する。
【００４２】
図６は、本発明の実施の形態におけるレジスタファイル１３０の論理構成の一例を示す図である。このレジスタファイル１３０は、一例として１６行４列の行列としてアドレスが付与され、それぞれ３２ビットのデータをＲ［０］［０］からＲ［１５］［３］までの計６４個格納することができるようになっている。
【００４３】
図７は、本発明の実施の形態におけるレジスタファイル１３０に対する行列割当ての一例を示す図である。図６のレジスタファイル１３０の論理構成例において、それぞれ４行４列の行列Ａ、Ｂ、および、Ｄを順番に割り当てると、図７のようになる。すなわち、Ｒ［０］［０］からＲ［３］［３］に行列Ａが割り当てられ、Ｒ［４］［０］からＲ［７］［３］に行列Ｂが割り当てられ、Ｒ［８］［０］からＲ［１１］［３］に行列Ｄが割り当てられる。
【００４４】
なお、Ｒ［１２］［０］からＲ［１５］［３］の領域には特定の行列は割り当てられていないため、これら１６個分のデータ領域は必要に応じて作業用領域として利用できるようになっている。
【００４５】
図８は、本発明の実施の形態におけるレジスタファイル１３０の物理的な分割例を示す図である。図６で示した論理構成に対して、レジスタファイル１３０は多数のレジスタに同時アクセスできるように、複数のメモリバンクに分割されて構成される。図８では、レジスタファイル１３０は４つのメモリバンク３１０乃至３１３に分割されている。すなわち、ｎ×ｎ（ｎは整数）の行列をｍ個（ｍは整数）格納できるレジスタファイルは、ｎ×ｍ個のデータを記憶することが可能なｎ個のメモリバンクから構成される。
【００４６】
各メモリバンクに割り当てられる各データは、図６で示した順序とは異なり、行毎にいわゆるスキューをかけた状態になっている。例えば、第０行の各データは、第０バンクにＲ［０］［０］、第１バンクにＲ［０］［１］、第２バンクにＲ［０］［２］、第３バンクにＲ［０］［３］がそれぞれ割り当てられていて図６の例と一致する。これに対して、第１行の各データは、第０バンクにＲ［１］［３］、第１バンクにＲ［１］［０］、第２バンクにＲ［１］［１］、第３バンクにＲ［１］［２］がそれぞれ割り当てられていて、第０行と比べて右方向に１つずつずれた配置となっている。
【００４７】
このような配置が行われることにより、行列のアクセスを縦方向または横方向に行う際に、何れの場合も同時にアクセスが可能となる。例えば、図７にように行列Ａを割り当てた場合、横方向にアクセスしても各メモリバンク３１０乃至３１３のそれぞれに一つずつデータが存在し、縦方向にアクセスしても同様に各メモリバンク３１０乃至３１３のそれぞれに一つずつデータが存在する。これにより、縦横何れの方向のアクセスについても４つのデータに同時にアクセスできることになる。
【００４８】
図９は、本発明の実施の形態におけるレジスタファイル１３０の物理構成の一例を示す図である。このレジスタファイル１３０の例は４つのデータに同時アクセスすることを想定して、４つのメモリバンク３１０乃至３１３を備えている。また、レジスタファイル１３０は、これらメモリバンク３１０乃至３１３の制御回路として、アドレス生成回路３２０、３３０および３４０と、書込み制御回路３５０と、読出し制御回路３６０および３７０とを備えている。
【００４９】
メモリバンク３１０乃至３１３は、それぞれ、書込みアドレスＭＷＡ、第１読出しアドレスＭ１ＲＡ、第２読出しアドレスＭ２ＲＡ、書込みデータＭＷＤ、第１読出しデータＭ１ＲＤ、第２読出しデータＭ２ＲＤ、および、書込み制御ＭＷＥの各ポートを備えており、それぞれ独立して動作する。第１読出しアドレスＭ１ＲＡにアドレスを与えることにより第１読出しデータＭ１ＲＤから対応するデータが出力され、第２読出しアドレスＭ２ＲＡにアドレスを与えることにより第２読出しデータＭ２ＲＤから対応するデータが出力される。また、書込みアドレスＭＷＡにアドレスを与え、書込みデータＭＷＤに書込みデータを与え、書込み制御ＭＷＥをアクティブにすることで対応するアドレスに書込みデータが書き込まれる。
【００５０】
アドレス生成回路３２０は、メモリバンク３１０乃至３１３に対する書込みアドレスＭＷＡを生成する回路である。このアドレス生成回路３２０は、命令デコーダ１２０から書込みレジスタ指定１２２１および書込みレジスタ走査方向１２２２を受けて、メモリバンク３１０乃至３１３に対して書込みアドレス３２９０乃至３２９３を出力する。
【００５１】
アドレス生成回路３３０は、メモリバンク３１０乃至３１３に対する第１読出しアドレスＭ１ＲＡを生成する回路である。このアドレス生成回路３３０は、命令デコーダ１２０から第１読出しレジスタ指定１２３１および第１読出しレジスタ走査方向１２３２を受けて、メモリバンク３１０乃至３１３に対して第１読出しアドレス３３９０乃至３３９３を出力する。
【００５２】
アドレス生成回路３４０は、メモリバンク３１０乃至３１３に対する第２読出しアドレスＭ２ＲＡを生成する回路である。このアドレス生成回路３３０は、命令デコーダ１２０から第２読出しレジスタ指定１２４１および第２読出しレジスタ走査方向１２４２を受けて、メモリバンク３１０乃至３１３に対して第２読出しアドレス３４９０乃至３４９３を出力する。
【００５３】
書込み制御回路３５０は、メモリバンク３１０乃至３１３に対して書込み制御ＭＷＥおよび書込みデータＭＷＤを供給する回路である。この書込み制御回路３５０は、命令デコーダ１２０から書込みレジスタ指定１２２１、書込みレジスタ変位１２２３および書込みレジスタ要素数１２２４を受け、また、演算器１４０から書込みデータ１４９０乃至１４９３を受けて、メモリバンク３１０乃至３１３に対して書込み制御３５８０乃至３５８３および書込みデータ３５９０乃至３５９３を出力する。
【００５４】
読出し制御回路３６０は、メモリバンク３１０乃至３１３から読み出された第１読出しデータＭ１ＲＤの配置を制御する回路である。この読出し制御回路３６０は、命令デコーダ１２０から第１読出しレジスタ指定１２３１および第１読出しレジスタ変位１２３３を受け、また、メモリバンク３１０乃至３１３から第１読出しデータ３１０１乃至３１３１を受けて、演算器１４０に対して第１読出しデータ３６９０乃至３６９３を出力する。
【００５５】
読出し制御回路３７０は、メモリバンク３１０乃至３１３から読み出された第２読出しデータＭ２ＲＤの配置を制御する回路である。この読出し制御回路３６０は、命令デコーダ１２０から第２読出しレジスタ指定１２４１および第２読出しレジスタ変位１２４３を受け、また、メモリバンク３１０乃至３１３から第２読出しデータ３１０２乃至３１３２を受けて、演算器１４０に対して第２読出しデータ３７９０乃至３７９３を出力する。
【００５６】
図１０は、本発明の実施の形態における書込み制御回路３５０の一構成例を示す図である。この書込み制御回路３５０は、図１０（ａ）に示すとおり、要素数デコーダ３５１と、ビット抽出回路３５２と、加算器３５３と、４つの要素数セレクタ３５４と、４つのデータセレクタ３５５とを備える。
【００５７】
ビット抽出回路３５２は、命令デコーダ１２０からの書込みレジスタ指定１２２１の下位２ビット、すなわち図４におけるマトリックス内行番号２１２に相当するデータ３５２２を出力する。加算器３５３は、このビット抽出回路３５２からのデータ３５２２と命令デコーダ１２０からの書込みレジスタ変位１２２３とを加算して選択信号３５３１として出力する。この選択信号３５３１は、書込みレジスタに対する書込み開始位置を示すことになる。
【００５８】
要素数デコーダ３５１は、命令デコーダ１２０からの書込みレジスタ要素数１２２４を図１０（ｂ）のようにデコードする。この書込みレジスタ要素数１２２４は「０」のとき１要素、「１」のとき２要素、「２」のとき３要素、「３」のとき４要素を示すため、この要素数に応じた書込みを指示する書込み制御信号を要素数セレクタ３５４に対して出力する。
【００５９】
要素数セレクタ３５４は、要素数デコーダ３５１によってデコードされた書込み制御信号を、選択信号３５３１に従って選択する。この要素数セレクタ３５４は４つ備えられ、４つのメモリバンク３１０乃至３１３にそれぞれ書込み制御信号３５８０乃至３５８３を出力する。
【００６０】
データセレクタ３５５は、演算器１４０からの書込みデータ１４９０乃至１４９３を、選択信号３５３１に従って選択する。このデータセレクタ３５５は４つ備えられ、４つのメモリバンク３１０乃至３１３にそれぞれ書込みデータ３５９０乃至３５９３を出力する。
【００６１】
なお、上述の書込み制御を一般化すると、書込みデータ選択信号ＭＷＤｓｅｌ、書込みデータＭＷＤおよび書込み制御信号ＭＷＥは次式により定義される。
ＭＷＤｓｅｌ［ｂ］  ＝  ｐｍｏｄ（ｂ−ＩＸ−ＦＳ，ｎ）
ＭＷＤ［ｂ］  ＝  ＷＤ［ＭＷＤｓｅｌ［ｂ］］
ＭＷＥ［ｂ］  ＝  （ｐｍｏｄ（ｂ−ＩＸ−ＦＳ，ｎ）<＝ＳＺ）？１；０
【００６２】
ここで、ＩＸはレジスタ指定を表し、ＦＳはレジスタ変位を表し、ＳＺはレジスタ要素数を表すものとする。また、ｎはメモリバンク数、ｂはメモリバンク番号（０乃至ｎ−１）である。また、ＷＤ［０〜ｎ−１］は実際に書き込まれるデータを表す。また、「ｐｍｏｄ（ｉ，ｊ）」という関数は、整数ｉを整数ｊで割った際の余りを返すものとする。また、「ａ？ｘ；ｙ」という関数は、ａ＝１のときにｘを、ａ＝０のときにｙを返すものとする。
【００６３】
図１１は、本発明の実施の形態における書込み制御回路３５０のデータセレクタ３５５による選択例を示す図である。選択信号３５３１は加算器３５３の出力であり、データセレクタ３５５の選択信号ＳＥＬとして供給される。この選択信号３５３１が「０」であれば、演算器１４０からの書込みデータ１４９０乃至１４９３は、そのままの配置によって書込みデータ３５９０乃至３５９３として出力される。
【００６４】
これに対し、選択信号３５３１が「１」であれば、演算器１４０からの書込みデータ１４９０乃至１４９３は、１要素分増加する方向、すなわち図９のメモリバンクの配置では左方向に巡回シフトされて、書込みデータ３５９０乃至３５９３として出力される。同様に、選択信号３５３１が「２」であれば演算器１４０からの書込みデータ１４９０乃至１４９３は２要素分左方向に巡回シフトされ、選択信号３５３１が「３」であれば演算器１４０からの書込みデータ１４９０乃至１４９３は３要素分左方向に巡回シフトされる。
【００６５】
なお、この図１１では、データセレクタ３５５による選択例を示したが、要素数セレクタ３５４についても同様の構成で選択信号３５３１が接続されており、データセレクタ３５５と同様の動作をする。
【００６６】
図１２は、本発明の実施の形態におけるアドレス生成回路３２０の一構成例を示す図である。このアドレス生成回路３２０は、ビット分離回路３２１と、減算器３２２０乃至３２２３と、行番号セレクタ３２３０乃至３２３３と、結合回路３２５０乃至３２５３とを備えている。
【００６７】
ビット分離回路３２１は、命令デコーダ１２０からの書込みレジスタ指定１２２１を図４で説明したように２ビットのマトリックス番号３２１１と２ビットのマトリックス内行番号３２１２とに分離する。
【００６８】
減算器３２２０は、定数「０」からマトリックス内行番号３２１２を減算して行番号セレクタ３２３０に供給する。減算器３２２１は、定数「１」からマトリックス内行番号３２１２を減算して行番号セレクタ３２３１に供給する。減算器３２２２は、定数「２」からマトリックス内行番号３２１２を減算して行番号セレクタ３２３２に供給する。また、減算器３２２３は、定数「３」からマトリックス内行番号３２１２を減算して行番号セレクタ３２３３に供給する。これにより、行番号セレクタ３２３０乃至３２３３の入力「１」には、それぞれ１ずつ増加する値が供給される。
【００６９】
一方、行番号セレクタ３２３０乃至３２３３の入力「０」には、マトリックス内行番号３２１２がそのまま供給される。従って、命令デコーダ１２０からの書込みレジスタ走査方向１２２２が「０」であれば行番号セレクタ３２３０乃至３２３３からそれぞれ１つずつ異なる行番号３２４０乃至３２４３が出力され、書込みレジスタ走査方向１２２２が「１」であれば行番号セレクタ３２３０乃至３２３３から同一の行番号３２４０乃至３２４３がそれぞれ出力される。
【００７０】
このようにして行番号セレクタ３２３０乃至３２３３から出力された行番号３２４０乃至３２４３は、結合回路３２５０乃至３２５３によって再びマトリックス番号３２１１と結合されて、書込みアドレス３２９０乃至３２９３としてメモリバンク３１０乃至３１３に出力される。すなわち、命令デコーダ１２０からの書込みレジスタ走査方向１２２２が「０」であれば行列の横方向にアクセスするためのアドレスが生成され、書込みレジスタ走査方向１２２２が「１」であれば行列の縦方向にアクセスするためのアドレスが生成される。これを各メモリバンク３１０乃至３１３におけるアドレスとして捉えると、書込みレジスタ走査方向１２２２が「０」であれば各メモリバンク３１０乃至３１３に同一の書込みアドレスが供給され、書込みレジスタ走査方向１２２２が「１」であれば各メモリバンク３１０乃至３１３に一定間隔で変化（１ずつ増加）する値が書込みアドレスとして供給されることになる。
【００７１】
なお、この図１２ではアドレス生成回路３２０の一構成例について説明したが、アドレス生成回路３３０や３４０についても同様の構成により実現することができる。
【００７２】
また、上述のアドレス生成を一般化すると、メモリアドレスＭＡ［ｂ］は次式により定義される。
ＭＡ［ｂ］  ＝  （ＩＸ−ｐｍｏｄ（ＩＸ，ｎ））＋（ＲＸＣ  ？  ｐｍｏｄ（ｂ−ＩＸ，ｎ）  ；  ｐｍｏｄ（ＩＸ，ｎ））
【００７３】
ここで、ＩＸはレジスタ指定を表し、ＲＸＣはレジスタ走査方向を表すものとする。また、ｎはメモリバンク数、ｂはメモリバンク番号（０乃至ｎ−１）である。また、「ｐｍｏｄ（ｉ，ｊ）」という関数は、整数ｉを整数ｊで割った際の余りを返すものとする。また、「ａ？ｘ；ｙ」という関数は、ａ＝１のときにｘを、ａ＝０のときにｙを返すものとする。
【００７４】
図１３は、本発明の実施の形態における読出し制御回路３６０の一構成例を示す図である。この読出し制御回路３６０は、ビット抽出回路３６１と、加算器３６２と、４つのデータセレクタ３６３とを備えている。
【００７５】
ビット抽出回路３６１は、命令デコーダ１２０からの第１読出しレジスタ指定１２３１の下位２ビット、すなわち図４におけるマトリックス内行番号２１２に相当するデータ３６１２を出力する。加算器３６２は、このビット抽出回路３６１からのデータ３６１２と命令デコーダ１２０からの第１読出しレジスタ変位１２３３とを加算して選択信号３６２１として出力する。この選択信号３６２１は、第１読出しレジスタにおける読出し開始位置を示すことになる。
【００７６】
データセレクタ３６３は、メモリバンク３１０乃至３１３からの第１読出しデータ３１０１乃至３１３１を、選択信号３６２１に従って選択する。このデータセレクタ３６３は４つ備えられ、演算器１４０の第１オペランドの４つのデータとして第１読出しデータ３６９０乃至３６９３を出力する。
【００７７】
なお、上述の読出し制御を一般化すると、読出しデータ選択信号ＭＲＤｓｅｌおよび読み出しデータＭＲＤは次式により定義される。
ＭＲＤｓｅｌ［ｂ］  ＝  ｐｍｏｄ（ｂ−ＩＸ−ＦＳ，ｎ）
ＲＤ［ＭＲＤｓｅｌ［ｂ］］  ＝  ＭＲＤ［ｂ］
【００７８】
ここで、ＩＸはレジスタ指定を表し、ＦＳはレジスタ変位を表すものとする。また、ｎはメモリバンク数、ｂはメモリバンク番号（０乃至ｎ−１）である。また、ＲＤ［０〜ｎ−１］は実際に読み出されるデータを表す。また、「ｐｍｏｄ（ｉ，ｊ）」という関数は、整数ｉを整数ｊで割った際の余りを返すものとする。
【００７９】
図１４は、本発明の実施の形態における読出し制御回路３６０のデータセレクタ３６３による選択例を示す図である。選択信号３６２１は加算器３６２の出力であり、データセレクタ３６３の選択信号ＳＥＬとして供給される。この選択信号３６２１が「０」であれば、メモリバンク３１０乃至３１３からの第１読出しデータ３１０１乃至３１３１は、そのままの配置によって第１読出しデータ３６９０乃至３６９３として出力される。
【００８０】
これに対し、選択信号３６２１が「１」であれば、メモリバンク３１０乃至３１３からの第１読出しデータ３１０１乃至３１３１は、１要素分減少する方向、すなわち図９のメモリバンクの配置では右方向に巡回シフトされて、第１読出しデータ３６９０乃至３６９３として出力される。同様に、選択信号３６２１が「２」であればメモリバンク３１０乃至３１３からの第１読出しデータ３１０１乃至３１３１は２要素分右方向に巡回シフトされ、選択信号３６２１が「３」であればメモリバンク３１０乃至３１３からの第１読出しデータ３１０１乃至３１３１は３要素分右方向に巡回シフトされる。
【００８１】
なお、上述の図１３および１４では読出し制御回路３６０の一構成例について説明したが、第２読出しデータ３７９０乃至３７９３を出力する読出し制御回路３７０についても同様の構成により実現することができる。
【００８２】
図１５は、本発明の実施の形態における演算器１４０の一構成例を示す図である。この演算器１４０は、４組の演算回路群１４１と、加算器１４２と、演算結果セレクタ１４３０乃至１４３３とを備えている。
【００８３】
演算回路群１４１は４組の入力オペランド対に対応して設けられる。演算回路群１４１の各々は、例えば加算器、減算器、乗算器、除算器、比較器などを備えている。加算器１４２は、４組の演算回路群１４１における乗算器のそれぞれの出力を受け取り、４つの乗算結果の総和を計算する。すなわち、この加算器１４２の出力が行列の内積演算の１要素分の部分積になる。
【００８４】
演算結果セレクタ１４３０乃至１４３３は、演算回路群１４１および加算器１４２による演算結果を、命令デコーダ１２０からの機能コード１２１０に従って選択して、メモリバンク３１０乃至３１３に対する書込みデータ１４９０乃至１４９３を出力する。例えば、命令デコーダ１２０からの機能コード１２１０が「０」であれば演算回路群１４１による加算結果が選択され、機能コード１２１０が「１」であれば演算回路群１４１による減算結果が選択され、機能コード１２１０が「２」であれば演算回路群１４１による乗算結果が選択され、機能コード１２１０が「３」であれば演算回路群１４１による除算結果が選択され、機能コード１２１０が「４」であれば演算回路群１４１による比較結果が選択されて、それぞれの結果が書込みデータ１４９０乃至１４９３として出力される。
【００８５】
また、機能コード１２１０が「５」の場合には、演算結果セレクタ１４３０において加算器１４２による積和演算の結果が選択され、他の演算結果セレクタ１４３１乃至１４３３における出力は無効になる。この機能コード１２１０が「５」の場合には、書込みデータ１４９０だけが利用されるため、他の書込みデータ１４９１乃至１４９３の内容は問題とはならない。
【００８６】
本発明の実施の形態におけるＳＩＭＤ型プロセッサ１００による内積演算命令ＸＤＯＴは、例えば以下の命令形式により指定される。
ＸＤＯＴ  ｄ＿ｉｘ，ｄ＿ｆｓ，  ａ＿ｉｘ，ａ＿ｒｘｃ，  ｂ＿ｉｘ，ｂ＿ｒｘｃ
【００８７】
このＸＤＯＴ命令は、行列Ａと行列Ｂの内積演算の結果を行列Ｄに格納するものであり、ｄ＿ｉｘは行列Ｄのレジスタ指定、ｄ＿ｆｓは行列Ｄの変位、ａ＿ｉｘは行列Ａのレジスタ指定、ａ＿ｒｘｃは行列Ａの走査方向、ｂ＿ｉｘは行列Ｂのレジスタ指定、ｂ＿ｒｘｃは行列Ｂの走査方向をそれぞれ表す。
【００８８】
このＸＤＯＴ命令の具体的動作は、４行４列の行列データに対して以下のように定義される。
Ｒ［ｄ＿ｉｘ］［ｄ＿ｆｓ］  ＝
（（ａ＿ｒｘｃ  ？  Ｒ［ａ＿ｉｘ−（ａ＿ｉｘ％４）＋０］［ａ＿ｉｘ％４］；
Ｒ［ａ＿ｉｘ］［０］）
×（ｂ＿ｒｘｃ  ？  Ｒ［ｂ＿ｉｘ−（ｂ＿ｉｘ％４）＋０］［ｂ＿ｉｘ％４］；
Ｒ［ｂ＿ｉｘ］［０］））＋
（（ａ＿ｒｘｃ  ？  Ｒ［ａ＿ｉｘ−（ａ＿ｉｘ％４）＋１］［ａ＿ｉｘ％４］；
Ｒ［ａ＿ｉｘ］［１］）
×（ｂ＿ｒｘｃ  ？  Ｒ［ｂ＿ｉｘ−（ｂ＿ｉｘ％４）＋１］［ｂ＿ｉｘ％４］；
Ｒ［ｂ＿ｉｘ］［１］））＋
（（ａ＿ｒｘｃ  ？  Ｒ［ａ＿ｉｘ−（ａ＿ｉｘ％４）＋２］［ａ＿ｉｘ％４］；
Ｒ［ａ＿ｉｘ］［２］）
×（ｂ＿ｒｘｃ  ？  Ｒ［ｂ＿ｉｘ−（ｂ＿ｉｘ％４）＋２］［ｂ＿ｉｘ％４］；
Ｒ［ｂ＿ｉｘ］［２］））＋
（（ａ＿ｒｘｃ  ？  Ｒ［ａ＿ｉｘ−（ａ＿ｉｘ％４）＋３］［ａ＿ｉｘ％４］；
Ｒ［ａ＿ｉｘ］［３］）
×（ｂ＿ｒｘｃ  ？  Ｒ［ｂ＿ｉｘ−（ｂ＿ｉｘ％４）＋３］［ｂ＿ｉｘ％４］；
Ｒ［ｂ＿ｉｘ］［３］））
【００８９】
ここで、「ａ？ｘ；ｙ」という関数は、ａ＝１のときにｘを、ａ＝０のときにｙを返すものとする。また、「ｍ％ｎ」という関数は、整数ｍを整数ｎで割った際の余りを返すものとする。
【００９０】
このＸＤＯＴ命令において、ａ＿ｒｘｃ＝０、ｂ＿ｒｘｃ＝１を指定すれば、行列Ａの任意の行（ａ＿ｉｘにより特定）と行列Ｂの任意の列（ｂ＿ｉｘにより特定）の内積演算結果を行列Ｄの所定の位置（ｄ＿ｉｘおよびｄ＿ｆｓにより特定）に格納することができる。
【００９１】
例えば、具体例として「ＸＤＯＴ  ８，２，  ０，０，  ６，１」が与えられた場合、命令デコーダ１２０は、機能コード１２１０として内積演算を表す「５」を、第１読出しレジスタ指定１２３１として「０」を、第１読出しレジスタ走査方向１２３２として「０」を、第２読出しレジスタ指定１２４１として「６」を、第２読出しレジスタ走査方向１２４２として「１」を、書込みレジスタ指定１２２１として「８」を、書込みレジスタ変位１２２３として「２」をそれぞれデコードする。さらに、４要素の内積演算であるため、第１読出しレジスタ要素数１２３４として「３」を、第１読出しレジスタ変位１２３３として「０」を、第２読出しレジスタ要素数１２４４として「３」を、第２読出しレジスタ変位１２４３として「０」をそれぞれデコードする。また、内積演算結果はスカラ値であるため、書込みレジスタ要素数１２２４として「０」を、書込みレジスタ走査方向１２２２として「０」をそれぞれデコードする。
【００９２】
そして、アドレス生成回路３２０によって、書込みアドレス３２９０乃至３２９３として、それぞれに「８」が供給される。また、アドレス生成回路３３０によって、第１読出しアドレス３３９０乃至３３９３として、それぞれに「０」が供給される。また、アドレス生成回路３４０によって、第２読出しアドレス３４９０乃至３４９３として、それぞれ「６」、「７」、「４」、「５」が供給される。
【００９３】
また、読出し制御回路３６０は、第１読出しデータ３１０１乃至３１３１をそのままの配置で第１読出しデータ３６９０乃至３６９３として出力する。一方、読出し制御回路３７０は、第２読出しデータ３１０２乃至３１３２を２要素分右方向に巡回シフトさせて、第２読出しデータ３１０２を第２読出しデータ３７９２として、第２読出しデータ３１１２を第２読出しデータ３７９３として、第２読出しデータ３１２２を第２読出しデータ３７９０として、第２読出しデータ３１３２を第２読出しデータ３７９１としてそれぞれ出力する。
【００９４】
演算器１４０は、機能コード１２１０に従って、第１読出しデータ３６９０乃至３６９３と第２読出しデータ３７９０乃至３７９３とをそれぞれ乗算し、全ての乗算結果を加算して、書込みデータ１４９０にその加算結果を出力する。
【００９５】
書込み制御回路３５０は、演算器１４０からの書込みデータ１４９０乃至１４９３を２要素分左方向に巡回シフトさせて、書込みデータ１４９０を書込みデータ３５９２として、書込みデータ１４９１を書込みデータ３５９３として、書込みデータ１４９２を書込みデータ３５９０として、書込みデータ１４９３を書込みデータ３５９１としてそれぞれ出力する。また、書込み制御回路３５０は、書込みレジスタ要素数１２２４の「０」をデコードした結果として、書込み制御信号３５８２のみにおいて書込みを許可し、他の書込み制御信号３５８０、３５８１および３５８３においては書込みを許可しない。
【００９６】
これにより、レジスタファイル１３０から、行列Ａの第０行（Ｒ［０］［０］、Ｒ［０］［１］、Ｒ［０］［２］、Ｒ［０］［３］）および行列Ｂの第２列（Ｒ［４］［２］、Ｒ［５］［２］、Ｒ［６］［２］、Ｒ［７］［２］）が読み出され、演算としてＲ［０］［０］×Ｒ［４］［２］＋Ｒ［０］［１］×Ｒ［５］［２］＋Ｒ［０］［２］×Ｒ［６］［２］＋Ｒ［０］［３］×Ｒ［７］［２］が実行されて、その演算結果が行列ＤのＤ［０］［２］（レジスタファイルのＲ［８］［２］）に格納される。
【００９７】
このＸＤＯＴ命令を利用して４行４列の行列データ同士の内積演算を行うためには、以下の手順でプログラムを実行すればよい。
ＸＤＯＴ      ８，０，  ０，０，  ４，１
ＸＤＯＴ      ８，１，  ０，０，  ５，１
ＸＤＯＴ      ８，２，  ０，０，  ６，１
ＸＤＯＴ      ８，３，  ０，０，  ７，１
ＸＤＯＴ      ９，０，  １，０，  ４，１
ＸＤＯＴ      ９，１，  １，０，  ５，１
ＸＤＯＴ      ９，２，  １，０，  ６，１
ＸＤＯＴ      ９，３，  １，０，  ７，１
ＸＤＯＴ    １０，０，  ２，０，  ４，１
ＸＤＯＴ    １０，１，  ２，０，  ５，１
ＸＤＯＴ    １０，２，  ２，０，  ６，１
ＸＤＯＴ    １０，３，  ２，０，  ７，１
ＸＤＯＴ    １１，０，  ３，０，  ４，１
ＸＤＯＴ    １１，１，  ３，０，  ５，１
ＸＤＯＴ    １１，２，  ３，０，  ６，１
ＸＤＯＴ    １１，３，  ３，０，  ７，１
【００９８】
このように、本発明の実施の形態によるＳＩＭＤ型プロセッサ１００によれば、１６個のＸＤＯＴ命令によって４行４列の行列データ同士の内積演算を実現することができる。これは、従来技術に示した３６命令と比較して半分以下の数の命令の実行で足りることを意味している。
【００９９】
このように、本発明の実施の形態によれば、メモリバンク３１０乃至３１３から読み出されたデータの配置を読出し制御回路３６０および３７０で並び替え、演算器１４０による演算実行後の書込みデータ１４９０乃至１４９３の配置を書込み制御回路３５０で並び替えることにより、演算命令に先立ったデータ整列命令を不要にすることができる。
【０１００】
なお、本発明の実施の形態は本発明を具現化するための一例を示したものであり、以下に示すように特許請求の範囲における発明特定事項とそれぞれ対応関係を有するが、これに限定されるものではなく本発明の要旨を逸脱しない範囲において種々の変形を施すことができる。
【産業上の利用可能性】
【０１０１】
本発明の活用例として、例えばプロセッサにおいて複数データの同時処理を行う際に本発明を適用することができる。
【図面の簡単な説明】
【０１０２】
【図１】本発明の実施の形態におけるＳＩＭＤ型プロセッサ１００の構成例を示す図である。
【図２】本発明の実施の形態における命令フォーマットの形式例を示す図である。
【図３】本発明の実施の形態における命令デコーダ１２０によるデコード例を示す図である。
【図４】本発明の実施の形態におけるレジスタ指定の一例を示す図である。
【図５】本発明の実施の形態における走査方向の態様を示す図である。
【図６】本発明の実施の形態におけるレジスタファイル１３０の論理構成の一例を示す図である。
【図７】本発明の実施の形態におけるレジスタファイル１３０に対する行列割当ての一例を示す図である。
【図８】本発明の実施の形態におけるレジスタファイル１３０の物理的な分割例を示す図である。
【図９】本発明の実施の形態におけるレジスタファイル１３０の物理構成の一例を示す図である。
【図１０】本発明の実施の形態における書込み制御回路３５０の一構成例を示す図である。
【図１１】本発明の実施の形態における書込み制御回路３５０のデータセレクタ３５５による選択例を示す図である。
【図１２】本発明の実施の形態におけるアドレス生成回路３２０の一構成例を示す図である。
【図１３】本発明の実施の形態における読出し制御回路３６０の一構成例を示す図である。
【図１４】本発明の実施の形態における読出し制御回路３６０のデータセレクタ３６３による選択例を示す図である。
【図１５】本発明の実施の形態における演算器１４０の一構成例を示す図である。
【符号の説明】
【０１０３】
１００  ＳＩＭＤ型プロセッサ
１１０  プログラムカウンタ
１２０  命令デコーダ
１３０  レジスタファイル
１４０  演算器
１４１  演算回路群
１４２  加算器
２１０  機能コード
２２０  書込みオペランド
２２１  書込みレジスタ指定
２２２  書込みレジスタ走査方向
２２３  書込みレジスタ変位
２２４  書込みレジスタ要素数
２３０  第１読出しオペランド
２３１  第１読出しレジスタ指定
２３２  第１読出しレジスタ走査方向
２３３  第１読出しレジスタ変位
２３４  第１読出しレジスタ要素数
２４０  第２読出しオペランド
２４１  第２読出しレジスタ指定
２４２  第２読出しレジスタ走査方向
２４３  第２読出しレジスタ変位
２４４  第２読出しレジスタ要素数
３１０〜３１３、３１９  メモリバンク
３２０、３３０、３４０  アドレス生成回路
３２１  ビット分離回路
３５０  書込み制御回路
３５１  要素数デコーダ
３５２  ビット抽出回路
３５３  加算器
３５４  要素数セレクタ
３５５  データセレクタ
３６０、３７０  読出し制御回路
３６１  ビット抽出回路
３６２  加算器
３６３  データセレクタ
４００  命令メモリ
１４３０〜１４３３  演算結果セレクタ
３２２０〜３２２３  減算器
３２３０〜３２３３  行番号セレクタ
３２５０〜３２５３  結合回路
【図１】
2005309499.tif 000003
【図２】
2005309499.tif 000004
【図３】
2005309499.tif 000005
【図４】
2005309499.tif 000006
【図５】
2005309499.tif 000007
【図６】
2005309499.tif 000008
【図７】
2005309499.tif 000009
【図８】
2005309499.tif 000010
【図９】
2005309499.tif 000011
【図１０】
2005309499.tif 000012
【図１１】
2005309499.tif 000013
【図１２】
2005309499.tif 000014
【図１３】
2005309499.tif 000015
【図１４】
2005309499.tif 000016
【図１５】
2005309499.tif 000017