CN117370721A - 具有矢量归约方法与元素归约方法的矢量处理器 - Google Patents
具有矢量归约方法与元素归约方法的矢量处理器 Download PDFInfo
- Publication number
- CN117370721A CN117370721A CN202210801660.4A CN202210801660A CN117370721A CN 117370721 A CN117370721 A CN 117370721A CN 202210801660 A CN202210801660 A CN 202210801660A CN 117370721 A CN117370721 A CN 117370721A
- Authority
- CN
- China
- Prior art keywords
- reduction
- operand
- vector
- channel
- result
- 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.)
- Pending
Links
- 239000013598 vector Substances 0.000 title claims abstract description 229
- 238000000034 method Methods 0.000 title claims abstract description 53
- 230000005540 biological transmission Effects 0.000 claims description 2
- KEBHLNDPKPIPLI-UHFFFAOYSA-N hydron;2-(3h-inden-4-yloxymethyl)morpholine;chloride Chemical compound Cl.C=1C=CC=2C=CCC=2C=1OCC1CNCCO1 KEBHLNDPKPIPLI-UHFFFAOYSA-N 0.000 description 49
- 101000912503 Homo sapiens Tyrosine-protein kinase Fgr Proteins 0.000 description 41
- 102100026150 Tyrosine-protein kinase Fgr Human genes 0.000 description 41
- 238000010586 diagram Methods 0.000 description 32
- BUGBHKTXTAQXES-UHFFFAOYSA-N Selenium Chemical compound [Se] BUGBHKTXTAQXES-UHFFFAOYSA-N 0.000 description 22
- 238000009825 accumulation Methods 0.000 description 22
- VVNRQZDDMYBBJY-UHFFFAOYSA-M sodium 1-[(1-sulfonaphthalen-2-yl)diazenyl]naphthalen-2-olate Chemical compound [Na+].C1=CC=CC2=C(S([O-])(=O)=O)C(N=NC3=C4C=CC=CC4=CC=C3O)=CC=C21 VVNRQZDDMYBBJY-UHFFFAOYSA-M 0.000 description 3
- 230000000694 effects Effects 0.000 description 2
- 230000014759 maintenance of location Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000010187 selection method Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Classifications
-
- 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
- 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
- G06F9/30105—Register structure
- G06F9/30109—Register structure having multiple operands in a single register
-
- 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/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- 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
- G06F15/8053—Vector processors
-
- 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/76—Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data
-
- 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/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30029—Logical and Boolean instructions, e.g. XOR, NOT
-
- 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/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
- G06F9/30038—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
-
- 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/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/322—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
- G06F9/325—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for loops, e.g. loop detection or loop counter
-
- 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/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/345—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
-
- 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
- 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]
- G06F9/38873—Iterative single instructions for multiple data lanes [SIMD]
- G06F9/38875—Iterative single instructions for multiple data lanes [SIMD] for adaptable or variable architectural vector length
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- Data Mining & Analysis (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Complex Calculations (AREA)
- Image Processing (AREA)
- Advance Control (AREA)
Abstract
本发明提供一种具有矢量元素方法与元素归约方法的矢量处理器,包括矢量寄存器模块、第一通道与第二通道。在矢量归约方法中,第一通道依据第一状态参数加载第一操作数与第二操作数的第一部分,并对第一操作数与第二操作数的第一部分进行第一归约运算以产生第一归约结果的第一部分。第二通道依据第一状态参数加载第二操作数的第二部分,并将第二操作数的第二部分作为第一归约结果的第二部分。第一通道或第二通道其中一者对第一归约结果的第一部分与第二部分进行第二归约运算以产生第二归约结果。本发明还提供元素归约方法。
Description
技术领域
本发明涉及一种矢量处理器,尤其涉及一种具有矢量归约方法与元素归约方法的矢量处理器。
背景技术
单指令多数据(Single Instruction Multiple Data,SIMD)广泛用于矢量处理器(Vector Processor)的数据并列处理。一般来说,矢量处理器可使用矢量归约(VectorReduction)与元素归约(Element Reduction)来将矢量数据(vector data)归约成纯量值。然而,先前技术在以全流水线(Fully Pipeline)的方式实现矢量归约与元素归约时,由于计算逻辑加倍以及伴随的电联机增加,将导致电路面积膨胀、功率消耗增加、信号上的拥塞(congestion)问题和时序(timing)等问题。并且,在当矢量处理器用于浮点归约运算、乘积和(Dot Product)、较大的矢量寄存器长度(VLEN)或数据路径长度(DLEN)例如是512、1024或2048位(bit)时,上述问题将更为恶化。
发明内容
本发明提供一种矢量处理器及其矢量与元素归约方法,其可灵活调整叠代次数,以基于优化硬件性能指针或软件性能指针来。
本发明的实施例提供一种矢量处理器。矢量处理器包括矢量寄存器模块(vectorregister file)、第一通道(lane)与第二通道。第一通道耦接至矢量寄存器模块以依据第一状态参数加载第一操作数(operand)与第二操作数的第一部分,第一通道对第一操作数与第二操作数的第一部分进行第一归约运算以产生第一归约结果的第一部分。第二通道耦接至矢量寄存器模块以依据第一状态参数加载第二操作数的第二部分,第二通道将第二操作数的第二部分作为第一归约结果的第二部分。第一通道与第二通道其中一者依据第二状态参数对第一归约结果的第一部分与第二部分进行第二归约运算以产生第二归约结果。
本发明的实施例提供一种矢量归约方法。矢量归约方法包括:依据第一状态参数加载第一操作数与第二操作数的第一部分,并对第一操作数与第二操作数的第一部分进行第一归约运算,以产生第一归约结果的第一部分。依据第一状态参数加载第二操作数的第二部分,并将第二操作数的第二部分作为第一归约结果的第二部分。依据第二状态参数对第一归约结果的第一部分与第二部分进行第二归约运算以产生第二归约结果。
本发明的实施例提供一种矢量处理器。矢量处理器包括矢量寄存器模块与第一通道。第一通道耦接至矢量寄存器模块以依据第一状态参数加载第一操作数与第二操作数并对第一操作数与第二操作数进行第一归约运算以产生第一归约结果,以及据第二状态参数对第一归约结果的第一部分与第二部分进行第二归约运算以产生第二归约结果。
本发明的实施例提供一种元素归约方法。元素归约方法包括:依据第一状态参数加载第一操作数与第二操作数并对第一操作数与第二操作数进行第一归约运算以产生第一归约结果,以及依据第二状态参数对第一归约结果的第一部分与第二部分进行第二归约运算以产生第二归约结果。
基于上述,在本发明一些实施例中,矢量处理器可依据状态参数而以同一电路执行归约运算中的不同步骤,从而节省电路面积,提高归约运算效能。另一方面,矢量处理器可以同一电路结构进行矢量归约运算与元素归约运算,以进一步节省电路面积。
附图说明
图1是依据本发明一实施例所示出的矢量处理器的方块图;
图2是依据本发明一实施例所示出的矢量归约操作的有限状态机的示意图;
图3是依据本发明一实施例所示出的算术逻辑运算单元的示意图;
图4是依据本发明一实施例所示出的矢量归约方法的步骤S210的示意图;
图5A是依据本发明一实施例所示出的矢量归约方法的步骤S220的示意图;
图5B是依据本发明一实施例所示出的矢量归约方法的步骤S220的示意图;
图6是依据本发明一实施例所示出的矢量归约方法的步骤S230中正常归约的示意图;
图7是依据本发明一实施例所示出的矢量归约方法的步骤S230中快速归约的示意图;
图8是依据本发明一实施例所示出的元素归约操作的有限状态机的示意图;
图9是依据本发明一实施例所示出的算术逻辑运算单元的示意图;
图10A是依据本发明一实施例所示出的元素归约方法的步骤S810的示意图;
图10B是依据本发明另一实施例所示出的元素归约方法的步骤S810的示意图;
图11是依据本发明一实施例所示出的元素归约方法的步骤S820中正常归约的示意图;
图12是依据本发明一实施例所示出的元素归约方法的步骤S820中快速归约的示意图;
图13是依据本发明一实施例所示出的整数和(integer sum)矢量归约方法的步骤S230中快速归约的示意图,及整数和元素归约方法的步骤S820中快速归约的示意图;
图14是依据本发明一实施例所示出的矢量归约操作的流程图;
图15是依据本发明一实施例所示出的元素归约操作的流程图。
附图标记说明
10:矢量处理器
110:矢量寄存器模块
111、112、113、114:矢量寄存器库
121、122、123、124:通道
130:通道控制器
140:指令读取/解码/发布单元
150:矢量加载存储单元
160:高速缓存
201:空闲/完成状态
202:初始状态
203:合并状态
204:通道归约状态
205:单通道归约状态
310、910:快速归约电路
801:空闲/完成状态
802:初始状态
803:子元素归约状态
ACC[L0]、ACC[L1]、ACC[L2]、ACC[L3]、VN[L0]、VN[L1]、VN[L2]、VN[L3]:寄存器
ALU:算数逻辑单元
B、HW’、HW、W’、DW’:数据
B7、B6、B5、B4、B3、B2、B1、B0、HW3、HW2、HW1、HW0、W1、W0、DW0、HW3’、HW2’、HW1’、HW0’、W1’、W0’、HW3_0、HW3_1、HW2_0、HW2_1、HW1_0、HW1_1、HW0_0、HW0_1、W1_0、W1_1、W0_0、W0_1、W1_0’、W1_1’、W0_0’、W0_1’、DW_0、DW_1、DW_0’、DW_1’:字节
ELEN:元素长度
EVEN:偶数部
FOUT:快速归约输出
INAV:非作用值
LCI[L*]:通道输入
LCO[E*]、LCO[L0]、LCO[L1]、LCO[L2]、LCO[L3]、LCO[L*]’、LCO[*L]’、LCO[L2]’、LCO[L3]’LCO[L0]’、LCO_L0、LCO[E*][SE*]、LCO[EN][SE0]、LCO[EN][SE1]、LCO[EN][SE2]、LCO[EN][SE3]:通道输出
LMUL’:单位矢量长度乘数
MUX1、MUX2、MUX3、MUX4、MUX5、MUX6、MUX7、MUX8、MUX9、MUX10、MUX11、MUX12、MUX13:多任务器
NOUT:正常归约输出
ODD:奇数部
OP:运算符
OUT:归约输出
RED:控制信号
S1、S2、S3、S4、S5:非作用值信号
S210、S220、S230、S810、S820、S1410、S1420、S1430、S1510、S1520:步骤
SELEN:子元素长度
SIMD_ADDER:单指令多数据加法器
SIMD_SIZE、SIZE:运算宽度
SRC1、SRC2:输入源
STATE:状态参数
VM[*]:屏蔽位
VS1、VS2:操作数
VS1[E0]、VS1[E*]、VS2[E*]、adjVS1[E*]、adjVS2[E*]:操作数元素
VS1[E*][SE0]、VS2[E*][SE*]、VS2[E*][SE0]、VS2[E*][SE1]、VS2[E*][SE2]、VS2[E*][SE3]、:操作数子元素
8’b0、16’b0、32’b0:补零
4to2CSA1、4to2CSA2、4to2CSA3:单指令多数据四对二进制保留加法压缩器
具体实施方式
现将详细地参考本发明的示范性实施例,示范性实施例的实例说明于附图中。只要有可能,相同元件符号在附图和描述中用来表示相同或相似部分。
在本案说明书全文(包括权利要求)中所使用的“耦接(或连接)”一词可指任何直接或间接的连接手段。举例而言,若文中描述第一装置耦接(或连接)于第二装置,则应该被解释成该第一装置可以直接连接于该第二装置,或者该第一装置可以通过其他装置或某种连接手段而间接地连接至该第二装置。另外,凡可能之处,在附图及实施方式中使用相同标号的组件/构件/步骤代表相同或类似部分。不同实施例中使用相同标号或使用相同用语的组件/构件/步骤可以相互参照相关说明。
图1是依据本发明一实施例所示出的矢量处理器的方块图。请参照图1,矢量处理器10可包括矢量寄存器模块(vector register file)110、通道(lane)121-通道124、通道控制器(lane controller)130、指令读取/解码/发布单元(instruction fetching/decoding/issuing unit)140、矢量加载存储单元(vector load store unit)150与高速缓存(cache memory)160。矢量寄存器模块110可包括矢量寄存器库(vector register bank)111、矢量寄存器库112、矢量寄存器库113与矢量寄存器库114,用以暂存输入矢量数据、矢量运算的中间结果、或输出矢量数据,以避免频繁存取高速缓存160或位于矢量处理器10外部的内存(未示出)。每个矢量寄存器库的矢量寄存器库宽度例如是64位(bit)。每个矢量寄存器库可包括多个矢量寄存器,例如是32个矢量寄存器。通道121-通道124耦接至矢量寄存器模块110,通道121-通道124中的每一个包括算数逻辑单元ALU。每个矢量寄存器库耦接至对应的通道,例如矢量寄存器库111提供数据至通道121。在此实施例中,通道121-通道124中的算数逻辑单元ALU可以是单指令多数据算数逻辑单元(Single Instruction MultipleData ALU,SIMD_ALU)。每个通道的运算量相同于矢量寄存器库宽度,例如是64位。在SIMD_ALU中,每个通道内的元素数量视寄存器库宽度与元素长度ELEN而定。举例来说,若元素长度ELEN为8位,则每个通道具有64/8=8个元素。若元素长度ELEN为16位,则每个通道具有64/16=4个元素。另一方面,在SIMD_ALU中,每个元素的运算结果不会影响(进位)到其他元素。通道控制器130耦接至通道121-通道124,通道控制器130可控制通道121-通道124的数据传输。必须说明的是,图1中关于矢量寄存器库、通道、以及矢量寄存器的数量仅为示例,不限于此。指令读取/解码/发布单元140用以从高速缓存160中获取指令。指令读取/解码/发布单元140对读取的指令进行解码,并且发送命令至通道121-通道124以及矢量加载存储单元150。基于解码结果,通道121至124以及矢量加载存储单元150可以执行相关于经读取指令的相关功能操作。在此实施例中,命令包括至少一个微操作(micro-operation),通道121-通道124中的算数逻辑单元ALU可依据微操作执行矢量归约操作与元素归约操作。矢量加载存储单元150用以读取来自高速缓存160的矢量,并依据命令加载矢量至矢量寄存器模块110。高速缓存160用以存放指令的程序代码(program codes)以及执行指令所需的数据。
图2是依据本发明一实施例所示出的矢量归约操作的有限状态机(finite statemachine,FSM)的示意图。请参照图2,矢量归约操作的有限状态机可包括空闲/完成状态(Idle/Complete State)201、初始状态(Initial State)202、合并状态(Merge State)203、通道归约状态(Lanes Reduction State)204以及单通道归约状态(Single LaneReduction State)205,且每个状态对应不同的状态参数STATE。其中矢量归约操作至少包括步骤S210与步骤S220,步骤S210至少包括初始状态202,且步骤S220包括通道归约状态204。步骤S210依据单位矢量长度乘数LMUL’的值还可以包括合并状态203,且矢量归约操作依据元素长度ELEN更可包括步骤S230,步骤230包括单通道归约状态205。图1的算数逻辑单元ALU、通道控制器130可依据各种状态参数STATE在矢量归约操作中执行不同状态的各种动作。关于上述状态的实施细节,具体于后文详述。
图3是依据本发明一实施例所示出的算术逻辑运算单元的示意图。请参照图1与图3,用于矢量归约操作的通道121-通道124中的每一个通道可至少包括多任务器MUX1(第一多任务器)、多任务器MUX2(第二多任务器)、多任务器MUX3(第三多任务器)、多任务器MUX4(第四多任务器)、算数逻辑单元ALU、快速归约电路310与多任务器MUX5(第五多任务器)。
图4是依据本发明一实施例所示出的矢量归约方法的步骤S210的示意图。请参照图2、图3与图4,于空闲/完成状态201中,当指令读取/解码/发布单元140发布第一个微操作后,矢量处理器10进入步骤S210以进行矢量归约操作(第一归约运算)。步骤S210至少包括初始状态202。在初始状态202中,通道121可依据运算符(operator)OP来从非作用值信号S1至非作用值信号S5中选择一个非作用值INAV,并输出非作用值INAV至多任务器MUX2。关于取决于运算符OP的非作用值INAV的选择,请参照表一。例如在图3中,当输入源SRC1(第一输入源)与输入源SRC2(第二输入源)的算术逻辑操作为SUM时,多任务器MUX1选择信号S5而非作用值INAV的值为0(即S5的值)。必须说明的是,图3仅为一示例,本发明还可以是其他算数操作以及逻辑操作,不限于此。
表一
OP(运算符) | INAV(非作用值) |
AND | S1=All 1s |
OR/XOR | S2=All 0s |
MIN | S3=MAX |
MAX | S4=MIN |
SUM | S5=0 |
在此实施例中,从矢量寄存器模块110读出的操作数(operand)VS1[E*]中的操作数VS1[E0](元素0)需要进行归约运算,而操作数VS1[E*]中除操作数VS1[E0]以外的部分被屏蔽(不需要进行归约运算,即非作用元素)而以非作用值INAV来填充,从而产生操作数adjVS1[E*](经调整第一操作数)。其中VS1[E*]代表操作数VS1中的所有元素,操作数VS1[E0]代表VS1的第0个元素。必须说明的是,以非作用值INAV填充的元素,其运算为无效运算,因此实际上虽然仍进行归约运算,但其结果将等效于不进行归约运算。
多个多任务器MUX2可基于屏蔽位(mask-bit)VM[*]选择从矢量寄存器模块110读出的操作数VS2[E*]中不需要被屏蔽(需要进行归约运算)的元素,并使操作数VS2[E*]中需要被屏蔽(不需要进行归约运算,即非作用元素)的元素以非作用值INAV替代,从而产生操作数adjVS2[E*](经调整第二操作数)。其中屏蔽位VM[*]代表所有屏蔽位。
接着,多任务器MUX3可依据初始状态202所对应的状态参数STATE选择操作数adjVS1[E*]以作为输入源SRC1,多任务器MUX4可依据初始状态202所对应的状态参数STATE选择操作数adjVS2[E*]以作为输入源SRC2。算数逻辑单元ALU耦接至多任务器MUX3的输出端与多任务器MUX4的输出端,算数逻辑单元ALU对输入源SRC1与输入源SRC2进行算数逻辑操作,以产生通道输出LCO[E*]。
关于初始状态202中算数逻辑单元ALU对输入源SRC1与输入源SRC2所进行的算数逻辑操作,请参照图4,通道121-通道124中的算数逻辑单元ALU可分别加载输出源SRC1至寄存器ACC[L0]-寄存器ACC[L3],并载入输出源SRC2至寄存器VN[L0]-寄存器VN[L3]。其中寄存器ACC[L0]代表第0个通道中的寄存器,以此类推。寄存器ACC[L0]-寄存器ACC[L3]与寄存器VN[L0]-寄存器VN[L3]分别配置在通道121-124中。其中寄存器VN[L0]代表第0个通道中的寄存器,以此类推。其中,图4中的操作数adjVS1[E*]中的操作数adjVS1[L0](未示出)被载入至寄存器ACC[L0],操作数adjVS1[E*]的其他部分被分别加载至寄存器ACC[L1]至寄存器ACC[L3]。其中,操作数adjVS1[L0]代表操作数adjVS1在第0通道的部分。接着,通道121的算数逻辑单元ALU对寄存器ACC[L0]与寄存器VN[L0]中的数据进行累加动作,以产生通道121的通道输出LCO[L0]。通道122的算数逻辑单元ALU对寄存器ACC[L1]与寄存器VN[L1]中的数据进行累加动作,以产生通道122的通道输出LCO[L1]。通道123的算数逻辑单元ALU对寄存器ACC[L2]与寄存器VN[L2]中的数据进行累加动作,以产生通道123的通道输出LCO[L2]。通道124的算数逻辑单元ALU对寄存器ACC[L3]与寄存器VN[L3]中的数据进行累加动作,以产生通道124的通道输出LCO[L3]。其中通道输出LCO[L0]代表第0个通道的通道输出,以此类推。
举例来说,在初始状态202中,矢量处理器10可加载操作数adjVS1[L0]至寄存器ACC[L0]且载入操作数adjVS2[L0](未示出)至VN[L0],并将操作数adjVS1[L0]与操作数adjVS2[L0]的累加结果作为通道输出LCO[L0]。矢量处理器10将非作用值INAV经由操作数adjVS1[L1]载入至寄存器ACC[L1]且载入操作数adjVS2[L1]至寄存器VN[L1],并将非作用值INAV与操作数adjVS2[L1]的累加结果(即操作数adjVS2[L1])作为通道输出LCO[L1]。矢量处理器10将非作用值INAV经由操作数adjVS1[L2]载入至寄存器ACC[L2]且载入操作数adjVS2[L2]至寄存器VN[L2],并将非作用值INAV与操作数adjVS2[L2]的累加结果作为通道输出LCO[L2]。矢量处理器10将非作用值INAV经由操作数adjVS1[L3]载入至寄存器ACC[L3]且载入操作数adjVS2[L3]至寄存器VN[L3],并将非作用值INAV与操作数adjVS2[L3]的累加结果作为通道输出LCO[L3]。在一实施例中,通道输出LCO[L0]-通道输出LCO[L3]例如分别是64位,共256位。
回到图2,在初始状态202后,矢量处理器10依据单位矢量长度乘数LMUL’决定是否进行叠代运算。当单位矢量长度乘数LMUL’大于1时,状态参数STATE变为合并状态203且通道121-通道124进行叠代(iteration)运算。当单位矢量长度乘数LMUL’等于1时,状态参数STATE变为通道归约状态204且通道121-通道124不进行叠代运算。单位矢量长度乘数LMUL’为指令读取/解码/发布单元140在每个命令中发布待发送的微操作数量,单位矢量长度乘数LMUL’如(1)式所示。
其中LMUL为矢量长度乘数,当矢量长度乘数LMUL为1时,一个命令可运算一个矢量寄存器,当矢量长度乘数LMUL大于1时,一个命令可运算LMUL个矢量寄存器。矢量长度乘数LMUL即把多个矢量寄存器组成一个矢量寄存器组。举例来说,若在矢量归约操作中矢量长度乘数LMUL为4,操作数adjVS2[E*]由4个矢量寄存器组成(即一个矢量寄存器组)。VLEN为矢量寄存器长度,即矢量寄存器模块110中每个矢量寄存器的宽度,例如是256位。矢量寄存器长度VLEN相等于矢量寄存器库111、矢量寄存器库112、矢量寄存器库113与矢量寄存器库114的宽度总合。DLEN为数据路径长度,即进行一次运算的数据宽度,例如是256位。在本发明的示例中,矢量寄存器长度VLEN相等于数据路径长度DLEN,但矢量寄存器长度VLEN也可以不相等于数据路径长度DLEN,不限于此。
具体而言,请参照图3与图4,多任务器MUX3可依据初始状态202所对应的状态参数STATE而选择操作数adjVS1[E*]作为输入源SRC1。当单位矢量长度乘数LMUL’大于1时,多任务器MUX3可依据合并状态203所对应的状态参数STATE而选择通道输出LCO[E*]作为输入源SRC1。
请参照图2、图3与图4,于合并状态203中,通道121依据合并状态203所对应的状态参数STATE针对通道输出LCO[L0](第一归约运算的结果)进行叠代运算。举例来说,在初始状态202中,加载操作数adjVS1[L0]至寄存器ACC[L0]且载入操作数adjVS2[L0]至寄存器VN[L0],并将操作数adjVS1[L0]与操作数adjVS2[L0]的累加结果作为通道输出LCO[L0]。接着,在合并状态203中,通道121加载操作数adj(VS2+1)[L0](未示出)至寄存器VN[L0],并通过多任务器MUX3将通道输出LCO[L0]通过输入源SRC1加载至寄存器ACC[L0],并将“adjVS1[L0]+adjVS2[L0]”与操作数adj(VS2+1)[L0]的累加结果作为新的通道输出LCO[L0]。其中,操作数adj(VS2+1)[L0]代表操作数(VS2+1)的第0通道部分,操作数(VS2+1)是操作数VS2的矢量寄存器组的第二个矢量寄存器。在此实施例中,通道121-通道124可依据单位矢量长度乘数LMUL’分别进行多次叠代运算,例如通道121将操作数adjVS1[L0]、adjVS2[L0]-adj(VS2+7)[L0]的累加结果作为经过多次叠代运算的通道输出LCO[L0],通道122将非作用值INAV与adjVS2[L1]-adj(VS2+7)[L1]的累加结果作为经过多次叠代运算的通道输出LCO[L1],通道123将非作用值INAV与adjVS2[L2]-adj(VS2+7)[L2]的累加结果作为经过多次叠代运算的通道输出LCO[L2],通道124将非作用值INAV与adjVS2[L3]-adj(VS2+7)[L3]的累加结果作为经过多次叠代运算的通道输出LCO[L3]。其中,操作数adj(VS2+7)[L0]代表操作数(VS2+7)的第0通道部分,操作数(VS2+7)是操作数VS2的矢量寄存器组的第8个矢量寄存器。在一实施例中,通道输出LCO[L0]-通道输出LCO[L3]例如分别是64位,共256位。
图5A是依据本发明一实施例所示出的矢量归约方法的步骤S220的示意图。图5B是依据本发明一实施例所示出的矢量归约方法的步骤S220的示意图。请参照图2、图3、图5A与图5B,于步骤S220中的通道归约状态204中,通道121-通道124可依据通道归约状态204所对应的状态参数STATE对通道输出LCO[L0]-通道输出LCO[L3]进行归约运算(第二归约运算),以产生经归约运算的通道输出LCO_L0(第二归约结果)。请参照图3与图5A,通道控制器130可接收多个通道的通道输出LCO[L*],并将通道输出LCO[L*]作为通道输入LCI[L*]提供至其他通道。具体而言,多任务器MUX3可依据通道归约状态204所对应的状态参数STATE选择通道输出LCO[L*]作为输入源SRC1。多任务器MUX4可依据通道归约状态204所对应的状态参数STATE选择通道输入LCI[L*]作为输入源SRC2。算数逻辑单元ALU可将分别隶属于两个不同通道的通道输出LCO[L*]与通道输入LCI[L*]累加,以归约为单一个通道输出LCO[L*]’。该归约运算可经叠代而将多个通道输出LCO[L*]归约为單一个经归约的通道输出LCO[L*],例如将四个通道输出LCO[L*]归约为经归约的单个通道输出LCO_L0。
举例而言,在图5A中,矢量处理器10将通道输出LCO[L3]与通道输出LCO[L2]累加为经归约的通道输出LCO[L3]’,将通道输出LCO[L1]与通道输出LCO[L0]累加为经归约的通道输出LCO[L0]’,并将经归约的通道输出LCO[L3]’与经归约的通道输出LCO[L0]’再次累加为经归约的单个通道输出LCO_L0。在图5B中,矢量处理器10将通道输出LCO[L3]与通道输出LCO[L2]累加为经归约的通道输出LCO[L2]’,将通道输出LCO[L1]与通道输出LCO[L0]累加为经归约的通道输出LCO[L0]’,并将经归约的通道输出LCO[L2]’与经归约的通道输出LCO[L0]’再次累加为经归约的单个通道输出LCO_L0。值得一提的是,图5A与图5B的归约组合仅为示例,在其他实施例中,也可以是其他归约组合,例如先将通道输出LCO[L3]与通道输出LCO[L1]累加,将通道输出LCO[L2]与通道输出LCO[L0]累加,再将两个累加结果再次累加,或者其他数量的通道归约,本发明不限于此。在一实施例中,经归约的单个通道输出LCO_L0(第二归约结果)的宽度(例如是64位),相等于通道输出LCO[L0]、通道输出LCO[L1]、通道输出LCO[L2]、通道输出LCO[L3]的每一者的宽度(第一归约结果)。
在步骤S220中的通道归约状态204完成后,矢量处理器10可判断元素长度ELEN是否小于单个通道的长度,并依据判断结果决定是否对经归约的单个通道输出LCO_L0进行正常归约操作或快速归约操作其中一者。当元素长度ELEN小于单个通道的长度时,状态参数STATE变为步骤S230中的单通道归约状态205以对经归约的单个通道输出LCO_L0进行正常归约操作或快速归约操作其中一者。当元素长度ELEN等于单个通道的长度时,狀態參數STATE變為空闲/完成状态201而不对经归约的单个通道输出LCO_L0进行任何归约操作,取经归约的单个通道输出LCO_L0的值作为矢量归约操作的结果。
在一实施例中,单个通道的长度例如是64位。当元素长度ELEN小于64位时,矢量处理器10进入步骤S230中的单通道归约状态205而进行正常归约操作或快速归约操作其中一者。当元素长度ELEN等于64位时,矢量处理器10进入空闲/完成状态201而不进行正常归约操作或快速归约操作的任何一者。值得一提的是,在步骤S230中的单通道归约状态205中,依据设计需求,矢量处理器10可选择通过通道121中的多任务器MUX3、多任务器MUX4、多任务器MUX5与算术逻辑单元ALU进行正常归约操作,或通过通道121中的多任务器MUX3、多任务器MUX4、多任务器MUX5、算术逻辑单元ALU与快速归约电路310进行快速归约操作。正常归约操作与快速归约操作的选择可通过针对多任务器MUX5的运算符OP来实现。举例来说,当运算符OP为算数逻辑归约(arithmetic logic reduction)例如是求和归约(SUMreduction)时,选择正常归约操作;当运算符OP为位运算逻辑归约(bitwise logicreduction)例如是或运算归约(OR reduction)时,选择快速归约操作,但本发明不限于此。
图6是依据本发明一实施例所示出的矢量归约方法的步骤S230中正常归约的示意图。请参照图2、图3与图6,于步骤S230中的单通道归约状态205中,矢量处理器10可进行正常归约操作或快速归约操作其中一者。在正常归约操作中,矢量处理器10依据元素长度ELEN决定叠代次数,以对经归约的单个通道输出LCO_L0(第二归约结果)中的多个偶数部与多个奇数部进行算数逻辑运算,以产生正常归约输出NOUT(正常归约结果)。在一实施例中,当元素长度ELEN为8位时,可将通道输出LCO_L0(第二归约结果)分为字节B7-B0(即Byte7-Byte0)等8个字节(byte),字节B7-字节B0的每一个包括8位,其中字节B7、B5、B3、B1属于奇数部ODD,而字节B6、B4、B2、B0属于偶数部EVEN。当元素长度ELEN为16位时,可将通道输出LCO_L0分为字节HW3-字节HW0(即Half-word3–Half-word0)等4个字节,字节HW3-字节HW0的每一个包括16位,其中字节HW3、HW1属于奇数部ODD,而字节HW2、HW0属于偶数部EVEN。当元素长度ELEN为32位时,可将通道输出LCO_L0分为字节W1-字节W0(即Word1-Word0)等2个字节,字节W1与字节W0中的每一个包括32位,其中字节W1属于奇数部ODD,而字节W0属于偶数部EVEN。
当元素长度ELEN为8位时,矢量处理器10将通道输出LCO_L0(第二归约结果)中的字节B6、B4、B2、B0作为输入源SRC1,将通道输出LCO_L0中的字节B7、B5、B3、B1作为输入源SRC2。具体而言,多任务器MUX3可以基于正常归约操作所对应的状态参数STATE选择通道输出LCO_L0的偶数部EVEN作为输入源SRC1,多任务器MUX4可以基于正常归约操作所对应的状态参数STATE选择通道输出LCO_L0的奇数部ODD作为输入源SRC2。在一实施例中,算数逻辑单元ALU可在输入源SRC1与输入源SRC2分别加入4组8’b0,并对输入源SRC1与输入源SRC2进行8组运算宽度SIMD_SIZE为8位的累加动作,进而产生字节HW3、HW2、HW1、HW0,其中字节HW3、HW2、HW1、HW0皆为16位。在另一实施例中(未示出),将输入源SRC1与输入源SRC2进行4组运算宽度SIMD_SIZE为8位的累加,并将8’b0分别加入累加结果以进行补零动作(zero-extension)而产生字节HW3、HW2、HW1、HW0,其中字节HW3、HW2、HW1、HW0皆为16位。请注意,累加结果位于字节中的低位,补零动作是将0补在字节中的高位。举例而言,字节HW3的累加结果位于16位中较低的8个位,所补入的8个0位于16位中较高的8个位。后文同理,不再赘述。值得一提的是,在此实施例中,当SIMD_ALU将8位进行求和运算时,运算结果只能存入一个8位而不能进位为第9位。也就是说,由于进位的部分会被舍弃,因此,在输入源或者在累加结果的补零动作都不影响最终结果。
接着,矢量处理器10将字节HW2、HW0作为输入源SRC1,将字节HW3、HW1作为输入源SRC2。具体而言,多任务器MUX3可以基于正常归约操作所对应的状态参数STATE选择字节HW2、HW0作为输入源SRC1,多任务器MUX4可以基于正常归约操作所对应的状态参数STATE选择字节HW3、HW1作为输入源SRC2。算数逻辑单元ALU可在输入源SRC1与输入源SRC2分别加入2组16’b0,并对输入源SRC1与输入源SRC2进行4组运算宽度SIMD_SIZE为16位的累加动作,进而产生字节W1与W0,其中字节W1、W0皆为32位。在另一实施例中(未示出),将输入源SRC1与输入源SRC2进行2组运算宽度SIMD_SIZE为16位的累加并针对累加结果加入16个0(16’b0)以进行补零动作而产生字节W1与W0,其中字节W1与W0皆为32位。
接着,矢量处理器10将字节W0作为输入源SRC1,将字节W1作为输入源SRC2。具体而言,多任务器MUX3可以基于正常归约操作所对应的状态参数STATE选择字节W0作为输入源SRC1,多任务器MUX4可以基于正常归约操作所对应的状态参数STATE选择字节W1作为输入源SRC2。算数逻辑单元ALU可在输入源SRC1与输入源SRC2分别加入1组32’b0,并对输入源SRC1与输入源SRC2进行2组运算宽度SIMD_SIZE为32位的累加动作,进而产生字节DW0(即Double-word),其中字节DW0为64位。在另一实施例中(未示出),将输入源SRC1与输入源SRC2进行1组运算宽度SIMD_SIZE为32位的累加并对累加结果加入32个0(32’b0)以进行补零动作而产生字节DW0,其中字节DW0为64位且作为正常归约操作的正常归约输出NOUT(即正常归约结果,对应通道输出LCO[E*]在单通道归约状态205的结果)。当元素长度ELEN为16位时,矢量处理器10将通道输出LCO_L0(第二归约结果)中的字节HW2、HW0作为输入源SRC1,将通道输出LCO_L0中的字节HW3、HW1作为输入源SRC2,后续流程请参照元素长度ELEN为8位的相关内容,不再赘述。同理,关于元素长度ELEN为32位时,矢量处理器10将通道输出LCO_L0(第二归约结果)中的字节W0作为输入源SRC1,将通道输出LCO_L0中的字节W1作为输入源SRC2,后续流程请参照元素长度ELEN为8位的相关内容,不再赘述。对照图6,不同元素长度ELEN的差别为起始位置不同
图7是依据本发明一实施例所示出的矢量归约方法的步骤S230中快速归约的示意图。请参照图2、图3与图7,于步骤S230中的单通道归约状态205中,矢量处理器10可进行正常归约操作或快速归约操作其中一者。在快速归约操作中,快速归约电路310依据元素长度ELEN在一个周期内对经归约的单个通道输出LCO_L0(第二归约结果)中的多个偶数部与多个奇数部进行算数逻辑运算,以产生快速归约输出FOUT(快速归约结果)。
在一实施例中,快速归约电路310可将通道输出LCO_L0分为字节B7-字节B0等8个字节,字节B7-字节B0的每一个包括8位,其中字节B7、B5、B3与B1属于奇数部ODD,字节B6、B4、B2与B0属于偶数部EVEN。图7与图6的差别在于,图7还包括多任务器MUX6与多任务器MUX7,多任务器MUX6与多任务器MUX7依据元素长度ELEN选择不同的数据DATA,具体请参照表二。
表二
DATA | ELEN=8 | ELEN=16 | ELEN=32 |
HW0= | HW0’ | {B1,B0} | {B1,B0} |
HW1= | HW1’ | {B3,B2} | {B3,B2} |
HW2= | HW2’ | {B5,B4} | {B5,B4} |
HW3= | HW3’ | {B7,B6} | {B7,B6} |
W0= | W0’ | W0’ | {B3,B2,B1,B0} |
W1= | W1’ | W1’ | {B7,B6,B5,B4} |
请参照图7,在同一个周期内,快速归约电路310进行下述动作:将字节B7-字节B0作为数据B提供至多任务器MUX6。将字节B7与字节B6进行累加并对累加结果加入8个0以进行补零动作(即图7中的8’b0),以产生字节HW3’。以此类推,分别依据配对的字节B5与B4、字节B3与B2、字节B1与B0分别产生字节HW2’、HW1’、HW0’,并将字节HW3’、HW2’、HW1’、HW0’作为数据HW’提供至多任务器MUX6。当元素长度ELEN=8时,多任务器MUX6选择数据HW’并分别加载至字节HW3、字节HW2、字节HW1、字节HW0。当元素长度ELEN=16或32时,多任务器MUX6选择数据B并分别加载至字节HW3、字节HW2、字节HW1、字节HW0。
承上,在同一周期内,快速归约电路310将字节HW3、字节HW2、字节HW1、字节HW0作为数据HW提供至多任务器MUX7。另一方面,快速归约电路310将字节HW3与字节HW2进行累加并对累加结果加入16个0以进行补零动作(即图7中的16’b0),以产生字节W1’。以此类推,依据字节HW1与字节HW0产生字节W0’,并将字节W1’、字节W0’作为数据W’提供至多任务器MUX7。
当元素长度ELEN=8或16时,多任务器MUX7选择数据W’并分别加载至字节W1与字节W0。当元素长度ELEN=32时,多任务器MUX7选择数据HW并分别加载至字节W1与字节W0。在同一周期中,快速归约电路310将字节W1与字节W0进行累加并对累加结果加入32个0以进行补零动作(即图7中的32’b0),以产生数据DW0。其中数据DW0为64位。
换句话说,在快速归约操作中,快速归约电路310运用多个多任务器与(较小宽度的)算数逻辑单元ALU,以使所有的累加动作与选择动作可在一个周期内完成。相较于正常归约操作,快速归约电路310无需额外多个周期来进行叠代动作,可提升归约运算的效率。
回到图2与图3,当步骤S230中的单通道归约状态205完成而回到空闲/完成状态201,或步骤S220中的通道归约状态204完成而回到空闲/完成状态201时,依据空闲/完成状态201的前一状态所对应的状态参数STATE及运算符OP,多任务器MUX5从经归约的单个通道输出LCO_L0(元素长度ELEN=64时)、正常归约输出NOUT(元素长度ELEN<64时的正常归约结果,对应通道输出LCO[E*]在单通道归约状态205的结果)或快速归约输出FOUT(元素长度ELEN<64时的快速归约结果)中选择一者作为矢量处理器10在矢量归约操作中的归约输出OUT(第三归约结果)。
图8是依据本发明一实施例所示出的元素归约操作的有限状态机的示意图。请参照图8,元素归约操作的有限状态机包括空闲/完成状态(Idle/Complete State)801、初始状态(Initial State)802、子元素归约状态(Sub-elements Reduction State)803,且每个状态对应不同的状态参数STATE。算数逻辑单元ALU可依据不同状态参数STATE执行元素归约操作的不同状态的动作。其中元素归约操作至少包括步骤S810与步骤S820,步骤S810包括初始状态802,步骤S820包括子元素归约状态803。
图9是依据本发明一实施例所示出的算术逻辑运算单元的示意图。请参照图1与图9,用于元素归约操作的通道121-通道124中的每一个通道可至少包括多任务器MUX3(第三多任务器)、多任务器MUX4(第四多任务器)、算数逻辑单元ALU、快速归约电路910与多任务器MUX5(第五多任务器)。值得一提的是,元素归约操作与矢量归约操作至少可共享多任务器MUX3(第三多任务器)、多任务器MUX4(第四多任务器)、算数逻辑单元ALU、快速归约电路910(310)与多任务器MUX5(第五多任务器),以运用相同电路进行不同归约操作,从而节省电路面积,但共享部分不限于此。并且,相较于矢量归约操作需多个通道协同运算,元素归约操仅需在每个通道中独立地运算,例如是通道121。
图10A是依据本发明一实施例所示出的元素归约方法的步骤S810的示意图。图10B是依据本发明另一实施例所示出的元素归约方法的步骤S810的示意图。请参照图8、图9与图10A(或图10B),于空闲/完成状态801中,当被指令读取/解码/发布单元140发布一个微操作后,矢量处理器10进入步骤S810以进行元素归约操作(第一归约运算)。步骤S810至少包括初始状态802。
于图10A,在此实施例中,操作数VS1的元素VS1[E*]与操作数VS2的元素VS2[E*]可具有多个子元素,例如是操作数子元素VS1[E*][SE0]与操作数子元素VS2[E*][SE*]。其中VS2[E*]代表操作数VS2中的所有元素,VS2[E*][SE*]代表操作数VS2中的所有子元素。多任务器MUX3可依据初始状态802所对应的状态参数STATE选择操作数子元素VS1[E*][SE0]以作为输入源SRC1。多任务器MUX4可依据初始状态802所对应的状态参数STATE选择操作数子元素VS2[E*][SE*]以作为输入源SRC2。算数逻辑单元ALU耦接至多任务器MUX3的输出端与多任务器MUX4的输出端,算数逻辑单元ALU对输入源SRC1与输入源SRC2进行算数逻辑操作,以产生通道输出LCO[E*][SE*],例如是通道输出LCO[E*][SE0]、通道输出LCO[E*][SE1]、通道输出LCO[E*][SE2]与通道输出LCO[E*][SE3]。
在初始状态802中算数逻辑单元ALU对输入源SRC1与输入源SRC2所进行的算数逻辑操作,请参照图10A,以通道121为例,通道121中的算数逻辑单元ALU可加载具有操作数子元素VS1[EN][SE0]的输入源SRC1至通道121对应的寄存器,并加载具有操作数子元素VS2[EN][SE0]-操作数VS2[EN][SE3]的输入源SRC2至通道121对应的其他四个寄存器。接着,通道121的算数逻辑单元ALU将操作数子元素VS1[EN][SE0]与操作数子元素VS2[EN][SE0]进行累加,以产生通道121的通道输出LCO[EN][SE0]。并将具有操作数子元素VS2[EN][SE1]-操作数子元素VS2[EN][SE3]的输入源SRC2直接输出为通道输出LCO[EN][SE1]-通道输出LCO[EN][SE3]。在此示例中,通道输出LCO[EN]具有4个子元素,即通道输出LCO[EN][SE0]-通道输出LCO[EN][SE3],本发明不限制子元素的数量。于图10B,在另一实施例中,与图10A的差别在于,算数逻辑单元ALU还分别加载非作用值INAV至操作数子元素VS1[EN][SE1]-操作数子元素VS1[EN][SE3],并分别与操作数子元素VS2[EN][SE1]-操作数子元素VS2[EN][SE3]进行累加以产生通道121的通道输出LCO[EN][SE1]-通道输出LCO[EN][SE3]。
图11是依据本发明一实施例所示出的元素归约方法的步骤S820中正常归约的示意图。请参照图8、图9与图11,于步骤S820中的子元素归约状态803中,矢量处理器10可进行元素归约操作。在元素归约中的正常归约操作中,矢量处理器10依据子元素长度SELEN及元素长度ELEN决定通道输出LCO[EN](第一归约结果)中的多个偶数部与多个奇数部进行算数逻辑运算的叠代次数,以产生正常归约输出NOUT(正常归约结果)。在一实施例中,当子元素长度SELEN为8位时,可将通道输出LCO[LM](未示出可能包含一个或多个LCO[E*])分为字节B7-B0等8个字节,字节B7-字节B0的每一个包括8位,其中字节B7、B5、B3、B1属于奇数部ODD,字节B6、B4、B2、B0属于偶数部EVEN。当子元素长度SELEN为16位时,可将通道输出LCO[LM]分为字节HW3-字节HW0等4个字节,字节HW3-字节HW0的每一个可包括16位,其中字节HW3、HW1属于奇数部ODD,字节HW2、HW0属于偶数部EVEN。当子元素长度SELEN为32位时,可将通道输出LCO[LM]分为字节W1-字节W0等2个字节,字节W1与字节W0中的每一个包括32位,其中字节W1属于奇数部ODD,字节W0属于偶数部EVEN。
请注意,图6与图11的差别在于,图6的矢量归约操作是依据元素长度ELEN来决定叠代操作的起点,而图11的元素归约操作是依据子元素长度SELEN来决定叠代操作的起点。并且,图6的矢量归约操作中叠代操作的终点固定为包括字节DW0的正常归约输出NOUT(即正常归约结果,对应通道输出LCO[LM]),而图11的元素归约操作中叠代操作的终点是依据元素长度ELEN而可弹性调整的。
举例来说,当子元素长度SELEN为8位且元素长度ELEN为16位时,矢量处理器10可将通道输出LCO[LM](第一归约结果)中的字节B6、B4、B2、B0作为输入源SRC1,将通道输出LCO[LM]中的字节B7、B5、B3、B1作为输入源SRC2。具体而言,多任务器MUX3可以基于正常归约操作所对应的状态参数STATE选择通道输出LCO[LM]的偶数部EVEN作为输入源SRC1,多任务器MUX4可以基于正常归约操作所对应的状态参数STATE选择通道输出LCO[LM]的奇数部ODD作为输入源SRC2。在一实施例中,算数逻辑单元ALU可在输入源SRC1与输入源SRC2分别加入4组8’b0,并对输入源SRC1与输入源SRC2进行8组运算宽度SIMD_SIZE为8位的累加,以产生字节HW3、HW2、HW1、HW0,其中字节HW3、HW2、HW1、HW0皆为16位,且作为正常归约输出NOUT(即正常归约结果,对应通道输出LCO[LM])。
若子元素长度SELEN为8位且元素长度ELEN为64位,则承上段,在产生字节HW3、HW2、HW1、HW0后,矢量处理器10将字节HW2、HW0作为输入源SRC1,将字节HW3、HW1作为输入源SRC2。具体而言,多任务器MUX3可以基于正常归约操作所对应的状态参数STATE选择字节HW2、HW0作为输入源SRC1,多任务器MUX4可以基于正常归约操作所对应的状态参数STATE选择字节HW3、HW1作为输入源SRC2。在一实施例中,算数逻辑单元ALU可在输入源SRC1与输入源SRC2分别加入2组16’b0,并对输入源SRC1与输入源SRC2进行4组运算宽度SIMD_SIZE为16位的累加,以产生字节W1与W0,其中字节W1与W0皆为32位。接着,矢量处理器10将字节W0作为输入源SRC1,将字节W1作为输入源SRC2。具体而言,多任务器MUX3可以基于正常归约操作所对应的状态参数STATE选择字节W0作为输入源SRC1,多任务器MUX4可以基于正常归约操作所对应的状态参数STATE选择字节W1作为输入源SRC2。在一实施例中,算数逻辑单元ALU可在输入源SRC1与输入源SRC2分别加入1组32’b0,并对输入源SRC1与输入源SRC2进行2组运算宽度SIMD_SIZE为32位的累加,以产生字节DW0,字节DW0为64位,且将字节DW0作为正常归约输出NOUT(即正常归约结果,对应通道输出LCO[LM])。同理,关于其他元素长度ELEN与子元素长度SELEN的组合,请参照前文,不同子元素长度SELEN的差别为起始位置不同,不同元素长度ELEN的差别为终点位置不同,不再赘述。
图12是依据本发明一实施例所示出的元素归约方法的步骤S820中快速归约操作的示意图。请参照图8、图9与图12,于步骤S820中的子元素归约状态803中,矢量处理器10可进行快速归约操作。在快速归约操作中,快速归约电路910依据子元素长度SELEN及元素长度ELEN在一个周期内对通道输出LCO[LM](第一归约结果)中的多个偶数部与多个奇数部进行算数逻辑运算,以产生快速归约输出FOUT(快速归约结果)。
在一实施例中,快速归约电路910将通道输出LCO[LM]分为字节B7-B0等8个字节,字节B7-字节B0的每一个包括8位,其中字节B7、B5、B3、B1属于奇数部ODD,字节B6、B4、B2、B0属于偶数部EVEN。图12与图11的差别在于,图12还包括多任务器MUX8、多任务器MUX9与多任务器MUX10,多任务器MUX8与多任务器MUX9依据子元素长度SELEN选择不同的数据DATA。具体请参照表三。
表三
DATA | SELEN=8 | SELEN=16 | SELEN=32 |
HW0= | HW0’ | {B1,B0} | {B1,B0} |
HW1= | HW1’ | {B3,B2} | {B3,B2} |
HW2= | HW2’ | {B5,B4} | {B5,B4} |
HW3= | HW3’ | {B7,B6} | {B7,B6} |
W0= | W0’ | W0’ | {B3,B2,B1,B0} |
W1= | W1’ | W1’ | {B7,B6,B5,B4} |
请参照图12,在同一个周期内,快速归约电路910进行下述动作:将字节B7-字节B0作为数据B提供至多任务器MUX8。将字节B7与字节B6进行运算宽度SIZE为8位的累加并对累加结果加入8个0以进行补零动作(即图12中的8’b0),以产生字节HW3’。以此类推,分别依据成对的字节B5与B4、字节B3与B2、字节B1与B0以分别产生字节HW2’、HW1’、HW0’,并将字节HW3’、HW2’、HW1’、HW0’作为数据HW’提供至多任务器MUX8。当子元素长度SELEN=8时,多任务器MUX8选择数据HW’并分别加载至字节HW3、字节HW2、字节HW1、字节HW0。当子元素长度SELEN=16,32时,多任务器MUX8选择数据B并分别加载至字节HW3、字节HW2、字节HW1、字节HW0。
承上,在同一周期内,快速归约电路910将字节HW3、字节HW2、字节HW1、字节HW0作为数据HW提供至多任务器MUX9。另一方面,快速归约电路910将字节HW3与字节HW2进行运算宽度SIZE为16位的累加并对累加结果加入16个0以进行补零动作(即图12中的16’b0),以产生字节W1’。以此类推,依据字节HW1与字节HW0以产生字节W0’,并将字节W1’、字节W0’作为数据W’提供至多任务器MUX9。
当子元素长度SELEN=8或16时,多任务器MUX9选择数据W’并分别加载至字节W1与字节W0。当子元素长度SELEN=32时,多任务器MUX9选择数据HW并分别加载至字节W1与字节W0。在同一周期中,快速归约电路910将字节W1与字节W0进行运算宽度SIZE为32位的累加并对累加结果加入32个0以进行补零动作(即图12中的32’b0),以产生数据DW0。其中数据DW0为64位。
在此实施例中,多任务器MUX10接收数据HW’、数据W’与数据DW0,且多任务器MUX10依据元素长度ELEN选择数据HW’、数据W’或数据DW0中的一者作为快速归约输出FOUT(快速归约结果)。具体而言,当元素长度ELEN为16位时,多任务器MUX10可选择数据HW’作为快速归约输出FOUT。当元素长度ELEN为32位时,多任务器MUX10可选择数据W’作为快速归约输出FOUT。当元素长度ELEN为64位时,多任务器MUX10可选择数据DW0作为快速归约输出FOUT。
换句话说,在快速归约操作中,快速归约电路910运用多个多任务器与(较小宽度的)ALU,以使所有的累加动作与选择动作可在一个周期内完成。相较于正常归约操作,快速归约电路910无需额外多个周期来进行叠代动作,可提升归约运算的效率。
值得一提的是,本揭露的正常归约操作中的算术逻辑操作通常为算术运算,例如是求最大值MAX、求最小值MIN与求累加值SUM。另一方面,快速归约操作中的算术逻辑操作通常为逻辑运算,例如是逻辑AND、OR与XOR。
在其他实施例中,前文所述的累加运算可附加饱和归约操作。具体而言,每个累加操作都要检查累加结果是否高于最大饱和值或低于最小饱和值,若累加结果大于最大饱和值则将累加结果替换为最大饱和值,若累加结果小于最小饱和值则将累加结果替换为最小饱和值。
图13是依据本发明一实施例所示出的整数和(integer sum)矢量归约方法的步骤S230中快速归约的示意图,及整数和元素归约方法的步骤S820中快速归约的示意图。其中,图13的快速归约可用于矢量归约与元素归约。请参照图7与图13,图13与图7的差别在于,于图13,快速归约电路(未示出)将字节B7-字节B0分别以增列补0与增行补0方式来扩增字节数量,从而产生数据B与数据HW’。多任务器MUX11依据子元素长度SELEN(相当于元素长度ELEN)来将数据B或数据HW’其中一者加载字节HW3_0、HW3_1、HW2_0、HW2_1、HW1_0、HW1_1、HW0_0、HW0_1、,其选择方式请参照图7,不再赘述。在此实施例中,以数据HW’为例,字节B6与字节B7不会相加,而是将字节B6与0加载HW3_0,将字节B7与0加载HW3_1,以此类推。
承上,在同一周期内,快速归约电路将字节HW3_0、HW3_1、HW2_0、HW2_1、HW1_0、HW1_1、HW0_0、HW0_1作为数据HW提供至多任务器MUX12。快速归约电路将字节HW3_0、HW3_1、HW2_0、HW2_1折叠且并行加载四对二SIMD进制保留加法压缩器(4-to-2SIMD Carry SaveAdder Compressor,4to2CSA1),以将四项输入字节压缩为两项输出字节,并加入16个0以进行补零动作(即图13中的16’b0)以加载至字节W1_0’与字节W1_1’。快速归约电路将字节HW1_0、HW1_1、HW0_0、HW0_1折叠且并行加载四对二SIMD进制保留加法压缩器(4to2CSA2),以将四项输入字节压缩为两项输出字节,并加入16个0以进行补零动作(即图13中的16’b0)以加载至字节W0_0’与字节W0_1’。快速归约电路将字节W1_0’、字节W1_1’、字节W0_0’与字节W0_1’作为数据W’提供至多任务器MUX12。
在同一周期内,多任务器MUX12依据子元素长度SELEN(相当于元素长度ELEN)来将数据HW或数据W’其中一者加载字节W1_0、W1_1、W0_0、W0_1。快速归约电路将字节W1_0、W1_1、W0_0、W0_1折叠且并行加载四对二SIMD进制保留加法压缩器(4to2CSA3),以将四项输入字节压缩为两项输出字节,并加入32个0以进行补零动作(即图13中的32’b0)以加载至字节DW_0’与字节DW_1’。快速归约电路将字节DW_0’与字节DW_1’作为数据DW’提供至多任务器MUX13。
接着,在同一周期内,多任务器MUX13依据所接收的控制信号RED而有不同的操作方式。具体而言,依据控制信号RED,当本次运算为矢量归约时,多任务器MUX11与多任务器MUX12的子元素长度SELEN相当于元素长度ELEN,且多任务器MUX13固定选择数据DW’作为输出。另一方面,依据控制信号RED,当本次运算为元素归约时,多任务器MUX13依据元素长度ELEN来选择数据HW’、W’或DW’其中一者,并加载至字节DW_0与字节DW_1。接着,单指令多数据加法器(Single Instruction Multiple Data Adder)SIMD_ADDER依据元素长度ELEN将字节DW_0与字节DW_1进行累加,以产生快速归约输出FOUT。
必须说明的是,图13中的四对二SIMD进制保留加法压缩器4to2CSA1、4to2CSA2、4to2CSA3具有较短的逻辑延迟,而单指令多数据加法器SIMD_ADDER具有相对较长的逻辑延迟。图13的快速归约电路可运用较短逻辑延迟的CSA来减少操作数的数量,并运用相对较长逻辑延迟的SIMD_ADDER来进行最终加法运算,从而减少图7中加法器的总逻辑延迟,以进一步提升快速归约运算的效率。
在其他实施例中,矢量归约运算也可以应用于矢量乘积和(Dot Product)归约。具体而言,矢量乘积和归约可在源元素之间执行快速逐元素乘法(Element-wiseMultiplication),然后将结果累加到目标纯量元素(Destination Scalar Element)中。请注意,在此实施例中,乘积和定义例如是把操作数VS1中的每个元素VS1[E*]和操作数VS2中的每个元素VS2[E*]相乘得到乘积元素MUL[E*](MUL[E*]=VS1[E*]x VS2[E*]),乘积元素的第一个元素MUL[E0]再与操作数VS3[E0](即VD[E0])相加,得到乘加元素(multiply-accumulate element)MAC[E0](其中MAC[E0]=VS1[E0]x VS2[E0]+VS3[E0]),而乘积元素的其他元素MUL[E*]与操作数0相加,得到乘加元素MAC[E*](其值相当于MUL[E*],MAC[E*]=VS1[E*]x VS2[E*]+0)。其中,当单位矢量长度乘数LMUL’等于1时,在第一个叠代完成后,直接对所有乘加元素MAC[E*]进行累加(即∑MAC[E*])。当单位矢量长度乘数LMUL’大于1时,在每个叠代完成后要将中间值(即乘加元素MAC[E*])载至源输入ACC[E*],在下一个叠代再将操作数VS1[E*]相乘操作数VS2[E*]的相乘结果与源输入ACC[E*]相加(即MAC[E*]’=VS1[E*]’VS2[E*]’+ACC[E*]),直到所有的叠代完成,再把源输入ACC[E*]内部的元素进行累加(即∑ACC[E*])。
在其他实施例中,矢量归约运算也可以应用于超宽单指令多数据宽度(Huge-wideSIMD width)。举例来说,数据路径长度(DLEN)可以是2048位,而通道数可相等于2048/64=32个。在此实施例中,矢量归约操作的通道归约状态的叠代次数为5。换句话说,相较于图5A与图5B将4通道归约为1通道,此实施例可将32通道归约为1通道。其余步骤则与前文相似,不再赘述
图14是依据本发明一实施例所示出的矢量归约操作的流程图。矢量归约操作适用于矢量处理器。于步骤S1410,矢量处理器依据第一状态参数加载第一操作数与第二操作数的第一部分,并对第一操作数与第二操作数的第一部分进行第一归约运算,以产生第一归约结果的第一部分。接着,于步骤S1420,矢量处理器依据第一状态参数加载第二操作数的第二部分,并将第二操作数的第二部分作为第一归约结果的第二部分。于步骤S1430,矢量处理器依据第二状态参数对第一归约结果的第一部分与第二部分进行第二归约运算以产生第二归约结果。
图15是依据本发明一实施例所示出的元素归约操作的流程图。元素归约操作适用于矢量处理器。于步骤S1510,矢量处理器依据第一状态参数加载第一操作数与第二操作数,并对第一操作数与第二操作数进行第一归约运算以产生第一归约结果。接着,于步骤S1520,矢量处理器依据第二状态参数对第一归约结果的第一部分与第二部分进行第二归约运算以产生第二归约结果。
综上所述,本发明的矢量处理器可依据状态参数而以同一电路执行归约运算中的不同步骤,从而节省电路面积,提高归约运算效能。另一方面,矢量处理器可以同一电路结构进行矢量归约运算与元素归约运算,以进一步节省电路面积。并且,本发明还可依据单位矢量长度乘数灵活调整叠代次数以处理具有较大数据路径长度或矢量寄存器长度的应用,也可在元素长度小于单个通道的长度时实现正常归约操作或快速归约操作以依据实际需求来弹性设计,从而优化硬件性能指针或软件性能指针。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (23)
1.一种矢量处理器,其特征在于,所述矢量处理器包括:
矢量寄存器模块;
第一通道,耦接至所述矢量寄存器模块以依据第一状态参数加载第一操作数与第二操作数的第一部分,并对所述第一操作数与所述第二操作数的所述第一部分进行第一归约运算,以产生第一归约结果的第一部分;以及
第二通道,耦接至所述矢量寄存器模块以依据所述第一状态参数加载所述第二操作数的第二部分,并将所述第二操作数的所述第二部分作为所述第一归约结果的第二部分,
其中所述第一通道与所述第二通道其中一者依据第二状态参数对所述第一归约结果的所述第一部分与所述第二部分进行第二归约运算以产生第二归约结果。
2.根据权利要求1所述的矢量处理器,其特征在于,所述矢量处理器还包括:
通道控制器,耦接至所述第一通道与所述第二通道,用以控制所述第一通道与所述第二通道的数据传输。
3.根据权利要求1所述的矢量处理器,其特征在于,所述矢量处理器依据单位矢量长度乘数决定是否进行叠代运算,其中
当所述单位矢量长度乘数大于一时,所述第一通道针对所述第一归约运算的结果进行所述叠代运算,且所述第二通道针对所述第二操作数的所述第二部分进行所述叠代运算,以产生所述第一归约结果的所述第一部分与所述第二部分,以及
当所述矢量长度乘数等于一时,所述第一通道与所述第二通道不进行所述叠代运算,
其中所述单位矢量长度乘数为所述矢量处理器所发布的每个命令中待执行的微操作数量。
4.根据权利要求1所述的矢量处理器,其特征在于,所述第二归约结果与所述第一归约结果的所述第一部分或所述第二部分具有相同位长度。
5.根据权利要求1所述的矢量处理器,其特征在于,
当元素长度小于单个通道的长度时,所述第一通道或所述第二通道其中一者进行正常归约操作或快速归约操作其中一者以产生第三归约结果,
当所述元素长度等于单个通道的长度时,所述第一通道或所述第二通道其中一者不进行所述正常归约操作或所述快速归约操作。
6.根据权利要求5所述的矢量处理器,其特征在于,所述正常归约操作还包括:
依据所述元素长度决定对所述第二归约结果中的多个偶数部与多个奇数部进行算数逻辑运算的叠代次数,以产生所述第三归约结果。
7.根据权利要求5所述的矢量处理器,其特征在于,所述快速归约操作还包括:
依据所述元素长度在一个周期内对所述第二归约结果中的多个偶数部与多个奇数部进行算数逻辑运算,以产生所述第三归约结果。
8.根据权利要求1所述的矢量处理器,其特征在于,所述第一通道与所述第二通道的每一者包括:
第一多任务器,用以依据算数逻辑运算的种类输出非作用值;
多个第二多任务器,耦接至所述第一多任务器,用以依据屏蔽位决定所述第二操作数中不进行所述第一归约运算的元素,以产生经调整第二操作数,其中所述经调整第二操作数根据所述屏蔽位决定所述经调整第二操作数的非作用元素,并以所述非作用值填充所述经调整第二操作数的所述非作用元素;
第三多任务器,依据状态参数选择通道输出、所述通道输出的偶数部或经调整第一操作数中的一者作为第一输入源,其中所述经调整第一操作数由所述第一操作数与所述经调整第一操作数的非作用元素组成,其中所述经调整第一操作数以所述非作用值填充所述经调整第一操作数的所述非作用元素;
第四多任务器,依据所述状态参数选择通道输入、所述通道输出的奇数部或所述经调整第二操作数中的一者作为第二输入源;
算数逻辑单元,耦接至所述第三多任务器与所述第四多任务器,用以对所述第一输入源与所述第二输入源进行算数逻辑操作,以产生所述通道输出;
快速归约电路,耦接至所述算数逻辑电路,依据元素长度在一个周期内对所述通道输出中的所述偶数部与所述奇数部进行快速归约,以产生快速归约结果;以及
第五多任务器,耦接至所述算数逻辑单元与所述快速归约电路,用以依据运算符选择所述通道输出或所述快速归约结果中的一者作为第三归约结果。
9.一种矢量归约方法,其特征在于,所述矢量归约方法包括:
依据第一状态参数加载第一操作数与第二操作数的第一部分,并对所述第一操作数与所述第二操作数的所述第一部分进行第一归约运算,以产生第一归约结果的第一部分;
依据所述第一状态参数加载所述第二操作数的第二部分,并将所述第二操作数的所述第二部分作为所述第一归约结果的第二部分;以及
依据第二状态参数对所述第一归约结果的所述第一部分与所述第二部分进行第二归约运算以产生第二归约结果。
10.根据权利要求9所述的矢量归约方法,其特征在于,所述矢量归约方法还包括:
依据单位矢量长度乘数决定是否进行叠代运算,其中
当所述单位矢量长度乘数大于一时,针对所述第一归约运算的结果进行所述叠代运算且针对所述第二操作数进行所述叠代运算,以产生所述第一归约结果的所述第一部分与所述第二部分,以及
当所述矢量长度乘数等于一时,不进行所述叠代运算,
其中所述单位矢量长度乘数为所发布的每个命令中待执行的微操作数量。
11.根据权利要求9所述的矢量归约方法,其特征在于,所述第二归约结果与所述第一归约结果的所述第一部分或所述第二部分具有相同位长度。
12.根据权利要求9所述的矢量归约方法,其特征在于,
当元素长度小于单个通道的长度时,进行正常归约操作或快速归约操作其中一者以产生第三归约结果,
当所述元素长度等于单个通道的长度时,不进行所述正常归约操作与所述快速归约操作。
13.根据权利要求12所述的矢量归约方法,其特征在于,所述正常归约操作还包括:
依据所述元素长度决定对所述第二归约结果中的多个偶数部与多个奇数部进行算数逻辑运算的叠代次数,以产生所述第三归约结果。
14.根据权利要求12所述的矢量归约方法,其特征在于,所述快速归约操作还包括:
依据所述元素长度在一个周期内对所述第二归约结果中的多个偶数部与多个奇数部进行算数逻辑运算,以产生所述第三归约结果。
15.一种矢量处理器,其特征在于,所述矢量处理器包括:
矢量寄存器模块;以及
第一通道,耦接至所述矢量寄存器模块以依据第一状态参数加载第一操作数与第二操作数,其中所述第一通道对所述第一操作数与所述第二操作数进行第一归约运算以产生第一归约结果,以及所述第一通道依据第二状态参数对所述第一归约结果的第一部分与所述第一归约结果的第二部分进行第二归约运算以产生第二归约结果。
16.根据权利要求15所述的矢量处理器,其特征在于,所述第二归约结果与所述第一归约结果具有相同的位长度。
17.根据权利要求15所述的矢量处理器,其特征在于,所述第二归约操作包括:
依据子元素长度和元素长度决定对所述第一归约结果中的多个偶数部与多个奇数部进行算数逻辑运算的叠代次数,以产生所述第二归约结果。
18.根据权利要求15所述的矢量处理器,其特征在于,所述第二归约操作包括:
依据子元素长度和元素长度在一个周期内对所述第一归约结果中的多个偶数部与多个奇数部进行算数逻辑运算,以产生所述第二归约结果。
19.根据权利要求15所述的矢量处理器,其特征在于,所述第一通道包括:
第三多任务器,依据状态参数选择通道输出的偶数部或所述第一操作数中的一个子元素其中一者作为第一输入源;
第四多任务器,依据所述状态参数选择所述通道输出的奇数部或所述第一操作数中的多个子元素其中一者作为第二输入源;
算数逻辑单元,耦接至所述第三多任务器与所述第四多任务器,用以对所述第一输入源与所述第二输入源进行算数逻辑操作,以产生所述通道输出;
快速归约电路,耦接至所述算数逻辑电路,依据子元素长度和元素长度在一个周期内对所述通道输出中的所述偶数部与所述奇数部进行算数逻辑运算,以产生快速归约结果;以及
第五多任务器,耦接至所述算数逻辑单元与所述快速归约电路,用以依据运算符选择所述通道输出或所述快速归约结果中的一者作为所述第二归约结果。
20.一种元素归约方法,其特征在于,所述元素归约方法包括:
依据第一状态参数加载第一操作数与第二操作数,并对所述第一操作数与所述第二操作数进行第一归约运算以产生第一归约结果;以及
依据第二状态参数对所述第一归约结果的第一部分与第二部分进行第二归约运算以产生第二归约结果。
21.根据权利要求20所述的元素归约方法,其特征在于,所述第二归约结果与所述第一归约结果具有相同的位长度。
22.根据权利要求20所述的元素归约方法,其特征在于,所述第二归约操作包括:
依据子元素长度及元素长度决定对所述第一归约结果中的多个偶数部与多个奇数部进行算数逻辑运算的叠代次数,以产生所述第二归约结果。
23.根据权利要求20所述的元素归约方法,其特征在于,所述第二归约操作包括:
依据子元素长度和元素长度在一个周期内对所述第一归约结果中的多个偶数部与多个奇数部进行算数逻辑运算,以产生所述第二归约结果。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/855,816 | 2022-07-01 | ||
US17/855,816 US20240004647A1 (en) | 2022-07-01 | 2022-07-01 | Vector processor with vector and element reduction method |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117370721A true CN117370721A (zh) | 2024-01-09 |
Family
ID=88149110
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210801660.4A Pending CN117370721A (zh) | 2022-07-01 | 2022-07-08 | 具有矢量归约方法与元素归约方法的矢量处理器 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20240004647A1 (zh) |
CN (1) | CN117370721A (zh) |
TW (1) | TWI807927B (zh) |
Family Cites Families (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4839845A (en) * | 1986-03-31 | 1989-06-13 | Unisys Corporation | Method and apparatus for performing a vector reduction |
US5724280A (en) * | 1995-08-31 | 1998-03-03 | National Semiconductor Corporation | Accelerated booth multiplier using interleaved operand loading |
US5903769A (en) * | 1997-03-31 | 1999-05-11 | Sun Microsystems, Inc. | Conditional vector processing |
US6047304A (en) * | 1997-07-29 | 2000-04-04 | Nortel Networks Corporation | Method and apparatus for performing lane arithmetic to perform network processing |
US7797363B2 (en) * | 2004-04-07 | 2010-09-14 | Sandbridge Technologies, Inc. | Processor having parallel vector multiply and reduce operations with sequential semantics |
US8200940B1 (en) * | 2008-06-30 | 2012-06-12 | Nvidia Corporation | Reduction operations in a synchronous parallel thread processing system with disabled execution threads |
US8447954B2 (en) * | 2009-09-04 | 2013-05-21 | International Business Machines Corporation | Parallel pipelined vector reduction in a data processing system |
US9141386B2 (en) * | 2010-09-24 | 2015-09-22 | Intel Corporation | Vector logical reduction operation implemented using swizzling on a semiconductor chip |
CN104204989B (zh) * | 2012-03-30 | 2017-10-13 | 英特尔公司 | 用于选择向量计算的元素的装置和方法 |
US9588766B2 (en) * | 2012-09-28 | 2017-03-07 | Intel Corporation | Accelerated interlane vector reduction instructions |
US10318308B2 (en) * | 2012-10-31 | 2019-06-11 | Mobileye Vision Technologies Ltd. | Arithmetic logic unit |
US9160607B1 (en) * | 2012-11-09 | 2015-10-13 | Cray Inc. | Method and apparatus for deadlock avoidance |
KR101772299B1 (ko) * | 2012-12-28 | 2017-08-28 | 인텔 코포레이션 | 스트라이딩된 액세스 패턴을 가진 벡터 레지스터에서 성분들을 축소하기 위한 명령어 |
US20150052330A1 (en) * | 2013-08-14 | 2015-02-19 | Qualcomm Incorporated | Vector arithmetic reduction |
US9836277B2 (en) * | 2014-10-01 | 2017-12-05 | Samsung Electronics Co., Ltd. | In-memory popcount support for real time analytics |
US9851970B2 (en) * | 2014-12-23 | 2017-12-26 | Intel Corporation | Method and apparatus for performing reduction operations on a set of vector elements |
US20170168819A1 (en) * | 2015-12-15 | 2017-06-15 | Intel Corporation | Instruction and logic for partial reduction operations |
US10268479B2 (en) * | 2016-12-30 | 2019-04-23 | Intel Corporation | Systems, apparatuses, and methods for broadcast compare addition |
US10108581B1 (en) * | 2017-04-03 | 2018-10-23 | Google Llc | Vector reduction processor |
US10929145B2 (en) * | 2018-12-28 | 2021-02-23 | Intel Corporation | Mask generation using reduction operators and scatter use thereof |
US11294670B2 (en) * | 2019-03-27 | 2022-04-05 | Intel Corporation | Method and apparatus for performing reduction operations on a plurality of associated data element values |
US10970070B2 (en) * | 2019-03-29 | 2021-04-06 | Arm Limited | Processing of iterative operation |
US11216281B2 (en) * | 2019-05-14 | 2022-01-04 | International Business Machines Corporation | Facilitating data processing using SIMD reduction operations across SIMD lanes |
US10997116B2 (en) * | 2019-08-06 | 2021-05-04 | Microsoft Technology Licensing, Llc | Tensor-based hardware accelerator including a scalar-processing unit |
US20210334072A1 (en) * | 2020-04-22 | 2021-10-28 | Facebook, Inc. | Mapping convolution to connected processing elements using distributed pipelined separable convolution operations |
US20210216318A1 (en) * | 2020-08-28 | 2021-07-15 | Martin Langhammer | Vector Processor Architectures |
-
2022
- 2022-07-01 US US17/855,816 patent/US20240004647A1/en active Pending
- 2022-07-08 CN CN202210801660.4A patent/CN117370721A/zh active Pending
- 2022-07-20 TW TW111127171A patent/TWI807927B/zh active
Also Published As
Publication number | Publication date |
---|---|
TWI807927B (zh) | 2023-07-01 |
US20240004647A1 (en) | 2024-01-04 |
TW202403542A (zh) | 2024-01-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11188330B2 (en) | Vector multiply-add instruction | |
US9152382B2 (en) | Reducing power consumption in a fused multiply-add (FMA) unit responsive to input data values | |
US5844830A (en) | Executing computer instrucrions by circuits having different latencies | |
US8832166B2 (en) | Floating point multiplier circuit with optimized rounding calculation | |
US6671797B1 (en) | Microprocessor with expand instruction for forming a mask from one bit | |
US20120191767A1 (en) | Circuit which Performs Split Precision, Signed/Unsigned, Fixed and Floating Point, Real and Complex Multiplication | |
JPH10187438A (ja) | 乗算器の入力に対する遷移を減少させる方法 | |
US7013321B2 (en) | Methods and apparatus for performing parallel integer multiply accumulate operations | |
KR101395260B1 (ko) | 마이크로프로세서 및 마이크로프로세서 상에서의 향상된 정밀 곱들의 합 계산 방법 | |
Sakthikumaran et al. | 16-Bit RISC processor design for convolution application | |
US20120191766A1 (en) | Multiplication of Complex Numbers Represented in Floating Point | |
US9047069B2 (en) | Computer implemented method of electing K extreme entries from a list using separate section comparisons | |
Wang et al. | Customized instruction on risc-v for winograd-based convolution acceleration | |
US20030097389A1 (en) | Methods and apparatus for performing pixel average operations | |
US8140608B1 (en) | Pipelined integer division using floating-point reciprocal | |
CN117370721A (zh) | 具有矢量归约方法与元素归约方法的矢量处理器 | |
US8938485B1 (en) | Integer division using floating-point reciprocal | |
US6725360B1 (en) | Selectively processing different size data in multiplier and ALU paths in parallel | |
US6584556B1 (en) | Modulo address generation method and apparatus | |
US11789701B2 (en) | Controlling carry-save adders in multiplication | |
US11782719B2 (en) | Reconfigurable multi-thread processor for simultaneous operations on split instructions and operands | |
CN116991481A (zh) | 一种运算指令的执行方法、装置以及介质 | |
White | Design and implementation of RVV-Lite: a layered approach to the official RISC-V vector ISA | |
Paar et al. | A novel predication scheme for a SIMD system-on-chip | |
JP2023531917A (ja) | 小さいフットプリントの算術論理装置を有する処理装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |