CN100410919C - 处理器 - Google Patents

处理器 Download PDF

Info

Publication number
CN100410919C
CN100410919C CNB2005100643774A CN200510064377A CN100410919C CN 100410919 C CN100410919 C CN 100410919C CN B2005100643774 A CNB2005100643774 A CN B2005100643774A CN 200510064377 A CN200510064377 A CN 200510064377A CN 100410919 C CN100410919 C CN 100410919C
Authority
CN
China
Prior art keywords
matrix
read
register
write
address
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.)
Expired - Fee Related
Application number
CNB2005100643774A
Other languages
English (en)
Other versions
CN1684058A (zh
Inventor
长谷川浩一
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
Publication of CN1684058A publication Critical patent/CN1684058A/zh
Application granted granted Critical
Publication of CN100410919C publication Critical patent/CN100410919C/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

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)
  • Mathematical Physics (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Civil Engineering (AREA)
  • Structural Engineering (AREA)
  • Computational Mathematics (AREA)
  • Mechanical Engineering (AREA)
  • Executing Machine-Instructions (AREA)
  • Memory System (AREA)
  • Complex Calculations (AREA)

Abstract

本发明提供了一种处理器,包括:多个存储体;读地址生成电路,用于基于读寄存器指定和读寄存器扫描方向,向每个存储体提供读地址;读控制电路,用于基于读寄存器指定和读寄存器偏移,执行控制以重新排列多个读数据块,所述多个读数据块是根据读地址而从存储体读出的;以及处理单元,用于对由读控制电路输出的重新排列的读数据块执行多个运算。

Description

处理器
技术领域
本发明涉及SIMD(单指令多数据)型的处理器,更具体地说,涉及允许以高度的灵活性对矩阵数据进行访问的SIMD处理器。
背景技术
当使用SIMD处理器执行二维画面处理或三维图形的矩阵处理时,有必要预先重新排列数据块,以使得数据块与向处理器提供的处理指令的处理格式相匹配。例如,数据排列指令被包括在称为SSE(Streaming SIMDExtension,流式SIMD扩展)的指令集和称为AltiVec的指令集中。SSE指令集是英特尔公司开发的面向多媒体应用的指令集。另一方面,Altivec是摩托罗拉有限公司开发的,也用于相同的应用。在SSE和Altivec指令集中,定义了多种数据排列指令,分别公开于下列文献中:
“IA-32
Figure C20051006437700041
Architecture Software Developer’s Manual Volum 1:BasicArchitecture”,英特尔公司,2004;和
“AltiVec Technology Programming Interface Manual”,摩托罗拉有限公司,1999年6月。
假设例如对4行4列矩阵A和4行4列矩阵B进行内积处理,并将内积处理的结果放在4行4列矩阵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]
使用寄存器文件R和如此定义的矩阵A、B和D,使用下面的指令序列来表达用于找出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条指令。
发明内容
根据上述有关技术,数据排列指令可能需要在运算指令的执行之前被执行。但是,由于数据排列指令的执行事实上没有执行任何处理,所以数据排列指令的执行大大降低了处理效率。
为了解决上述问题,本发明的发明者开发了一种SIMD处理器,其在运算指令前不需要数据排列指令,因此提高了处理效率。
根据本发明的实施例,提供了一种处理器,包括:多个存储体,第一至第三矩阵被分散排列在所述多个存储体中;读出地址生成电路,其基于第一矩阵和第二矩阵的读出寄存器指定和读出寄存器扫描方向,提供用于从所述多个存储体读出第一矩阵中的预定行的第一读出地址和用于从所述多个存储体读出第二矩阵中的预定列的第二读出地址;读出控制电路,其基于第一矩阵和第二矩阵的读出寄存器指定和读出寄存器偏移,控制第一矩阵中的预定行和第二矩阵中的预定列的排列,第一矩阵中的预定行和第二矩阵中的预定列都是根据第一读出地址和第二读出地址而从所述多个存储体读出的;处理单元,其对经过了由读出控制电路所控制的排列的第一矩阵中的预定行和第二矩阵中的预定列执行内积处理;写地址生成电路,其基于第三矩阵的写寄存器指定和写寄存器偏移,提供所述多个存储体中的写地址;以及写控制电路,其基于写寄存器指定和写寄存器偏移,将从处理单元输出的内积处理的结果写在对应于所述多个存储体中的第三矩阵的地址中。
上述配置具有这样的效果,即控制存储在多个存储体中的第一矩阵的预定行和第二矩阵的预定列的排列以将它们提供给处理单元,还具有这样的效果,即控制由处理单元输出的内积处理结果的排列以将它们写在对应于所述多个存储体中的第三矩阵的地址中。
另外,根据本发明的实施例,提供了一种处理器,包括:指令译码器,其对程序中包括的指令进行译码,所述程序将通过针对第一矩阵中的预定行和第二矩阵中的预定列执行内积处理所获得的、将被写入第三矩阵的预订元素中的结果进行排序;多个存储体,第一至第三矩阵被分散排列所述多个存储体中;读出地址生成电路,其基于由指令译码器所译码的第一矩阵和第二矩阵的读寄存器指定和读寄存器扫描方向,提供用于从所述多个存储体读出第一矩阵中的预定行的第一读出地址和用于从所述多个存储体读出第二矩阵中的预定列的第二读出地址;读出控制电路,其基于由指令译码器所译码的第一矩阵和第二矩阵的读寄存器指定和读寄存器偏移,控制第一矩阵中的预定行和第二矩阵中的预定列的排列,所述第一矩阵中的预定行和第二矩阵中的预定列是根据第一读出地址和第二读出地址而从所述多个存储体读出的;处理单元,其对经过了由读出控制电路所控制的排列的第一矩阵中的预定行和第二矩阵中的预定列执行内积处理;写地址生成电路,其基于由指令译码器所译码的写寄存器指定和写寄存器偏移,提供所述多个存储体中的写地址;以及写控制电路,其基于由指令译码器所译码的写寄存器指定和写寄存器偏移,将从处理单元输出的内积处理的结果写在对应于所述多个存储体中的第三矩阵的地址中。
上述配置具有这样的效果,即基于由指令译码器所译码的结果,控制存储在多个存储体中的第一矩阵的预定行和第二矩阵的预定列的排列以将其提供给处理单元,以及控制由处理单元输出的内积处理结果的排列以将其写在对应于所述多个存储体中的第三矩阵的地址中。
本发明显示了出众的效果,即SIMD在运算指令前不需要数据排列指令,从而提高了处理效率。
附图说明
图1是示出了根据本发明实施例的SIMD处理器的典型配置的示图;
图2是示出了根据本发明实施例的典型指令格式的示图;
图3是示出了根据本发明实施例的由指令译码器产生的典型译码结果的示图;
图4是示出了根据本发明实施例的典型寄存器指定的示图;
图5A和图5B是示出了根据本发明实施例的寄存器扫描方向的示图;
图6是示出了根据本发明实施例的寄存器文件的典型逻辑配置的示图;
图7是示出了根据本发明实施例的典型的对矩阵的寄存器文件分配的示图;
图8是示出了根据本发明实施例的典型的对寄存器文件的物理存储体分派的示图;
图9是示出了根据本发明实施例的寄存器文件的典型物理配置的示图;
图10A和图10B是示出了根据本发明实施例的写控制电路的典型配置的示图;
图11是示出了根据本发明实施例的写控制电路中应用的写数据分配器所设置的典型关系的示图,该关系作为获得为运算结果的写数据与要实际存储在存储体中的数据之间的关系;
图12是示出了根据本发明实施例的写地址生成电路的典型配置的示图;
图13是示出了根据本发明实施例的第一读控制电路的典型配置的示图;
图14是示出了根据本发明实施例的第一读控制电路中所应用的第一读数据分配器所设置的典型关系的示图,该关系作为从存储体实际读出的第一数据与被用作为操作数的第一读数据之间的关系;以及
图15是示出了根据本发明实施例的处理单元的典型配置的示图。
具体实施方式
下面参照附图,描述本发明的实施例。
图1是示出了根据本发明实施例的SIMD处理器100的典型配置的示图。SIMD处理器100具有程序计数器110、指令译码器120、寄存器文件130和处理单元140。SIMD处理器100连接到指令存储器400,或者包括作为嵌入式存储器的指令存储器400。指令存储器400是存储用于RISC(Reduced Instruction Set Computer,精简指令集计算机)体系结构的指令集的存储器。用于RISC体系结构的典型指令的长度为32位和3个操作数。SIMD处理器100是通常能够同时执行4条指令的SIMD处理器。应当注意,虽然典型处理器能够同时执行例如4条指令,但是SIMD处理器不应当被限定为此情形下作为示例的处理器。也就是说,SIMD可同时执行任意数量的指令。
程序计数器110是用于计算指令在指令存储器400中所存储的读地址的计数器。指令409从指令存储器400的由程序计数器110表明的地址119处读出,并被提供给指令译码器120。指令译码器120对从指令存储器400中读出的指令409进行译码,以翻译指令409的操作码和指令409所需的操作数。依赖于对操作数中的一个的翻译结果,从寄存器文件130中选择寄存器,并在操作中对其进行访问,以根据所翻译的操作码向寄存器文件130写入数据或从寄存器文件130读出数据。然后,处理单元140根据所翻译的操作码,对作为操作数而从寄存器文件130读出的数据执行预定处理。处理单元140执行的处理的结果存储在寄存器中,所述寄存器也是依赖于对操作数中的一个的翻译结果而从寄存器文件130中选择的。
图2是示出了根据本发明实施例的典型指令格式的示图。根据该指令格式,指令所具有的字段包括功能码210、写操作数220、第一读操作数230和第二读操作数240。功能码210是用于定义上述操作码的字段,其示出了通过执行所述指令,将由处理单元140执行的操作。通常,功能码210定义了属于算术类或其他类的操作。属于算术类的操作的一个示例是加法。
写操作数220所具有的字段包括写寄存器指定221、写寄存器扫描方向222、写寄存器偏移223和写寄存器元素计数224。写寄存器指定221是用于定义写寄存器的地址的字段。写寄存器扫描方向222是用于定义向写寄存器中存储数据的操作方向的字段。向写寄存器中存储数据的操作方向可以是寄存器矩阵的垂直或水平方向。写寄存器偏移223是定义在水平方向上向写寄存器中存储数据的操作中的偏移的字段。写寄存器元素计数224是用于定义在向寄存器中存储数据的操作中,要被写入写寄存器中的元素的数量的字段。
第一读操作数230所具有的字段包括第一读寄存器指定231、第一读寄存器扫描方向232、第一读寄存器偏移233和第一读寄存器元素计数234。第一读寄存器指定231是用于定义第一读寄存器的地址的字段。第一读寄存器扫描方向232是用于定义从第一读寄存器取数据的操作方向的字段。从第一寄存器取数据的操作方向可以是寄存器矩阵的垂直或水平方向。第一读寄存器偏移233是定义在水平方向上从第一读寄存器取数据的操作中的偏移的字段。第一读寄存器元素计数234是用于定义在从寄存器取数据的操作中,要从第一读寄存器取出的元素的数量的字段。
第二读操作数240所具有的字段包括第二读寄存器指定241、第二读寄存器扫描方向242、第二读寄存器偏移243和第二读寄存器元素计数244。第二读寄存器指定241是用于定义第二读寄存器的地址的字段。第二读寄存器扫描方向242是用于定义从第二读寄存器取数据的操作方向的字段。从第二寄存器取数据的操作的方向可以是寄存器矩阵的垂直或水平方向。第二读寄存器偏移243是定义在水平方向上从第二读寄存器取数据的操作中的偏移的字段。第二读寄存器元素计数244是用于定义在从寄存器取数据的操作中,要从第二读寄存器取出的元素的数量的字段。
图3是示出了根据本发明实施例的由指令译码器120执行以对指令409进行译码的处理的典型结果的示图。指令译码器120对从指令存储器400取出的指令409进行译码,以翻译上面提到的字段。在图中,参考标号1210表示对功能码210的译码结果。
参考标号1231、1232、1233和1234分别表示对第一读寄存器指定231、第一读寄存器扫描方向232、第一读寄存器偏移233和第一读寄存器元素计数234的译码结果。
同样地,参考标号1241、1242、1243和1244分别表示对第二读寄存器指定241、第二读寄存器扫描方向242、第二读寄存器偏移243和第二读寄存器元素计数244的译码结果。同样地,参考标号1221、1222、1223和1224分别表示对写寄存器指定221、写寄存器扫描方向222、写寄存器偏移223和写寄存器元素计数224的译码结果。
图4是示出了根据本发明的典型寄存器指定的示图。这里假设要被访问的寄存器文件被划分为后面将要描述的多个存储体。寄存器指定包括高位和低位。高位指定矩阵的序号,而低位指定矩阵中行的序号。
例如对于每个4行的4个矩阵来说,寄存器指定需要至少4位。2个高位指定矩阵号211,而2个低位指定矩阵内的行号212。矩阵号211和矩阵内的行号212标识了一个寄存器,该寄存器是存储体319中的一行。
如前所述,该指令格式包括3个寄存器指定字段,即写寄存器指定221、第一读寄存器指定231和第二读寄存器指定241。
图5A和图5B是示出了根据本发明实施例的扫描方向的示图。扫描方向字段为0表明每个对矩阵进行访问的操作都将以水平方向执行,如图5A所述。例如在对矩阵A[i][j]将扫描方向字段设置为0的情况中,每个对该矩阵进行访问的操作都是通过固定i标记而改变j标记来执行的。
另一方面,扫描方向字段为1表明每个对矩阵进行访问的操作都将以垂直方向执行,如图5B所述。例如在对矩阵A[i][j]将扫描方向字段设置为1的情况中,每个对该矩阵进行访问的操作都是通过固定j标记而改变i标记来执行的。
如前所述,该指令格式包括3个扫描方向字段,即写寄存器扫描方向222、第一读寄存器扫描方向232和第二读寄存器扫描方向242。
在写寄存器偏移223、第一读寄存器偏移233或第二寄存器偏移243中指定的偏移是分别对第一读寄存器、第二读寄存器和写寄存器,在图5A和图5B所示的矩阵的水平方向上的偏移。偏移被定义为在读或写操作的开始与下一读或写操作的开始之间的位移。
写寄存器元素计数224中指定的元素计数是在一次访问中,将被写入写寄存器的数据块的数量。另一方面,第一读寄存器元素计数234或第二读寄存器元素计数244中指定的元素计数是在一次访问中,将从第一读寄存器或第二读寄存器读出的数据块的数量。例如,可同时对n行n列矩阵的水平或垂直排列的n个元素进行一次访问。例如,如果可同时被访问的元素的最大数量是4,则可以使用2个位在写寄存器元素计数224、第一读寄存器元素计数234或第二读寄存器元素计数244中指定元素计数。具体地说,元素计数1由二进制形式的00b所表示的值0指定,元素计数2由二进制形式的01b所表示的值1指定。同样地,元素计数3由二进制形式的10b所表示的值2指定,元素计数4由二进制形式的11b所表示的值3指定。
图6是示出了根据本发明实施例的寄存器文件130的典型逻辑配置的示图。通过假设寄存器文件130一般具有16行4列矩阵的配置,向寄存器文件130分配地址。于是,寄存器文件130可用来存储64块32位数据,作为矩阵元素R[0][0]到R[15][3]。
图7示出了作为寄存器文件130的一些部分的前述矩阵A、B和D。如图7所示,从图6所示的寄存器文件的130顶部开始顺序地,各自具有4行4列的矩阵A、B和D被定义为寄存器文件130的一些部分。也就是说,寄存器文件130的元素R[0][0]到R[3][3]被分派给矩阵A,寄存器文件130的元素R[4][0]到R[7][3]被分派给矩阵B,寄存器文件130的元素R[8][0]到R[11][3]被分派给矩阵D。
注意,由于寄存器文件130的元素R[12][0]到R[15][3]没有被分配给任何特定矩阵,因此如有必要,这16个元素可被用作为工作区。
图8是示出了根据本发明实施例的寄存器文件130的典型物理划分的示图。如图所示,寄存器文件130被物理划分为多个存储体。由于可同时对多个存储体进行访问,因此对图6所示的逻辑配置的访问可被实现为对包括在寄存器文件130中的许多寄存器的同时访问。在图8所示的示例中,寄存器文件130被划分为存储体310到313。概括地说,就是将可用于存储m个n×n矩阵(m、n都是整数)的寄存器文件划分为n个存储体,其中的每个存储体都可用于存储n×m个元素。
与图6所示的顺序不同,对存储体分配的数据块被故意地置于对每行应用所谓“倾斜(skew)”的状态中。例如,第一、第二、第三和第四存储体中的第0行上的数据块分别是R[0][0]、R[0][1]、R[0][2]和R[0][3],与图6所示的第0行上的元素相同。另一方面,第一、第二、第三和第四存储体中的第1行上的数据块分别是R[1][3]、R[1][0]、R[1][1]和R[1][2],每个都相比它们各自在第0行上的相对者右移了一列。
通过如上所述故意地在存储体中存储数据块,在以水平方向或垂直方向对矩阵进行访问的操作中,在任一方向上的访问可同时进行。以对图7所示的矩阵A进行访问作为示例。在此情形下,在任一方向上的同时访问中,存储在不同存储体中的数据块被同时访问。具体地说,可同时在逻辑水平方向上对例如R[0][0]、R[0][1]、R[0][2]和R[0][3]进行一般的同时访问,因为它们分别存储在第一到第四存储体310到313中。通过改变标记j但保持标记i不变,实现到数据块R[i][j]的在逻辑水平方向上的同时访问。另一方面,可同时在逻辑垂直方向上对例如R[0][1]、R[1][1]、R[2][1]和R[3][1]进行另外的一般的同时访问,因为它们分别存储在第二存储体311、第三存储体312、第四存储体313和第一存储体310中。通过改变标记i但保持标记j不变,实现到数据块R[i][j]的在逻辑垂直方向上的同时访问。
图9是示出了根据本发明实施例的寄存器文件130的典型物理配置的示图。假设对寄存器文件130的每次同时访问都是对4块数据进行的。如图所示,寄存器文件130从而包括4个存储体310到313。作为存储体310到313的控制电路,寄存器文件130还包括写地址生成电路320、第一读地址生成电路330、第二读地址生成电路340、写控制电路350、第一读控制电路360以及第二读控制电路370。
存储体310到313每个都具有彼此独立操作的端口。这些端口是用于写地址MWA、第一读地址M1RA、第二读地址M2RA、写数据MWD、第一读数据M1RD、第二读数据M2RD和写使能信号MWE的端口。当地址被提供给第一读地址M1RA的端口时,从第一读数据M1RD的端口输出存储在该地址处的数据。同样,当地址被提供给第二读地址M2RA的端口时,从第二读数据M2RD的端口输出存储在该地址处的数据。另一方面,当地址被提供给写地址MWA的端口时,在被提供到写使能信号MWE的端口的写使能信号被置于激活状态时,被提供给写数据MWD的端口的数据被存储在该地址处。
写地址生成电路320是用于产生要被提供给存储体310到313的写地址MWA的电路。详细地说,写地址生成电路320接收来自指令译码器120的写寄存器指定1221和写寄存器扫描方向1222,分别向存储体310到313输出写地址3290到3293。
同样地,第一读地址生成电路330是用于产生要被提供给存储体310到313的第一读地址M1RA的电路。详细地说,第一读地址生成电路330接收来自指令译码器120的第一读寄存器指定1231和第一读寄存器扫描方向1232,分别向存储体310到313输出第一读地址3390到3393。
同样地,第二读地址生成电路340是用于产生要被提供给存储体310到313的第二读地址M2RA的电路。详细地说,第二读地址生成电路340接收来自指令译码器120的第二读寄存器指定1241和第二读寄存器扫描方向1242,分别向存储体310到313输出第二读地址3490到3493。
写控制电路350是用于向存储体310到313提供写使能信号MWE和写数据MWD的电路。详细地说,写控制电路350接收来自指令译码器120的写寄存器指定1221、写寄存器偏移1223和写寄存器元素计数1224以及来自处理单元140的写数据块1490到1493,分别向存储体310到313提供写使能信号3580到3583和写数据块3590到3593,如图9所示。
另一方面,第一读控制电路360是用于控制从存储体310到313读出的第一读数据M1RD的目的地的电路。详细地说,第一读控制电路360接收来自指令译码器120的第一读寄存器指定1231和第一读寄存器偏移1233以及分别来自存储体310到313的第一读数据块3101、3111、3121和3131,向处理单元140提供第一读数据块3690、3691、3692和3693。
同样地,第二读控制电路370是用于控制从存储体310到313读出的第二读数据M2RD的目的地的电路。详细地说,第二读控制电路370接收来自指令译码器120的第二读寄存器指定1241和第二读寄存器偏移1243以及分别来自存储体310到313的第二读数据块3102、3112、3122和3132,向处理单元140提供第二读数据块3790、3791、3792和3793。
图10A和图10B是示出了根据本发明实施例的写控制电路350的典型配置的示图。如图10A所示,写控制电路350具有元素计数译码器351、位提取电路352、加法器353、4个写使能信号生成器354和4个写数据分配器355。
位提取电路352输出从指令译码器120接收到的写寄存器指定1221的2个低位,作为数据3522。如上所述,写寄存器指定1221的2个低位代表矩阵内的行号212,即图4所示的矩阵中的行的序号。加法器将从位提取电路352接收的数据3522与从指令译码器120接收的写寄存器偏移1223相加,产生由写寄存器选择信号3531所代表的和。因此,写寄存器选择信号3531是指向用作写操作开端的写寄存器的信号。
元素计数译码器351对从指令译码器120接收的写寄存器元素计数1224进行译码,输出类似于图10B的右侧一列所示的数据。如该图所示,为0、1、2、3的写寄存器元素计数1224分别示出了1、2、3、4个元素。因此,元素计数译码器351向写使能信号生成器354输出元素计数信号,请求对相应数量元素的写操作。
根据上述写寄存器选择信号3531(后面将参照图11对其进行描述),4个写使能信号生成器354分别向存储体310到313提供写使能信号3580到3583。但是,只有被从元素计数译码器351接收的元素计数信号选择的写使能信号生成器354才实际地向它们各自的存储体提供写使能信号,其中存储体的数量由元素计数信号确定。
同样地,根据上述写寄存器选择信号3531(后面将参照图11对其进行描述),4个写数据分配器355分别向存储体310到313提供从处理单元140接收的写数据块1490到1493,作为数据块3590到3593。但是,与写使能信号生成器354不同,所有的写数据分配器355的操作都不考虑从元素计数译码器351接收的元素计数信号。
注意,概括上述写控制,如下定义代表上述写寄存器选择信号3531的写数据选择信号MWDsel、代表写数据块3590到3593的写数据MWD和代表写使能信号3580到3583的写使能信号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表示存储体的序号。因此,存储体号b是范围0到(n-1)的整数。此外,符号WD表示由处理器单元140输出的作为最终要通过写数据分配器355写入存储体的数据的写数据块1490到1493。也就是说,被实际写入由范围0到(n-1)的存储体号b表明的存储体的数据MWD[b]是根据MWDsel[b],从由WD代表的写数据块1490到1493中选出的。此外,符号pmod(i,j)表示返回整数i除以整数j所得的余数的函数。另外,符号‘a?x;y’表示这样的函数:对a=1返回x,对a=0返回y。
图11的示图示出了写控制电路350中使用的写数据分配器355是如何依赖于上述写寄存器选择信号3531而分别向存储体310到313分配从处理单元140接收的写数据块1490到1493的,其中写数据块1490到1493被分配作为数据块3590到3593,写寄存器选择信号3531是行号和写寄存器偏移的和。如上所述,写寄存器选择信号3531是由加法器353输出的信号。写寄存器选择信号3531被提供给写数据分配器355作为选择信号SEL。例如,如果写寄存器选择信号3531具有值0,则写数据分配器355将写数据块1490到1493照这个样子分别分配给存储体310到313作为数据块3590到3593。
如果写寄存器选择信号3531具有值1,则写数据分配器355将从处理单元140接收的写数据块1490、1491、1492和1493分别分配给存储体311、312、313和310作为数据块3591、3592、3593和3590。也就是说,写数据分配器355在存储体号加1的方向上循环了写数据块1490、1491、1492和1493之后,即将写数据块1490、1491、1492和1493在图9所示的在存储体310到313上向左循环一个元素之后,分别向存储体311、312、313和310分配写数据块1490、1491、1492和1493。同样地,如果写寄存器选择信号3531具有值2,则写数据分配器355在将数据块1490、1491、1492和1493左向循环2个元素之后,将写数据块1490、1491、1492和1493分别分配给存储体312、313、310和311作为数据块3592、3593、3590和3591。同样地,如果写寄存器选择信号3531具有值3,则写数据分配器355在将数据块1490、1491、1492和1493左向循环3个元素后,将写数据块1490、1491、1492和1493分别分配给存储体313、310、311和312作为数据块3593、3590、3591和3592。
在图11所示的分配中,写数据分配器355被视为数据的分配器。注意,与写数据分配器355相同,基于写寄存器选择信号3531的分配也可被应用于写使能信号生成器354,所述写使能信号生成器354用作作为输出到存储体310到313的信号的写使能信号的生成器。但是,在写使能信号生成器354的情形下,只有被从元素计数译码器351接收的元素计数信号选择的写使能信号生成器354才实际地向它们各自的存储体提供写使能信号,其中存储体的数量由元素技术信号确定。
图12是示出了根据本发明实施例的写地址生成电路320的典型配置的示图。如图所示,写地址生成电路320具有位分割电路321、减法器3220到3223、行号选择器3230到3233,以及结合电路3250到3253。
位分割电路321将从指令译码器120接收的写寄存器指定1221分割为具有2位长度的矩阵号3211和也具有2位长度的矩阵内的行号3212,如前参照图4所述。
减法器3220用常数0去减矩阵内行号3212,并将减法结果提供给行号选择器3230。同样地,减法器3221用常数1去减矩阵内行号3212,并将减法结果提供给行号选择器3231。同样地,减法器3222用常数2去减矩阵内行号3212,并将减法结果提供给行号选择器3232。类似地,减法器3223用常数3去减矩阵内行号3212,并将减法结果提供给行号选择器3233。于是,逐个递增1的四个数被分别提供给行号选择器3230到3233的输入1。
另一方面,矩阵内行号3212实际上被提供给所有行号选择器3230到3233的输入0。指令译码器120输出的写寄存器扫描方向1222被提供给行号选择器3230到3233,作为每个行号选择器3230到3233用来选择输入0或输入1的信号。也就是说,如果写寄存器扫描方向1222是0,则行号3240到3243就作为彼此相差1的数字而分别由行号选择器3230到3233输出。另一方面,如果写寄存器扫描方向1222是1,则行号3240到3243就作为彼此相等的数字而分别由行号选择器3230到3233输出。
分别由行号选择器3230到3233输出的行号3240到3243被分别提供给结合电路3250到3253,以被返回与矩阵号3211结合。与矩阵号3211结合的行号3240到3243被分别提供给存储体310到313分别作为写地址3290到3293。也就是说,如果指令译码器120输出的写寄存器扫描方向1222是0,则地址3290到3293被分别提供给存储体310到313,作为用于矩阵水平方向访问中执行的写操作的写地址。另一方面,如果指令译码器120输出的写寄存器扫描方向1222是1,则地址3290到3293被分别提供给存储体310到313,作为用于矩阵垂直方向访问中执行的写操作的写地址。于是,如果指令译码器120输出的写寄存器扫描方向1222是表明将在水平扫描方向执行写操作的0,那么写地址3290到3293作为逐个递增1的地址被分别提供给存储体310到313。另一方面,如果指令译码器120输出的写寄存器扫描方向1222是表明将在矩阵垂直扫描方向执行写操作的1,那么写地址3290到3293作为彼此相等的地址被分别提供给存储体310到313。
已经参照图12说明了写地址生成电路320的典型配置。注意,第一读地址生成电路330和第二读地址生成电路340也可以通过与写地址生成电路320相同的配置来实现。
为了概括地说明上述地址生成,用下式定义代表写地址3290到3293、第一读地址3390到3393和第二读地址3490到3493的存储器地址MA[b]。
MA[b]=(IX-pmod(IX,n))+(RXC?pmod(b-IX,n);pmod(IX,n))
在上述定义中,符号IX表示寄存器指定,符号RXC表示寄存器扫描方向。此外,符号n表示存储体数量,符号b表示存储体的序号。于是,存储体号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接收的第一读寄存器指定1231的2个低位,作为数据3612。如前所述,第一读寄存器指定1231的2个低位代表矩阵内行号212,即图4所示的矩阵内的行号。加法器362将从位提取电路361接收的数据3612与从指令译码器120接收的第一读寄存器偏移1233相加,以产生由第一读寄存器选择信号3621代表的和。第一读寄存器选择信号3621是指向用作第一读操作开端的第一读寄存器的信号。
4个第一读数据分配器363分别接收来自存储体310到313的第一读数据块3101到3131,并以根据前述第一读寄存器选择信号3621(后面将参照图14进行描述)的方式,将第一读数据块3101到3131作为第一读数据块3690到3693输出到处理单元140。处理单元140使用第一读数据3690到3693作为第一操作数。
注意,为了概括地陈述上述读控制,用下式定义代表上述第一读寄存器选择信号3621的读数据选择信号MRDsel以及代表第一读数据块3690到3693和第二读数据块3790到3793的读数据RD:
MRDsel[b]=pmod(b-IX-FS,n)
RD[MRDsel[b]]=MRD[b]
在如上定义中,符号IX表示寄存器指定,符号FS表示寄存器偏移。另外,符号n表示存储体数量,符号b表示存储体的序号。因此,存储体号b是范围0到(n-1)的整数。此外,代表了第一读数据块3101到3131和第二读数据块3102到3132的符号MRD[b]是实际从由范围0到(n-1)的存储体号b所表明的存储体读出的数据。此外,符号pmod(i,j)表示返回整数i除以整数j所得的余数的函数。
图14示出了第一读控制电路360中所使用的第一读数据分配器363是如何依赖于上述第一读寄存器选择信号3621而分别指派从存储体310到313实际读出的第一读数据块3101到3131的,其中第一读数据块3101到3131被指派作为提供给处理单元140的第一读数据3690到3693,第一读寄存器选择信号3621是行号和寄存器偏移的和。如上所述,第一读寄存器选择信号3621是由加法器363输出的信号。第一读寄存器选择信号3621被提供给第一读数据分配器363作为选择信号SEL。例如,如果第一读寄存器选择信号3621具有值0,则第一读数据分配器363将第一读数据块3101、3111、3121和3131照这个样子分别指派为第一读数据块3690到3693。
如果第一读寄存器选择信号3621具有值1,则第一读数据分配器363将第一读数据块3101、3111、3121和3131分别指派为第一读数据块3693、3690、3691和3692。也就是说,第一读数据分配器363在存储体号减1的方向上循环了第一读数据块3101到3131之后,即将第一读数据块3101、3111、3121和3131在图9所示的存储体310到313上向右循环一个元素之后,分别将第一读数据块3101、3111、3121和3131指派为第一读数据块3693、3690、3691和3692。同样地,如果第一读寄存器选择信号3621具有值2,则第一读数据分配器363在将第一读数据块3101、3111、3121和3131右向循环2个元素后,将第一读数据块3101、3111、3121和3131分别指派为第一读数据块3692、3693、3690和3691。同样地,如果第一读寄存器选择信号3621具有值3,则第一读数据分配器363在将第一读数据块3101、3111、3121和3131右向循环3个元素后,将第一读数据块3101、3111、3121和3131分别指派为第一读数据块3691、3692、3693和3690。
已参照图13和图14说明了第一读控制电路360的典型配置。但是注意,用于输出第二读数据块3790到3793的第二读控制电路370具有与第一控制电路360相同的配置。
图15是示出了根据本发明实施例的处理单元140的典型配置的示图。如图所示,处理单元140具有4个算术电路组141,其中的每一个都具有算术电路、加法器142和处理结果选择器1430到1433。
4个算术电路组141中的每一个都被设计用于一对输入操作数。通常,每个算术电路组141都包括加法器、减法器、乘法器、除法器和比较器。加法器142是用于对由算术电路组141中所使用的乘法器输出的积进行求和的电路。也就是说,加法器142的输出是矩阵内积计算中获得的乘积的和。
处理结果选择器1430到1433中的每一个都是这样的组件,其根据从指令译码器120接收的功能码1210,选择由算术电路组141和加法器142输出的处理结果中的一个。由处理结果选择器1430到1433选择的处理结果被输出到存储体310到313作为写数据块1490到1493。例如,如果从指令译码器120接收的功能码1210是0,则处理结果选择器1430到1433选择由算术电路组141输出的加法结果。如果从指令译码器120接收的功能码1210是1,则处理结果选择器1430到1433选择由算术电路组141输出的减法结果。如果从指令译码器120接收的功能码1210是2,则处理结果选择器1430到1433选择由算术电路组141输出的乘法结果。如果从指令译码器120接收的功能码1210是3,则处理结果选择器1430到1433选择由算术电路组141输出的除法结果。如果从指令译码器120接收的功能码1210是4,则处理结果选择器1430到1433选择由算术电路组141输出的比较结果。然后,处理结果选择器1430到1433将所选择的加法结果输出到存储体310到313作为写数据块1490到1493。
另外,另一方面,如果从指令译码器120接收的功能码1210是5,则处理结果选择器1430选择由加法器器142输出的乘积和,而其他处理选择器1431到1433的输出被无效。如果从指令译码器120接收的功能码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的一个元素中的指令。在XDOT指令中,符号d_ix表示用于矩阵D的寄存器指定,符号d_fs表示矩阵D中的偏移。因此,操作数d_ix和d_fs指定了矩阵D的一个元素作为在其中存储内积的矩阵元素。另一方面,符号a_ix表示用于矩阵A的寄存器指定,符号a_rxc表示在矩阵A上的扫描方向。通常,操作数a_rxc对应于行被设置为0。因此,操作数a_ix和a_rxc指定了矩阵A中的一行。同样地,符号b_ix表示用于矩阵B的寄存器指定,符号a_rxc表示在矩阵B上的扫描方向。通常,操作数b_rxc对应于列被设置为1。因此,操作数b_ix和b_rxc指定了矩阵B中的一列。
对于4行4列矩阵来说,如下定义XDOT指令的具体运算: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_ix指定作为矩阵A的一行的任意行和由b_ix指定作为矩阵B的一列的任意列所执行的内积运算的结果可被存储在由d_ix和d_fs指定作为矩阵D中一个元素位置的预定位置处。
作为示例,假设指令XDOT 8,2,0,0,6,1。在此情形下,作为译码的结果,指令译码器120输出代表内积运算的值为5的功能码1210、值为8的写寄存器指定1221、值为2的写寄存器偏移1223、值为0的第一读寄存器指定1231、值为0的第一读寄存器扫描方向1232、值为6的第二读寄存器指定1241,以及值为1的第二读寄存器扫描方向1242。值为8的写寄存器指定1221和值为2的写寄存器偏移1223指定了矩阵D中的矩阵元素D[0,2]。另一方面,值为0的第一读寄存器指定1231和值为0的第一读寄存器扫描方向1232指定了矩阵A中的行#0。同样地,值为6的第二读寄存器指定1241和值为1的第二读寄存器扫描方向1242指定了矩阵B中的一列。由于写寄存器偏移1223被设置为2,因此对于该XDOT指令,矩阵B的被指定的列是列#2。另外,由于内积运算是对4行4列矩阵A和B执行的,所以作为XDOT指令的默认值,指令译码器120还输出与4个元素相对应的值为3的第一读寄存器元素计数1234和与4个元素相对应的值为3的第二寄存器元素计数1244。此外,指令译码器120还输出也作为XDOT指令默认值的值为0的第一读寄存器偏移1233和值为0的第一读寄存器偏移1243。此外,由于内积运算的结果是标量值,因此指令译码器120还输出与单值相对应的值为0的写寄存器元素计数1224和值为0的写寄存器扫描方向1222。
写地址生成电路320产生写地址3290到3293,它们都被设置为8,对应于作为包括上述矩阵元素D[0,2]的行的被包括在矩阵D中的行#0。第一读地址生成电路330产生值为0的第一读地址3390到3393,对应于上述矩阵A中的行#0。第二读地址生成电路340产生值为6的第二读地址3490、值为7的第二读地址3491、值为4的第二读地址3492和值为5的第二读地址3493。值为6的开始第二读地址3490是根据值为6的第二读寄存器指定1241计算的,包括表明矩阵B的值为1的矩阵号和值为2的矩阵B中的矩阵内行号。
因为第一读寄存器指定1231被设置为0,并且第一读寄存器偏移1233被设置为0,以给出值为0的第一读寄存器选择信号3621,所以第一读控制电路360分别指派第一读数据块3101到3131照这样作为第一读数据块3690到3693,如前面参照图14所述。另一方面,因为第二读寄存器指定1241被设置为6,并且第二读寄存器偏移1243被设置为0,以给出值为2的第二读寄存器选择信号,所以第二读控制电路370将第二读数据块3102到3132右向循环2个元素,也如前面参照图14所述,并将第二读数据3102指派为第二读数据3792,将第二读数据3112指派为第二读数据3793,将第二读数据3122指派为第二读数据3790,将第二读数据3132指派为第二读数据3791。
根据功能码1210,处理单元140将第一读数据块3690到3693分别乘以第二读数据块3790到3793,对每个作为乘法结果的乘积进行相加,并将和输出作为写数据1490。
因为写寄存器指定1221被设置为8,并且写寄存器偏移1223被设置为2,以给出值为2的写寄存器选择信号3531,所以写控制电路350将从处理单元140接收的写数据块1490、1491、1492和1493左向循环2个元素,如前面参照图11所述。然后,写控制电路350输出循环后的写数据1490作为写数据3592,输出循环后的写数据1491作为写数据3593,输出循环后的写数据1492作为写数据3590,输出循环后的写数据1493作为写数据3591,如图11所示。但是,由于如上所述,写寄存器元素计数1224被设置为0,表明元素计数为1,并且写寄存器偏移1223被设置为2,因此写控制电路350仅激活写使能信号3582而将其他写使能信号3580、3581和3583去活。于是,只有对应于行#2的存储体312被使能。
相应地,寄存器文件130从由值为0的第一读寄存器指定1231表明的作为寄存器文件130中矩阵A的一行的行#0读出第一读数据块。来自行#0的第一读数据块是R[0][0]、R[0][1]、R[0][2]和R[0][3]。寄存器文件130还从上述作为寄存器文件130中矩阵B的一列的列#2读出第二读数据块。来自列#2的第二读数据块是R[4][2]、R[5][2]、R[6][2]和R[7][2],它们是分别从存储体#2的值为4的地址、存储体#3的值为5的地址、存储体#0的值为6的地址和存储体#1的值为7的地址同时读出的,如图8所示。然后,处理单元140计算下列乘积和:R[0][0]×R[4][2]+R[0][1]×R[5][2]+R[0][2]×R[6][2]+R[0][3]×R[7][2]。最后,处理单元140将计算得到的乘积和存储在上述作为矩阵D的一个元素的矩阵元素D[0][2]中。矩阵元素D[0][2]是寄存器文件130的R[8][2]。
为了获得作为4行4列矩阵A和B内积的矩阵D的16个元素值,执行包括如下16条XDOT指令的程序。
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列矩阵A和B的内积的矩阵D的16个元素值。与需要36条指令的有关技术相比,指令数减少到比原来的一半还少。
如上所述,根据本发明的实施例,第一读控制电路360和第二读控制电路370重新排列从存储体310到313读出的数据块,而写控制电路350重新排列由处理单元140产生的作为运算结果的写数据块1490到1493。于是,在运算指令之前不需要数据排列指令。
本发明的每个实施例都仅是本发明的一种典型实现。另外,每个实施例都对应于所示出的发明权利要求的范围中的发明项。但是注意,本发明的范围并不局限于这些实施例。也就是说,可对这些实施例作出多种改变,只要这些改变在不偏离本发明本质的范围内。
换句话说,本领域的技术人员应当理解,可根据设计需求和其他因素而作出各种修改、合并、部分合并和替换,而它们落在所附权利要求及其等同物的范围内。
本发明可应用于在处理器中对多个数据块同时执行运算的应用。

