JP2005309499A - プロセッサ - Google Patents

プロセッサ Download PDF

Info

Publication number
JP2005309499A
JP2005309499A JP2004121705A JP2004121705A JP2005309499A JP 2005309499 A JP2005309499 A JP 2005309499A JP 2004121705 A JP2004121705 A JP 2004121705A JP 2004121705 A JP2004121705 A JP 2004121705A JP 2005309499 A JP2005309499 A JP 2005309499A
Authority
JP
Japan
Prior art keywords
read
write
register
memory banks
data
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.)
Granted
Application number
JP2004121705A
Other languages
English (en)
Other versions
JP3985797B2 (ja
Inventor
Koichi Hasegawa
浩一 長谷川
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.)
Sony Corp
Original Assignee
Sony 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 Sony Corp filed Critical Sony Corp
Priority to JP2004121705A priority Critical patent/JP3985797B2/ja
Priority to US11/100,490 priority patent/US7313645B2/en
Priority to CNB2005100643774A priority patent/CN100410919C/zh
Priority to EP05290840A priority patent/EP1586991A3/en
Priority to KR1020050031382A priority patent/KR20060045756A/ko
Publication of JP2005309499A publication Critical patent/JP2005309499A/ja
Application granted granted Critical
Publication of JP3985797B2 publication Critical patent/JP3985797B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • EFIXED CONSTRUCTIONS
    • E06DOORS, WINDOWS, SHUTTERS, OR ROLLER BLINDS IN GENERAL; LADDERS
    • E06BFIXED OR MOVABLE CLOSURES FOR OPENINGS IN BUILDINGS, VEHICLES, FENCES OR LIKE ENCLOSURES IN GENERAL, e.g. DOORS, WINDOWS, BLINDS, GATES
    • E06B1/00Border constructions of openings in walls, floors, or ceilings; Frames to be rigidly mounted in such openings
    • E06B1/04Frames for doors, windows, or the like to be fixed in openings
    • E06B1/52Frames specially adapted for doors
    • EFIXED CONSTRUCTIONS
    • E06DOORS, WINDOWS, SHUTTERS, OR ROLLER BLINDS IN GENERAL; LADDERS
    • E06BFIXED OR MOVABLE CLOSURES FOR OPENINGS IN BUILDINGS, VEHICLES, FENCES OR LIKE ENCLOSURES IN GENERAL, e.g. DOORS, WINDOWS, BLINDS, GATES
    • E06B1/00Border constructions of openings in walls, floors, or ceilings; Frames to be rigidly mounted in such openings
    • E06B1/56Fastening frames to the border of openings or to similar contiguous frames
    • E06B1/60Fastening frames to the border of openings or to similar contiguous frames by mechanical means, e.g. anchoring means
    • E06B1/6015Anchoring means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/345Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Structural Engineering (AREA)
  • Civil Engineering (AREA)
  • Mathematical Physics (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mechanical Engineering (AREA)
  • Executing Machine-Instructions (AREA)
  • Memory System (AREA)
  • Complex Calculations (AREA)

Abstract

【課題】 SIMD型プロセッサにおける演算命令に先立ったデータ整列命令を不要とし、演算効率を向上させる。
【解決手段】 行列データはメモリバンク310乃至313に分散格納される。メモリバンク310乃至313から読み出された行列データは読出し制御回路360および370によって並び替えられて演算器に供給される。演算器による演算結果は書込み制御回路350によって並び替えられてメモリバンク310乃至313に書き込まれる。アドレス生成回路320乃至340はメモリバンク310乃至313に分散格納された行列データを縦方向または横方向に走査するためのアドレスを生成する。
【選択図】 図9

Description

本発明は、SIMD(Single Instruction Multiple Data:単一命令複数データ)型プロセッサに関し、特に行列データへのアクセスを柔軟に行うSIMD型プロセッサに関する。
2次元画像処理や3次元グラフィックス等で必要となる行列演算処理をSIMD型プロセッサにより実現する場合、演算命令の演算形式に合致するように予めデータ整列を行なう必要がある。例えばデータ整列命令として、インテル社が開発したマルチメディア向け命令セットSSE(Streaming SIMD Extensions)やモトローラ社が開発したマルチメディア向け命令セットAltiVec等において、各種データ整列命令が記述されている(例えば、非特許文献1および非特許文献2参照。)。
例えば、4行4列の行列Aと行列Bの内積演算を行い、その結果を行列Dに格納する場合の例を挙げる。この内積演算における各演算式は以下のような積和演算により表される。
D[0][0] = A[0][0]×B[0][0]+A[0][1]×B[1][0]+A[0][2]×B[2][0]+A[0][3]×B[3][0]
D[0][1] = A[0][0]×B[0][1]+A[0][1]×B[1][1]+A[0][2]×B[2][1]+A[0][3]×B[3][1]
D[0][2] = A[0][0]×B[0][2]+A[0][1]×B[1][2]+A[0][2]×B[2][2]+A[0][3]×B[3][2]
D[0][3] = A[0][0]×B[0][3]+A[0][1]×B[1][3]+A[0][2]×B[2][3]+A[0][3]×B[3][3]
D[1][0] = A[1][0]×B[0][0]+A[1][1]×B[1][0]+A[1][2]×B[2][0]+A[1][3]×B[3][0]
D[1][1] = A[1][0]×B[0][1]+A[1][1]×B[1][1]+A[1][2]×B[2][1]+A[1][3]×B[3][1]
D[1][2] = A[1][0]×B[0][2]+A[1][1]×B[1][2]+A[1][2]×B[2][2]+A[1][3]×B[3][2]
D[1][3] = A[1][0]×B[0][3]+A[1][1]×B[1][3]+A[1][2]×B[2][3]+A[1][3]×B[3][3]
D[2][0] = A[2][0]×B[0][0]+A[2][1]×B[1][0]+A[2][2]×B[2][0]+A[2][3]×B[3][0]
D[2][1] = A[2][0]×B[0][1]+A[2][1]×B[1][1]+A[2][2]×B[2][1]+A[2][3]×B[3][1]
D[2][2] = A[2][0]×B[0][2]+A[2][1]×B[1][2]+A[2][2]×B[2][2]+A[2][3]×B[3][2]
D[2][3] = A[2][0]×B[0][3]+A[2][1]×B[1][3]+A[2][2]×B[2][3]+A[2][3]×B[3][3]
D[3][0] = A[3][0]×B[0][0]+A[3][1]×B[1][0]+A[3][2]×B[2][0]+A[3][3]×B[3][0]
D[3][1] = A[3][0]×B[0][1]+A[3][1]×B[1][1]+A[3][2]×B[2][1]+A[3][3]×B[3][1]
D[3][2] = A[3][0]×B[0][2]+A[3][1]×B[1][2]+A[3][2]×B[2][2]+A[3][3]×B[3][2]
D[3][3] = A[3][0]×B[0][3]+A[3][1]×B[1][3]+A[3][2]×B[2][3]+A[3][3]×B[3][3]
ここで、データ整列命令および演算命令を定義する。まず、データ整列命令MERGEH命令は、形式「MERGEH d,a,b」で与えられ、以下の動作を行う。
R[d][0] =R[b][2]
R[d][1] =R[a][2]
R[d][2] =R[b][3]
R[d][3] =R[a][3]
また、データ整列命令MERGEL命令は、形式「MERGEL d,a,b」で与えられ、以下の動作を行う。
R[d][0] =R[b][0]
R[d][1] =R[a][0]
R[d][2] =R[b][1]
R[d][3] =R[a][1]
また、演算命令DOT命令は、形式「DOT d,a,b」で与えられ、以下の動作を行う。
R[d][0] =R[a][0]×R[b][0]+R[a][1]×R[b][1]+R[a][2]×R[b][2]+R[a][3]×R[b][3]
ここで、レジスタファイルRは、16行4列で構成され、行列Aは以下のように格納されるものとする。
R[0][0]、R[0][1]、R[0][2]、R[0][3]、
R[1][0]、R[1][1]、R[1][2]、R[1][3]、
R[2][0]、R[2][1]、R[2][2]、R[2][3]、
R[3][0]、R[3][1]、R[3][2]、R[3][3]
また、行列Bは以下のように格納されるものとする。
R[4][0]、R[4][1]、R[4][2]、R[4][3]、
R[5][0]、R[5][1]、R[5][2]、R[5][3]、
R[6][0]、R[6][1]、R[6][2]、R[6][3]、
R[7][0]、R[7][1]、R[7][2]、R[7][3]
また、行列Dは以下のように格納されるものとする。
R[8][0]、R[8][1]、R[8][2]、R[8][3]、
R[9][0]、R[9][1]、R[9][2]、R[9][3]、
R[10][0]、R[10][1]、R[10][2]、R[10][3]、
R[11][0]、R[11][1]、R[11][2]、R[11][3]
以上において、4行4列の行列AおよびBの内積演算を行なうプログラムは、例えば以下のように記述される。
MERGEH 12, 0, 2
MERGEH 13, 1, 3
MERGEL 14, 0, 2
MERGEL 15, 1, 3
MERGEH 0,12,13
MERGEL 1,12,13
MERGEH 2,14,15
MERGEL 3,14,15
DOT 12, 0, 4
DOT 13, 0, 5
DOT 14, 0, 6
DOT 15, 0, 7
MERGEL 12,12,13
MERGEL 14,14,15
MERGEL 8,12,14
DOT 12, 1, 4
DOT 13, 1, 5
DOT 14, 1, 6
DOT 15, 1, 7
MERGEL 12,12,13
MERGEL 14,14,15
MERGEL 9,12,14
DOT 12, 2, 4
DOT 13, 2, 5
DOT 14, 2, 6
DOT 15, 2, 7
MERGEL 12,12,13
MERGEL 14,14,15
MERGEL 10,12,14
DOT 12, 3, 4
DOT 13, 3, 5
DOT 14, 3, 6
DOT 15, 3, 7
MERGEL 12,12,13
MERGEL 14,14,15
MERGEL 11,12,14
これにより、従来技術によって演算命令に先立ってデータ転送命令を実行する場合には、4行4列の内積演算のために例えば計36命令を要することがわかる。
「IA-32 Intel(R) Architecture Software Developer's Manual Volume 1: Basic Architecture」、Intel Corporation、2004年 「AltiVec Technology Programming Interface Manual」、Motorola Inc.、1999年6月
上述の従来技術では演算命令に先立ってデータ整列命令を実行しているが、このようなデータ整列命令は実質的な演算を行なわないため、演算効率を著しく低下させる要因となる。
そこで、本発明は、SIMD型プロセッサにおける演算命令に先立ったデータ整列命令を不要とし、演算効率を向上させることを目的とする。
上記課題を解決するために本発明の請求項1記載のプロセッサは、複数のメモリバンクと、読出しレジスタ指定および読出しレジスタ走査方向に基づいて上記複数のメモリバンクに対して個別に読出しアドレスを供給する読出しアドレス生成回路と、上記読出しアドレスに従って上記複数のメモリバンクから読み出された複数の読出しデータの配置を上記読出しレジスタ指定および読出しレジスタ変位に基づいて制御する読出し制御回路と、上記読出し制御回路によって配置制御された複数の読出しデータを対象として複数の演算処理を行う演算器とを具備する。これにより、複数のメモリバンクに格納されている複数のデータの配置を制御した上で演算器に供給するという作用をもたらす。
また、本発明の請求項2記載のプロセッサは、請求項1記載のプロセッサにおいて、上記読出しレジスタ走査方向が上記複数のメモリバンクに対する読出しアドレスが同一であるかまたは一定間隔で変化するかを指定するものである。これにより、複数のメモリバンクに格納されている複数のデータを所望の走査方向によって走査して読み出すという作用をもたらす。
また、本発明の請求項3記載のプロセッサは、請求項1記載のプロセッサにおいて、上記演算器が上記複数の演算処理として積和演算を行うものである。これにより、複数のメモリバンクに格納されている行列データについて内積演算を行うことを可能にするという作用をもたらす。
また、本発明の請求項4記載のプロセッサは、複数のメモリバンクと、書込みレジスタ指定および書込みレジスタ走査方向に基づいて上記複数のメモリバンクに対して個別に書込みアドレスを供給する書込みアドレス生成回路と、複数のデータに対して複数の演算処理を行って複数の書込みデータを出力する演算器と、上記演算器から出力された上記複数の書込みデータの配置を上記書込みレジスタ指定、書込みレジスタ変位および書込みレジスタ要素数に基づいて制御して上記複数のメモリバンクに供給する書込み制御回路とを具備する。これにより、演算器から出力される複数の書込みデータの配置を制御した上で複数のメモリバンクに供給するという作用をもたらす。
また、本発明の請求項5記載のプロセッサは、請求項4記載のプロセッサにおいて、上記書込みレジスタ走査方向は、上記複数のメモリバンクに対する書込みアドレスが同一であるかまたは一定間隔で変化するかを指定するものである。これにより、複数のメモリバンクに対して所望の走査方向によって走査して複数のデータを書き込むという作用をもたらす。
また、本発明の請求項6記載のプロセッサは、請求項4記載のプロセッサにおいて、上記演算器が上記複数の演算処理として積和演算を行うものである。これにより、複数のメモリバンクに格納されている行列データについて内積演算を行うことを可能にするという作用をもたらす。
また、本発明の請求項7記載のプロセッサは、複数のメモリバンクと、読出しレジスタ指定および読出しレジスタ走査方向に基づいて上記複数のメモリバンクに対して個別に読出しアドレスを供給する読出しアドレス生成回路と、上記読出しアドレスに従って上記複数のメモリバンクから読み出された複数の読出しデータの配置を上記読出しレジスタ指定および読出しレジスタ変位に基づいて制御する読出し制御回路と、上記読出し制御回路によって配置制御された複数の読出しデータを対象として複数の演算処理を行って複数の書込みデータを出力する演算器と、書込みレジスタ指定および書込みレジスタ走査方向に基づいて上記複数のメモリバンクに対して個別に書込みアドレスを供給する書込みアドレス生成回路と、上記演算器から出力された上記複数の書込みデータの配置を上記書込みレジスタ指定、書込みレジスタ変位および書込みレジスタ要素数に基づいて制御して上記複数のメモリバンクに供給する書込み制御回路とを具備する。これにより、複数のメモリバンクに格納されている複数のデータの配置を制御した上で演算器に供給するとともに、演算器から出力される複数の書込みデータの配置を制御した上で複数のメモリバンクに供給するという作用をもたらす。
また、本発明の請求項8記載のプロセッサは、請求項7記載のプロセッサにおいて、上記読出しレジスタ走査方向が上記複数のメモリバンクに対する読出しアドレスが同一であるかまたは一定間隔で変化するかを指定し、上記書込みレジスタ走査方向が上記複数のメモリバンクに対する書込みアドレスが同一であるかまたは一定間隔で変化するかを指定するものである。これにより、複数のメモリバンクに格納されている複数のデータを所望の走査方向によって走査して読み出すとともに、複数のメモリバンクに対して所望の走査方向によって走査して複数のデータを書き込むという作用をもたらす。
また、本発明の請求項9記載のプロセッサは、請求項7記載のプロセッサにおいて、上記演算器が上記複数の演算処理として積和演算を行うものである。これにより、複数のメモリバンクに格納されている行列データについて内積演算を行うことを可能にするという作用をもたらす。
また、本発明の請求項10記載のプロセッサは、プログラムに含まれる命令をデコードする命令デコーダと、複数のメモリバンクと、上記命令デコーダによってデコードされた読出しレジスタ指定および読出しレジスタ走査方向に基づいて上記複数のメモリバンクに対して個別に読出しアドレスを供給する読出しアドレス生成回路と、上記読出しアドレスに従って上記複数のメモリバンクから読み出された複数の読出しデータの配置を上記命令デコーダによってデコードされた上記読出しレジスタ指定および読出しレジスタ変位に基づいて制御する読出し制御回路と、上記読出し制御回路によって配置制御された複数の読出しデータを対象として複数の演算処理を行って複数の書込みデータを出力する演算器と、上記命令デコーダによってデコードされた書込みレジスタ指定および書込みレジスタ走査方向に基づいて上記複数のメモリバンクに対して個別に書込みアドレスを供給する書込みアドレス生成回路と、上記演算器から出力された上記複数の書込みデータの配置を上記命令デコーダによってデコードされた上記書込みレジスタ指定、書込みレジスタ変位および書込みレジスタ要素数に基づいて制御して上記複数のメモリバンクに供給する書込み制御回路とを具備する。これにより、命令デコーダによってデコードされた結果に従って、複数のメモリバンクに格納されている複数のデータの配置を制御した上で演算器に供給するとともに、演算器から出力される複数の書込みデータの配置を制御した上で複数のメモリバンクに供給するという作用をもたらす。
本発明によれば、SIMD型プロセッサにおいて演算命令に先立ったデータ整列命令を不要とし、演算効率を向上させるという優れた効果を奏し得る。
次に本発明の実施の形態について図面を参照して詳細に説明する。
図1は、本発明の実施の形態におけるSIMD型プロセッサ100の構成例を示す図である。このSIMD型プロセッサ100は、プログラムカウンタ110と、命令デコーダ120と、レジスタファイル130と、演算器140とを備える。このSIMD型プロセッサ100は、命令メモリ400に接続し、もしくはそれを内蔵する。この命令メモリ400はRISC(Reduced Instruction Set Computer)アーキテクチャ型命令セットとして例えば3個のオペランドを有する32ビット固定長命令が格納される。プロセッサ100はその固定長命令を4つ同時に水平実行するSIMD型プロセッサとして実現される。なお、ここでは一例として4命令の同時実行を想定して以下説明するが、これに限られず任意の数の命令を同時に実行するようにしても構わない。
プログラムカウンタ110は、命令メモリ400における命令の読出しアドレスを計数するカウンタである。このプログラムカウンタ110により指示されたアドレス119によって命令メモリ400から命令409の読出しが行われて、命令デコーダ120に供給される。命令デコーダ120は、命令メモリ400から読み出された命令409をデコードして、命令のオペコードやその命令に必要とされるオペランドを抽出する。レジスタファイル130は、デコードされたオペランドによりアクセスされ、読出しおよび書込みが行われる。演算器140は、デコードされたオペコードに基づいて、読み出されたオペランドに対して所定の演算を行う。この演算器140による演算結果は、デコードされたオペランドに基づいて、レジスタファイル130に書き込まれる。
図2は、本発明の実施の形態における命令フォーマットの形式例を示す図である。この命令フォーマットでは、1つの命令に、機能コード210、書込みオペランド220と、第1読出しオペランド230、および、第2読出しオペランド240の各フィールドが存在する。機能コード210は、命令のオペコードであり、当該命令により実現される動作を示す。この機能コード210では、例えば、加算命令などの演算の種類や他の動作の種別などが定義される。
書込みオペランド220には、書込みレジスタ指定221、書込みレジスタ走査方向222、書込みレジスタ変位223、および、書込みレジスタ要素数224の各フィールドが存在する。書込みレジスタ指定221は、書込みレジスタのアドレスを定義する。書込みレジスタ走査方向222は、書込みレジスタに対して書込みを行う際の行列の縦横何れかの方向を定義する。書込みレジスタ変位223は、書込みレジスタに対して書込みを行う際の横方向の変位を定義する。書込みレジスタ要素数224は、書込みレジスタに対して書込みを行う際の要素数を定義する。
第1読出しオペランド230には、第1読出しレジスタ指定231、第1読出しレジスタ走査方向232、第1読出しレジスタ変位233、および、第1読出しレジスタ要素数234の各フィールドが存在する。第1読出しレジスタ指定231は、第1読出しレジスタのアドレスを定義する。第1読出しレジスタ走査方向232は、第1読出しレジスタから読出しを行う際の行列の縦横何れかの方向を定義する。第1読出しレジスタ変位233は、第1読出しレジスタから読出しを行う際の横方向の変位を定義する。第1読出しレジスタ要素数234は、第1読出しレジスタから読出しを行う際の要素数を定義する。
第2読出しオペランド240には、第2読出しレジスタ指定241、第2読出しレジスタ走査方向242、第2読出しレジスタ変位243、および、第2読出しレジスタ要素数244の各フィールドが存在する。第2読出しレジスタ指定241は、第2読出しレジスタのアドレスを定義する。第2読出しレジスタ走査方向242は、第2読出しレジスタから読出しを行う際の行列の縦横何れかの方向を定義する。第2読出しレジスタ変位243は、第2読出しレジスタから読出しを行う際の横方向の変位を定義する。第2読出しレジスタ要素数244は、第2読出しレジスタから読出しを行う際の要素数を定義する。
図3は、本発明の実施の形態における命令デコーダ120によるデコード例を示す図である。この命令デコーダ120は、命令メモリ400から読み出された命令409をデコードして、上述の各フィールドを抽出する。すなわち、機能コード210を機能コード1210に、第1読出しレジスタ指定231を第1読出しレジスタ指定1231に、第1読出しレジスタ走査方向232を第1読出しレジスタ走査方向1232に、第1読出しレジスタ変位233を第1読出しレジスタ変位1233に、第1読出しレジスタ要素数234を第1読出しレジスタ要素数1234にそれぞれ出力する。
また、第2読出しレジスタ指定241を第2読出しレジスタ指定1241に、第2読出しレジスタ走査方向242を第2読出しレジスタ走査方向1242に、第2読出しレジスタ変位243を第2読出しレジスタ変位1243に、第2読出しレジスタ要素数244を第2読出しレジスタ要素数1244にそれぞれ出力する。また、書込みレジスタ指定221を書込みレジスタ指定1221に、書込みレジスタ走査方向222を書込みレジスタ走査方向1222に、書込みレジスタ変位223を書込みレジスタ変位1223に、書込みレジスタ要素数224を書込みレジスタ要素数1224にそれぞれ出力する。
図4は、本発明の実施の形態におけるレジスタ指定の一例を示す図である。ここでは、アクセス対象のレジスタファイルが、後述のようにメモリバンクに分割されていることを想定する。レジスタ指定の内容を上位ビットと下位ビットとに分けると、上位ビットは行列を単位として付与されるマトリックス番号として認識され、下位ビットはそのマトリックスの内部における行番号として認識される。
例えば、それぞれ4つの行を有する4つの行列(マトリックス)において何れか1つの行を指定する場合、2ビットのマトリックス番号211および2ビットの行番号212の計4ビットによりレジスタ指定を行うことができる。これらマトリックス番号211および行番号212により、メモリバンク319の行、すなわちレジスタが特定される。
このレジスタ指定は、書込みレジスタ指定221、第1読出しレジスタ指定231、および、第2読出しレジスタ指定241において用いられる。
図5は、本発明の実施の形態における走査方向の態様を示す図である。走査方向のコードとして「0」が指定された場合には、図5(a)のように行列を横方向にアクセスすることを意味する。例えば、行列A[i][j]に対して走査方向のコード「0」が指定された場合には、インデックス「i」が固定され、インデックス「j」が変化する方向にアクセスが行われることになる。
一方、走査方向のコードとして「1」が指定された場合には、図5(b)のように行列を縦方向にアクセスすることを意味する。例えば、行列A[i][j]に対して走査方向のコード「1」が指定された場合には、インデックス「j」が固定され、インデックス「i」が変化する方向にアクセスが行われることになる。
この走査方向は、書込みレジスタ走査方向222、第1読出しレジスタ走査方向232、および、第2読出しレジスタ走査方向242において用いられる。
また、書込みレジスタ変位223、第1読出しレジスタ変位233、および、第2読出しレジスタ変位243において用いられる変位は、図5の行列における横方向の変位であり、書込みまたは読出しの開始位置の"ずれ"が定義される。
また、書込みレジスタ要素数224、第1読出しレジスタ要素数234、および、第2読出しレジスタ要素数244において用いられる要素数は、一度にアクセスされるデータの数を意味する。例えば、n行n列の行列に対して縦横何れかの方向にn要素のデータを同時にアクセスするよう構成することができる。なお、この要素数の表現形式として、例えば最大4要素の場合に2ビットを使用する場合には、1要素のときは「0(00b)」、2要素のときは「1(01b)」、3要素のときは「2(10b)」、4要素のときは「3(11b)」という具合に表現する。
図6は、本発明の実施の形態におけるレジスタファイル130の論理構成の一例を示す図である。このレジスタファイル130は、一例として16行4列の行列としてアドレスが付与され、それぞれ32ビットのデータをR[0][0]からR[15][3]までの計64個格納することができるようになっている。
図7は、本発明の実施の形態におけるレジスタファイル130に対する行列割当ての一例を示す図である。図6のレジスタファイル130の論理構成例において、それぞれ4行4列の行列A、B、および、Dを順番に割り当てると、図7のようになる。すなわち、R[0][0]からR[3][3]に行列Aが割り当てられ、R[4][0]からR[7][3]に行列Bが割り当てられ、R[8][0]からR[11][3]に行列Dが割り当てられる。
なお、R[12][0]からR[15][3]の領域には特定の行列は割り当てられていないため、これら16個分のデータ領域は必要に応じて作業用領域として利用できるようになっている。
図8は、本発明の実施の形態におけるレジスタファイル130の物理的な分割例を示す図である。図6で示した論理構成に対して、レジスタファイル130は多数のレジスタに同時アクセスできるように、複数のメモリバンクに分割されて構成される。図8では、レジスタファイル130は4つのメモリバンク310乃至313に分割されている。すなわち、n×n(nは整数)の行列をm個(mは整数)格納できるレジスタファイルは、n×m個のデータを記憶することが可能なn個のメモリバンクから構成される。
各メモリバンクに割り当てられる各データは、図6で示した順序とは異なり、行毎にいわゆるスキューをかけた状態になっている。例えば、第0行の各データは、第0バンクにR[0][0]、第1バンクにR[0][1]、第2バンクにR[0][2]、第3バンクにR[0][3]がそれぞれ割り当てられていて図6の例と一致する。これに対して、第1行の各データは、第0バンクにR[1][3]、第1バンクにR[1][0]、第2バンクにR[1][1]、第3バンクにR[1][2]がそれぞれ割り当てられていて、第0行と比べて右方向に1つずつずれた配置となっている。
このような配置が行われることにより、行列のアクセスを縦方向または横方向に行う際に、何れの場合も同時にアクセスが可能となる。例えば、図7にように行列Aを割り当てた場合、横方向にアクセスしても各メモリバンク310乃至313のそれぞれに一つずつデータが存在し、縦方向にアクセスしても同様に各メモリバンク310乃至313のそれぞれに一つずつデータが存在する。これにより、縦横何れの方向のアクセスについても4つのデータに同時にアクセスできることになる。
図9は、本発明の実施の形態におけるレジスタファイル130の物理構成の一例を示す図である。このレジスタファイル130の例は4つのデータに同時アクセスすることを想定して、4つのメモリバンク310乃至313を備えている。また、レジスタファイル130は、これらメモリバンク310乃至313の制御回路として、アドレス生成回路320、330および340と、書込み制御回路350と、読出し制御回路360および370とを備えている。
メモリバンク310乃至313は、それぞれ、書込みアドレスMWA、第1読出しアドレスM1RA、第2読出しアドレスM2RA、書込みデータMWD、第1読出しデータM1RD、第2読出しデータM2RD、および、書込み制御MWEの各ポートを備えており、それぞれ独立して動作する。第1読出しアドレスM1RAにアドレスを与えることにより第1読出しデータM1RDから対応するデータが出力され、第2読出しアドレスM2RAにアドレスを与えることにより第2読出しデータM2RDから対応するデータが出力される。また、書込みアドレスMWAにアドレスを与え、書込みデータMWDに書込みデータを与え、書込み制御MWEをアクティブにすることで対応するアドレスに書込みデータが書き込まれる。
アドレス生成回路320は、メモリバンク310乃至313に対する書込みアドレスMWAを生成する回路である。このアドレス生成回路320は、命令デコーダ120から書込みレジスタ指定1221および書込みレジスタ走査方向1222を受けて、メモリバンク310乃至313に対して書込みアドレス3290乃至3293を出力する。
アドレス生成回路330は、メモリバンク310乃至313に対する第1読出しアドレスM1RAを生成する回路である。このアドレス生成回路330は、命令デコーダ120から第1読出しレジスタ指定1231および第1読出しレジスタ走査方向1232を受けて、メモリバンク310乃至313に対して第1読出しアドレス3390乃至3393を出力する。
アドレス生成回路340は、メモリバンク310乃至313に対する第2読出しアドレスM2RAを生成する回路である。このアドレス生成回路330は、命令デコーダ120から第2読出しレジスタ指定1241および第2読出しレジスタ走査方向1242を受けて、メモリバンク310乃至313に対して第2読出しアドレス3490乃至3493を出力する。
書込み制御回路350は、メモリバンク310乃至313に対して書込み制御MWEおよび書込みデータMWDを供給する回路である。この書込み制御回路350は、命令デコーダ120から書込みレジスタ指定1221、書込みレジスタ変位1223および書込みレジスタ要素数1224を受け、また、演算器140から書込みデータ1490乃至1493を受けて、メモリバンク310乃至313に対して書込み制御3580乃至3583および書込みデータ3590乃至3593を出力する。
読出し制御回路360は、メモリバンク310乃至313から読み出された第1読出しデータM1RDの配置を制御する回路である。この読出し制御回路360は、命令デコーダ120から第1読出しレジスタ指定1231および第1読出しレジスタ変位1233を受け、また、メモリバンク310乃至313から第1読出しデータ3101乃至3131を受けて、演算器140に対して第1読出しデータ3690乃至3693を出力する。
読出し制御回路370は、メモリバンク310乃至313から読み出された第2読出しデータM2RDの配置を制御する回路である。この読出し制御回路360は、命令デコーダ120から第2読出しレジスタ指定1241および第2読出しレジスタ変位1243を受け、また、メモリバンク310乃至313から第2読出しデータ3102乃至3132を受けて、演算器140に対して第2読出しデータ3790乃至3793を出力する。
図10は、本発明の実施の形態における書込み制御回路350の一構成例を示す図である。この書込み制御回路350は、図10(a)に示すとおり、要素数デコーダ351と、ビット抽出回路352と、加算器353と、4つの要素数セレクタ354と、4つのデータセレクタ355とを備える。
ビット抽出回路352は、命令デコーダ120からの書込みレジスタ指定1221の下位2ビット、すなわち図4におけるマトリックス内行番号212に相当するデータ3522を出力する。加算器353は、このビット抽出回路352からのデータ3522と命令デコーダ120からの書込みレジスタ変位1223とを加算して選択信号3531として出力する。この選択信号3531は、書込みレジスタに対する書込み開始位置を示すことになる。
要素数デコーダ351は、命令デコーダ120からの書込みレジスタ要素数1224を図10(b)のようにデコードする。この書込みレジスタ要素数1224は「0」のとき1要素、「1」のとき2要素、「2」のとき3要素、「3」のとき4要素を示すため、この要素数に応じた書込みを指示する書込み制御信号を要素数セレクタ354に対して出力する。
要素数セレクタ354は、要素数デコーダ351によってデコードされた書込み制御信号を、選択信号3531に従って選択する。この要素数セレクタ354は4つ備えられ、4つのメモリバンク310乃至313にそれぞれ書込み制御信号3580乃至3583を出力する。
データセレクタ355は、演算器140からの書込みデータ1490乃至1493を、選択信号3531に従って選択する。このデータセレクタ355は4つ備えられ、4つのメモリバンク310乃至313にそれぞれ書込みデータ3590乃至3593を出力する。
なお、上述の書込み制御を一般化すると、書込みデータ選択信号MWDsel、書込みデータMWDおよび書込み制御信号MWEは次式により定義される。
MWDsel[b] = pmod(b−IX−FS,n)
MWD[b] = WD[MWDsel[b]]
MWE[b] = (pmod(b−IX−FS,n)<=SZ)?1;0
ここで、IXはレジスタ指定を表し、FSはレジスタ変位を表し、SZはレジスタ要素数を表すものとする。また、nはメモリバンク数、bはメモリバンク番号(0乃至n−1)である。また、WD[0〜n−1]は実際に書き込まれるデータを表す。また、「pmod(i,j)」という関数は、整数iを整数jで割った際の余りを返すものとする。また、「a?x;y」という関数は、a=1のときにxを、a=0のときにyを返すものとする。
図11は、本発明の実施の形態における書込み制御回路350のデータセレクタ355による選択例を示す図である。選択信号3531は加算器353の出力であり、データセレクタ355の選択信号SELとして供給される。この選択信号3531が「0」であれば、演算器140からの書込みデータ1490乃至1493は、そのままの配置によって書込みデータ3590乃至3593として出力される。
これに対し、選択信号3531が「1」であれば、演算器140からの書込みデータ1490乃至1493は、1要素分増加する方向、すなわち図9のメモリバンクの配置では左方向に巡回シフトされて、書込みデータ3590乃至3593として出力される。同様に、選択信号3531が「2」であれば演算器140からの書込みデータ1490乃至1493は2要素分左方向に巡回シフトされ、選択信号3531が「3」であれば演算器140からの書込みデータ1490乃至1493は3要素分左方向に巡回シフトされる。
なお、この図11では、データセレクタ355による選択例を示したが、要素数セレクタ354についても同様の構成で選択信号3531が接続されており、データセレクタ355と同様の動作をする。
図12は、本発明の実施の形態におけるアドレス生成回路320の一構成例を示す図である。このアドレス生成回路320は、ビット分離回路321と、減算器3220乃至3223と、行番号セレクタ3230乃至3233と、結合回路3250乃至3253とを備えている。
ビット分離回路321は、命令デコーダ120からの書込みレジスタ指定1221を図4で説明したように2ビットのマトリックス番号3211と2ビットのマトリックス内行番号3212とに分離する。
減算器3220は、定数「0」からマトリックス内行番号3212を減算して行番号セレクタ3230に供給する。減算器3221は、定数「1」からマトリックス内行番号3212を減算して行番号セレクタ3231に供給する。減算器3222は、定数「2」からマトリックス内行番号3212を減算して行番号セレクタ3232に供給する。また、減算器3223は、定数「3」からマトリックス内行番号3212を減算して行番号セレクタ3233に供給する。これにより、行番号セレクタ3230乃至3233の入力「1」には、それぞれ1ずつ増加する値が供給される。
一方、行番号セレクタ3230乃至3233の入力「0」には、マトリックス内行番号3212がそのまま供給される。従って、命令デコーダ120からの書込みレジスタ走査方向1222が「0」であれば行番号セレクタ3230乃至3233からそれぞれ1つずつ異なる行番号3240乃至3243が出力され、書込みレジスタ走査方向1222が「1」であれば行番号セレクタ3230乃至3233から同一の行番号3240乃至3243がそれぞれ出力される。
このようにして行番号セレクタ3230乃至3233から出力された行番号3240乃至3243は、結合回路3250乃至3253によって再びマトリックス番号3211と結合されて、書込みアドレス3290乃至3293としてメモリバンク310乃至313に出力される。すなわち、命令デコーダ120からの書込みレジスタ走査方向1222が「0」であれば行列の横方向にアクセスするためのアドレスが生成され、書込みレジスタ走査方向1222が「1」であれば行列の縦方向にアクセスするためのアドレスが生成される。これを各メモリバンク310乃至313におけるアドレスとして捉えると、書込みレジスタ走査方向1222が「0」であれば各メモリバンク310乃至313に同一の書込みアドレスが供給され、書込みレジスタ走査方向1222が「1」であれば各メモリバンク310乃至313に一定間隔で変化(1ずつ増加)する値が書込みアドレスとして供給されることになる。
なお、この図12ではアドレス生成回路320の一構成例について説明したが、アドレス生成回路330や340についても同様の構成により実現することができる。
また、上述のアドレス生成を一般化すると、メモリアドレスMA[b]は次式により定義される。
MA[b] = (IX−pmod(IX,n))+(RXC ? pmod(b−IX,n) ; pmod(IX,n))
ここで、IXはレジスタ指定を表し、RXCはレジスタ走査方向を表すものとする。また、nはメモリバンク数、bはメモリバンク番号(0乃至n−1)である。また、「pmod(i,j)」という関数は、整数iを整数jで割った際の余りを返すものとする。また、「a?x;y」という関数は、a=1のときにxを、a=0のときにyを返すものとする。
図13は、本発明の実施の形態における読出し制御回路360の一構成例を示す図である。この読出し制御回路360は、ビット抽出回路361と、加算器362と、4つのデータセレクタ363とを備えている。
ビット抽出回路361は、命令デコーダ120からの第1読出しレジスタ指定1231の下位2ビット、すなわち図4におけるマトリックス内行番号212に相当するデータ3612を出力する。加算器362は、このビット抽出回路361からのデータ3612と命令デコーダ120からの第1読出しレジスタ変位1233とを加算して選択信号3621として出力する。この選択信号3621は、第1読出しレジスタにおける読出し開始位置を示すことになる。
データセレクタ363は、メモリバンク310乃至313からの第1読出しデータ3101乃至3131を、選択信号3621に従って選択する。このデータセレクタ363は4つ備えられ、演算器140の第1オペランドの4つのデータとして第1読出しデータ3690乃至3693を出力する。
なお、上述の読出し制御を一般化すると、読出しデータ選択信号MRDselおよび読み出しデータMRDは次式により定義される。
MRDsel[b] = pmod(b−IX−FS,n)
RD[MRDsel[b]] = MRD[b]
ここで、IXはレジスタ指定を表し、FSはレジスタ変位を表すものとする。また、nはメモリバンク数、bはメモリバンク番号(0乃至n−1)である。また、RD[0〜n−1]は実際に読み出されるデータを表す。また、「pmod(i,j)」という関数は、整数iを整数jで割った際の余りを返すものとする。
図14は、本発明の実施の形態における読出し制御回路360のデータセレクタ363による選択例を示す図である。選択信号3621は加算器362の出力であり、データセレクタ363の選択信号SELとして供給される。この選択信号3621が「0」であれば、メモリバンク310乃至313からの第1読出しデータ3101乃至3131は、そのままの配置によって第1読出しデータ3690乃至3693として出力される。
これに対し、選択信号3621が「1」であれば、メモリバンク310乃至313からの第1読出しデータ3101乃至3131は、1要素分減少する方向、すなわち図9のメモリバンクの配置では右方向に巡回シフトされて、第1読出しデータ3690乃至3693として出力される。同様に、選択信号3621が「2」であればメモリバンク310乃至313からの第1読出しデータ3101乃至3131は2要素分右方向に巡回シフトされ、選択信号3621が「3」であればメモリバンク310乃至313からの第1読出しデータ3101乃至3131は3要素分右方向に巡回シフトされる。
なお、上述の図13および14では読出し制御回路360の一構成例について説明したが、第2読出しデータ3790乃至3793を出力する読出し制御回路370についても同様の構成により実現することができる。
図15は、本発明の実施の形態における演算器140の一構成例を示す図である。この演算器140は、4組の演算回路群141と、加算器142と、演算結果セレクタ1430乃至1433とを備えている。
演算回路群141は4組の入力オペランド対に対応して設けられる。演算回路群141の各々は、例えば加算器、減算器、乗算器、除算器、比較器などを備えている。加算器142は、4組の演算回路群141における乗算器のそれぞれの出力を受け取り、4つの乗算結果の総和を計算する。すなわち、この加算器142の出力が行列の内積演算の1要素分の部分積になる。
演算結果セレクタ1430乃至1433は、演算回路群141および加算器142による演算結果を、命令デコーダ120からの機能コード1210に従って選択して、メモリバンク310乃至313に対する書込みデータ1490乃至1493を出力する。例えば、命令デコーダ120からの機能コード1210が「0」であれば演算回路群141による加算結果が選択され、機能コード1210が「1」であれば演算回路群141による減算結果が選択され、機能コード1210が「2」であれば演算回路群141による乗算結果が選択され、機能コード1210が「3」であれば演算回路群141による除算結果が選択され、機能コード1210が「4」であれば演算回路群141による比較結果が選択されて、それぞれの結果が書込みデータ1490乃至1493として出力される。
また、機能コード1210が「5」の場合には、演算結果セレクタ1430において加算器142による積和演算の結果が選択され、他の演算結果セレクタ1431乃至1433における出力は無効になる。この機能コード1210が「5」の場合には、書込みデータ1490だけが利用されるため、他の書込みデータ1491乃至1493の内容は問題とはならない。
本発明の実施の形態におけるSIMD型プロセッサ100による内積演算命令XDOTは、例えば以下の命令形式により指定される。
XDOT d_ix,d_fs, a_ix,a_rxc, b_ix,b_rxc
このXDOT命令は、行列Aと行列Bの内積演算の結果を行列Dに格納するものであり、d_ixは行列Dのレジスタ指定、d_fsは行列Dの変位、a_ixは行列Aのレジスタ指定、a_rxcは行列Aの走査方向、b_ixは行列Bのレジスタ指定、b_rxcは行列Bの走査方向をそれぞれ表す。
このXDOT命令の具体的動作は、4行4列の行列データに対して以下のように定義される。
R[d_ix][d_fs] =
((a_rxc ? R[a_ix−(a_ix%4)+0][a_ix%4];
R[a_ix][0])
×(b_rxc ? R[b_ix−(b_ix%4)+0][b_ix%4];
R[b_ix][0]))+
((a_rxc ? R[a_ix−(a_ix%4)+1][a_ix%4];
R[a_ix][1])
×(b_rxc ? R[b_ix−(b_ix%4)+1][b_ix%4];
R[b_ix][1]))+
((a_rxc ? R[a_ix−(a_ix%4)+2][a_ix%4];
R[a_ix][2])
×(b_rxc ? R[b_ix−(b_ix%4)+2][b_ix%4];
R[b_ix][2]))+
((a_rxc ? R[a_ix−(a_ix%4)+3][a_ix%4];
R[a_ix][3])
×(b_rxc ? R[b_ix−(b_ix%4)+3][b_ix%4];
R[b_ix][3]))
ここで、「a?x;y」という関数は、a=1のときにxを、a=0のときにyを返すものとする。また、「m%n」という関数は、整数mを整数nで割った際の余りを返すものとする。
このXDOT命令において、a_rxc=0、b_rxc=1を指定すれば、行列Aの任意の行(a_ixにより特定)と行列Bの任意の列(b_ixにより特定)の内積演算結果を行列Dの所定の位置(d_ixおよびd_fsにより特定)に格納することができる。
例えば、具体例として「XDOT 8,2, 0,0, 6,1」が与えられた場合、命令デコーダ120は、機能コード1210として内積演算を表す「5」を、第1読出しレジスタ指定1231として「0」を、第1読出しレジスタ走査方向1232として「0」を、第2読出しレジスタ指定1241として「6」を、第2読出しレジスタ走査方向1242として「1」を、書込みレジスタ指定1221として「8」を、書込みレジスタ変位1223として「2」をそれぞれデコードする。さらに、4要素の内積演算であるため、第1読出しレジスタ要素数1234として「3」を、第1読出しレジスタ変位1233として「0」を、第2読出しレジスタ要素数1244として「3」を、第2読出しレジスタ変位1243として「0」をそれぞれデコードする。また、内積演算結果はスカラ値であるため、書込みレジスタ要素数1224として「0」を、書込みレジスタ走査方向1222として「0」をそれぞれデコードする。
そして、アドレス生成回路320によって、書込みアドレス3290乃至3293として、それぞれに「8」が供給される。また、アドレス生成回路330によって、第1読出しアドレス3390乃至3393として、それぞれに「0」が供給される。また、アドレス生成回路340によって、第2読出しアドレス3490乃至3493として、それぞれ「6」、「7」、「4」、「5」が供給される。
また、読出し制御回路360は、第1読出しデータ3101乃至3131をそのままの配置で第1読出しデータ3690乃至3693として出力する。一方、読出し制御回路370は、第2読出しデータ3102乃至3132を2要素分右方向に巡回シフトさせて、第2読出しデータ3102を第2読出しデータ3792として、第2読出しデータ3112を第2読出しデータ3793として、第2読出しデータ3122を第2読出しデータ3790として、第2読出しデータ3132を第2読出しデータ3791としてそれぞれ出力する。
演算器140は、機能コード1210に従って、第1読出しデータ3690乃至3693と第2読出しデータ3790乃至3793とをそれぞれ乗算し、全ての乗算結果を加算して、書込みデータ1490にその加算結果を出力する。
書込み制御回路350は、演算器140からの書込みデータ1490乃至1493を2要素分左方向に巡回シフトさせて、書込みデータ1490を書込みデータ3592として、書込みデータ1491を書込みデータ3593として、書込みデータ1492を書込みデータ3590として、書込みデータ1493を書込みデータ3591としてそれぞれ出力する。また、書込み制御回路350は、書込みレジスタ要素数1224の「0」をデコードした結果として、書込み制御信号3582のみにおいて書込みを許可し、他の書込み制御信号3580、3581および3583においては書込みを許可しない。
これにより、レジスタファイル130から、行列Aの第0行(R[0][0]、R[0][1]、R[0][2]、R[0][3])および行列Bの第2列(R[4][2]、R[5][2]、R[6][2]、R[7][2])が読み出され、演算としてR[0][0]×R[4][2]+R[0][1]×R[5][2]+R[0][2]×R[6][2]+R[0][3]×R[7][2]が実行されて、その演算結果が行列DのD[0][2](レジスタファイルのR[8][2])に格納される。
このXDOT命令を利用して4行4列の行列データ同士の内積演算を行うためには、以下の手順でプログラムを実行すればよい。
XDOT 8,0, 0,0, 4,1
XDOT 8,1, 0,0, 5,1
XDOT 8,2, 0,0, 6,1
XDOT 8,3, 0,0, 7,1
XDOT 9,0, 1,0, 4,1
XDOT 9,1, 1,0, 5,1
XDOT 9,2, 1,0, 6,1
XDOT 9,3, 1,0, 7,1
XDOT 10,0, 2,0, 4,1
XDOT 10,1, 2,0, 5,1
XDOT 10,2, 2,0, 6,1
XDOT 10,3, 2,0, 7,1
XDOT 11,0, 3,0, 4,1
XDOT 11,1, 3,0, 5,1
XDOT 11,2, 3,0, 6,1
XDOT 11,3, 3,0, 7,1
このように、本発明の実施の形態によるSIMD型プロセッサ100によれば、16個のXDOT命令によって4行4列の行列データ同士の内積演算を実現することができる。これは、従来技術に示した36命令と比較して半分以下の数の命令の実行で足りることを意味している。
このように、本発明の実施の形態によれば、メモリバンク310乃至313から読み出されたデータの配置を読出し制御回路360および370で並び替え、演算器140による演算実行後の書込みデータ1490乃至1493の配置を書込み制御回路350で並び替えることにより、演算命令に先立ったデータ整列命令を不要にすることができる。
なお、本発明の実施の形態は本発明を具現化するための一例を示したものであり、以下に示すように特許請求の範囲における発明特定事項とそれぞれ対応関係を有するが、これに限定されるものではなく本発明の要旨を逸脱しない範囲において種々の変形を施すことができる。
本発明の活用例として、例えばプロセッサにおいて複数データの同時処理を行う際に本発明を適用することができる。
本発明の実施の形態におけるSIMD型プロセッサ100の構成例を示す図である。 本発明の実施の形態における命令フォーマットの形式例を示す図である。 本発明の実施の形態における命令デコーダ120によるデコード例を示す図である。 本発明の実施の形態におけるレジスタ指定の一例を示す図である。 本発明の実施の形態における走査方向の態様を示す図である。 本発明の実施の形態におけるレジスタファイル130の論理構成の一例を示す図である。 本発明の実施の形態におけるレジスタファイル130に対する行列割当ての一例を示す図である。 本発明の実施の形態におけるレジスタファイル130の物理的な分割例を示す図である。 本発明の実施の形態におけるレジスタファイル130の物理構成の一例を示す図である。 本発明の実施の形態における書込み制御回路350の一構成例を示す図である。 本発明の実施の形態における書込み制御回路350のデータセレクタ355による選択例を示す図である。 本発明の実施の形態におけるアドレス生成回路320の一構成例を示す図である。 本発明の実施の形態における読出し制御回路360の一構成例を示す図である。 本発明の実施の形態における読出し制御回路360のデータセレクタ363による選択例を示す図である。 本発明の実施の形態における演算器140の一構成例を示す図である。
符号の説明
100 SIMD型プロセッサ
110 プログラムカウンタ
120 命令デコーダ
130 レジスタファイル
140 演算器
141 演算回路群
142 加算器
210 機能コード
220 書込みオペランド
221 書込みレジスタ指定
222 書込みレジスタ走査方向
223 書込みレジスタ変位
224 書込みレジスタ要素数
230 第1読出しオペランド
231 第1読出しレジスタ指定
232 第1読出しレジスタ走査方向
233 第1読出しレジスタ変位
234 第1読出しレジスタ要素数
240 第2読出しオペランド
241 第2読出しレジスタ指定
242 第2読出しレジスタ走査方向
243 第2読出しレジスタ変位
244 第2読出しレジスタ要素数
310〜313、319 メモリバンク
320、330、340 アドレス生成回路
321 ビット分離回路
350 書込み制御回路
351 要素数デコーダ
352 ビット抽出回路
353 加算器
354 要素数セレクタ
355 データセレクタ
360、370 読出し制御回路
361 ビット抽出回路
362 加算器
363 データセレクタ
400 命令メモリ
1430〜1433 演算結果セレクタ
3220〜3223 減算器
3230〜3233 行番号セレクタ
3250〜3253 結合回路

Claims (10)

  1. 複数のメモリバンクと、
    読出しレジスタ指定および読出しレジスタ走査方向に基づいて前記複数のメモリバンクに対して個別に読出しアドレスを供給する読出しアドレス生成回路と、
    前記読出しアドレスに従って前記複数のメモリバンクから読み出された複数の読出しデータの配置を前記読出しレジスタ指定および読出しレジスタ変位に基づいて制御する読出し制御回路と、
    前記読出し制御回路によって配置制御された複数の読出しデータを対象として複数の演算処理を行う演算器と
    を具備することを特徴とするプロセッサ。
  2. 前記読出しレジスタ走査方向は、前記複数のメモリバンクに対する読出しアドレスが同一であるかまたは一定間隔で変化するかを指定することを特徴とする請求項1記載のプロセッサ。
  3. 前記演算器は、前記複数の演算処理として積和演算を行うことを特徴とする請求項1記載のプロセッサ。
  4. 複数のメモリバンクと、
    書込みレジスタ指定および書込みレジスタ走査方向に基づいて前記複数のメモリバンクに対して個別に書込みアドレスを供給する書込みアドレス生成回路と、
    複数のデータに対して複数の演算処理を行って複数の書込みデータを出力する演算器と、
    前記演算器から出力された前記複数の書込みデータの配置を前記書込みレジスタ指定、書込みレジスタ変位および書込みレジスタ要素数に基づいて制御して前記複数のメモリバンクに供給する書込み制御回路と
    を具備することを特徴とするプロセッサ。
  5. 前記書込みレジスタ走査方向は、前記複数のメモリバンクに対する書込みアドレスが同一であるかまたは一定間隔で変化するかを指定することを特徴とする請求項4記載のプロセッサ。
  6. 前記演算器は、前記複数の演算処理として積和演算を行うことを特徴とする請求項4記載のプロセッサ。
  7. 複数のメモリバンクと、
    読出しレジスタ指定および読出しレジスタ走査方向に基づいて前記複数のメモリバンクに対して個別に読出しアドレスを供給する読出しアドレス生成回路と、
    前記読出しアドレスに従って前記複数のメモリバンクから読み出された複数の読出しデータの配置を前記読出しレジスタ指定および読出しレジスタ変位に基づいて制御する読出し制御回路と、
    前記読出し制御回路によって配置制御された複数の読出しデータを対象として複数の演算処理を行って複数の書込みデータを出力する演算器と、
    書込みレジスタ指定および書込みレジスタ走査方向に基づいて前記複数のメモリバンクに対して個別に書込みアドレスを供給する書込みアドレス生成回路と、
    前記演算器から出力された前記複数の書込みデータの配置を前記書込みレジスタ指定、書込みレジスタ変位および書込みレジスタ要素数に基づいて制御して前記複数のメモリバンクに供給する書込み制御回路と
    を具備することを特徴とするプロセッサ。
  8. 前記読出しレジスタ走査方向は、前記複数のメモリバンクに対する読出しアドレスが同一であるかまたは一定間隔で変化するかを指定し、
    前記書込みレジスタ走査方向は、前記複数のメモリバンクに対する書込みアドレスが同一であるかまたは一定間隔で変化するかを指定することを特徴とする請求項7記載のプロセッサ。
  9. 前記演算器は、前記複数の演算処理として積和演算を行うことを特徴とする請求項7記載のプロセッサ。
  10. プログラムに含まれる命令をデコードする命令デコーダと、
    複数のメモリバンクと、
    前記命令デコーダによってデコードされた読出しレジスタ指定および読出しレジスタ走査方向に基づいて前記複数のメモリバンクに対して個別に読出しアドレスを供給する読出しアドレス生成回路と、
    前記読出しアドレスに従って前記複数のメモリバンクから読み出された複数の読出しデータの配置を前記命令デコーダによってデコードされた前記読出しレジスタ指定および読出しレジスタ変位に基づいて制御する読出し制御回路と、
    前記読出し制御回路によって配置制御された複数の読出しデータを対象として複数の演算処理を行って複数の書込みデータを出力する演算器と、
    前記命令デコーダによってデコードされた書込みレジスタ指定および書込みレジスタ走査方向に基づいて前記複数のメモリバンクに対して個別に書込みアドレスを供給する書込みアドレス生成回路と、
    前記演算器から出力された前記複数の書込みデータの配置を前記命令デコーダによってデコードされた前記書込みレジスタ指定、書込みレジスタ変位および書込みレジスタ要素数に基づいて制御して前記複数のメモリバンクに供給する書込み制御回路と
    を具備することを特徴とするプロセッサ。
JP2004121705A 2004-04-16 2004-04-16 プロセッサ Expired - Lifetime JP3985797B2 (ja)

Priority Applications (5)

Application Number Priority Date Filing Date Title
JP2004121705A JP3985797B2 (ja) 2004-04-16 2004-04-16 プロセッサ
US11/100,490 US7313645B2 (en) 2004-04-16 2005-04-07 Processor to reduce data rearrangement instructions for matrices in multiple memory banks
CNB2005100643774A CN100410919C (zh) 2004-04-16 2005-04-14 处理器
EP05290840A EP1586991A3 (en) 2004-04-16 2005-04-15 Processor with plurality of register banks
KR1020050031382A KR20060045756A (ko) 2004-04-16 2005-04-15 프로세서

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2004121705A JP3985797B2 (ja) 2004-04-16 2004-04-16 プロセッサ

Publications (2)

Publication Number Publication Date
JP2005309499A true JP2005309499A (ja) 2005-11-04
JP3985797B2 JP3985797B2 (ja) 2007-10-03

Family

ID=34942143

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004121705A Expired - Lifetime JP3985797B2 (ja) 2004-04-16 2004-04-16 プロセッサ

Country Status (5)

Country Link
US (1) US7313645B2 (ja)
EP (1) EP1586991A3 (ja)
JP (1) JP3985797B2 (ja)
KR (1) KR20060045756A (ja)
CN (1) CN100410919C (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009517763A (ja) * 2005-12-01 2009-04-30 エヌエックスピー ビー ヴィ メモリ中の行列要素に効率的にアクセスするための方法および構成
JP2011002908A (ja) * 2009-06-16 2011-01-06 Fujitsu Semiconductor Ltd プロセッサ及び情報処理システム
US9183131B2 (en) 2011-10-18 2015-11-10 Renesas Electronics Corporation Memory control device, memory control method, data processing device, and image processing system
US10248384B2 (en) 2016-08-03 2019-04-02 Fujitsu Limited Arithmetic processing device and control method for arithmetic processing device

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4478050B2 (ja) * 2005-03-18 2010-06-09 株式会社リコー Simd型マイクロプロセッサ及びデータ処理方法
CN102037514A (zh) * 2008-05-21 2011-04-27 Nxp股份有限公司 包括重排网络的数据处理系统
CN101685388B (zh) * 2008-09-28 2013-08-07 北京大学深圳研究生院 执行比较运算的方法和装置
US8661187B2 (en) 2009-04-08 2014-02-25 International Business Machines Corporation System, method, and computer program product for skewing expected wearout times of memory devices
CN101620524B (zh) * 2009-07-03 2011-08-10 中国人民解放军国防科学技术大学 支持矩阵整体读写操作的矩阵寄存器文件
CN102012803B (zh) * 2010-11-25 2014-09-10 中国人民解放军国防科学技术大学 支持多宽度simd和多粒度simt的可配置矩阵寄存器单元
JP6078923B2 (ja) * 2011-10-14 2017-02-15 パナソニックIpマネジメント株式会社 転置演算装置とその集積回路、および転置処理方法
US8832158B2 (en) * 2012-03-29 2014-09-09 International Business Machines Corporation Fast predicate table scans using single instruction, multiple data architecture
GB2552154B (en) * 2016-07-08 2019-03-06 Advanced Risc Mach Ltd Vector register access
GB2552153B (en) 2016-07-08 2019-07-24 Advanced Risc Mach Ltd An apparatus and method for performing a rearrangement operation
CN108766332B (zh) * 2018-04-17 2021-09-10 南京昀光科技有限公司 可扩展的硅基微型显示器驱动电路
CN109214273A (zh) * 2018-07-18 2019-01-15 平安科技(深圳)有限公司 人脸图像比对方法、装置、计算机设备及存储介质
CN108985232A (zh) * 2018-07-18 2018-12-11 平安科技(深圳)有限公司 人脸图像比对方法、装置、计算机设备及存储介质

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
NL136896C (ja) * 1964-10-07
JPS60134359A (ja) 1983-12-21 1985-07-17 Nec Corp 3次元アドレス空間のための並列メモリシステム
EP0167959B1 (en) * 1984-07-02 1992-05-06 Nec Corporation Computer vector register processing
EP0410778A3 (en) * 1989-07-28 1992-12-02 Texas Instruments Incorporated Graphics processor having a floating point coprocessor
JPH0486930A (ja) * 1990-07-31 1992-03-19 Canon Inc アドレス発生回路
US5218674A (en) * 1990-09-14 1993-06-08 Hughes Aircraft Company Hardware bit block transfer operator in a graphics rendering processor
US5832290A (en) * 1994-06-13 1998-11-03 Hewlett-Packard Co. Apparatus, systems and method for improving memory bandwidth utilization in vector processing systems
US5649179A (en) * 1995-05-19 1997-07-15 Motorola, Inc. Dynamic instruction allocation for a SIMD processor
US5638533A (en) * 1995-10-12 1997-06-10 Lsi Logic Corporation Method and apparatus for providing data to a parallel processing array
US6307553B1 (en) * 1998-03-31 2001-10-23 Mohammad Abdallah System and method for performing a MOVHPS-MOVLPS instruction
US6604166B1 (en) * 1998-12-30 2003-08-05 Silicon Automation Systems Limited Memory architecture for parallel data access along any given dimension of an n-dimensional rectangular data array
US6397324B1 (en) * 1999-06-18 2002-05-28 Bops, Inc. Accessing tables in memory banks using load and store address generators sharing store read port of compute register file separated from address register file
JP4378015B2 (ja) * 2000-02-28 2009-12-02 インターナショナル・ビジネス・マシーンズ・コーポレーション メモリ・チップ
JP3779540B2 (ja) 2000-11-08 2006-05-31 株式会社ルネサステクノロジ 複数レジスタ指定が可能なsimd演算方式
KR100401946B1 (ko) * 2001-08-10 2003-10-17 박종원 주소계산과 자료이동방법 및 이를 이용한 충돌회피 기억 장치
GB2382677B (en) * 2001-10-31 2005-09-07 Alphamosaic Ltd Data access in a processor
US20040252547A1 (en) * 2003-06-06 2004-12-16 Chengpu Wang Concurrent Processing Memory

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009517763A (ja) * 2005-12-01 2009-04-30 エヌエックスピー ビー ヴィ メモリ中の行列要素に効率的にアクセスするための方法および構成
JP2011002908A (ja) * 2009-06-16 2011-01-06 Fujitsu Semiconductor Ltd プロセッサ及び情報処理システム
US9183131B2 (en) 2011-10-18 2015-11-10 Renesas Electronics Corporation Memory control device, memory control method, data processing device, and image processing system
US10248384B2 (en) 2016-08-03 2019-04-02 Fujitsu Limited Arithmetic processing device and control method for arithmetic processing device

Also Published As

Publication number Publication date
US20050251614A1 (en) 2005-11-10
CN1684058A (zh) 2005-10-19
CN100410919C (zh) 2008-08-13
EP1586991A3 (en) 2008-03-26
KR20060045756A (ko) 2006-05-17
EP1586991A2 (en) 2005-10-19
JP3985797B2 (ja) 2007-10-03
US7313645B2 (en) 2007-12-25

Similar Documents

Publication Publication Date Title
US7313645B2 (en) Processor to reduce data rearrangement instructions for matrices in multiple memory banks
KR101202445B1 (ko) 프로세서
KR100329339B1 (ko) 압축데이터에의한승산-가산연산수행장치
US6209078B1 (en) Accelerated multimedia processor
US20050257026A1 (en) Bit serial processing element for a SIMD array processor
US10409604B2 (en) Apparatus and method for performing multiply-and-accumulate-products operations
NO317739B1 (no) Apparat for utforelse av multiplis±r/add±roperasjoner pa pakkede data
JP2018022339A (ja) 演算処理装置及び演算処理装置の制御方法
JP4901754B2 (ja) 単一命令複数データ実行エンジンのフラグレジスタのための評価ユニット
JP2020508512A (ja) データ処理装置における乗累算
US11263018B2 (en) Vector processor and control method therefor
JP2008217061A (ja) Simd型マイクロプロセッサ
US7284113B2 (en) Synchronous periodical orthogonal data converter
EP0474246A2 (en) Image signal processor
JP3935678B2 (ja) Simd積和演算方法、積和演算回路、および、半導体集積回路装置
WO2007099950A1 (ja) 高速pe間データ再配置機能を有するプロセッサアレイシステム
JP4896839B2 (ja) マイクロプロセッサおよびデータ処理方法
JP4482356B2 (ja) Simdプロセッサを用いた画像処理方法及び画像処理装置
JP2906792B2 (ja) ディジタルプロセッサ及びその制御方法
CN115576606B (zh) 实现矩阵转置乘的方法、协处理器、服务器及存储介质
JPH07210545A (ja) 並列処理プロセッサ
WO2023199014A1 (en) Technique for handling data elements stored in an array storage
WO2023199015A1 (en) Technique for handling data elements stored in an array storage
JP4821427B2 (ja) データ処理装置及びそのプログラム
JP2006004226A (ja) データ演算装置

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20061226

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20070116

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070301

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20070619

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20070702

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100720

Year of fee payment: 3