CN101539851A - 算术运算装置和进行算术运算的方法 - Google Patents
算术运算装置和进行算术运算的方法 Download PDFInfo
- Publication number
- CN101539851A CN101539851A CN200910129469A CN200910129469A CN101539851A CN 101539851 A CN101539851 A CN 101539851A CN 200910129469 A CN200910129469 A CN 200910129469A CN 200910129469 A CN200910129469 A CN 200910129469A CN 101539851 A CN101539851 A CN 101539851A
- Authority
- CN
- China
- Prior art keywords
- register
- arithmetic
- unit
- arithmetical
- instruction
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 71
- 230000008569 process Effects 0.000 claims abstract description 55
- 230000004044 response Effects 0.000 claims description 8
- 238000003860 storage Methods 0.000 claims description 4
- 230000006870 function Effects 0.000 description 12
- 239000000700 radioactive tracer Substances 0.000 description 10
- 238000004364 calculation method Methods 0.000 description 8
- 238000006243 chemical reaction Methods 0.000 description 6
- 238000010586 diagram Methods 0.000 description 6
- 229940050561 matrix product Drugs 0.000 description 6
- 230000008901 benefit Effects 0.000 description 3
- 239000011159 matrix material Substances 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000005012 migration Effects 0.000 description 2
- 238000013508 migration Methods 0.000 description 2
- 230000015572 biosynthetic process Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000008676 import Effects 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/4806—Computations with complex numbers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/483—Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/544—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
- G06F7/5443—Sum of products
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Data Mining & Analysis (AREA)
- Computer Hardware Design (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Executing Machine-Instructions (AREA)
- Advance Control (AREA)
- Complex Calculations (AREA)
Abstract
一种技术实现了用更少的指令种类码来执行例如SIMD浮点积和算术运算中的算术运算的各种组合。算术运算装置(1)包括设定单元(20),设定单元(20)在单个指令中的一个或多个未使用的位中设定扩展指令信息,以指示寄存器(11)和算术运算器(12b、12e)中的至少一个进行与普通处理不同的扩展处理。
Description
技术领域
这里记载的实施例是一种在用一个或多个浮点积和算术运算器进行的复数矩阵积和等算术运算中优选地使用的技术。
背景技术
一般地,使用复数作为操作数的算术运算是由下式(1)来实现的。
X+Yi←X+Yi+(A+Bi)*(C+Di)=X+A*C-B*D+(Y+A*D+B*C)i (1)
使用单个浮点积和算术运算器执行该矩阵积和运算需要执行下式(1-1)~(1-4)这4次算术运算。也就是说,如果用单个浮点积和算术运算器来实现复数矩阵积和运算,则必须向算术运算器发布4个指令。
X←X+A*C (1-1)
Y←Y+A*D (1-2)
X←X-B*D (1-3)
Y←Y+B*C (1-4)
一般地,单个指令对多个数据流进行处理的单指令流多数据流(SIMD)方案因用更少的指令高效地执行积和运算而广为人知。可用于SIMD方案的算术运算单元包括寄存器和使用存储在该寄存器中的操作数(寄存器值)进行相同算术运算的2个浮点积和算术运算器。这2个浮点积和算术运算器分别称作普通浮点积和算术运算器(普通算术运算器)和扩展浮点积和算术运算器(扩展算术运算器)。
将与寄存器的前半区域中的指定寄存器编号关联的寄存器值输入到普通运算器中以用作供算术运算用的操作数,而将与寄存器的后半区域中的指定寄存器编号关联的寄存器值输入到扩展运算器中以用作供算术运算用的操作数。此处,寄存器的后半区域中的指定寄存器编号是寄存器的前半区域中的指定寄存器编号与预定偏移之和。假设寄存器编号数目是128,则偏移设定为64。
对于这种构造,单个指令分配对要从寄存器输出至普通算术运算器的寄存器值进行指定的寄存器编号,还可分配对要从寄存器输出至扩展算术运算器的寄存器值进行指定的寄存器编号。也就是说,单个指令可指示2个算术运算器执行算术运算,因此,用2个指令可实现以往需要4个指令的算术运算,从而使吞吐量加倍。
〔专利文献1〕日本特开2003-16051号公报
然而,由上式(1-1)~(1-4)这4次算术运算(即4个指令)执行的复数矩阵积和运算不能依照2个指令而用无修改的SIMD方案来实现,这是由于以下的原因:普通算术运算器使用寄存器的前半区域、且扩展算术运算器使用寄存器的后半区域这一对寄存器的限制;以及普通算术运算器和扩展算术运算器进行相同算术运算这一对算术运算的限制。
发明内容
这里的实施例的目的是用更少的指令种类码来实现例如SIMD浮点积和算术运算中的算术运算的各种组合。
除了上述目的以外,本实施例的另一目的是提供从本发明的最佳实施方式得到的、未由传统技术实现的优点。
根据本实施例的一个方面,提供了一种算术运算装置,包括:寄存器,所述寄存器存储要用于算术运算的操作数;一个或多个算术运算器,所述一个或多个算术运算器响应于对要从该寄存器读取的操作数和要由该算术运算器进行的一个或多个算术运算进行指定并具有多个位的第一指令、使用由该第一指令指定的操作数来进行由该第一指令指定的算术运算;以及设定单元,所述设定单元在该第一指令中未用于普通处理的一个或多个未使用的位中设定扩展指令信息,该扩展指令信息指示该寄存器和该算术运算器中的至少一个根据该第一指令执行与普通处理不同的扩展处理。
根据本实施例的另一方面,提供了一种在算术运算装置中进行算术运算的方法,所述算术运算装置包括:寄存器,所述寄存器存储要用于算术运算的操作数;以及一个或多个算术运算器,所述一个或多个算术运算器使用从该寄存器读取的操作数来进行算术运算,所述方法包括:在该算术运算器处响应于对要从该寄存器读取的操作数和要由该算术运算器进行的一个或多个算术运算进行指定并具有多个位的第一指令、使用由该第一指令指定的操作数来进行由该第一指令指定的算术运算;以及在该第一指令中未用于普通处理的一个或多个未使用的位中设定扩展指令信息,该扩展指令信息指示该寄存器和该算术运算器中的至少一个根据该第一指令执行与普通处理不同的扩展处理。
所公开的算术运算装置和算术运算的方法可通过使用一个或多个未使用的位来指示寄存器和运算器执行与普通处理不同的扩展处理。因此,可由更少的指令种类码来实现例如SIMD浮点积和的算术运算的各种组合。因此,由2个指令可实现例如以往需要4个指令的复数矩阵乘积运算等的复杂算术运算,从而可以使吞吐量加倍。
本发明(实施例)的更多目的和优点部分地在下面的说明中阐明,部分地从说明中显而易见,或者可通过实践本发明而习知。将借助在所附权利要求书中特别指出的要素和组合来实现和获得本发明的目的和优点。
应当理解,前面的一般性说明和下面的详细说明仅是示例性和解释性的,而不对所要求的本发明构成限制。
附图说明
将基于以下附图来详细说明本发明的诸示例实施例,在附图中:
图1是示意性地示出了第一实施例的算术运算装置的框图;
图2是示出在根据第一实施例的算术运算装置中进行的一连串基本工序步骤的流程图;
图3是简要地示出了由图1的算术运算装置中包含的算术运算单元在非SIMD模式下进行的操作的图;
图4是示出了由图1的算术运算装置中包含的指令码发布单元和生成单元在非SIMD模式下进行的操作的图;
图5A~5D是示出了由图1的算术运算装置在非SIMD模式下使用的指令码、算术码、寄存器记录信号和寄存器编号分配(仅最高有效位)的表格;
图6是简要地示出了由图1的算术运算装置中包含的算术运算单元在SIMD模式下进行的操作的图;
图7是示出了由图1的算术运算装置中包含的指令码发布单元和生成单元在SIMD模式下进行的操作的图;
图8A~8D是示出了由图1的算术运算装置在SIMD模式下使用的指令码、算术码、寄存器记录信号和寄存器编号分配(仅最高有效位)的表格;
图9是简要地示出了由图1的算术运算装置的算术运算单元在将未使用的位投入使用的第一模式下进行的操作的图;
图10是简要地示出了由图1的算术运算装置的指令码发布单元(设定单元)和生成单元在将未使用的位投入使用的第一模式下进行的操作的图;
图11A~11D是示出了由图1的算术运算装置在将未使用的位投入使用的第一模式下使用的指令码、算术码、寄存器记录信号和寄存器编号分配(仅最高有效位)的表格;
图12~15是各自示出了由图1的算术运算装置的算术运算单元在将未使用的位投入使用的第一模式下进行的算术运算的组合的图;
图16和17是各自示出了由图1的算术运算装置的算术运算单元在将未使用的位投入使用的第二模式下进行的算术运算的组合的图;
图18A~18D是示出了由图1的算术运算装置在将未使用的位投入使用的第二模式下使用的指令码、算术码、寄存器记录信号和寄存器编号分配(仅最高有效位)的表格;
图19和20是各自简要地示出了由图1的算术运算装置的算术运算单元在将未使用的位投入使用的第三模式下进行的操作的图;
图21是简要地示出了由图1的算术运算装置的指令码发布单元(设定单元)和生成单元在将未使用的位投入使用的第三模式下进行的操作的图;
图22A~22D是示出了由图1的算术运算装置在将未使用的位投入使用的第三模式下使用的指令码、算术码、寄存器记录信号和寄存器编号分配(仅最高有效位)的表格;
图23和24是各自示出了由图1的算术运算装置的算术运算单元在将未使用的位投入使用的第三模式下进行的算术运算的组合的图;以及
图25是示出了图1的算术运算装置中的生成单元的具体实例的电路图。
具体实施方式
通过参照附图进行说明,第一实施例将是显而易见的。
(1)算术运算装置的构造
图1是示意性地示出了根据第一实施例的算术运算装置的构造的框图。图1所示的算术运算装置1包括算术单元10、指令码发布单元(设定单元)20和生成单元30。
算术单元10包括寄存器11、普通浮点积和运算器(也称作普通算术运算器或算术运算器)12b和扩展浮点积和运算器(也称作扩展算术运算器或算术运算器)12e。以下,“普通浮点积和算术运算器”也称作普通积和运算器、普通算术运算器,并简单地称为算术运算器,而“扩展浮点积和运算器”也称作扩展积和运算器、扩展算术运算器,并简单地称为算术运算器。
寄存器11存储由2N个寄存器编号0~2N-1指定的寄存器值(数据),其中在第一实施例中N=64。寄存器11存储操作数和由算术运算器12b和12e执行的算术运算的结果。
第一实施例的算术运算装置1是这样的构造:如后面所述,该构造能够响应于由指令种类码(opcode)指定的单个指令而在采用和不采用对多个(在本实施例中是2个)数据流进行处理的单指令流多数据流(SIMD)方案之间切换。
当采用SIMD方案时,将寄存器11的整体区域分割成前半部分(寄存器编号0~N-1)和后半部分(寄存器编号N~2N-1)这2个区域,这2个区域基本上分别被普通运算器12b和扩展运算器12e使用。
后面详细说明的生成单元30将6个输出寄存器编号、2个输入寄存器编号和输入寄存器记录控制信号输入到寄存器11中。这6个输出寄存器编号对其中有3个要输出至各算术运算器12b和12e的6个寄存器值(供积和运算用的操作数)进行指定。这2个输入寄存器编号对代表由算术运算器12b和12e所得的算术运算结果的寄存器值要被输入和记录的目的地(寄存器11中的地址)进行指定。此输入寄存器记录控制信号选择并控制是否将算术运算器12b和12e所进行算术运算的结果记录在寄存器11中。
在图示的实例中,7位值b_rd[6:0]用作对由普通积和运算器12b进行的算术运算的结果的记录目的地进行指定的输入寄存器编号,并且被输入到寄存器11中。3个7位值b_rs1[6:0]、b_rs2[6:0]和b_rs3[6:0]用作对要从寄存器11输出至普通积和运算器12b的3个寄存器值(供积和运算用的操作数)进行指定的3个输出寄存器编号,并且被输入到寄存器11中。
同理,7位值e_rd[6:0]用作对由扩展积和运算器12e进行的算术运算的结果的记录目的地进行指定的输入寄存器编号,并且被输入到寄存器11中。3个7位值e_rs1[6:0]、e_rs2[6:0]、e_rs3[6:0]用作对要从寄存器11输出至扩展积和运算器12e的3个寄存器值(供积和运算用的操作数)进行指定的3个输出寄存器编号,并且被输入到寄存器11中。
这些7位值b_rd[6:0]、b_rs1[6:0]、b_rs2[6:0]、b_rs3[6:0]、e_rd[6:0]、e_rs1[6:0]、e_rs2[6:0]、e_rs3[6:0]是0~127的整数,并且对供由算术运算器12b和12e进行的积和运算使用的寄存器编号进行指定。也就是说,对于各算术运算器12b和12e,为包含供乘积运算用的操作数的2个寄存器编号、供求和运算用的操作数的寄存器编号、以及算术运算结果的记录目的地的寄存器编号在内的共4个寄存器编号分配编号0~127。由寄存器编号0~63定义的寄存器11的区域称作前半区域(区段),而由编号64~127定义的寄存器11的区域称作后半区域(区段)。
在本实施例中,寄存器编号n(n=0、1、2、...、127)处的寄存器值由%r[n]表达。例如,存储在寄存器编号n=0、1、2、...、127中的寄存器值分别表达为%r[0]、%r[1]、...、%r[127]。
在这些寄存器值%r[0]、%r[1]、...、%r[127]中,将由指令指定的寄存器编号表达如下。例如,假设用于普通运算器12b的4个寄存器值表达为%b1、%b2、%b3和%bd,则在“b_rs1[6:0]←15”这一算术运算的情况下,%b1代表%r[15]。类似地,假设用于扩展运算器12e的4个寄存器值表达为%e1、%e2、%e3和%ed,则在“e_rs1[6:0]←79”这一算术运算的情况下,%e1代表%r[79]。
上述输入寄存器记录控制信号由b_we和e_we表达。控制信号b_we是用于根据选择来控制是否将普通运算器12b所进行的积和运算的结果记录在寄存器11中的1位信号。当要记录该结果时将控制信号b_we设定为“1”,而当不记录该结果时则将控制信号b_we设定为“0”。类似地,控制信号e_we是用于根据选择来控制是否将扩展运算器12e所进行的积和运算的结果记录在寄存器11中的1位信号。当要记录该结果时将控制信号e_we设定为“1”,而当不记录该结果时则将控制信号e_we设定为“0”。
各算术运算器12b和12e是3输入单输出浮点积和运算器,并能够根据从后面说明的生成单元30发布的指令集所包含的算术种类码(以下简单地称作“算术码”)来切换算术运算。
普通积和运算器12b接收用作输入值b_i1、b_i2和b_i3的、从寄存器11读取的3个寄存器值%b1、%b2和%b3,并将代表算术运算的结果的输出值b_o(即寄存器值%bd)输出至寄存器11。类似地,扩展积和运算器12e接收用作输入值e_i1、e_i2和e_i3的、从寄存器11读取的3个寄存器值%e1、%e2和%e3,并将代表算术运算的结果的输出值e_o(即寄存器值%ed)输出至寄存器11。
具体地,普通积和运算器12b接收来自生成单元30的算术码b_op[1:0]和来自寄存器11的操作数%b1、%b2和%b3,基于输入操作数%b1、%b2和%b3进行由算术码b_op[1:0]指定的算术运算,最后输出算术运算的结果数据%bd。以相同方式,扩展积和运算器12e接收来自生成单元30的算术码e_op[1:0]和来自寄存器11的操作数%e1、%e2和%e3,基于输入操作数%e1、%e2和%e3进行由算术码e_op[1:0]指定的算术运算,最后输出算术运算的结果数据%ed。
此处,2位算术码b_op[1:0]和e_op[1:0]在算术运算器12b和12e中指定以下4个要进行的算术运算(算术名)。
〔表1〕
算术名 | 算术码 | 详细的算术运算 |
fmadd | 00 | %rd←%r1*%r2+%r3 |
fmsub | 01 | %rd←%r1*%r2-%r3 |
fnmsub | 10 | %rd←-%r1*%r2+%r3 |
fnmadd | 11 | %rd←-%r1*%r2-%r3 |
指令码发布单元(设定单元)20将指令码通过生成单元30发给算术单元10,并用作后面要说明的设定单元。
此处,如下表2和下表3所示,由指令码发布单元20发布的指令码由指令种类码和4个寄存器编号分配形成。指令种类码是由opcode[3:0]表示的4位数据,因此可指定16种指令。如图5A、8A、11A、18A和22A所示,4个寄存器编号分配各自由7位形成,并且指定0~127中的单个寄存器编号。
下表2示出了当将opcode[3:2]设定为“00”以采用后面参照图3~5说明的非SIMD方案时的指令种类码、指令描述以及与该指令种类码关联的详细算术运算。在该非SIMD模式下,算术单元10不使用扩展运算器12e、而是仅使用普通运算器12b对寄存器11整体的操作数进行积和运算。
下表3示出了当将opcode[3:2]设定为“01”以采用后面参照图6~8说明的SIMD方案时的指令种类码、指令描述以及与该指令种类码关联且要由算术普通运算器12b和扩展运算器12e进行的详细算术运算。在该SIMD模式下,在算术单元10中,将与寄存器11的前半区域中的指定寄存器编号关联的寄存器值输入到普通积和运算器12b中以用作供算术运算用的操作数,同时将与寄存器11的后半区域中的指定寄存器编号关联的寄存器值输入到扩展积和运算器12e中以用作供算术运算用的操作数。此处,寄存器11的后半区域中的指定寄存器编号是寄存器11的前半区域中的指定寄存器编号与预定偏移(在第一实施例中是64)之和。对于对由算术运算器12b和12e进行的算术运算的结果的存储目的地进行指定的寄存器编号也同样如此。当采用SIMD方案时,尽管4个寄存器编号分配都具有7位(即rd[6:0]、rs1[6:0]、rs2[6:0]和rs3[6:0]),但各寄存器编号分配使用7位中的6位(即rd[5:0]、rs1[5:0]、rs2[5:0]和rs3[5:0]),因此各寄存器编号分配的1位(即rd[6]、rs1[6]、rs2[6]和rs3[6])得以不被使用。
〔表2〕
算术种类码 | opcode[3:0] | 指令描述 | 详细的算术运算 |
fmadd | 0000 | fmadd%f[rd],%f[s1],%f[s2],%f[s3] | %f[rd]←%f[rs1]*%f[rs2]+%f[rs3] |
fmsub | 0001 | fmsub%f[rd],%f[s1],%f[s2],%f[s3] | %f[rd]←%f[rs1]*%f[rs2]-%f[rs3] |
fnmsub | 0010 | fnmsub%f[rd],%f[s1],%f[s2],%f[s3] | %f[rd]←-%f[rs1]*%f[rs2]+%f[rs3] |
fnmadd | 0011 | fnmadd%f[rd],%f[s1],%f[s2],%f[s3] | %f[rd]←-%f[rs1]*%f[rs2]-%f[rs3] |
〔表3〕
算术种类码 | opcode[3:0] | 指令描述 | 普通算术运算器的详细算术运算 | 扩展算术运算器的详细算术运算 |
simd-fmadd | 0100 | simd-fmadd%f[rd],%f[s1],%f[s2],%f[s3] | %b[rd]←%b[rs1]*%b[rs2]+%b[rs3] | %e[rd]←%e[rs1]*%e[rs2]+%e[rs3] |
simd-fmsub | 0101 | simd-fmsub%f[rd],%f[s1],%f[s2],%f[s3] | %b[rd]←%b[rs1]*%b[rs2]-%b[rs3] | %e[rd]←%e[rs1]*%e[rs2]-%e[rs3] |
simd-fnmsub | 0110 | simd-fnmsub%f[rd],%f[s1],%f[s2],%f[s3] | %b[rd]←-%b[rs1]*%b[rs2]+%b[rs3] | %e[rd]←-%e[rs1]*%e[rs2]+%e[rs3] |
simd-fnmadd | 0111 | simd-fnmadd%f[rd],%f[s1],%f[s2],%f[s3] | %b[rd]←-%b[rs1]*%b[rs2]-%b[rs3] | %e[rd]←-%e[rs1]*%e[rs2]-%e[rs3] |
由指令码发布单元20实施的作为设定单元的一种功能是在指令(指令集)中的一个或多个未使用的位中设定扩展指令信息。这种扩展指令信息指示寄存器11和算术运算器12b、12e中的至少一个根据该指令执行要执行的、与普通处理不同的扩展处理。
这种未使用的位是当算术运算装置1采用SIMD模式时得以不被使用的寄存器编号指定字段的最高有效位(MSB)rd[6]、rs1[6]、rs2[6]和rs3[6]中的一个或多个。
使用一个或多个未使用的位的扩展指令信息可以是以下两种类型:
(a1)后面参照图9~24说明的扩展指令信息,其将待输出至算术运算器12b和12e中的一个的操作数从与算术运算关联的区域中的操作数切换成除与其中一个算术运算器关联的区域以外的其余区域中的操作数。根据这一扩展指令信息,各算术运算器12b和12e可使用在寄存器11的前半区域和后半区域二者中的寄存器值来执行算术运算。
(a2)后面参照图20、22B、23和24说明的扩展指令信息用以指示各算术运算器12b和12e切换要由该算术运算器进行的算术运算。凭借这一扩展指令信息,可彼此独立地切换要由算术运算器12b和12e进行的算术运算,由此,算术运算器12b和12e可进行不同的算术运算。
如后面参照图4、7、10、17、21和25详细说明的那样,生成单元30基于由指令码发布单元(设定单元)20设定和发布的指令集(指令码)生成要输入到算术单元10中的指令集。
此处,从指令码发布单元20发出的指令码是由opcode[3:0]、rd[6:0]、rs1[6:0]、rs2[6:0]和rs3[6:0]形成的32位数据。由生成单元30生成并要输入到算术单元10中的指令集是由b_we、e_we、b_rd[6:0]、b_rs1[6:0]、b_rs2[6:0]、b_rs3[6:0]、e_rd[6:0]、e_rs1[6:0]、e_rs2[6:0]、e_rs3[6:0]、b_op[1:0]和e_op[1:0]形成的62位数据。也就是说,来自指令码发布单元20的32位指令码由生成单元30变换成要输入到算术单元10中的62位指令集。
此时,如后面参照图10、11D、17、18D、21、22B、22D和25详细说明的那样,生成单元30基于在一个或多个未使用的位中设定的扩展指令信息而生成指令。也就是说,生成单元30具有这一功能:基于在一个或多个未使用的位中设定的扩展指令信息和在除未使用的位以外的位中设定的信息而生成扩展指令、并将所生成的扩展指令输出至寄存器11和算术运算器12b、12e中的至少一个。此处,这一扩展指令指示执行由上述项目(a1)和(a2)等扩展指令信息规定的扩展处理。
(2)算术单元的基本操作
此处,参照图2的流程图对由图1所示的算术运算装置1中的算术单元10进行的基本操作(处理)进行说明。
在算术运算装置1中,在执行图2的流程图所示的工序步骤之前,在指令码发布单元20和生成单元30处分别进行发布指令码的步骤(包括设定步骤)和生成步骤,但这些步骤并未在附图中示出。
在设定步骤中,如上所述,指令码发布单元20的作为设定单元的功能在指令集中的一个或多个未使用的位中设定扩展指令信息。生成步骤使得生成单元30将来自指令码发布单元20的指令码变换成要输入到算术单元10中的指令集。在该变换时,要生成的指令是基于在一个或多个未使用的位中设定的扩展指令信息的。
当输入由生成单元30(生成步骤)所生成的包括b_we、e_we、b_rd、b_rs1、b_rs2、b_rs3、e_rd、e_rs1、e_rs2、e_rs3、b_op和e_op在内的指令集时,处理工序首先从寄存器11读取数据(步骤S10)。在从寄存器读取数据的步骤中,将寄存器值%r[b_rs1]、%r[b_rs2]、%r[b_rs3]、%r[e_rs1]、%r[e_rs2]、%r[e_rs3]从寄存器11输入至算术运算器12b和12e以用作b_i1、b_i2、b_i3、e_i1、e_i2、e_i3(步骤S11)。
此后,基于在步骤S10(S11)中读取的寄存器值来实施由普通运算器12b进行算术运算的步骤(步骤S20)和由扩展运算器12e进行算术运算的步骤(步骤S30)。
步骤S20首先判断算术码b_op是否为指定算术运算名为fmadd的算术运算的“00”(步骤S21)。如果判断结果为肯定(步骤S21中的“是”路线),则普通运算器12b执行算术运算“b_i1*b_i2+b_i3”,并将代表算术运算结果的值b_o输出至寄存器11(步骤S22)。然后,处理工序前进至步骤S30。
相反,如果判断结果为否定(步骤S21中的“否”路线),则判断算术码b_op是否为指定算术运算名为fnmadd的算术运算的“11”(步骤S23)。如果判断结果为肯定(步骤S23中的“是”路线),则普通运算器12b执行算术运算“-b_i1*b_i2-b_i3”,并将代表算术运算结果的值b_o输出至寄存器11(步骤S24)。然后,处理工序前进至步骤S30。
相反,如果判断结果为否定(步骤S23中的“否”路线),则判断算术码b_op是否为指定算术运算名为fmsub的算术运算的“01”(步骤S25)。如果判断结果为肯定(步骤S25中的“是”路线),则普通运算器12b执行算术运算“b_i1*b_i2-b_i3”,并将代表算术运算结果的值b_o输出至寄存器11(步骤S26)。然后,处理工序前进至步骤S30。
相反,如果判断结果为否定(步骤S25中的“否”路线),则判断算术码b_op是否为指定算术运算名为fnmsub的算术运算的“10”(步骤S27)。如果判断结果为肯定(步骤S27中的“是”路线),则普通运算器12b执行算术运算“-b_i1*b_i2+b_i3”,并将代表算术运算结果的值b_o输出至寄存器11(步骤S28)。然后,处理工序前进至步骤S30。而且,如果判断结果为否定(步骤S27中的“否”路线),则处理工序前进至步骤S30。
步骤S30首先判断算术码e_op是否为指定算术运算名为fmadd的算术运算的“00”(步骤S31)。如果判断结果为肯定(步骤S31中的“是”路线),则扩展运算器12e执行算术运算“e_i1*e_i2+e_i3”,并将代表算术运算结果的值e_o输出至寄存器11(步骤S32)。然后,处理工序前进至步骤S40。
相反,如果判断结果为否定(步骤S31中的“否”路线),则判断算术码e_op是否为指定算术运算名为fnmadd的算术运算的“11”(步骤S33)。如果判断结果为肯定(步骤S33中的“是”路线),则扩展运算器12e执行算术运算“-e_i1*e_i2-e_i3”,并将代表算术运算结果的值e_o输出至寄存器11(步骤S34)。然后,处理工序前进至步骤S40。
相反,如果判断结果为否定(步骤S33中的“否”路线),则判断算术码e_op是否为指定算术运算名为fmsub的算术运算的“01”(步骤S35)。如果判断结果为肯定(步骤S35中的“是”路线),则扩展运算器12e执行算术运算“e_i1*e_i2-e_i3”,并将代表算术运算结果的值e_o输出至寄存器11(步骤S36)。然后,处理工序前进至步骤S40。
相反,如果判断结果为否定(步骤S35中的“否”路线),则判断算术码e_op是否为指定算术运算名为fnmsub的算术运算的“10”(步骤S37)。如果判断结果为肯定(步骤S37中的“是”路线),则扩展运算器12e执行算术运算“-e_i1*e_i2+e_i3”,并将代表算术运算结果的值e_o输出至寄存器11(步骤S38)。然后,处理工序前进至步骤S40。而且,如果判断结果为否定(步骤S37中的“否”路线),则处理工序前进至步骤S40。
图2显示了在步骤S20之后执行步骤S30,但实际上步骤S20是与步骤S30并行地执行的。步骤S21、S23、S25和S27的执行顺序和步骤S31、S33、S35和S37的执行顺序不限于图2所示的执行顺序。
在步骤S40中,基于控制信号b_we、e_we和指定寄存器编号b_rd、e_rd,对算术运算器12b和12e所进行的算术运算的结果向寄存器11中的记录进行控制。
具体地,判断控制信号b_we是否为1(步骤S41)。如果判断结果为肯定(步骤S41中的“是”路线),则普通运算器12b的输出值b_o由寄存器值%r[b_rd]表达,其然后被记录在寄存器11中(步骤S42)。
相反,如果判断结果为否定(步骤S41中的“否”路线)或如果步骤S42中的记录已完成,则再判断控制信号e_we是否为1(步骤S43)。如果判断结果为肯定(步骤S43中的“是”路线),则扩展运算器12e的输出值e_o由寄存器值%r[e_rd]表达,其然后被记录在寄存器11中(步骤S44)。如果判断结果为否定(步骤S43中的“否”路线)或如果步骤S44中的记录已完成,则算术单元10结束工序步骤。
(3)非SIMD模式下算术运算装置的操作
如上面参照表2所述,当算术运算装置1选择非SIMD模式时,将“00”分配给由指令码发布单元20发布的指令种类码的最高2位opcode[3:2]。以下参照图3、4和5A~5D说明非SIMD模式下算术运算装置1所进行的操作。
图3简要地示出了由图1所示的算术运算装置1的算术单元10在非SIMD模式期间进行的操作;图4示出了由图1所示的算术运算装置1中包含的指令码发布单元20和生成单元30在非SIMD模式期间进行的操作;而图5A~5D具体地示出了图1所示的算术运算装置1中的指令码、算术码、寄存器记录信号和寄存器编号分配(仅最高有效位)。
如图3所示,在非SIMD模式期间,算术运算装置1的算术单元10仅利用普通运算器12b(即,不利用扩展运算器12e)对寄存器11的整体区域中的数据进行积和算术运算。也就是说,根据来自寄存器11的输入值和指令码opcode[1:0],普通运算器12b进行算术运算,依照控制信号b_we的值将该算术运算的结果记录在寄存器11中。
在此非SIMD模式下,如图4和5C所示,控制信号e_we总是设定为0,不将扩展运算器12e所进行的算术运算的结果记录在寄存器11中。由指令码发布单元20发布的4个寄存器编号分配rd[6:0]、rs1[6:0]、rs2[6:0]和rs3[6:0]各自占用全部7位,因此从寄存器11的整体区域分配4个寄存器值。
在非SIMD模式下,生成单元30如图4所示那样对由指令码发布单元20发布的指令码opcode[3:0]以及4个寄存器编号分配rd[6:0]、rs1[6:0]、rs2[6:0]和rs3[6:0]进行变换,然后,指令集b_we、e_we、b_rd[6:0]、b_rs1[6:0]、b_rs2[6:0]、b_rs3[6:0]、e_rd[6:0]、e_rs1[6:0]、e_rs2[6:0]、e_rs3[6:0]、b_op[1:0]和e_op[1:0]被输入到算术单元10中。
此处,如图4和5B所示,供普通运算器12b用的算术码b_op[1:0]由指令码中包含的指令种类码的最低2位上的值opcode[1:0]来表达。在非SIMD模式下,如图4和5C所示,来自普通运算器12b的用于记录在寄存器11中的控制信号b_we被设定为1,将普通运算器12b所进行的算术运算的结果记录在寄存器11中。
另一方面,如图4和5B所示,供扩展运算器12e用的算术码e_op[1:0]被固定为“00”。此时,如图4和5C所示,来自扩展运算器12e的用于记录在寄存器11中的控制信号e_we被设定为0,从而不将扩展运算器12e所进行的算术运算的结果记录在寄存器11中。
另外,如图4和5D所示,4个7位寄存器编号分配rd[6:0]、rs1[6:0]、rs2[6:0]、rs3[6:0]用作供普通运算器12b用的寄存器编号分配b_rd[6:0]、b_rs1[6:0]、b_rs2[6:0]、b_rs3[6:0],其然后被输出至寄存器11。与之相比,如图4和5D所示,供扩展运算器12e用的寄存器编号分配e_rd[6:0]、e_rs1[6:0]、e_rs2[6:0]和e_rs3[6:0]全部设定为0。
接下来,对在非SIMD模式下的详细操作、即执行例如fnmsub%f80、%f10、%f20和%f40的算术运算进行说明,该运算表达如下:
%f[80]←-%f[10]*%f[20]+%f[40]
在执行上述算术运算时,由下表4所示的指令码分配的指令种类码opcode[3:0]以及寄存器编号分配rd[6:0]、rs1[6:0]、rs2[6:0]和rs3[6:0]的值被变换成用作下表5所示的向普通运算器12b中输入的输入信号的值,亦即算术码b_op[1:0]和寄存器编号分配b_rd[6:0]、b_rs1[6:0]、b_rs2[6:0]、b_rs3[6:0],其然后被输出到寄存器11中。如下表5所示,供扩展运算器12e用的算术码e_op[1:0]和寄存器编号分配e_rd[6:0]、e_rs1[6:0]、e_rs2[6:0]、e_rs3[6:0]的值全部设定为0。来自普通运算器12b的用于记录在寄存器11中的控制信号b_we被设定为1,从而普通运算器12b所进行的算术运算的结果由寄存器值%r[80]表达,其然后被记录在寄存器11中。来自扩展运算器12e的用于记录在寄存器11中的控制信号e_we被设定为0。
〔表4〕
指令码 | 值 |
opcode[3:0] | 0010(fnmsub) |
rd[6:0] | 1010000(80) |
rs1[6:0] | 0001010(10) |
rs2[6:0] | 0010100(20) |
rs3[6:0] | 0101000(40) |
〔表5〕
输入信号 | 值 |
b_op[1:0] | 10(fnmsub) |
b_we | 1(固定值) |
e_op[1:0] | 00(固定值) |
e_we | 0(固定值) |
b_rd[6:0] | 1010000(80) |
b_rs1[6:0] | 0001010(10) |
b_rs2[6:0] | 0010100(20) |
b_rs3[6:0] | 0101000(40) |
e_rd[6:0] | 0000000(固定值) |
e_rs1[6:0] | 0000000(固定值) |
e_rs2[6:0] | 0000000(固定值) |
e_rs3[6:0] | 0000000(固定值) |
(4)SIMD模式下算术运算装置的操作
如上面参照表3所述,当算术运算装置1选择SIMD模式时,“01”被分配给由指令码发布单元20发布的指令种类码的最高2位opcode[3:2]。下面参照图6、7和8A~8D说明SIMD模式下算术运算装置1所进行的操作。
图6简要地示出了由图1所示的算术运算装置1的算术单元10在SIMD模式期间进行的操作;图7示出了由图1所示的算术运算装置1的指令码发布单元20和生成单元30在SIMD模式期间进行的操作;而图8A~8D具体地示出了图1所示的算术运算装置1中的指令码、算术码、寄存器记录信号和寄存器编号分配(仅最高有效位)。
如图6所示,在SIMD模式期间,在算术运算装置1的算术单元10中,将用作供算术运算用的操作数的寄存器前半区域中的指定寄存器编号处的寄存器值输入到普通运算器12b中,类似地,将用作供算术运算用的操作数的寄存器后半区域中的指定寄存器编号处的寄存器值输入到扩展运算器12e中。此处,供普通运算器12b用的指定寄存器编号表达为供扩展运算器12e用的指定寄存器编号与预定偏移值N(在图示的实例中N=64)之和。也就是说,算术运算器12b和12e对不同的输入值(不同的寄存器值)进行由指令种类码opcode[1:0]指定的同一种算术运算。由算术运算器12b和12e执行的算术运算的结果分别记录在寄存器11的前半区域和后半区域中。
此时,由指令码发布单元20发布的4个寄存器编号分配rd[6:0]、rs1[6:0]、rs2[6:0]和rs3[6:0]分别占用7位中的最低6位rd[5:0]、rs1[5:0]、rs2[5:0]和rs3[5:0]。这样的一组指令码同时分配供普通运算器12b用的寄存器编号和供扩展运算器12e用的寄存器编号。结果,如图8A所示,采用SIMD方案时不使用寄存器编号分配的最高有效位rd[6]、rs1[6]、rs2[6]和rs3[6]。
在SIMD模式下,生成单元30如图7所示那样对由指令码发布单元20发布的指令码opcode[3:0]以及4个寄存器编号分配rd[6:0]、rs1[6:0]、rs2[6:0]和rs3[6:0]进行变换,并将指令集b_we、e_we、b_rd[6:0]、b_rs1[6:0]、b_rs2[6:0]、b_rs3[6:0]、e_rd[6:0]、e_rs1[6:0]、e_rs2[6:0]、e_rs3[6:0]、b_op[1:0]和e_op[1:0]输入到算术单元10中。
此处,如图7和8B所示,分别供普通运算器12b和扩展运算器12e用的各算术码b_op[1:0]和e_op[1:0]由指令码中包含的指令种类码的最低2位上的值opcode[1:0]表达。同一算术码总是输入到算术运算器12b和12e二者中,对此响应,算术运算器12b和12e执行同一种算术码。
在SIMD模式下,如图7和8C所示,分别来自算术运算器12b和12e的用于记录在寄存器11中的控制信号b_we和e_we被设定为固定值“1”。这就将算术运算器12b和12e所执行的算术运算的结果分别记录在寄存器11的前半区域和后半区域中。
如图7所示,将指令码中包含的4个寄存器编号分配的最低6位rd[5:0]、rs1[5:0]、rs2[5:0]和rs3[5:0]输入到寄存器11中以用作供普通运算器12b用的寄存器编号分配b_rd[5:0]、b_rs1[5:0]、b_rs2[5:0]和b_rs3[5:0]。同时,将同一数据rd[5:0]、rs1[5:0]、rs2[5:0]和rs3[5:0]输入到寄存器11中以还用作供扩展运算器12e用的寄存器编号分配e_rd[5:0]、e_rs1[5:0]、e_rs2[5:0]和e_rs3[5:0]。
此外,如图7和8D所示,将供普通运算器12b用的寄存器编号分配的最高有效位b_rd[6]、b_rs1[6]、b_rs2[6]和b_rs3[6]设定为固定值“0”,并将供扩展运算器12e用的寄存器编号分配的最高有效位e_rd[6]、e_rs1[6]、e_rs2[6]和e_rs3[6]设定为固定值“1”。利用这些最高有效位,普通运算器12b使用寄存器11的前半区域(寄存器编号0~63)中的寄存器值,而扩展运算器12e使用被定义为供普通运算器12b用的寄存器编号与64之和的、寄存器后半区域(寄存器编号64~127)中的寄存器值。
接下来,对在SIMD模式下进行的详细操作、即执行例如simd-fnmsub%f40、%f10、%f20、%f30的算术运算进行说明。
在这种情况下,算术单元10的算术运算器12b和12e进行如下不同的算术运算:
在普通运算器12b处:%r[40]←-%r[10]*%r[20]+%r[30]
在扩展运算器12e处:%r[104]←-%r[74]*%r[84]+%r[94]
在SIMD模式下,下表6中的指令码中指定的指令种类码opcode[3:0]以及寄存器编号分配rd[6:0]、rs1[6:0]、rs2[6:0]和rs3[6:0]的值被变换成用作下表7所示的向算术运算器12b和12e中输入的输入信号的值。也就是说,供普通运算器12b用的寄存器编号分配和供扩展运算器12e用的寄存器编号分配具有由rd[5:0]、rs1[5:0]、rs2[5:0]和rs3[5:0]表达的相同的最低6位,并分别具有要输入到最高有效位中的固定值0和1。将同一算术码“10”输入到供普通运算器12b用的算术码b_op[1:0]和供扩展运算器12e用的算术码e_op[1:0]中。由此,将不同的4个输入值和同一算术码从寄存器11输入到算术运算器12b和12e中,对此响应,算术运算器12b和12e对不同的输入值执行同一种算术运算。由于记录在寄存器11中的控制信号b_we和e_we都被设定为“1”,因此由普通运算器12b进行的算术运算的结果取得待记录在寄存器11的前半区域中的寄存器值%r[40];而由扩展运算器12e进行的算术运算的结果取得待记录在寄存器11的后半区域中的寄存器值%r[104]。
〔表6〕
指令码 | 值 |
opcode[3:0] | 0110(simd-fnmsub) |
rd[6:0] | 0101000(40) |
rs1[6:0] | 0001010(10) |
rs2[6:0] | 0010100(20) |
rs3[6:0] | 0011110(30) |
〔表7〕
输入信号 | 值 |
b_op[1:0] | 10(fnmsub) |
b_we | 1(固定值) |
e_op[1:0] | 10(fnmsub) |
e_we | 1(固定值) |
b_rd[6:0] | 0101000(40) |
b_rs1[6:0] | 0001010(10) |
b_rs2[6:0] | 0010100(20) |
b_rs3[6:0] | 0011110(30) |
e_rd[6:0] | 1101000(104) |
e_rs1[6:0] | 1001010(74) |
e_rs2[6:0] | 1010100(84) |
e_rs3[6:0] | 1011110(94) |
(5)算术运算装置在将未使用的位投入使用的第一模式下进行的操作:
图9简要地示出了由图1所示的算术运算装置1的算术单元10在将未使用的位投入使用的第一模式期间进行的操作;图10示出了由算术运算装置1中的指令码发布单元(设定单元)20和生成单元30在第一模式期间进行的操作;图11A~11D具体地示出了算术运算装置1在第一模式下的指令码、算术码、寄存器记录信号和寄存器编号分配(仅最高有效位);而图12~15示出了要由图1所示的算术运算装置1的算术单元10当第一模式被采用时执行的算术运算的组合的具体实例。
当采用SIMD模式时,普通运算器12b和扩展运算器12e分别对寄存器11的前半区域中的值和寄存器11的后半区域中的值同时执行同一种算术运算。由算术运算器12b和12e进行的算术运算的结果分别记录在寄存器11的前半区域和后半区域中。因此,上述SIMD方案在单个算术运算器12b或12e中不能使用来自寄存器11的前半区域和后半区域二者的操作数实现算术运算。
在第一模式下的操作除上述4个指令集simd-fmadd、simd-fmsub、simd-fnmsub、simd-fnmadd以外,还具有4个指令集即cross-fmadd1、cross-fmadd2、cross-fmadd3和cross-fmadd4(见图11A)。如图9的左侧部分所示,这些附加指令集cross-fmadd1、cross-fmadd2、cross-fmadd3和cross-fmadd4都是将寄存器11的后半区域的值切换成进入普通运算器12b的3个操作数并且相反地将寄存器11的前半区域的值切换成进入扩展运算器12e的3个操作数的指令。
具体地,这些指令使来自寄存器11的前半区域和后半区域的值分别交叉输入到扩展运算器12e和普通运算器12b中。在第一模式下,允许算术运算器12b和12e执行不同的算术运算。与在SIMD方案中使用的指令码类似,这些指令集cross-fmadd1、......、cross-fmadd4使用各寄存器编号分配rd[6:0]、rs1[6:0]、rs2[6:0]和rs3[6:0]的7位中的最低6位rd[5:0]、rs1[5:0]、rs2[5:0]和rs3[5:0]而不使用最高有效位rd[6]、rs1[6]、rs2[6]和rs3[6]。
在下面详细说明的第一模式(将未使用的位投入使用的第一模式)使用各指令集cross-fmadd1、......、cross-fmadd4中的4个未使用的位rd[6]、rs1[6]、rs2[6]和rs3[6]中的2位(具体地,rs1[6]和rs2[6])。用作设定单元的指令码发布单元20在这2个未使用的位rs1[6]和rs2[6]中设定扩展指令信息,该扩展指令信息指示寄存器11和算术运算器12b、12e执行与根据不使用rs1[6]和rs2[6]的指令集cross-fmadd1、......、cross-fmadd4进行的普通处理不同的扩展处理(例如,参见图12~15所示的算术运算的组合)。如后面参照图10和11A~11D所说明的那样,基于在未使用的位中设定的扩展指令信息和在除未使用的位以外的位中设定的信息,生成单元30生成指示寄存器11和算术运算器12b、12e执行扩展处理的扩展指令。
由此,如图9的右侧部分所示,允许各算术运算器12b和12e使用来自寄存器11的前半区域和后半区域二者的输入值来执行算术运算。特别地,在未使用的位rs1[6]和rs2[6]中设定执行扩展处理的扩展指令使得可以将来自寄存器11的前半区域和后半区域二者的2个操作数输入到各算术运算器12b和12e中。因而,由上式(1-1)~(1-4)的4次算术运算(即4个指令)执行的复数矩阵乘积运算可如后面说明那样通过2个指令来进行。
在采用将未使用的位投入使用的第一模式时(即,在执行由指令cross-fmadd1、......、cross-fmadd4指定的算术运算时),将由指令码发布单元20发布的指令种类码的最高2位opcode[3:2]设定为“11”。下面,参照图10~15说明在将未使用的位投入使用的第一模式下算术运算装置1进行的操作。
在第一模式下,生成单元30如图10所示那样对由指令码发布单元20发布的指令码opcode[3:0]以及4个寄存器编号分配rd[6:0]、rs1[6:0]、rs2[6:0]和rs3[6:0]进行变换,并将指令集b_we、e_we、b_rd[6:0]、b_rs1[6:0]、b_rs2[6:0]、b_rs3[6:0]、e_rd[6:0]、e_rs1[6:0]、e_rs2[6:0]、e_rs3[6:0]、b_op[1:0]和e_op[1:0]输入到算术单元10中。
此处,在指令集cross-fmadd1、......、cross-fmadd4中,如图10、11B和下表8所示,基于指令码的指令种类码中包含的最低2位的值opcode[1:0],生成分别要在算术运算器12b和12e中进行的算术运算用的算术码b_op[1:0]和e_op[1:0]。与上述SIMD方案不同,算术运算器12b和12e彼此独立地切换要执行的算术运算的种类,从而算术运算器12b和12e在某一时刻可执行同一种算术运算或可执行不同的算术运算。
〔表8〕
指令种类码 | b_op[1:0] | e_op[1:0] |
cross-fmadd1 | 00(fmadd) | 00(fmadd) |
cross-fmadd2 | 10(fnmsub) | 00(fmadd) |
cross-fmadd3 | 00(fmadd) | 10(fnmsub) |
cross-fmadd4 | 10(fnmsub) | 10(fnmsub) |
如图10和11C所示,对于第一模式,在分别来自算术运算器12b和12e的用于记录在寄存器11中的控制信号b_we和e_we中设定固定值“1”。这就将算术运算器12b和12e所执行的算术运算的结果分别记录在寄存器11的前半区域和后半区域中。
如图10所示,对于普通运算器12b用的寄存器编号分配b_rd[5:0]、b_rs1[5:0]、b_rs2[5:0]和b_rs3[5:0],将指令码中包含的4个寄存器编号分配的最低6位rd[5:0]、rs1[5:0]、rs2[5:0]和rs3[5:0]输入到寄存器11中。同时,同一数据rd[5:0]、rs1[5:0]、rs2[5:0]和rs3[5:0]亦用作扩展运算器12e用的寄存器编号分配e_rd[5:0]、e_rs1[5:0]、e_rs2[5:0]和e_rs3[5:0],其也输入到寄存器11中。
如图10、11D和下表9所示,在供普通运算器12b用的寄存器编号分配的最高有效位b_rd[6]和b_rs3[6]中设定固定值“0”并在供扩展运算器12e用的寄存器编号分配的最高有效位e_rd[6]和e_rs3[6]中设定固定值“1”。与之相比,将基于寄存器编号分配的最高有效位rs1[6]和rs2[6]的值(即,扩展指令信息)和指令种类码opcode[1:0]计算和生成的值输入到供普通运算器12b用的寄存器编号分配的最高有效位b_rs1[6]和b_rs2[6]以及供扩展运算器12e用的寄存器编号分配的最高有效位e_rs1[6]和e_rs2[6]。如图10、11D和下表9所示,该输入值是依据指令种类码、基于寄存器编号分配的最高有效位rs1[6]和rs2[6]的值而生成的。由此,各自来自寄存器11的前半区域和后半区域之一的2个值可用作各算术运算器12b和12e中的算术运算用的操作数。也就是说,在未使用的位rs1[6]和rs2[6]中设定的扩展指令信息指示寄存器11将待输入至算术运算器12b和12e之一的值从分配给该算术运算器之一的区域中的值切换成分配给另一算术运算器的区域中的值。此处,“~X”代表“X”的相反值。
〔表9〕
指令种类码 | b_rs1[6](图10中的a1) | b_rs2[6](图10中的a2) | e_rs1[6](图10中的a3) | e_rs2[6](图10中的a4) |
cross-fmadd1 | rs1[6] | rs2[6] | rs1[6] | ~rs2[6] |
cross-fmadd2 | ~rs1[6] | ~rs2[6] | ~rs1[6] | rs2[6] |
cross-fmadd3 | ~rs1[6] | ~rs2[6] | ~rs1[6] | rs2[6] |
cross-fmadd4 | ~rs1[6] | rs2[6] | ~rs1[6] | ~rs2[6] |
接下来,对在将未使用的位投入使用的第一模式下进行的操作实例、即执行算术运算“cross-fmadd1%f30、%f10、%f20、%f30”进行说明。
在这种情况下,算术单元10的算术运算器12b和12e执行以下2个算术运算。
在普通运算器12b处:%r[30]←%r[10]*%r[20]+%r[30]
在扩展运算器12e处:%r[94]←%r[10]*%r[84]+%r[94]
这2个算术运算对应于以下复数算术运算,该复数算术运算使用分别从寄存器11的前半区域和后半区域读取其实部和其虚部的操作数。
X←X+A*C (1-1)
Y←Y+A*D (1-2)
在这种情况下,由下表10所示的指令码指定的指令种类码opcode[3:0]和寄存器编号分配rd[6:0]、rs1[6:0]、rs2[6:0]、rs3[6:0]的值被变换成下表11所示的供算术运算器12b和12e用的输入信号的值,并被输入到寄存器11中。具体地,如下表10所示,从指令码发布单元20发布的指令种类码opcode[3:0]被设定为“1100”,用作设定单元的指令码发布单元20在未使用的位rs1[6]和rs2[6]中设定“0”和“0”(参见后面说明的图12的左上实例)。根据这些值,生成单元30基于表9和图11D中的等式计算和设定0、0、0和0,用于供普通运算器12b用的寄存器编号分配的最高有效位b_rd[6]、b_rs1[6]、b_rs2[6]和b_rs3[6](参见下表11)。以相同的方式,生成单元30计算和设定1、0、1和1,用于供扩展运算器12e用的寄存器编号分配的最高有效位e_rd[6]、e_rs1[6]、e_rs2[6]和e_rs3[6](参见下表11)。将如图11B和上表8所示的依据指令种类码opcode[1:0]决定的算术码“00”和“00”分别输入到算术运算器12b和12e中。因而,在本例中,算术运算器12b和12e执行同一种算术运算(fmadd)。将相同值rd[5:0]、rs1[5:0]、rs2[5:0]和rs3[5:0]输入到供普通运算器12b用的寄存器编号分配和供扩展运算器12e用的寄存器编号分配的最低6位。
如图12的左上实例所示,普通运算器12b然后对输入值执行基于上式(1-1)的算术运算,该输入值表达为由寄存器编号分配的最高有效位b_rs1[6]、b_rs2[6]、b_rs3[6]=0、0、0选择的、且位于寄存器的前半区域的3个操作数即A(%r[rs1]=%r[10])、C(%r[rs2]=%r[20])和X(%r[rs3]=%r[30])。同时,如图12的左上实例所示,扩展运算器12e对输入值执行基于上式(1-2)的算术运算,该输入值表达为由寄存器编号分配的最高有效位e_rs1[6]、e_rs2[6]、e_rs3[6]=0、1、1选择的操作数A、D和Y,即位于寄存器的前半区域的单个操作数A(%r[rs1]=%r[10])和位于寄存器的后半区域的2个操作数D(%r[N+rs2]=%r[84])和Y(%r[N+rs3]=%r[94])。算术运算器12b和12e将对不同操作数进行的同一种算术运算的结果输出至寄存器11。在第一模式下,在分别来自算术运算器12b和12e的用于记录在寄存器11中的控制信号b_we和e_we二者中设定固定值“1”。因此,由普通运算器12b进行的算术运算的结果取得要记录在寄存器11的前半区域中的寄存器值%r[rd]=%r[30],类似地,由扩展运算器12e进行的算术运算的结果取得要记录在寄存器11的后半区域中的寄存器值%r[N+rd]=%r[94]。也就是说,可根据单个指令执行上式(1-1)和(1-2)的2个算术运算,类似地,可依照单个指令来执行由上式(1-3)和(1-4)表达的算术运算。
〔表10〕
指令码 | 值 |
opcode[3:0] | 1100(cross-fmadd1) |
rd[6:0] | 0011110(30) |
rs1[6:0] | 0001010(10) |
rs2[6:0] | 0010100(20) |
rs3[6:0] | 0011110(30) |
〔表11〕
输入信号 | 值 |
b_op[1:0] | 00(fmadd) |
b_we | 1(固定值) |
e_op[1:0] | 00(fmadd) |
e_we | 1(固定值) |
b_rd[6:0] | 0011110(30) |
b_rs1[6:0] | 0001010(10) |
b_rs2[6:0] | 0010100(20) |
b_rs3[6:0] | 0011110(30) |
e_rd[6:0] | 1011110(94) |
e_rs1[6:0] | 0001010(10) |
e_rs2[6:0] | 1010100(84) |
e_rs3[6:0] | 1011110(94) |
上述实例假设指令种类码opcode[3:0]被设定为“1100”并且未使用的位rs1[6]和rs2[6]都被设定为“0”。然而,将未使用的位投入使用的第一模式可实现算术运算的其它15种组合,这将参照图12~15来详细说明。
图12示出了在指令种类码opcode[3:0]=1100的情况下的算术运算的4种组合,其中算术运算器12b和12e执行同一种算术运算fmadd。
在这种情况下,如果未使用的位(最高有效位)rs1[6]和rs2[6]都被设定为“0”,则寄存器编号分配的最高有效位b_rs1[6]、b_rs2[6]、b_rs3[6]都是“0”且寄存器编号分配的最高有效位e_rs1[6]、e_rs2[6]和e_rs3[6]分别是0、1和1。因而,如图12的左上实例所示,普通运算器12b使用来自寄存器11的前半区域的3个操作数%r[rs1]、%r[rs2]和%r[rs3]作为输入值而执行算术运算(fmadd)。扩展运算器12e使用来自寄存器11的前半区域的单个操作数%r[rs1]和来自寄存器11的后半区域的2个操作数%r[N+rs2]和%r[N+rs3]作为输入值而执行算术运算(fmadd)。
如果未使用的位(最高有效位)rs1[6]和rs2[6]分别被设定为“0”和“1”,则寄存器编号分配的最高有效位b_rs1[6]、b_rs2[6]和b_rs3[6]分别是0、1和0且寄存器编号分配的最高有效位e_rs1[6]、e_rs2[6]和e_rs3[6]分别是0、0和1。因而,如图12的左下实例所示,普通运算器12b使用来自寄存器11的前半区域的2个操作数%r[rs1]和%r[rs3]和来自寄存器11的后半区域的单个操作数%r[N+rs2]作为输入值而执行算术运算(fmadd)。扩展运算器12e使用来自寄存器11的前半区域的2个操作数%r[rs1]和%r[rs2]和来自寄存器11的后半区域的单个操作数%r[N+rs3]作为输入值而执行算术运算(fmadd)。
如果未使用的位(最高有效位)rs1[6]和rs2[6]分别被设定为“1”和“0”,则寄存器编号分配的最高有效位b_rs1[6]、b_rs2[6]和b_rs3[6]分别是1、0和0且寄存器编号分配的最高有效位e_rs1[6]、e_rs2[6]和e_rs3[6]分别是1、1和1。因而,如图12的右上实例所示,普通运算器12b使用来自寄存器11的前半区域的2个操作数%r[rs2]和%r[rs3]和来自寄存器11的后半区域的单个操作数%r[N+rs1]作为输入值而执行算术运算(fmadd)。扩展运算器12e使用来自寄存器11的后半区域的3个操作数%r[N+rs1]、%r[N+rs2]和%r[N+rs3]作为输入值而执行算术运算(fmadd)。
如果未使用的位(最高有效位)rs1[6]和rs2[6]都被设定为“1”,则寄存器编号分配的最高有效位b_rs1[6]、b_rs2[6]和b_rs3[6]分别是1、1和0且寄存器编号分配的最高有效位e_rs1[6]、e_rs2[6]和e_rs3[6]分别是1、0和1。因而,如图12的右下实例所示,普通运算器12b使用来自寄存器11的前半区域的单个操作数%r[rs3]和来自寄存器11的后半区域的2个操作数%r[N+rs1]和%r[N+rs2]作为输入值而执行算术运算(fmadd)。扩展运算器12e使用来自寄存器11的前半区域的单个操作数%r[rs2]和来自寄存器11的后半区域的2个操作数%r[N+rs1]和%r[N+rs3]作为输入值而执行算术运算(fmadd)。
图13示出了在指令种类码opcode[3:0]=1101的情况下的算术运算的4种组合,其中普通运算器12b和扩展运算器12e分别执行算术运算fnmsub和fmadd。
在这种情况下,如果未使用的位(最高有效位)rs1[6]和rs2[6]都被设定为“0”,则寄存器编号分配的最高有效位b_rs1[6]、b_rs2[6]和b_rs3[6]分别是1、1和0且寄存器编号分配的最高有效位e_rs1[6]、e_rs2[6]和e_rs3[6]分别是1、0和1。因而,如图13的左上实例所示,普通运算器12b使用来自寄存器11的前半区域的单个操作数%r[rs3]和来自寄存器11的后半区域的2个操作数%r[N+rs1]和%r[N+rs2]作为输入值而执行算术运算(fnmsub)。扩展运算器12e使用来自寄存器11的前半区域的单个操作数%r[rs2]和来自寄存器11的后半区域的2个操作数%r[N+rs1]和%r[N+rs3]作为输入值而执行算术运算(fmadd)。
如果未使用的位(最高有效位)rs1[6]和rs2[6]分别被设定为“0”和“1”,则寄存器编号分配的最高有效位b_rs1[6]、b_rs2[6]和b_rs3[6]分别是1、0和0且寄存器编号分配的最高有效位e_rs1[6]、e_rs2[6]和e_rs3[6]分别是1、1和1。因而,如图13的左下实例所示,普通运算器12b使用来自寄存器11的前半区域的2个操作数%r[rs2]和%r[rs3]和来自寄存器11的后半区域的单个操作数%r[N+rs1]作为输入值而执行算术运算(fnmsub)。扩展运算器12e使用来自寄存器11的后半区域的3个操作数%r[N+rs1]、%r[N+rs2]和%r[N+rs3]作为输入值而执行算术运算(fmadd)。
如果未使用的位(最高有效位)rs1[6]和rs2[6]分别被设定为“1”和“0”,则寄存器编号分配的最高有效位b_rs1[6]、b_rs2[6]和b_rs3[6]分别是0、1和0且寄存器编号分配的最高有效位e_rs1[6]、e_rs2[6]和e_rs3[6]分别是0、0和1。因而,如图13的右上实例所示,普通运算器12b使用来自寄存器11的前半区域的2个操作数%r[rs1]和%r[rs3]和来自寄存器11的后半区域的单个操作数%r[N+rs2]作为输入值而执行算术运算(fnmsub)。扩展运算器12e使用来自寄存器11的前半区域的2个操作数%r[rs1]和%r[rs2]和来自寄存器11的后半区域的单个操作数%r[N+rs3]作为输入值而执行算术运算(fmadd)。
如果未使用的位(最高有效位)rs1[6]和rs2[6]都被设定为“1”,则寄存器编号分配的最高有效位b_rs1[6]、b_rs2[6]和b_rs3[6]分别是0、0和0且寄存器编号分配的最高有效位e_rs1[6]、e_rs2[6]和e_rs3[6]分别是0、1和1。因而,如图13的右下实例所示,普通运算器12b使用来自寄存器11的前半区域的3个操作数%r[rs1]、%r[rs2]和%r[rs3]作为输入值而执行算术运算(fnmsub)。扩展运算器12e使用来自寄存器11的前半区域的单个操作数%r[rs1]和来自寄存器11的后半区域的2个操作数%r[N+rs2]和%r[N+rs3]作为输入值而执行算术运算(fmadd)。
图14示出了在指令种类码opcode[3:0]=1110的情况下的算术运算的4种组合,其中普通运算器12b和扩展运算器12e分别执行算术运算fmadd和fnmsub。
在这种情况下,如果未使用的位(最高有效位)rs1[6]和rs2[6]都被设定为“0”,则寄存器编号分配的最高有效位b_rs1[6]、b_rs2[6]、b_rs3[6]分别是1、1和0且寄存器编号分配的最高有效位e_rs1[6]、e_rs2[6]和e_rs3[6]分别是1、0和1。因而,如图14的左上实例所示,普通运算器12b使用来自寄存器11的前半区域的单个操作数%r[rs3]和来自寄存器11的后半区域的2个操作数%r[N+rs1]和%r[N+rs2]作为输入值而执行算术运算(fmadd)。扩展运算器12e使用来自寄存器11的前半区域的单个操作数%r[rs2]和来自寄存器11的后半区域的2个操作数%r[N+rs1]、%r[N+rs3]作为输入值而执行算术运算(fnmsub)。
如果未使用的位(最高有效位)rs1[6]和rs2[6]分别被设定为“0”和“1”,则寄存器编号分配的最高有效位b_rs1[6]、b_rs2[6]和b_rs3[6]分别是1、0和0且寄存器编号分配的最高有效位e_rs1[6]、e_rs2[6]和e_rs3[6]分别是1、1和1。因而,如图14的左下实例所示,普通运算器12b使用来自寄存器11的前半区域的2个操作数%r[rs2]和%r[rs3]和来自寄存器11的后半区域的单个操作数%r[N+rs1]作为输入值而执行算术运算(fmadd)。扩展运算器12e使用来自寄存器11的后半区域的3个操作数%r[N+rs1]、%r[N+rs2]和%r[N+rs3]作为输入值而执行算术运算(fnmsub)。
如果未使用的位(最高有效位)rs1[6]和rs2[6]分别被设定为“1”和“0”,则寄存器编号分配的最高有效位b_rs1[6]、b_rs2[6]、b_rs3[6]分别是0、1和0且寄存器编号分配的最高有效位e_rs1[6]、e_rs2[6]和e_rs3[6]分别是0、0和1。因而,如图14的右上实例所示,普通运算器12b使用来自寄存器11的前半区域的2个操作数%r[rs1]和%r[rs3]和来自寄存器11的后半区域的单个操作数%r[N+rs2]作为输入值而执行算术运算(fmadd)。扩展运算器12e使用来自寄存器11的前半区域的2个操作数%r[rs1]和%r[rs2]和来自寄存器11的后半区域的单个操作数%r[N+rs3]作为输入值而执行算术运算(fnmsub)。
如果未使用的位(最高有效位)rs1[6]和rs2[6]都被设定为“1”,则寄存器编号分配的最高有效位b_rs1[6]、b_rs2[6]和b_rs3[6]分别是0、0和0且寄存器编号分配的最高有效位e_rs1[6]、e_rs2[6]和e_rs3[6]分别是0、1和1。因而,如图14的右下实例所示,普通运算器12b使用来自寄存器11的前半区域的3个操作数%r[rs1]、%r[rs2]和%r[rs2]作为输入值而执行算术运算(fmadd)。扩展运算器12e使用来自寄存器11的前半区域的单个操作数%r[rs1]和来自寄存器11的后半区域的2个操作数%r[N+rs2]和%r[N+rs3]作为输入值而执行算术运算(fnmsub)。
图15示出了在指令种类码opcode[3:0]=1111的情况下的算术运算的4种组合,其中算术运算器12b和12e执行同一种算术运算fnmsub。
在这种情况下,如果未使用的位(最高有效位)rs1[6]和rs2[6]都被设定为“0”,则寄存器编号分配的最高有效位b_rs1[6]、b_rs2[6]、b_rs3[6]分别是1、0和0且寄存器编号分配的最高有效位e_rs1[6]、e_rs2[6]和e_rs3[6]分别是1、1和1。因而,如图15的左上实例所示,普通运算器12b使用来自寄存器11的前半区域的2个操作数%r[rs2]和%r[rs3]和来自寄存器11的后半区域的单个操作数%r[N+rs1]作为输入值而执行算术运算(fnmsub)。扩展运算器12e使用来自寄存器11的后半区域的3个操作数%r[N+rs1]、%r[N+rs2]和%r[N+rs3]作为输入值而执行算术运算(fnmsub)。
如果未使用的位(最高有效位)rs1[6]和rs2[6]分别被设定为“0”和“1”,则寄存器编号分配的最高有效位b_rs1[6]、b_rs2[6]、b_rs3[6]分别是1、1和0且寄存器编号分配的最高有效位e_rs1[6]、e_rs2[6]和e_rs3[6]分别是1、0和1。因而,如图15的左下实例所示,普通运算器12b使用来自寄存器11的前半区域的单个操作数%r[rs3]和来自寄存器11的后半区域的2个操作数%r[N+rs1]和%r[N+rs2]作为输入值而执行算术运算(fnmsub)。扩展运算器12e使用来自寄存器11的前半区域的单个操作数%r[rs2]和来自寄存器11的后半区域的2个操作数%r[N+rs1]和%r[N+rs3]作为输入值而执行算术运算(fnmsub)。
如果未使用的位(最高有效位)rs1[6]和rs2[6]分别被设定为“1”和“0”,则寄存器编号分配的最高有效位b_rs1[6]、b_rs2[6]和b_rs3[6]分别是0、0和0且寄存器编号分配的最高有效位e_rs1[6]、e_rs2[6]和e_rs3[6]分别是0、1和1。因而,如图15的右上实例所示,普通运算器12b使用来自寄存器11的前半区域的3个操作数%r[rs1]、%r[rs2]和%r[rs3]作为输入值而执行算术运算(fnmsub)。扩展运算器12e使用来自寄存器11的前半区域的单个操作数%r[rs1]和来自寄存器11的后半区域的2个操作数%r[N+rs2]和%r[N+rs3]作为输入值而执行算术运算(fnmsub)。
如果未使用的位(最高有效位)rs1[6]和rs2[6]都被设定为“1”,则寄存器编号分配的最高有效位b_rs1[6]、b_rs2[6]和b_rs3[6]分别是0、1和0且寄存器编号分配的最高有效位e_rs1[6]、e_rs2[6]和e_rs3[6]分别是0、0和1。因而,如图15的右下实例所示,普通运算器12b使用来自寄存器11的前半区域的2个操作数%r[rs1]和%r[rs3]和来自寄存器11的后半区域的单个操作数%r[N+rs2]作为输入值而执行算术运算(fnmsub)。扩展运算器12e使用来自寄存器11的前半区域的2个操作数%r[rs1]和%r[rs2]和来自寄存器11的后半区域的单个操作数%r[N+rs3]作为输入值而执行算术运算(fnmsub)。
(6)算术运算装置在将未使用的位投入使用的第二模式下进行的操作
图16简要地示出了由图1所示的算术运算装置1的算术单元10在将未使用的位投入使用的第二模式期间进行的操作;图17示出了由算术运算装置1中的指令码发布单元(设定单元)20和生成单元30在第二模式期间进行的操作;图18A~18D具体地示出了算术运算装置1在第二模式下的指令码、算术码、进入寄存器11的记录信号和寄存器编号分配(仅最高有效位)。
对于上述将未使用的位投入使用的第一模式,已参照图12~15对扩展处理的执行指令作了说明,该指令是使用在指令集cross-fmadd1、......、cross-fmadd4中设定的未使用的位rs1[6]和rs2[6]而实现的。除了上述第一模式下的操作以外,此处要详细说明的第二模式使用已参照图6、7和8A~8D说明的SIMD方案中的指令集simd-fmadd、simd-fmsub、simd-fnmsub、simd-fnmadd的未使用的位rd[6]、rs1[6]、rs2[6]和rs3[6]。在这些未使用的位rd[6]、rs1[6]、rs2[6]和rs3[6]中,特别使用2个位rs1[6]和rs2[6]。
用作设定单元的指令码发布单元20在这2个未使用的位rs1[6]和rs2[6]中设定扩展指令信息,该扩展指令信息指示寄存器11和算术运算器12b、12e执行与根据不使用rs1[6]和rs2[6]的指令集simd-fmadd、simd-fmsub、simd-fnmsub、simd-fnmadd进行的普通处理(参见图16的左侧实例)不同的扩展处理。如后面参照图17和18A~18D所说明的那样,基于在未使用的位中设定的扩展指令信息和在除未使用的位以外的位中设定的信息,生成单元30生成指示寄存器11和算术运算器12b、12e执行扩展处理的扩展指令。
由此,如图16的右侧实例所示,允许各算术运算器12b和12e使用来自寄存器11的前半区域和后半区域二者的输入值来执行算术运算。特别地,在未使用的位rs1[6]和rs2[6]中设定执行扩展处理的扩展指令使得可以将来自寄存器11的前半区域和后半区域二者的2个操作数输入到各算术运算器12b和12e中。这种扩展处理可增加SIMD方案中供算术运算用的寄存器组合的数量。除了复数算术运算以外,还可对来自单个寄存器的前半区域和后半区域二者的操作数的各种组合进行各种算术运算。
在采用将未使用的位投入使用的第二模式时(即,在执行由指令集simd-fmadd、simd-fmsub、simd-fnmsub、simd-fnmadd指定的算术运算时),由指令码发布单元20发布的指令种类码的最高2位opcode[3:2]被设定为“01”。下面参照图17和18A~18D说明在将未使用的位投入使用的第二模式下算术运算装置1所进行的操作。
在第二模式下,生成单元30如图17所示那样对由指令码发布单元20发布的指令码opcode[3:0]以及4个寄存器编号分配rd[6:0]、rs1[6:0]、rs2[6:0]和rs3[6:0]进行变换,并将指令集b_we、e_we、b_rd[6:0]、b_rs1[6:0]、b_rs2[6:0]、b_rs3[6:0]、e_rd[6:0]、e_rs1[6:0]、e_rs2[6:0]、e_rs3[6:0]、b_op[1:0]、e_op[1:0]输入到算术单元10中。
此处,如图17和18B所示,分别供算术运算器12b和12e用的算术码b_op[1:0]和e_op[1:0]取得指令码中包含的指令种类码的最低2位的值opcode[1:0]。同一算术码总是输入到算术运算器12b和12e中,从而算术运算器12b和12e执行同一种算术运算。
如图17和18C所示,对于第二模式,在分别来自算术运算器12b和12e的用于记录在寄存器11中的控制信号b_we和e_we中设定固定值“1”。这就将算术运算器12b和12e所进行的算术运算的结果分别记录在寄存器11的前半区域和后半区域中。
如图17所示,对于普通运算器12b用的寄存器编号分配b_rd[5:0]、b_rs1[5:0]、b_rs2[5:0]和b_rs3[5:0],将指令码中包含的4个寄存器编号分配的最低6位rd[5:0]、rs1[5:0]、rs2[5:0]和rs3[5:0]输入到寄存器11中。同时,同一数据rd[5:0]、rs1[5:0]、rs2[5:0]和rs3[5:0]亦用作扩展运算器12e用的寄存器编号分配e_rd[5:0]、e_rs1[5:0]、e_rs2[5:0]和e_rs3[5:0],其被输入到寄存器11中。
如图17和18D所示,在供普通运算器12b用的寄存器编号分配的最高有效位b_rd[6]和b_rs3[6]中设定固定值“0”,并在供扩展运算器12e用的寄存器编号分配的最高有效位e_rd[6]和e_rs3[6]中设定固定值“1”。与之相比,将值rs1[6]和rs2[6]分别输入到供普通运算器12b用的寄存器编号分配的最高有效位b_rs1[6]和b_rs2[6]中。此外,将值~rs1[6]和~rs2[6]分别输入到供扩展运算器12e用的寄存器编号分配的最高有效位e_rs1[6]和e_rs2[6]中。也就是说,在未使用的位rs1[6]和rs2[6]中设定的扩展指令信息指示寄存器11将待输入至算术运算器12b和12e之一的值从分配给该算术运算器之一的区域中的值切换成分配给另一算术运算器的区域中的值。此处,“~X”代表“X”的相反值。
接下来,对在将未使用的位投入使用的第二模式下进行的操作实例、即执行算术运算“simd-fnmsub%f40、%f10、%f80、%f30”进行说明。
在这种算术运算中,算术单元10的算术运算器12b和12e执行以下2个算术运算。
在普通运算器12b处:%r[40]←%r[10]*%r[80]-%r[30]
在扩展运算器12e处:%r[104]←%r[74]*%r[16]-%r[94]
在这种情况下,由下表12所示的指令码指定的指令种类码opcode[3:0]和寄存器编号分配rd[6:0]、rs1[6:0]、rs2[6:0]、rs3[6:0]的值被变换成下表13所示的要输入到算术运算器12b和12e中的值,并被输入到寄存器11中。具体地,如下表12所示,从指令码发布单元20发布的指令种类码opcode[3:0]被设定为“0101”,且用作设定单元的指令码发布单元20在未使用的位rs1[6]和rs2[6]中分别设定值“0”和“1”。根据这些值,基于表9和图18D中的等式,生成单元30在供普通运算器12b用的寄存器编号分配的最高有效位b_rd[6]、b_rs1[6]、b_rs2[6]和b_rs3[6]中计算和设定0、0、1和0(参见下表13)。以相同的方式,生成单元30在供扩展运算器12e用的寄存器编号分配的最高有效位e_rd[6]、e_rs1[6]、e_rs2[6]和e_rs3[6]中计算和设定1、0、1和1(参见下表13)。将同一算术码“01”输入到算术运算器12b和12e的算术码b_op[1:0]和e_op[1:0]中。因而,在本例中,算术运算器12b和12e执行同一种算术运算。将相同的值rd[5:0]、rs1[5:0]、rs2[5:0]和rs3[5:0]输入到供普通运算器12b用的寄存器编号分配和供扩展运算器12e用的寄存器编号分配的最低6位中。
普通运算器12b然后对输入值执行算术运算(fnmsub),该输入值表达为由寄存器编号分配的最高有效位b_rs1[6]、b_rs2[6]、b_rs3[6]=0、1、0选择的3个操作数,即位于寄存器11的前半区域的2个操作数%r[rs1]=%r[10]和%r[rs3]=%r[30]和位于寄存器11的后半区域的单个操作数%r[rs2]=%r[80]。同时,扩展运算器12e使用这样的值来执行算术运算:该值表达为由寄存器编号分配的最高有效位e_rs1[6]、e_rs2[6]、e_rs3[6]=1、0、1选择的3个操作数,即位于寄存器11的前半区域的单个操作数%r[N+rs2]=%r[16]和位于寄存器11的后半区域的2个操作数%r[N+rs1]=%r[74]和%r[N+rs3]=%r[94]。算术运算器12b和12e将对不同操作数进行的同一种算术运算的结果输出至寄存器11。在第二模式下,在分别来自算术运算器12b和12e的用于记录在寄存器11中的控制信号b_we和e_we中设定固定值“1”。因此,普通运算器12b所进行的算术运算的结果取得要记录在寄存器11的前半区域中的寄存器值%r[rd]=%r[40],类似地,扩展运算器12e所进行的算术运算的结果取得要记录在寄存器11的后半区域中的寄存器值%r[rd]=%r[104]。
〔表12〕
指令码 | 值 |
opcode[3:0] | 0101(simd-fmsub) |
rd[6:0] | 0101000(40) |
rs1[6:0] | 0001010(10) |
rs2[6:0] | 1010000(80) |
rs3[6:0] | 0011110(30) |
〔表13〕
输入信号 | 值 |
b_op[1:0] | 01(fmsub) |
b_we | 1(固定值) |
e_op[1:0] | 01(fmsub) |
e_we | 1(固定值) |
b_rd[6:0] | 0101000(40) |
b_rs1[6:0] | 0001010(10) |
b_rs2[6:0] | 1010000(80) |
b_rs3[6:0] | 0011110(30) |
e_rd[6:0] | 1101000(104) |
e_rs1[6:0] | 1001010(74) |
e_rs2[6:0] | 0010000(16) |
e_rs3[6:0] | 1011110(94) |
上述实例假设指令种类码opcode[3:0]被设定为“0101”,并且未使用的位rs1[6]和rs2[6]分别被设定为“0”和“1”。然而,将未使用的位投入使用的第二模式可实现算术运算的其它组合。此处,opcode[1:0]从算术运算器12b和12e要进行的4个算术运算中选择一个算术运算,且未使用的位rs1[6]和rs2[6]的值指定并选择要从寄存器11的前半区域或后半区域输入到各算术运算器12b和12e中的2个操作数(即,要进行乘积运算的操作数)。
如果未使用的位(最高有效位)rs1[6]和rs2[6]都被设定为“0”,则寄存器编号分配的最高有效位b_rs1[6]、b_rs2[6]和b_rs3[6]是0、0和0且寄存器编号分配的最高有效位e_rs1[6]、e_rs2[6]和e_rs3[6]分别是1、1和1。因而,普通运算器12b使用来自寄存器11的前半区域的3个操作数%r[rs1]、%r[rs2]和%r[rs3]作为输入值而执行算术运算。扩展运算器12e使用来自寄存器11的后半区域的3个操作数%r[N+rs1]、%r[N+rs2]和%r[N+rs3]作为输入值而执行算术运算。
如果未使用的位(最高有效位)rs1[6]和rs2[6]分别被设定为“0”和“1”,则寄存器编号分配的最高有效位b_rs1[6]、b_rs2[6]和b_rs3[6]是0、1和0且寄存器编号分配的最高有效位e_rs1[6]、e_rs2[6]和e_rs3[6]分别是1、0和1。因而,普通运算器12b使用来自寄存器11的前半区域的2个操作数%r[rs1]和%r[rs3]和来自寄存器11的后半区域的单个操作数%r[N+rs2]作为输入值而执行算术运算。扩展运算器12e使用来自寄存器11的前半区域的单个操作数%r[rs2]和来自寄存器11的后半区域的2个操作数%r[N+rs1]和%r[N+rs3]作为输入值而执行算术运算。
如果未使用的位(最高有效位)rs1[6]和rs2[6]分别被设定为“1”和“0”,则寄存器编号分配的最高有效位b_rs1[6]、b_rs2[6]和b_rs3[6]是1、0和0且寄存器编号分配的最高有效位e_rs1[6]、e_rs2[6]和e_rs3[6]分别是0、1和1。因而,普通运算器12b使用来自寄存器11的前半区域的2个操作数%r[rs2]和%r[rs3]和来自寄存器11的后半区域的单个操作数%r[N+rs1]作为输入值而执行算术运算。扩展运算器12e使用来自寄存器11的前半区域的单个操作数%r[rs1]和来自寄存器11的后半区域的2个操作数%r[N+rs2]和%r[N+rs3]作为输入值而执行算术运算。
如果未使用的位(最高有效位)rs1[6]和rs2[6]都被设定为“1”,则寄存器编号分配的最高有效位b_rs1[6]、b_rs2[6]和b_rs3[6]是1、1和0且寄存器编号分配的最高有效位e_rs1[6]、e_rs2[6]和e_rs3[6]分别是0、0和1。因而,普通运算器12b使用来自寄存器11的前半区域的单个操作数%r[rs3]和来自寄存器11的后半区域的2个操作数%r[N+rs1]和%r[N+rs2]作为输入值而执行算术运算。扩展运算器12e使用来自寄存器11的前半区域的2个操作数%r[rs1]和%r[rs2]和来自寄存器11的后半区域的单个操作数%r[N+rs3]作为输入值而执行算术运算。
(7)算术运算装置在将未使用的位投入使用的第三模式下进行的操作
图19和20简要地示出了由图1所示的算术运算装置1的算术单元10在将未使用的位投入使用的第三模式期间进行的操作;图21示出了由算术运算装置1中的指令码发布单元(设定单元)20和生成单元30在第三模式期间进行的操作;而图22A~22D具体地示出了图1的算术运算装置1在第三模式下的指令码、算术码、寄存器记录信号和寄存器编号分配(仅最高有效位)。图23和24示出了由图1所示的算术运算装置1的算术单元10在第三模式期间执行的算术运算的具体组合;而图25示出了实现图1所示的算术运算装置1的生成单元30的具体实例。
在此处要详细说明的将未使用的位投入使用的第三模式期间,如图22A所示,使用上述SIMD方案中的指令集simd-fmadd、simd-fmsub、simd-fnmsub和simd-fnmadd中得以未被使用的全部未使用的位rd[6]、rs1[6]、rs2[6]和rs3[6]。
第二模式使用未使用的位rs1[6]和rs2[6]对SIMD指令进行扩展,而第三模式亦使用其余未使用的位rs3[6]和rd[6]对SIMD指令进行进一步扩展。
使用未使用的位rs3[6]来选择代表在扩展运算器12e中进行的乘积用操作数的寄存器编号,类似地,使用未使用的位rd[6]来选择供扩展运算器12e用的算术码e_op[1:0]。如图19和20所示,这种SIMD指令扩展可实现由第一模式添加的同一种算术运算。因而,在第三模式下可以不需要在第一模式下添加的指令cross-fmadd1、......、cross-fmadd4。
用作设定单元的指令码发布单元20在这4位rd[6]、rs1[6]、rs2[6]和rs3[6]中设定扩展指令信息。该扩展指令信息指示寄存器11和算术运算器12b、12e执行与依照各指令集simd-fmadd、simd-fmsub、simd-fnmsub和simd-fnmadd进行的普通处理(参见图19的左侧实例)不同的扩展处理(例如,参见图23和24所示的算术运算的组合)。如后面参照图21和22A~22D所说明的那样,基于在未使用的位中设定的扩展指令信息和在除未使用的位以外的位中设定的信息,生成单元30生成指示寄存器11和算术运算器12b、12e执行扩展处理的扩展指令,并将该扩展指令输出至寄存器11。
由此,如图19的右侧部分和图20所示,允许各算术运算器12b和12e使用来自寄存器11的前半区域和后半区域二者的操作数来执行算术运算。扩展指令进而对要由扩展运算器12e进行的算术运算进行切换,作为响应,扩展运算器12e受到控制以切换算术运算。因而,由上式(1-1)~(1-4)的4次算术运算(即4个指令)执行的复数矩阵乘积运算可如后面说明那样通过2个指令来执行。
在采用将未使用的位投入使用的第三模式时,将由指令码发布单元20发布的指令种类码的最高2位opcode[3:2]设定为“01”。下面参照图21~25说明在将未使用的位投入使用的第三模式下算术运算装置1进行的操作。
在第三模式下,生成单元30如图21所示那样对由指令码发布单元20发布的指令码opcode[3:0]以及4个寄存器编号分配rd[6:0]、rs1[6:0]、rs2[6:0]和rs3[6:0]进行变换,并将指令集b_we、e_we、b_rd[6:0]、b_rs1[6:0]、b_rs2[6:0]、b_rs3[6:0]、e_rd[6:0]、e_rs1[6:0]、e_rs2[6:0]、e_rs3[6:0]、b_op[1:0]、e_op[1:0]输入到算术单元10中。
此处,指令码中包含的指令种类码的最低2位opcode[1:0]用作供普通运算器12b用的算术码b_op[1:0]。进而,如图22B和下表14所示,生成单元30基于未使用的位rd[6]的值而生成供扩展运算器12e用的算术码e_op[1:0]。与上述SIMD方案不同,第三模式彼此独立地控制和切换要由算术运算器12b和12e执行的各算术运算。由此,算术运算器12b和12e可执行同一种算术运算或可执行不同的算术运算。SIMD指令和在未使用的位rd[6]中设定的值(扩展指令信息)的这种组合可实现与在第一模式下添加的算术运算组合数量相同的算术运算组合。
〔表14〕
指令种类码 | rd[6] | b_op[1:0] | e_op[1:0] |
simd-fmadd | 0 | 00(fmadd) | 00(fmadd) |
simd-fmadd | 1 | 00(fmadd) | 10(fnmsub) |
simd-fmsub | 0 | 01(fmsub) | 01(fmsub) |
simd-fmsub | 1 | 01(fmsub) | 11(fnmadd) |
simd-fnmsub | 0 | 10(fnmsub) | 10(fnmsub) |
simd-fnmsub | 1 | 10(fnmsub) | 00(fmadd) |
simd-fnmadd | 0 | 11(fnmadd) | 11(fnmadd) |
simd-fnmadd | 1 | 11(fnmadd) | 01(fmsub) |
如图21和22C所示,对于第三模式,在分别来自算术运算器12b和12e的用于记录在寄存器11中的控制信号b_we和e_we中设定固定值“1”。这就将由算术运算器12b和12e进行的算术运算的结果分别记录在寄存器11的前半区域和后半区域中。
如图21所示,对于普通运算器12b用的寄存器编号分配b_rd[5:0]、b_rs1[5:0]、b_rs2[5:0]和b_rs3[5:0],指令码中包含的4个寄存器编号分配的最低6位rd[5:0]、rs1[5:0]、rs2[5:0]和rs3[5:0]被输入到寄存器11中。同时,同一数据rd[5:0]、rs1[5:0]、rs2[5:0]和rs3[5:0]亦用作扩展运算器12e用的寄存器编号分配e_rd[5:0]、e_rs1[5:0]、e_rs2[5:0]和e_rs3[5:0],其也输入到寄存器11中。
如图21、22D和下表15所示,在供普通运算器12b用的寄存器编号分配的最高有效位b_rd[6]和b_rs3[6]中设定固定值“0”并在供扩展运算器12e用的寄存器编号分配的最高有效位e_rd[6]和e_rs3[6]中设定固定值“1”。与之相比,将rs1[6]和rs2[6]的值设定在供普通运算器12b用的寄存器编号分配的最高有效位b_rs1[6]和b_rs2[6]中。对于供扩展运算器12e用的寄存器编号分配的最高有效位e_rs1[6]和e_rs2[6],计算、生成并设定~rs1[6]^rs3[6]和~rs2[6]。由此,各自来自寄存器11的前半区域和后半区域之一的2个操作数可用于各算术运算器12b和12e中的算术运算。也就是说,在未使用的位rs1[6]、rs2[6]和rs3[6]中设定的扩展指令信息指示寄存器11将待输入至算术运算器12b和12e之一的值从分配给该算术运算器之一的区域中的值切换成分配给另一算术运算器的区域中的值。此处,“~X”代表“X”的相反值,而“A^B”代表值A和B的异或(EOR)。
在未使用的位rs1[6]、rs2[6]和rs3[6]中设定的值(扩展指令信息)与在最高有效位b_rs1[6]、b_rs2[6]和e_rs1[6]和e_rs2[6]中设定的值具有如下表15所示的关联。
〔表15〕
rs1[6]rs2[6]rs3[6] | b_rs[1] | b_rs2[6] | e_rs1[6] | e_rs2[6] |
000 | 0 | 0 | 1 | 1 |
001 | 0 | 0 | 0 | 1 |
010 | 0 | 1 | 1 | 0 |
011 | 0 | 1 | 0 | 0 |
100 | 1 | 0 | 0 | 1 |
101 | 1 | 0 | 1 | 1 |
110 | 1 | 1 | 0 | 0 |
111 | 1 | 1 | 1 | 0 |
此处,在未使用的位rs1[6]、rs2[6]和rs3[6]中设定的值(扩展指令信息)起到以下功能:
将rs1[6]设定为“1”,则从寄存器11的后半区域上的操作数供给向普通运算器12b输入的第一输入b_i1;
将rs2[6]设定为“1”,则从寄存器11的后半区域上的操作数供给向普通运算器12b输入的第二输入b_i2;
将rs3[6]设定为“1”,则从与第一输入值b_i1相同区域上的操作数供给向扩展运算器12e输入的第一输入b_i1;以及
rd[6]改变算术码e_op[1:0](将积和运算的结果乘以“-1”)。
接下来,对在将未使用的位投入使用的第三模式下进行的操作实例、即执行算术运算“simd-fmadd%f30、%f10、%f20、%f{30+64}”进行说明。
在此算术运算中,算术单元10的算术运算器12b和12e执行以下2个算术运算。
在普通运算器12b处:%r[30]←%r[10]*%r[20]+%r[30]
在扩展运算器12e处:%r[94]←%r[10]*%r[84]+%r[94]
这2个算术运算对应于以下复数算术运算,该复数算术运算使用其实部和其虚部分别来自寄存器11的前半区域和后半区域的操作数。
X←X+A*C (1-1)
Y←Y+A*D (1-2)
在这种情况下,由下表16所示的指令码指定的指令种类码opcode[3:0]和寄存器编号分配rd[6:0]、rs1[6:0]、rs2[6:0]和rs3[6:0]的值被变换成下表17所示的要输入算术运算器12b和12e中的输入信号的值,并被输入到寄存器11中。具体地,如下表16所示,将由指令码发布单元20发布的指令种类码opcode[3:0]设定为“0100”,用作设定单元的指令码发布单元20将0、0、0和1分别设定在4个未使用的位rd[6]、rs1[6]、rs2[6]和rs3[6]中(参见后面说明的图23中的左起上部第三个实例)。根据这些值,生成单元30基于表15和图22D中的等式计算和设定0、0、0和0以用作供普通运算器12b用的寄存器编号分配的最高有效位b_rd[6]、b_rs1[6]、b_rs2[6]和b_rs3[6](参见下表17)。以相同的方式,生成单元30计算和设定1、0、1和1以用作供扩展运算器12e用的寄存器编号分配的最高有效位e_rd[6]、e_rs1[6]、e_rs2[6]和e_rs3[6](参见下表17)。将如图22B的等式和上表14所示的依据指令种类码opcode[1:0]和未使用的位rd[6]的值决定的算术码“00”输入到扩展运算器12e中。因而,在本例中,算术运算器12b和12e执行同一种算术运算(fmadd)。将相同的值rd[5:0]、rs1[5:0]、rs2[5:0]和rs3[5:0]输入至供普通运算器12b用的寄存器编号分配和供扩展运算器12e用的寄存器编号分配的最低6位。
如图23中的左起上部第三个实例所示,普通运算器12b然后对输入值执行基于上式(1-1)的算术运算,该输入值表达为由寄存器编号分配的最高有效位b_rs1[6]、b_rs2[6]、b_rs3[6]=0、0、0选择的、且位于寄存器的前半区域的3个操作数即A(%r[rs1]=%r[10])、C(%r[rs2]=%r[20])和X(%r[rs3]=%r[30])。同时,如图23的左起上部第三个的实例所示,扩展运算器12e对输入值执行基于上式(1-2)的算术运算,该输入值表达为由寄存器编号分配的最高有效位e_rs1[6]、e_rs2[6]和e_rs3[6]=0、1、1选择的操作数A、D和Y,即位于寄存器的前半区域的单个操作数A(%r[rs1]=%r[10])和位于寄存器的后半区域的2个操作数D(%r[N+rs2]=%r[84])和Y(%r[N+rs3]=%r[94])。算术运算器12b和12e将使用不同操作数进行的同一种算术运算的结果输出至寄存器11。在第三模式下,在分别来自算术运算器12b和12e的用于记录在寄存器11中的控制信号b_we和e_we中设定固定值“1”。因此,由普通运算器12b进行的算术运算的结果取得要记录在寄存器11的前半区域中的寄存器值%r[rd]=%r[30],类似地,由扩展运算器12e进行的算术运算的结果取得要记录在寄存器11的后半区域中的寄存器值%r[N+rd]=%r[94]。也就是说,可根据单个指令执行上式(1-1)和(1-2)的2个算术运算,类似地,可依照单个指令来执行由上式(1-3)和(1-4)表达的算术运算。结果,可由2个指令来进行原本需要4个指令的复数算术运算。
〔表16〕
指令码 | 值 |
opcode[3:0] | 0100(simd-fmadd) |
rd[6:0] | 0011110(30) |
rs1[6:0] | 0001010(10) |
rs2[6:0] | 0010100(20) |
rs3[6:0] | 1011110(94) |
〔表17〕
指令码 | 值 |
b_op[1:0] | 00(fmadd) |
b_we | 1(固定值) |
e_op[1:0] | 00(fmadd) |
e_we | 1(固定值) |
b_rd[6:0] | 0011110(30) |
b_rs1[6:0] | 0001010(10) |
b_rs2[6:0] | 0010100(20) |
b_rs3[6:0] | 0011110(30) |
e_rd[6:0] | 1011110(94) |
e_rs1[6:0] | 0001010(10) |
e_rs2[6:0] | 1010100(84) |
e_rs3[6:0] | 1011110(94) |
上述实例假设指令种类码opcode[3:0]被设定为“0100”(simd-fmadd)并且4个未使用的位rd[6]、rs1[6]、rs2[6]和rs3[6]分别被设定为0、0、0和1。然而,将未使用的位投入使用的第三模式可实现其它算术运算的63种组合。具体地,此外,对于4种SIMD指令(由指令种类码opcode[3:0]=0100(simd-fmadd)、0101(simd-fmsub)、0110(simd-fnmsub)和0111(simd-fnmadd)指定)中的每种SIMD指令,可实现算术运算的16种组合。简而言之,第三模式总共可实现算术运算的64种组合。此处,将参照图23和24来详细说明4种SIMD指令中由指令种类码opcode[3:0]=“0100”(simd-fmadd)决定的一种SIMD指令的算术运算模式的16种组合。与图23和24的记载类似,其余3种SIMD指令各自具有算术运算的16种组合。
图23示出了由指令种类码opcode[3:0]=“0100”和未使用的位rd[6]=0指定的算术运算的8种组合。在这种情况下,算术运算器12b和12e执行同一种算术运算fmadd。
特别地,图23的左半部分示出了进一步由未使用的位rd[6]=0和未使用的位rs3[6]=0决定的算术运算的4种组合。
在这种情况下,如果未使用的位(最高有效位)rs1[6]和rs2[6]都被设定为“0”,则寄存器编号分配的最高有效位b_rs1[6]、b_rs2[6]和b_rs3[6]都是“0”且寄存器编号分配的最高有效位e_rs1[6]、e_rs2[6]和e_rs3[6]都是“1”。因而,如图23的左起上部第一个实例所示,普通运算器12b使用来自寄存器11的前半区域的3个操作数%r[rs1]、%r[rs2]和%r[rs3]作为输入值而执行算术运算(fmadd)。扩展运算器12e使用来自寄存器11的后半区域的3个操作数%r[N+rs1]、%r[N+rs2]和%r[N+rs3]作为输入值而执行算术运算(fmadd)。
如果未使用的位(最高有效位)rs1[6]和rs2[6]分别被设定为0和1,则寄存器编号分配的最高有效位b_rs1[6]、b_rs2[6]和b_rs3[6]分别是0、1和0且寄存器编号分配的最高有效位e_rs1[6]、e_rs2[6]和e_rs3[6]分别是1、0和1。因而,如图23的左起下部第一个实例所示,普通运算器12b使用来自寄存器11的前半区域的2个操作数%r[rs1]和%r[rs3]和来自寄存器11的后半区域的单个操作数%r[N+rs2]作为输入值而执行算术运算(fmadd)。扩展运算器12e使用来自寄存器11的前半区域的单个操作数%r[rs2]和来自寄存器11的后半区域的2个操作数%r[N+rs1]和%r[N+rs3]作为输入值而执行算术运算(fmadd)。
如果未使用的位(最高有效位)rs1[6]和rs2[6]分别被设定为1和0,则寄存器编号分配的最高有效位b_rs1[6]、b_rs2[6]和b_rs3[6]分别是1、0和0且寄存器编号分配的最高有效位e_rs1[6]、e_rs2[6]和e_rs3[6]分别是0、1和1。因而,如图23的左起上部第二个实例所示,普通运算器12b使用来自寄存器11的前半区域的2个操作数%r[rs2]和%r[rs3]和来自寄存器11的后半区域的单个操作数%r[N+rs1]作为输入值而执行算术运算(fmadd)。扩展运算器12e使用来自寄存器11的前半区域的单个操作数%r[rs1]和来自寄存器11的后半区域的2个操作数%r[N+rs2]和%r[N+rs3]作为输入值而执行算术运算(fmadd)。
如果未使用的位(最高有效位)rs1[6]和rs2[6]都被设定为1,则寄存器编号分配的最高有效位b_rs1[6]、b_rs2[6]和b_rs3[6]分别是1、1和0且寄存器编号分配的最高有效位e_rs1[6]、e_rs2[6]和e_rs3[6]分别是0、0和1。因而,如图23的左起下部第二个实例所示,普通运算器12b使用来自寄存器11的前半区域的单个操作数%r[rs3]和来自寄存器11的后半区域的2个操作数%r[N+rs1]和%r[N+rs2]作为输入值而执行算术运算(fmadd)。扩展运算器12e使用来自寄存器11的前半区域的2个操作数%r[rs1]和%r[rs2]和来自寄存器11的后半区域的单个操作数%r[N+rs3]作为输入值而执行算术运算(fmadd)。
图23的右半部分示出了进一步由未使用的位rd[6]=0和未使用的位rs3[6]=1指定的算术运算的4种组合。
在这种情况下,如果未使用的位(最高有效位)rs1[6]和rs2[6]都被设定为“0”,则寄存器编号分配的最高有效位b_rs1[6]、b_rs2[6]和b_rs3[6]都是“0”且寄存器编号分配的最高有效位e_rs1[6]、e_rs2[6]和e_rs3[6]分别是0、1和1。因而,如图23的左起上部第三个实例所示,普通运算器12b使用来自寄存器11的前半区域的3个操作数%r[rs1]、%r[rs2]和%r[rs3]作为输入值而执行算术运算(fmadd)。扩展运算器12e使用来自寄存器11的前半区域的单个操作数%r[rs1]和来自寄存器11的后半区域的2个操作数%r[N+rs2]和%r[N+rs3]作为输入值而执行算术运算(fmadd)。
如果未使用的位(最高有效位)rs1[6]和rs2[6]分别被设定为0和1,则寄存器编号分配的最高有效位b_rs1[6]、b_rs2[6]和b_rs3[6]分别是0、1和0且寄存器编号分配的最高有效位e_rs1[6]、e_rs2[6]和e_rs3[6]分别是0、0和1。因而,如图23的左起下部第三个实例所示,普通运算器12b使用来自寄存器11的前半区域的2个操作数%r[rs1]和%r[rs3]和来自寄存器11的后半区域的单个操作数%r[N+rs2]作为输入值而执行算术运算(fmadd)。扩展运算器12e使用来自寄存器11的前半区域的2个操作数%r[rs1]和%r[rs2]和来自寄存器11的后半区域的单个操作数%r[N+rs3]作为输入值而执行算术运算(fmadd)。
如果未使用的位(最高有效位)rs1[6]和rs2[6]分别被设定为1和0,则寄存器编号分配的最高有效位b_rs1[6]、b_rs2[6]和b_rs3[6]分别是1、0和0且寄存器编号分配的最高有效位e_rs1[6]、e_rs2[6]和e_rs3[6]分别是1、1和1。因而,如图23的左起上部第四个实例所示,普通运算器12b使用来自寄存器11的前半区域的2个操作数%r[rs2]和%r[rs3]和来自寄存器11的后半区域的单个操作数%r[N+rs1]作为输入值而执行算术运算(fmadd)。扩展运算器12e使用来自寄存器11的后半区域的3个操作数%r[N+rs1]、%r[N+rs2]和%r[N+rs3]作为输入值而执行算术运算(fmadd)。
如果未使用的位(最高有效位)rs1[6]和rs2[6]都被设定为1,则寄存器编号分配的最高有效位b_rs1[6]、b_rs2[6]和b_rs3[6]分别是1、1和0且寄存器编号分配的最高有效位e_rs1[6]、e_rs2[6]和e_rs3[6]分别是1、0和1。因而,如图23的左起下部第四个实例所示,普通运算器12b使用来自寄存器11的前半区域的单个操作数%r[rs3]和来自寄存器11的后半区域的2个操作数%r[N+rs1]和%r[N+rs2]作为输入值而执行算术运算(fmadd)。扩展运算器12e使用来自寄存器11的前半区域的单个操作数%r[rs2]和来自寄存器11的后半区域的2个操作数%r[N+rs1]和%r[N+rs3]作为输入值而执行算术运算(fmadd)。
图24示出了由指令种类码opcode[3:0]=0100和未使用的位rd[6]=1指定的算术运算的8种组合。在这种情况下,普通运算器12b执行算术运算fmadd而扩展运算器12e执行算术运算fnmsub。图24的左半部分示出了进一步由未使用的位rd[6]=1和未使用的位rs3[6]=1指定的算术运算的4种组合,而图24的右半部分示出了进一步由未使用的位rd[6]=1和未使用的位rs3[6]=1指定的算术运算的4种组合。在算术运算的所述组合中,未使用的位rd[6]=1将待由扩展运算器12e进行的算术运算切换成与普通运算器12b进行的算术运算不同的算术运算fnmsub,除此以外与图23所示的运算组合相同。因此,此处省略对图24的说明。
下面参照图25说明当进行将未使用的位投入使用的第三模式时图1所示的算术运算装置1的生成单元30的具体实例。图25所示的生成单元30包括4个逻辑积电路(与门)31、32、33和34、2个逻辑异或电路(异或门)35和36、以及反相电路(非门、反相器)31a、32a、34a和36a。本例的生成单元30可处理前面参照图3~5说明的指令种类码opcode[2]下的、非SIMD模式下的操作。也就是说,opcode[2]=1选择执行参照图19~24说明的第三模式下的操作,而opcode[2]=0选择执行参照图3~5说明的非SIMD模式下的操作。
与门31计算rd[6]与opcode[2]的相反值的逻辑积,并输出该逻辑积用作寄存器编号分配b_rd[6]。要输入到与门31中的opcode[2]的相反值由反相电路31a生成和输出。也就是说,当根据opcode[2]=0采用非SIMD模式时,将opcode[2]的相反值1输入到与门31中,并输出操作数rd[6]以用作b_rd[6]。另一方面,当依opcode[2]=1而采用第三模式时,将opcode[2]的相反值0输入到与门31中,并将b_rd[6]固定为0。
与门32计算rs3[6]与opcode[2]的相反值的逻辑积,并输出该逻辑积用作寄存器编号分配b_rs3[6]。要输入到与门32中的opcode[2]的相反值由反相电路32a生成。也就是说,当依opcode[2]=0而采用非SIMD模式时,将opcode[2]的相反值1输入到与门32中,并输出操作数rs6[6]用作b_rs3[6]。另一方面,当依opcode[2]=1而采用第三模式时,将opcode[2]的相反值0输入到与门31中,并将b_rs3[6]固定为0。
异或门36计算rs3[6]与rs1[6]的相反值的逻辑异或,并输出该逻辑异或。要输入到异或门36中的rs1[6]的相反值由反相电路36a计算。由异或门36计算出的逻辑异或值对应于上面参照表15、图21和22D详细说明的值~rs1[6]^rs3[6]。
与门33计算异或门36的输出与opcode[2]的逻辑积,并输出该逻辑积用作寄存器编号分配e_rs1[6]。也就是说,当依opcode[2]=0而采用非SIMD模式时,将e_rs1[6]固定为0。另一方面,当依opcode[2]=1而采用第三模式时,输出~rs1[6]^rs3[6]用作e_rs1[6](参见图22D)。
与门34计算rs2[6]的相反值与opcode[2]的逻辑积,并输出该逻辑积用作寄存器编号分配e_rs2[6]。rs2[6]的相反值~rs2[6]由反相电路34a计算。也就是说,当依opcode[2]=0而采用非SIMD模式时,将e_rs2[6]固定为0。另一方面,当依opcode[2]=1而采用第三模式时,输出~rs2[6]用作e_rs2[6](参见图22D)。
异或门35计算rd[6]与opcode[1]的逻辑异或,并输出该逻辑异或用作e_op[1]。图25所示的生成单元30无修改地原样输出opcode[1:0]用作算术码b_op[1:0],并无修改地原样输出opcode[0]用作算术码e_op[1:0]。由此,如表14所示,图25所示的生成单元30输出算术码b_op[1:0]和e_op[1:0]。
生成单元30输出固定值1以用作用于记录在寄存器11中的控制信号b_we,并进而输出opcode[2]以用作用于记录在寄存器11中的控制信号e_we以及寄存器编号分配e_rd[6]、e_rs3[6]。此外,生成单元30还向寄存器11输出rd[5:0]、rs1[6:0]、rs2[6:0]和rs3[5:0]以分别用作寄存器编号分配b_rd[5:0]、b_rs1[6:0]、b_rs2[6:0]和b_rs3[5:0],并输出rd[5:0]、rs1[5:0]、rs2[5:0]和rs3[5:0]以分别用作寄存器编号分配e_rd[5:0]、e_rs1[5:0]、e_rs2[5:0]和e_rs3[5:0]。
凭借以上构造,当依opcode[2]=1而选择将未使用的位投入使用的第三模式时,图25所示的生成单元30将来自指令码发布单元20的指令码opcode[1:0]、rd[6:0]、rs1[6:0]、rs2[6:0]和rs3[6:0]变换成上面参照表14、15、图21和22说明的指令集b_we、e_we、b_rd[6:0]、b_rs1[6:0]、b_rs2[6:0]、b_rs3[6:0]、e_rd[6:0]、e_rs1[6:0]、e_rs2[6:0]、e_rs3[6:0]、b_op[1:0]和e_op[1:0],并输出所得的指令集。如果依opcode[2]=0而选择非SIMD模式,则将来自指令码发布单元20的指令码变换成上面参照图4和5说明的指令集,并输出该指令集。
(8)第一实施例的效果
根据第一实施例的算术运算装置1和算术运算用的方法,指令码发布单元20(设定单元)和生成单元30的功能使得可以使用单个指令中的一个或多个未使用的位rd[6]、rs1[6]、rs2[6]和rs3[6]来指示与普通处理不同的扩展处理。由此,可由更少的指令种类码来实现例如SIMD浮点积和算术运算的算术运算的各种组合。因此,由2个指令可实现以往需要4个指令的复数矩阵乘积运算等的复杂算术运算,从而可以使吞吐量加倍。
此外,算术运算装置1彼此独立地输入供普通运算器12b用的算术运算种类和输入寄存器编号分配以及供扩展运算器12e用的算术运算种类和输入寄存器编号分配。因此,算术运算器12b和12e可以是使用不同操作数(寄存器值)的不同算术运算器。因而,算术运算装置1不仅可实现上述复数矩阵乘积运算,还可实现参照图12~15、23和24说明的算术运算模式的组合。
(9)其它
本发明不限于上述实施例,而是可不脱离本发明的精神而做出各种变形和修改。
例如,以上说明书假设第一实施例包括普通运算器和扩展运算器这2种算术运算器。然而本发明不限于此。本发明同样适用于具有3个或更多算术运算器的算术运算装置,结果得到与第一实施例同样的效果。
第一实施例使用因采用SIMD方案而得以未被使用的位,但本发明不限于此。通过在因采用各种方式而得以未被使用的位中的一个或多个未使用的位中设定上述扩展处理信息,可得到与第一实施例相同的结果。
进而,指令码发布单元20的功能(设定步骤)和生成单元30的功能(生成步骤)可通过使计算机(包括CPU、信息处理器和各种终端)执行预定的应用程序来实现。
该程序可按照在诸如软盘、CD(例如CD-ROM、CD-R、CD-RW)、DVD(例如DVD-ROM、DVD-RAM、DVD-R、DVD-RW、DVR+R、DVD+RW)、磁盘、光盘或磁光盘等计算机可读记录介质中进行存储这一形式来提供。另外,计算机可从记录介质读取程序并将所读取的程序发送至内部或外部存储器来进行存储以供使用。另外,可替选地,该程序可记录在诸如磁盘、光盘或磁光盘等存储器件(记录介质)中,并从该存储器件通过通信路径提供给计算机。
此处,计算机是硬件和操作系统(OS)的组合的概念,并且是指在OS的控制下工作的硬件。否则,如果应用程序独立于OS而操作硬件,则硬件对应于计算机。硬件至少包括CPU等微处理器以及读取记录在记录介质中的计算机程序的装置。这种程序包括使上述计算机实现作为设定单元20的功能(设定步骤)和作为生成单元30的功能(生成步骤)的程序代码。这些功能可部分地由OS而不是由应用程序来实现。
此处陈述的全部实例和条件性语言旨在用于教示目的,以协助读者理解本发明的原则和由本发明人为推进本领域所贡献的概念,并应理解为不限于这些具体陈述的实例和条件,而且本说明书中这些实例的组织也不牵涉到展示本发明的优劣。尽管已详细说明了本发明的实施例,但应当理解:在不脱离本发明的精神和范围的情况下,可对本发明作出各种修改、替换和变更。
Claims (14)
1.一种算术运算装置,包括:
寄存器(11),所述寄存器(11)存储要用于算术运算的操作数;
一个或多个算术运算器(12b、12e),所述算术运算器(12b、12e)响应于对要从所述寄存器(11)读取的操作数和要由所述算术运算器(12b、12e)进行的一个或多个所述算术运算进行指定并具有多个位的第一指令、使用由所述第一指令指定的操作数来进行由所述第一指令指定的算术运算;以及
设定单元(20),所述设定单元(20)在所述第一指令中未用于普通处理的一个或多个未使用的位中设定扩展指令信息,所述扩展指令信息指示所述寄存器(11)和所述算术运算器(12b、12e)中的至少一个根据所述第一指令执行与所述普通处理不同的扩展处理。
2.根据权利要求1所述的算术运算装置,进一步包括:
生成单元(30),所述生成单元(30)基于由所述设定单元(20)在所述未使用的位中设定的扩展指令信息和在所述第一指令中除所述未使用的位以外的位中设定的信息来生成指示所述寄存器(11)和所述算术运算器(12b、12e)中的至少一个执行所述扩展处理的扩展指令,并将用作所述第一指令的所述扩展指令输出至所述寄存器(11)和所述算术运算器(12b、12e)中的至少一个。
3.根据权利要求1所述的算术运算装置,其中由于采用如下单指令流多数据流(SIMD)方案:其中所述第一指令指示为所述寄存器(11)的多个区段中的每一区段分配一个的多个所述算术运算器(12b、12e)对多个数据流进行处理,因此当执行所述普通处理时所述未使用的位得以不被使用。
4.根据权利要求3所述的算术运算装置,其中:
所述多个算术运算器(12b、12e)各自是能够根据所述第一指令中包含的算术码来切换算术运算的多输入单输出积和运算器;并且
所述未使用的位各自是所述第一指令中包含的第一寄存器编号指定字段中的一个的最高有效位,所述第一寄存器编号指定字段对要输出至所述多个算术运算器(12b、12e)中的至少一个的所述寄存器(11)中的操作数进行指定。
5.根据权利要求3所述的算术运算装置,其中:
所述多个算术运算器(12b、12e)各自是能够根据所述第一指令中包含的算术码来切换算术运算的多输入单输出积和运算器;并且
所述未使用的位中的一个是所述第一指令中包含的第二寄存器编号指定字段的最高有效位,所述第二寄存器编号指定字段对所述寄存器(11)中的要记录由所述多个算术运算器(12b、12e)进行的算术运算的结果的位进行指定。
6.根据权利要求4所述的算术运算装置,其中所述扩展指令信息指示所述寄存器(11)将所述寄存器(11)中要输出至各所述算术运算器(12b、12e)的操作数中的至少一个从分配给各所述算术运算器(12b、12e)的区段中的操作数切换成除分配给各所述算术运算器(12b、12e)的区段以外的其余区段中的操作数。
7.根据权利要求4~6中任一项所述的算术运算装置,其中所述扩展指令信息指示各所述算术运算器(12b、12e)对要由各所述算术运算器(12b、12e)进行的算术运算进行切换。
8.一种在算术运算装置中进行算术运算的方法,所述算术运算装置包括:寄存器(11),所述寄存器(11)存储要用于算术运算的操作数;以及一个或多个算术运算器(12b、12e),所述算术运算器(12b、12e)使用从所述寄存器(11)读取的操作数来进行所述算术运算,所述方法包括:
在所述算术运算器(12b、12e)处响应于对要从所述寄存器(11)读取的操作数和要由所述算术运算器(12b、12e)进行的一个或多个所述算术运算进行指定并具有多个位的第一指令、使用由所述第一指令指定的操作数来进行由所述第一指令指定的算术运算;以及
在所述第一指令中未用于普通处理的一个或多个未使用的位中设定扩展指令信息,所述扩展指令信息指示所述寄存器(11)和所述算术运算器(12b、12e)中的至少一个根据所述第一指令执行与所述普通处理不同的扩展处理。
9.根据权利要求8所述的进行算术运算的方法,进一步包括:基于在所述设定步骤中在所述未使用的位中设定的所述扩展指令信息和在所述第一指令中除所述未使用的位以外的位中设定的信息来生成扩展指令,所述扩展指令指示所述寄存器(11)和所述算术运算器(12b、12e)中的至少一个执行所述扩展处理;以及
将用作所述第一指令的所述扩展指令输出至所述寄存器(11)和所述算术运算器(12b、12e)中的至少一个。
10.根据权利要求8所述的进行算术运算的方法,其中由于采用如下单指令流多数据流(SIMD)方案:其中所述第一指令指示为所述寄存器(11)的多个区段中的每一区段分配一个的多个所述算术运算器(12b、12e)对多个数据流进行处理,因此当执行所述普通处理时所述未使用的位得以不被使用。
11.根据权利要求10所述的进行算术运算的方法,其中:
所述多个算术运算器(12b、12e)各自是能够根据所述第一指令中包含的算术码来切换算术运算的多输入单输出积和运算器;并且
所述未使用的位各自是所述第一指令中包含的第一寄存器编号指定字段中的一个的最高有效位,所述第一寄存器编号指定字段对要输出至所述多个算术运算器(12b、12e)中的至少一个的所述寄存器(11)中的操作数进行指定。
12.根据权利要求10所述的进行算术运算的方法,其中:
所述多个算术运算器(12b、12e)各自是能够根据所述第一指令中包含的算术码来切换算术运算的多输入单输出积和运算器;并且
所述未使用的位中的一个是所述第一指令中包含的第二寄存器编号指定字段的最高有效位,所述第二寄存器编号指定字段对所述寄存器(11)中的要记录由所述多个算术运算器(12b、12e)进行的算术运算的结果的位进行指定。
13.根据权利要求11所述的进行算术运算的方法,其中所述扩展指令信息指示所述寄存器(11)将所述寄存器(11)中要输出至各所述算术运算器(12b、12e)的操作数中的至少一个从分配给各所述算术运算器(12b、12e)的区段中的操作数切换成除分配给各所述算术运算器(12b、12e)的区段以外的其余区段中的操作数。
14.根据权利要求11~13中任一项所述的进行算术运算的方法,其中所述扩展指令信息指示各所述多个算术运算器(12b、12e)对要由各所述算术运算器(12b、12e)进行的算术运算进行切换。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008073864 | 2008-03-21 | ||
JP2008073864A JP5481793B2 (ja) | 2008-03-21 | 2008-03-21 | 演算処理装置および同装置の制御方法 |
JP2008-073864 | 2008-03-21 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101539851A true CN101539851A (zh) | 2009-09-23 |
CN101539851B CN101539851B (zh) | 2013-01-09 |
Family
ID=40785594
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2009101294694A Active CN101539851B (zh) | 2008-03-21 | 2009-03-20 | 算术运算装置和进行算术运算的方法 |
Country Status (5)
Country | Link |
---|---|
US (1) | US9513914B2 (zh) |
EP (1) | EP2104034B1 (zh) |
JP (1) | JP5481793B2 (zh) |
KR (1) | KR101028428B1 (zh) |
CN (1) | CN101539851B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106484362A (zh) * | 2015-10-08 | 2017-03-08 | 上海兆芯集成电路有限公司 | 利用使用者指定二维定点算术运算的装置 |
CN112764810A (zh) * | 2021-01-20 | 2021-05-07 | 重庆邮电大学 | 一种应用于处理器的寄存器控制simd指令扩展方法 |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2011160353A (ja) * | 2010-02-03 | 2011-08-18 | Nec Access Technica Ltd | 通信システム、通信装置、及び通信方法 |
GB2486739B (en) * | 2010-12-24 | 2018-09-19 | Qualcomm Technologies Int Ltd | Instruction execution |
JP6307975B2 (ja) * | 2014-03-28 | 2018-04-11 | 富士通株式会社 | 演算処理装置及び演算処理装置の制御方法 |
CN107688466B (zh) * | 2016-08-05 | 2020-11-03 | 中科寒武纪科技股份有限公司 | 一种运算装置及其操作方法 |
CN111930426A (zh) * | 2020-08-14 | 2020-11-13 | 西安邮电大学 | 一种可重构计算的双模指令集架构及其应用方法 |
Family Cites Families (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4761755A (en) * | 1984-07-11 | 1988-08-02 | Prime Computer, Inc. | Data processing system and method having an improved arithmetic unit |
US4807124A (en) * | 1986-09-26 | 1989-02-21 | Performance Semiconductor Corporation | Register addressing system for efficient microroutine sharing and optimization |
EP0483967A3 (en) | 1990-10-29 | 1993-07-21 | Sun Microsystems, Inc. | Apparatus for increasing the number of registers available in a computer processor |
US6116768A (en) * | 1993-11-30 | 2000-09-12 | Texas Instruments Incorporated | Three input arithmetic logic unit with barrel rotator |
US5509129A (en) * | 1993-11-30 | 1996-04-16 | Guttag; Karl M. | Long instruction word controlling plural independent processor operations |
US6401190B1 (en) * | 1995-03-17 | 2002-06-04 | Hitachi, Ltd. | Parallel computing units having special registers storing large bit widths |
JP3720094B2 (ja) | 1995-10-18 | 2005-11-24 | シャープ株式会社 | データ駆動型情報処理装置 |
US5764959A (en) * | 1995-12-20 | 1998-06-09 | Intel Corporation | Adaptive 128-bit floating point load and store instructions for quad-precision compatibility |
DE69733444D1 (de) * | 1996-03-29 | 2005-07-14 | Matsushita Electric Ind Co Ltd | Datenprozessor mit variabler Anzahl von Pipelinestufen |
US6230259B1 (en) * | 1997-10-31 | 2001-05-08 | Advanced Micro Devices, Inc. | Transparent extended state save |
JP2002544587A (ja) | 1999-05-12 | 2002-12-24 | アナログ デバイセス インコーポレーテッド | デジタル信号プロセッサ計算コア |
US6625724B1 (en) * | 2000-03-28 | 2003-09-23 | Intel Corporation | Method and apparatus to support an expanded register set |
US6877084B1 (en) * | 2000-08-09 | 2005-04-05 | Advanced Micro Devices, Inc. | Central processing unit (CPU) accessing an extended register set in an extended register mode |
JP2003016051A (ja) | 2001-06-29 | 2003-01-17 | Nec Corp | 複素ベクトル演算プロセッサ |
US20040193838A1 (en) * | 2003-03-31 | 2004-09-30 | Patrick Devaney | Vector instructions composed from scalar instructions |
US20040193837A1 (en) * | 2003-03-31 | 2004-09-30 | Patrick Devaney | CPU datapaths and local memory that executes either vector or superscalar instructions |
JP4283131B2 (ja) * | 2004-02-12 | 2009-06-24 | パナソニック株式会社 | プロセッサ及びコンパイル方法 |
CN100552622C (zh) * | 2005-03-31 | 2009-10-21 | 松下电器产业株式会社 | 运算处理装置 |
US7421566B2 (en) * | 2005-08-12 | 2008-09-02 | International Business Machines Corporation | Implementing instruction set architectures with non-contiguous register file specifiers |
-
2008
- 2008-03-21 JP JP2008073864A patent/JP5481793B2/ja active Active
-
2009
- 2009-03-12 US US12/402,603 patent/US9513914B2/en active Active
- 2009-03-19 KR KR1020090023506A patent/KR101028428B1/ko active IP Right Grant
- 2009-03-20 CN CN2009101294694A patent/CN101539851B/zh active Active
- 2009-03-20 EP EP09155704.1A patent/EP2104034B1/en active Active
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106484362A (zh) * | 2015-10-08 | 2017-03-08 | 上海兆芯集成电路有限公司 | 利用使用者指定二维定点算术运算的装置 |
CN106484362B (zh) * | 2015-10-08 | 2020-06-12 | 上海兆芯集成电路有限公司 | 利用使用者指定二维定点算术运算的装置 |
CN112764810A (zh) * | 2021-01-20 | 2021-05-07 | 重庆邮电大学 | 一种应用于处理器的寄存器控制simd指令扩展方法 |
CN112764810B (zh) * | 2021-01-20 | 2022-09-20 | 重庆邮电大学 | 一种应用于处理器的寄存器控制simd指令扩展方法 |
Also Published As
Publication number | Publication date |
---|---|
US20090240926A1 (en) | 2009-09-24 |
CN101539851B (zh) | 2013-01-09 |
JP5481793B2 (ja) | 2014-04-23 |
EP2104034B1 (en) | 2015-06-10 |
KR101028428B1 (ko) | 2011-04-14 |
JP2009230375A (ja) | 2009-10-08 |
EP2104034A1 (en) | 2009-09-23 |
US9513914B2 (en) | 2016-12-06 |
KR20090101113A (ko) | 2009-09-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101539851B (zh) | 算术运算装置和进行算术运算的方法 | |
US10110233B2 (en) | Methods for specifying processor architectures for programmable integrated circuits | |
CN100447738C (zh) | 含有多级寄存器文件的数字数据处理设备 | |
CN100437467C (zh) | 部分逐位置换 | |
JPH1027102A (ja) | 演算処理装置 | |
CN107851013B (zh) | 数据处理装置和方法 | |
JPS5862746A (ja) | 割算装置 | |
JP4901754B2 (ja) | 単一命令複数データ実行エンジンのフラグレジスタのための評価ユニット | |
JP3985797B2 (ja) | プロセッサ | |
TWI622992B (zh) | 記憶體裝置中之記憶體存取控制 | |
JP2006018413A (ja) | プロセッサおよびパイプライン再構成制御方法 | |
Gutub et al. | Efficient scalable VLSI architecture for Montgomery inversion in GF (p) | |
CN101963897B (zh) | 用于双数据路径处理的装置和方法 | |
US20020013796A1 (en) | Method of processing data | |
JP3935678B2 (ja) | Simd積和演算方法、積和演算回路、および、半導体集積回路装置 | |
JP2021108104A (ja) | 部分的読み取り/書き込みが可能な再構成可能なシストリックアレイのシステム及び方法 | |
JPH06175583A (ja) | べき乗剰余演算回路 | |
JP2008083901A (ja) | 資金移動処理システム及び資金移動処理方法 | |
CN113553191B (zh) | 用于联邦学习和隐私计算的异构处理系统 | |
KR20120052751A (ko) | 명령어 오퍼랜드 변경 장치 및 방법 | |
TW201928656A (zh) | 向量帶進位加法指令 | |
JP5145659B2 (ja) | ベクトルリネーミング方式およびベクトル型計算機 | |
Hasan et al. | An approach towards scalability for reconfigurable product flow line through unbalancing | |
CN105094746A (zh) | 一种椭圆曲线密码的点加/点倍的实现方法 | |
US7433912B1 (en) | Multiplier structure supporting different precision multiplication operations |
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 |