Claims (2)

1. 一种处理器,包括:
多个存储体,第一至第三矩阵被分散排列在所述多个存储体中;
读出地址生成电路,其基于所述第一矩阵和所述第二矩阵的读出寄存器指定和读出寄存器扫描方向,提供用于从所述多个存储体读出所述第一矩阵中的预定行的第一读出地址和用于从所述多个存储体读出所述第二矩阵中的预定列的第二读出地址;
读出控制电路,其基于所述第一矩阵和所述第二矩阵的所述读出寄存器指定和读出寄存器偏移,控制所述第一矩阵中的所述预定行和所述第二矩阵中的所述预定列的排列,所述第一矩阵中的所述预定行和所述第二矩阵中的所述预定列都是根据所述第一读出地址和所述第二读出地址从所述多个存储体读出的;
处理单元,其对经过了由所述读出控制电路所控制的排列的所述第一矩阵中的所述预定行和所述第二矩阵中的所述预定列执行内积处理;
写地址生成电路,其基于所述第三矩阵的写寄存器指定和写寄存器偏移,提供所述多个存储体中的写地址;和
写控制电路,其基于所述写寄存器指定和所述写寄存器偏移,将从所述处理单元输出的所述内积处理的结果写在对应于所述多个存储体中的所述第三矩阵的地址中。
2. 一种处理器,包括:
指令译码器,其对程序中包括的指令进行译码,所述程序将通过针对第一矩阵中的预定行和第二矩阵中的预定列执行内积处理所获得的、将被写入第三矩阵的预定元素中的结果进行排序;
多个存储体,所述第一至第三矩阵被分散排列在所述多个存储体中;
读出地址生成电路,其基于由所述指令译码器所译码的所述第一矩阵和所述第二矩阵的读寄存器指定和读寄存器扫描方向,提供用于从所述多个存储体读出所述第一矩阵中的所述预定行的第一读出地址和用于从所述多个存储体读出所述第二矩阵中的所述预定列的第二读出地址;
读出控制电路,其基于由所述指令译码器所译码的所述第一矩阵和所述第二矩阵的所述读寄存器指定和读寄存器偏移,控制所述第一矩阵中的所述预定行和所述第二矩阵中的所述预定列的排列,所述第一矩阵中的所述预定行和所述第二矩阵中的所述预定列是根据所述第一读出地址和所述第二读出地址从所述多个存储体读出的;
处理单元,其对经过了由所述读出控制电路所控制的排列的所述第一矩阵中的所述预定行和所述第二矩阵中的所述预定列执行内积处理;
写地址生成电路,其基于由所述指令译码器所译码的所述第三矩阵的写寄存器指定和写寄存器偏移,提供所述多个存储体中的写地址;和
写控制电路,其基于由所述指令译码器所译码的所述写寄存器指定和所述写寄存器偏移,将从所述处理单元输出的所述内积处理的结果写在对应于所述多个存储体中的所述第三矩阵的地址中。
CNB2005100643774A 2004-04-16 2005-04-14 处理器 Expired - Fee Related CN100410919C (zh)

Applications Claiming Priority (2)

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

Publications (2)

Publication Number Publication Date
CN1684058A CN1684058A (zh) 2005-10-19
CN100410919C true CN100410919C (zh) 2008-08-13

Family

ID=34942143

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB2005100643774A Expired - Fee Related CN100410919C (zh) 2004-04-16 2005-04-14 处理器

Country Status (5)

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

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4478050B2 (ja) * 2005-03-18 2010-06-09 株式会社リコー Simd型マイクロプロセッサ及びデータ処理方法
JP2009517763A (ja) * 2005-12-01 2009-04-30 エヌエックスピー ビー ヴィ メモリ中の行列要素に効率的にアクセスするための方法および構成
EP2283485A1 (en) * 2008-05-21 2011-02-16 Nxp B.V. A data handling system comprising a rearrangement network
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
JP5633122B2 (ja) * 2009-06-16 2014-12-03 富士通セミコンダクター株式会社 プロセッサ及び情報処理システム
CN101620524B (zh) * 2009-07-03 2011-08-10 中国人民解放军国防科学技术大学 支持矩阵整体读写操作的矩阵寄存器文件
CN102012803B (zh) * 2010-11-25 2014-09-10 中国人民解放军国防科学技术大学 支持多宽度simd和多粒度simt的可配置矩阵寄存器单元
WO2013054468A1 (ja) * 2011-10-14 2013-04-18 パナソニック株式会社 転置演算装置とその集積回路、および転置処理方法
JP5840451B2 (ja) 2011-10-18 2016-01-06 ルネサスエレクトロニクス株式会社 メモリ制御装置
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
JP2018022339A (ja) 2016-08-03 2018-02-08 富士通株式会社 演算処理装置及び演算処理装置の制御方法
CN108766332B (zh) * 2018-04-17 2021-09-10 南京昀光科技有限公司 可扩展的硅基微型显示器驱动电路
CN108985232A (zh) * 2018-07-18 2018-12-11 平安科技(深圳)有限公司 人脸图像比对方法、装置、计算机设备及存储介质
CN109214273A (zh) * 2018-07-18 2019-01-15 平安科技(深圳)有限公司 人脸图像比对方法、装置、计算机设备及存储介质

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
NL136896C (zh) * 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
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

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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

Also Published As

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

Similar Documents

Publication Publication Date Title
CN100410919C (zh) 处理器
US7725520B2 (en) Processor
US5287532A (en) Processor elements having multi-byte structure shift register for shifting data either byte wise or bit wise with single-bit output formed at bit positions thereof spaced by one byte
US8069337B2 (en) Methods and apparatus for dynamic instruction controlled reconfigurable register file
CN1914592B (zh) 执行具有单元大小控制的紧缩数据操作的方法和设备
KR101099467B1 (ko) 레지스터와 메모리 사이에 데이터를 이동시키는 데이터처리장치 및 방법
US7689811B2 (en) Method and apparatus for constant generation in SIMD processing
US7761693B2 (en) Data processing apparatus and method for performing arithmetic operations in SIMD data processing
CN101097512B (zh) 用于实施混洗和移位操作的方法、设备和系统
US6209078B1 (en) Accelerated multimedia processor
KR100227277B1 (ko) 컴퓨터에 있어서 스칼라값을 벡터로 기입하는 방법
CN108205448B (zh) 具有在每个维度上可选择的多维循环寻址的流引擎
KR20060135642A (ko) 레지스터와 메모리 사이에 데이터를 이동시키는 데이터처리장치 및 방법
Parkinson The distributed array processor (DAP)
US6958718B2 (en) Table lookup operation within a data processing system
CN111353126A (zh) 分块矩阵乘法运算系统
CN100437547C (zh) 具有级联simd结构的数字信号处理器及其信号处理方法
CN107145335B (zh) 用于大整数运算的向量指令的装置和方法
CN109213525B (zh) 具有快捷起始指令的流式传输引擎
JP4901754B2 (ja) 単一命令複数データ実行エンジンのフラグレジスタのための評価ユニット
US20050125631A1 (en) Data element size control within parallel lanes of processing
KR20060021370A (ko) 다수의 명령어 세트를 갖는 데이터 처리 장치 내에서의명령어 부호화
US11263018B2 (en) Vector processor and control method therefor
CN108351780A (zh) 邻接数据元素成对交换处理器、方法、系统和指令
US20040172517A1 (en) Synchronous periodical orthogonal data converter

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
C17 Cessation of patent right
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20080813

Termination date: 20100414