CN117632257A - 将有效位通道作为矢量断言暴露于cpu - Google Patents
将有效位通道作为矢量断言暴露于cpu Download PDFInfo
- Publication number
- CN117632257A CN117632257A CN202311622432.1A CN202311622432A CN117632257A CN 117632257 A CN117632257 A CN 117632257A CN 202311622432 A CN202311622432 A CN 202311622432A CN 117632257 A CN117632257 A CN 117632257A
- Authority
- CN
- China
- Prior art keywords
- data
- vector
- register
- stream
- unit
- 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 320
- 230000015654 memory Effects 0.000 claims description 94
- 239000000872 buffer Substances 0.000 claims description 66
- 238000000034 method Methods 0.000 claims description 17
- 230000004044 response Effects 0.000 claims description 8
- 230000001502 supplementing effect Effects 0.000 claims 2
- 238000012545 processing Methods 0.000 description 56
- 101100385237 Mus musculus Creg1 gene Proteins 0.000 description 25
- 238000000605 extraction Methods 0.000 description 24
- 125000004122 cyclic group Chemical group 0.000 description 18
- 238000004422 calculation algorithm Methods 0.000 description 16
- 239000011159 matrix material Substances 0.000 description 15
- 239000000284 extract Substances 0.000 description 14
- 230000036961 partial effect Effects 0.000 description 11
- 238000010586 diagram Methods 0.000 description 9
- 230000006870 function Effects 0.000 description 9
- 230000008569 process Effects 0.000 description 9
- 238000012546 transfer Methods 0.000 description 8
- 230000008859 change Effects 0.000 description 7
- 101000773153 Homo sapiens Thioredoxin-like protein 4A Proteins 0.000 description 6
- 102100030272 Thioredoxin-like protein 4A Human genes 0.000 description 6
- 101100534231 Xenopus laevis src-b gene Proteins 0.000 description 6
- 230000009977 dual effect Effects 0.000 description 6
- 230000007480 spreading Effects 0.000 description 6
- 230000002441 reversible effect Effects 0.000 description 5
- 230000006399 behavior Effects 0.000 description 4
- 230000003139 buffering effect Effects 0.000 description 4
- 239000002131 composite material Substances 0.000 description 4
- 239000008187 granular material Substances 0.000 description 4
- 101000773151 Homo sapiens Thioredoxin-like protein 4B Proteins 0.000 description 3
- 101100063424 Neurospora crassa (strain ATCC 24698 / 74-OR23-1A / CBS 708.71 / DSM 1257 / FGSC 987) dim-5 gene Proteins 0.000 description 3
- 102100030273 Thioredoxin-like protein 4B Human genes 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 3
- 210000004027 cell Anatomy 0.000 description 3
- 238000001914 filtration Methods 0.000 description 3
- 238000013507 mapping Methods 0.000 description 3
- 230000002829 reductive effect Effects 0.000 description 3
- 230000017105 transposition Effects 0.000 description 3
- 230000001960 triggered effect Effects 0.000 description 3
- 101100063432 Caenorhabditis elegans dim-1 gene Proteins 0.000 description 2
- 239000008186 active pharmaceutical agent Substances 0.000 description 2
- 238000007792 addition Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 150000001875 compounds Chemical class 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000005012 migration Effects 0.000 description 2
- 238000013508 migration Methods 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 238000013519 translation Methods 0.000 description 2
- 210000003771 C cell Anatomy 0.000 description 1
- 101150008950 CBK1 gene Proteins 0.000 description 1
- 101100326161 Chlamydomonas reinhardtii BKT gene Proteins 0.000 description 1
- 241001522296 Erithacus rubecula Species 0.000 description 1
- 230000004913 activation Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000001174 ascending effect Effects 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- 230000001351 cycling effect Effects 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000007613 environmental effect Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 229940050561 matrix product Drugs 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012856 packing Methods 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000002028 premature Effects 0.000 description 1
- 230000010076 replication Effects 0.000 description 1
- 230000011664 signaling Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
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
- 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
- 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
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
-
- 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/3824—Operand accessing
- G06F9/383—Operand prefetching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0815—Cache consistency protocols
- G06F12/0817—Cache consistency protocols using directory methods
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0875—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0893—Caches characterised by their organisation or structure
- G06F12/0897—Caches characterised by their organisation or structure with two or more cache hierarchy levels
-
- 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/3004—Arrangements for executing specific machine instructions to perform operations on memory
-
- 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/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30047—Prefetch instructions; cache control 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/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
-
- 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/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/3013—Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
-
- 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/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/35—Indirect addressing
-
- 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/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
-
- 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/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
-
- 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/3889—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
- G06F9/3891—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute organised in groups of units sharing resources, e.g. clusters
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/40—Bus structure
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
- G06F2212/1021—Hit rate improvement
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/45—Caching of specific data in cache memory
- G06F2212/452—Instruction code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/60—Details of cache memory
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Multimedia (AREA)
- Advance Control (AREA)
- Complex Calculations (AREA)
Abstract
本申请题为“将有效位通道作为矢量断言暴露于CPU”。数字数据处理器(100)中采用的流引擎(125、2800)指定固定的只读数据流。一旦被提取,数据流中的数据元素就以固定的顺序设置在流头寄存器(2818、2828)中的通道(2100、2200)中。一些通道(2100、2200)例如在剩余数据元素的数量小于流头寄存器(2818、2828)中的通道(2100、2200)的数量时可能是无效的。流引擎(125、2800)自动产生存储在流有效寄存器(2819、2829)中的指示通道保持有效数据的有效数据字。流有效寄存器(2819、2829)中的数据可以被自动存储在断言寄存器(P0、P1)中或以其他方式使其可用。该数据可以用于控制矢量SIMD操作或者可以与其他断言寄存器数据结合。
Description
本申请是于2018年6月27日提交的名称为“将有效位通道作为矢量断言暴露于CPU”的中国专利申请201810674190.3的分案申请。
相关申请
本专利申请是对2014年7月15日提交的序列号为14/331,986且题为“HIGHLYINTEGRATED SCALABLE,FLEXIBLE DSP MEGAMODULE ARCHITECTURE”的美国专利申请的改善,其要求2013年7月15日提交的序列号为61/846,148的美国临时专利申请的优先权。
技术领域
本发明的技术领域是数字数据处理,并且更具体是用于操作数提取的流引擎的控制。
背景技术
现代的数字信号处理器(DSP)面对多重挑战。工作量不断增加需要增加带宽。芯片上系统(SOC)在尺寸和复杂性上不断增长。存储器系统延迟严重影响某些类型的算法。随着晶体管变小,存储器和寄存器变得更不可靠。随着软件堆栈变大,可能的交互和误差的数量变得更大。
对于操作实时数据的数字信号处理器,存储器带宽和调度是一个问题。操作实时数据的数字信号处理器通常接收输入数据流、对数据流执行滤波功能(诸如编码或解码)并且输出经转换的数据流。该系统被称为实时的是因为如果经转换的数据流在被调度时对于输出不可用则应用失败。典型的视频编码需要可预测的但非时序的输入数据模式。通常相应的存储器访问难以在可用的地址生成和存储器访问资源内实现。典型的应用需要存储器访问加载数据寄存器文件(RF)中的数据寄存器,然后供应给执行数据处理的功能单元。
发明内容
本发明是具有流引擎的数字数据处理器,该流引擎从存储器调用预定数量的数据元素的指令指定序列的流以便由数据处理功能单元按顺序使用。每个数据元素具有预定尺寸和数据类型。数据元素被打包在矢量流头寄存器中的限定数据宽度的通道中。
数据被多个矢量功能单元中的一个采用。指令的操作数字段可以被编码以作为功能单元的操作数对流头寄存器进行读取。操作数字段的不同编码读取流头数据并且将该流提前到打包在流头寄存器中的下一组数据元素。
有时不是所有的通道都包括有效数据。在流的末端处或者在内部环路的末端处,可能存在比最后一个矢量中的通道数量更少的剩余数据元素。超出数据元素数量的通道不能包括有效数据。如果发生这种情况,则流引擎将全部0存储在过量通道中。在本发明中,流引擎还产生标量,该标量针对矢量流头寄存器中的每个最小数据尺寸具有一个位。在所描述的实施例中,功能单元以8位的最小流引擎数据尺寸对512位数据进行操作。这意味着有效数据字是64位。
可以以两种替代方式访问流有效数据。在第一替代方案中,每次流头寄存器被读取时,流有效数据被自动写入到预定数据寄存器。在第二替代方案中,至少一个功能单元可以经由指令的操作数字段的特殊编码来读取该有效数据。
在优选的实施例中,流有效数据被存储在标量数据寄存器文件中,该标量数据寄存器文件可以被断言功能单元访问。矢量SIMD比较指令基于比较的结果对标量断言寄存器进行填写(populate)。矢量SIMD条件指令可以基于指定的标量断言寄存器的状态执行替代数据处理操作。断言功能单元可以在允许复合数据处理操作的一个或两个断言数据寄存器上执行各种指令。
附图说明
本发明的这些方面和其他方面在附图中说明,其中:
图1说明根据本发明的一个实施例的成双的标量/矢量数据路径处理器;
图2说明图1中说明的成双的标量/矢量数据路径处理器中的寄存器和功能单元;
图3说明全局标量寄存器文件;
图4说明由算法功能单元共享的局部标量寄存器文件;
图5说明由乘法功能单元共享的局部标量寄存器文件;
图6说明由局部/存储单元共享的局部标量寄存器文件;
图7说明全局矢量寄存器文件;
图8说明断言寄存器文件;
图9说明由算法功能单元共享的局部矢量寄存器文件;
图10说明由乘法功能单元和相关功能单元共享的局部矢量寄存器文件;
图11说明根据本发明的优选实施例的中央处理单元的流水线阶段;
图12说明单个提取包的十六个指令;
图13说明本发明使用的指令的指令编码的示例;
图14说明条件码扩展间隙(slot)0的位编码;
图15说明条件码扩展间隙1的位编码;
图16说明常量扩展间隙的位编码0;
图17是说明常量扩展的部分框图;
图18说明根据本发明的用于SIMD操作的进位控制;
图19说明本发明的流引擎的概念视图;
图20说明本发明的格式化操作的序列;
图21说明矢量中的通道分配的第一示例;
图22说明矢量中的通道分配的第二示例;
图23说明基本的二维流;
图24说明图23的示例流中的元素的顺序;
图25说明从较大的矩形中取出较小的矩形;
图26说明流引擎将如何提取该示例中具有4个字节的移项粒度的流;
图27说明流引擎将如何提取该示例中具有8个字节的移项粒度的流;
图28说明本发明的流引擎的细节;
图29说明本发明的流模板寄存器;
图30说明本发明的流模板寄存器的标记字段的子字段定义;
图31说明本发明的矢量长度掩码/组重复块的示例性实施例;
图32是生成流引擎有效或无效指示的示例性实施例的部分示意图;
图33是说明生成循环地址和循环计数的流引擎地址生成器的部分示意图;
图34说明用于产生有效/无效位的替代硬件的部分示意图;
图35说明示出本发明的流引擎供应数据的部分示意图;以及
图36说明示出流引擎供应有效数据到断言单元的部分示意图。
具体实施方式
图1说明根据本发明的优选实施例的成双的标量/矢量数据路径处理器。处理器100包括分开的一级指令缓存器(L1I)121和一级数据缓存器(L1D)123。处理器100包括二级组合式指令/数据缓存器(L2)130,其保持指令和数据两者。图1说明一级指令缓存器121和二级组合式指令/数据缓存器130之间的连接(总线142)。图1说明一级数据缓存器123和二级组合式指令/数据缓存器130之间的连接(总线145)。在处理器100的优选实施例中,二级组合式指令/数据缓存器130存储这两个指令以备份一级指令缓存器121并且存储数据以备份一级数据缓存器123。在优选实施例中,二级组合式指令/数据缓存器130进一步以本领域已知的但图1中未说明的方式连接到更高级的缓存器和/或主存储器。在优选实施例中,中央处理单元核心110、一级指令缓存器121、一级数据缓存器123以及二级组合式指令/数据缓存器130被形成在单个集成电路上。该信号集成电路可选择地包括其他电路。
中央处理单元核心110在指令提取单元111控制下从一级指令缓存器121提取指令。指令提取单元111确定将被执行的下一个指令并且调用提取包尺寸的一组此类指令。提取包的性质和尺寸在下面进一步详述。如本领域已知的,在缓存命中之后(如果这些指令被存储在一级指令缓存器121中),指令被直接从一级指令缓存器121中提取。在缓存错失之后(指定的指令提取包没有被存储在一级指令缓存器121中),在二级组合式缓存器130中寻找这些指令。在优选实施例中,一级指令缓存器121中的缓存线的尺寸等于提取包的尺寸。这些指令的存储器位置在二级组合式缓存器130中或命中或错失。命中是由二级组合式缓存器130服务。错失是由更高级缓存器(未图示说明)或由主存储器(未图示说明)服务。如本领域已知的,所请求的指令可以被同时供应到一级指令缓存器121和中央处理单元核心110两者以加速使用。
在本发明的优选实施例中,中央处理单元核心110包括复数个功能单元以执行指令指定的数据处理任务。指令分派单元112确定每个提取的指令的目标功能单元。在优选实施例中,中央处理单元110作为超长指令字(VLIW)处理器进行操作,其能够同时处理相应的功能单元中的复数个指令。优选地,编译器组织执行包中一起被执行的指令。指令分派单元112将每个指令引导到其目标功能单元。分配给指令的功能单元完全由编译器产生的指令来指定。中央处理单元核心110的硬件不参与该功能单元分配。在优选实施例中,指令分派单元12可以并行操作复数个指令。这种并行指令的数量由执行包的尺寸设定。这将在下面进一步详述。
指令分派单元112的分派任务的一部分是确定指令在标量数据路径侧A 115中的功能单元上执行还是在矢量数据路径侧B 116中的功能单元上执行。每个指令中被称为s位的指令位确定该指令控制哪个数据路径。这将在下面进一步详述。
指令解码单元113对当前执行包中的每个指令解码。解码包括识别执行该指令的功能单元、从可能的寄存器文件(RF)中识别用于为相应的数据处理操作供应数据的寄存器以及识别相应的数据处理操作的结果的寄存器目的地。如下面进一步解释的,指令可以包括代替一个寄存器编号操作数字段的常量字段。该解码的结果是信号,这些信号用于控制目标功能单元以便对指定数据执行由相应的指令所指定的数据处理操作。
中央处理单元核心110包括控制寄存器114。控制寄存器114存储用于以与本发明不相关的方式控制标量数据路径侧A 115和矢量数据路径侧B 116中的功能单元的信息。该信息可以是模式信息等。
来自指令解码器113的已解码的指令和存储在控制寄存器114中的信息被供应到标量数据路径侧A 115和矢量数据路径侧B 116。结果,标量数据路径侧A 115和矢量数据路径侧B 116中的功能单元根据指令指定的数据执行指令指定的数据处理操作并且将结果存储在一个或多个指令指定的数据寄存器中。标量数据路径侧A 115和矢量数据路径侧B 116中的每一个包括优选并行操作的复数个功能单元。这些将结合图2进一步详述。标量数据路径侧A 115和矢量数据路径侧B 116之间存在允许数据交换的数据路径117。
中央处理单元核心110进一步包括非基于指令的模块。仿真单元118允许响应于指令来确定中央处理单元核心110的机器状态。这种能力通常将被用于算法开发。中断/异常单元119使得中央处理单元核心110能够响应外部异步事件(中断)并且回应执行不适当操作的尝试(异常)。
中央处理单元核心110包括流引擎125。流引擎125将两个数据流从通常缓存在二级组合式缓存器130中的预定地址供应到矢量数据路径侧B的寄存器文件。这提供从存储器(如缓存在二级组合式缓存器130中的)直接到功能单元操作数输入端的受控数据移动。这将在下面进一步详述。
图1说明各个部分之间的总线的示例性数据宽度。一级指令缓存器121将指令经由总线141供应到指令提取单元111。优选地,总线141是512位总线。总线141从一级指令缓存器121单向通到中央处理单元10。二级组合式缓存器130将指令经由总线142供应到一级指令缓存器121。优选地,总线142是512位总线。总线142从二级组合式缓存器130单向通到一级指令缓存器121。
一级数据缓存器123与标量数据路径侧A 115中的寄存器文件经由总线143交换数据。优选地,总线143是64位总线。一级数据缓存器123与矢量数据路径侧B 116中的寄存器文件经由总线144交换数据。优选地,总线144是512位总线。总线143和144被图示说明为双向支持中央处理单元110数据读取和数据写入两者。一级数据缓存器123与二级组合式缓存器130经由总线145交换数据。优选地,总线145是512位总线。总线145被图示说明为双向支持中央处理单元110数据读取和数据写入两者的缓存服务。
如本领域已知的,在缓存命中之后(如果请求的数据存储在一级数据缓存器123中),CPU数据请求直接从一级数据缓存器123提取。在缓存错失之后(指定的数据没有存储在一级数据缓存器123中),在二级组合式缓存器130中寻找该数据。该请求数据的存储器位置在二级组合式缓存器130中或命中或错失。命中是由二级组合式缓存器130服务。错失是由另一级缓存器(未图示说明)或由主存储器(未图示说明)服务。如本领域已知的,所请求的指令可以同时供应到一级数据缓存器123和中央处理单元核心110两者以加速使用。
二级组合式缓存器130将第一数据流的数据经由总线146供应到流引擎125。优选地,总线146是512位总线。流引擎125将该第一数据流的数据经由总线147供应到矢量数据路径侧B 116的功能单元。优选地,总线147是512位总线。二级组合式缓存器130将第二数据流的数据经由总线148供应到流引擎125。优选地,总线148是512位总线。流引擎125将该第二数据流的数据经由总线149供应到矢量数据路径侧B 116的功能单元。优选地,总线149是512位总线。根据本发明的优选实施例,总线146、147、148和149被图示说明为从二级组合式缓存器130单向通到流引擎125并且通到矢量数据路径侧B 116。
在缓存命中之后(如果请求的数据存储在二级组合式缓存器130中),流引擎数据请求直接从二级组合式缓存器130提取。在缓存错失之后(指定的数据没有存储在二级组合式缓存器130中),从另一级缓存器(未图示说明)或从主存储器(未图示说明)寻找该数据。在一些实施例中,一级数据缓存器123缓存未存储在二级组合式缓存器130中的数据在技术上是可行的。如果支持该操作,则根据在二级组合式缓存器130中错失的流引擎数据请求,二级组合式缓存器130应该对于流引擎请求的数据监听一级数据缓存器1233。如果一级数据缓存器123存储该数据,则其监听响应将包括随后被供应以服务流引擎请求的数据。如果一级数据缓存器123没有存储该数据,则其监听响应将指示此结果并且二级组合式缓存器130必须服务来自另一级缓存器(未图示说明)或来自主存储器(未图示说明)的这一流引擎请求。
在本发明的优选实施例中,根据题为“UNIFIED MEMORY SYSTEM ARCHITECTUREINCLUDING CACHE ANDDIRECTLY ADDRESSABLE STATIC RANDOMACCESS MEMORY”的美国专利No.6,606,686,一级数据缓存器123和二级组合式缓存器130两者都可以被配置为选定数量的缓存器或直接可寻址的存储器。
图2进一步说明标量数据路径侧A115和矢量数据路径侧B 116中的功能单元和寄存器文件的细节。标量数据路径侧A115包括全局标量寄存器文件(RF)211、L1/S1局部寄存器文件212、M1/N1局部寄存器文件213和D1/D2局部寄存器文件214。标量数据路径侧A 115包括L1单元221、S1单元222、M1单元223、N1单元224、D1单元225和D2单元226。矢量数据路径侧B 116包括全局矢量寄存器文件231、L2/S2局部寄存器文件232、M2/N2/C局部寄存器文件233和断言寄存器文件214。矢量数据路径侧B 116包括L2单元241、S2单元242、M2单元243、N2单元244、C单元245和P单元246。在功能单元可以从哪个寄存器文件读取或者可以写入哪个寄存器文件上存在限制。这些将在下面详述。
标量数据路径侧A 115包括L1单元221。L1单元221通常接受两个64位操作数并且产生一个64位结果。这两个操作数都是从全局标量寄存器文件211或L1/S1局部寄存器文件212中的指令指定的寄存器调用的。L1单元221优选执行以下指令选择的操作:64位加/减操作;32位最小/最大操作;8位单指令多数据(SIMD)指令(诸如绝对值求和、最小值和最大值确定);循环最小/最大操作以及寄存器文件之间的各种移动操作。结果可以被写入全局标量寄存器文件211、L1/S1局部寄存器文件212、M1/N1局部寄存器文件213或D1/D2局部寄存器文件214的指令指定的寄存器中。
标量数据路径侧A 115包括S1单元222。S1单元222通常接受两个64位操作数并且产生一个64位结果。这两个操作数都是从全局标量寄存器文件211或L1/S1局部寄存器文件212中的指令指定的寄存器调用的。S1单元222优选执行与L1单元211相同类型的操作。由L1单元211和S1单元222支持的数据处理操作之间可以选择性地存在轻微变化。结果可以被写入全局标量寄存器文件211、L1/S1局部寄存器文件212、M1/N1局部寄存器文件213或D1/D2局部寄存器文件214的指令指定的寄存器中。
标量数据路径侧A 115包括M1单元223。M1单元223通常接受两个64位操作数并且产生一个64位结果。这两个操作数都是从全局标量寄存器文件211或M1/N1局部寄存器文件213中的指令指定的寄存器调用的。M1单元223优选执行以下指令选择的操作:8位乘法操作;复杂的点积操作;32位计数操作;复杂的共轭乘法操作以及按位逻辑操作、移位、加和减。结果可以被写入全局标量寄存器文件211、L1/S1局部寄存器文件212、M1/N1局部寄存器文件213或D1/D2局部寄存器文件214的指令指定的寄存器中。
标量数据路径侧A 115包括N1单元224。N1单元224通常接受两个64位操作数并且产生一个64位结果。这两个操作数都是从全局标量寄存器文件211或M1/N1局部寄存器文件213中的指令指定的寄存器调用的。N1单元224优选执行与M1单元223相同类型的操作。可以存在同时采用M1单元223和N1单元224两者的某些双重操作(称为成双发布的指令)。结果可以被写入全局标量寄存器文件211、L1/S1局部寄存器文件212、M1/N1局部寄存器文件213或D1/D2局部寄存器文件214的指令指定的寄存器中。
标量数据路径侧A 115包括D1单元225和D2单元226。D1单元225和D2单元226通常均接受两个64位操作数并且均产生一个64位结果。D1单元225和D2单元226通常执行地址计算以及相应的加载和存储操作。D1单元225用于64位的标量加载和存储。D2单元226用于512位的矢量加载和存储。优选地,D1单元225和D2单元226也执行:对加载和存储数据进行调换、打包以及拆包;64位SIMD算法操作以及64位按位逻辑操作。D1/D2局部寄存器文件214将通常存储用于对相应的加载和存储进行地址计算的基础地址和偏移地址。这两个操作数都是从全局标量寄存器文件211或D1/D2局部寄存器文件214中的指令指定的寄存器调用的。计算的结果可以被写入全局标量寄存器文件211、L1/S1局部寄存器文件212、M1/N1局部寄存器文件213或D1/D2局部寄存器文件214的指令指定的寄存器中。
矢量数据路径侧B 116包括L2单元241。L2单元241通常接受两个512位操作数并且产生一个512位结果。这两个操作数都是从全局矢量寄存器文件231、L2/S2局部寄存器文件232或断言寄存器文件234中的指令指定的寄存器调用的。除了更宽的512位数据之外,L2单元241优选执行与L1单元221类似的指令。结果可以被写入全局矢量寄存器文件231、L2/S2局部寄存器文件232、M2/N2/C局部寄存器文件233或断言寄存器文件214的指令指定的寄存器中。
矢量数据路径侧B 116包括S2单元242。S2单元242通常接受两个512位操作数并且产生一个512位结果。这两个操作数都是从全局矢量寄存器文件231、L2/S2局部寄存器文件232或断言寄存器文件234中的指令指定的寄存器调用的。S2单元242优选与S1单元222类似地执行指令。结果可以被写入全局矢量寄存器文件231、L2/S2局部寄存器文件232、M2/N2/C局部寄存器文件233或断言寄存器文件214的指令指定的寄存器中。
矢量数据路径侧B 116包括M2单元243。M2单元243通常接受两个512位操作数并且产生一个512位结果。这两个操作数都是从全局矢量寄存器文件231或M2/N2/C局部寄存器文件233中的指令指定的寄存器调用的。除了更宽的512位数据之外,M2单元243优选执行与M1单元222类似的指令。结果可以被写入全局矢量寄存器文件231、L2/S2局部寄存器文件232或M2/N2/C局部寄存器文件233的指令指定的寄存器中。
矢量数据路径侧B 116包括N2单元244。N2单元244通常接受两个512位操作数并且产生一个512位结果。这两个操作数都是从全局矢量寄存器文件231或M2/N2/C局部寄存器文件233中的指令指定的寄存器调用的。N2单元244优选执行与M2单元243相同类型的指令。可以存在同时采用M2单元243和N2单元244两者的某些双重操作(称为成双发布的指令)。结果可以被写入全局矢量寄存器文件231、L2/S2局部寄存器文件232或M2/N2/C局部寄存器文件233的指令指定的寄存器中。
矢量数据路径侧B 116包括C单元245。C单元245通常接受两个512位操作数并且产生一个512位结果。这两个操作数都是从全局矢量寄存器文件231或M2/N2/C局部寄存器文件233中的指令指定的寄存器调用的。C单元245优选执行:“搜查”和“搜索”指令;每个时钟周期高达512个2位PN*8位乘法的I/Q复杂乘法;8位和16位的绝对差值求和(SAD)计算,每个时钟周期高达512个SAD;水平加法和水平最小/最大指令;以及矢量排列指令。C单元245还包括用于控制C单元245指令的某些操作的4个矢量控制寄存器(CUCR0到CUCR3)。控制寄存器CUCR0到CUCR3用作某些C单元245操作的操作数。控制寄存器CUCR0到CUCR3优选用于控制通用排列指令(VPERM),并且用作SIMD多重点积操作(DOTPM)和SIMD多重绝对差值求和(SAD)操作的掩码。控制寄存器CUCR0优选用于存储伽罗瓦(Galios)域乘法操作(GFMPY)的多项式。控制寄存器CUCR1优选用于存储伽罗瓦域多项式发生器函数。
矢量数据路径侧B 116包括P单元246。P单元246在局部断言寄存器文件234的寄存器上执行基础逻辑操作。P单元246具有从断言寄存器文件234读取和对断言寄存器文件234写入的直接访问权。这些操作包括单寄存器一元操作,诸如:NEG(否定),其将单个寄存器的每个位反转;BITCNT(位计数),其返回单个寄存器中具有预定数字状态(1或0)的位的数量的计数;RMBD(最右位检测),其返回从最低有效位位置(最右)到具有预定数字状态(1或0)的第一位位置的位位置的数量;DECIMATE,其选择待输出的每个指令指定的第N(第1、第2、第4等)位;以及EXPAND,其将每个位重复指令指定的N次(2、4等)。这些操作包括双寄存器二元操作,诸如:AND,其将两个寄存器的数据按位取“与”;NAND,其将两个寄存器的数据按位取“与”和“非”;OR,其将两个寄存器的数据按位取“或”;NOR,其将两个寄存器的数据按位取“或”和“非”;以及XOR,其对两个寄存器的数据取“异或”。这些操作包括将数据从断言寄存器文件234的断言寄存器转移到另一个指定断言寄存器或转移到全局矢量寄存器文件231中的指定数据寄存器。P单元246的普通预期用途包括用于控制进一步SIMD矢量操作的SIMD矢量比较结果的操纵。BITCNT指令可以用于对断言寄存器中“1”的数量进行计数以确定来自断言寄存器的有效数据元素的数量。
图3说明全局标量寄存器文件211。存在16个独立的64位宽标量寄存器,其标记为A0-A15。全局标量寄存器文件211的每个寄存器可以被读取或写入作为64位的标量数据。所有的标量数据路径侧A 115功能单元(L1单元221、S1单元222、M1单元223、N1单元224、D1单元225和D2单元226)可以对全局标量寄存器文件211读取或写入。全局标量寄存器文件211可以被读取为32位或读取为64位并且可以仅被写入为64位。指令的执行确定读取数据的尺寸。矢量数据路径侧B 116功能单元(L2单元241、S2单元242、M2单元243、N2单元244、C单元245和P单元246)可以在下面将详述的限制条件下经由交叉路径117从全局标量寄存器文件211读取。
图4说明D1/D2局部寄存器文件214。存在16个独立的64位宽的标量寄存器,其标记为D0-D16。D1/D2局部寄存器文件214的每个寄存器可以被读取或写入作为64位的标量数据。所有的标量数据路径侧A115功能单元(L1单元221、S1单元222、M1单元223、N1单元224、D1单元225和D2单元226)可以对全局标量寄存器文件211写入。仅D1单元225和D2单元226可以从D1/D2局部寄存器文件214读取。预计存储在D1/D2局部寄存器文件214中的数据将包括用于地址计算的基础地址和偏移地址。
图5说明L1/S1局部寄存器文件212。图5中说明的实施例具有8个独立的64位宽的标量寄存器,其标记为AL0-AL7。优选的指令编码(见图13)允许L1/S1局部寄存器文件212包括高达16个寄存器。图5的实施例仅实施8个寄存器以降低电路尺寸和复杂性。L1/S1局部寄存器文件212的每个寄存器可以被读取或写入作为64位的标量数据。所有的标量数据路径侧A115功能单元(L1单元221、S1单元222、M1单元223、N1单元224、D1单元225和D2单元226)可以对L1/S1局部寄存器文件212写入。仅L1单元221和S1单元222可以从L1/S1局部寄存器文件212读取。
图6说明M1/N1局部寄存器文件213。图6中说明的实施例具有8个独立的64位宽的标量寄存器,其被标记为AM0-AM7。优选的指令编码(见图13)允许M1/N1局部寄存器文件213包括高达16个寄存器。图6的实施例仅实施8个寄存器以降低电路尺寸和复杂性。M1/N1局部寄存器文件213的每个寄存器可以被读取或写入作为64位的标量数据。所有的标量数据路径侧A 115功能单元(L1单元221、S1单元222、M1单元223、N1单元224、D1单元225和D2单元226)可以对M1/N1局部寄存器文件213写入。仅M1单元223和N1单元224可以从M1/N1局部寄存器文件213读取。
图7说明全局矢量寄存器文件231。存在16个独立的512位宽的矢量寄存器。全局矢量寄存器文件231的每个寄存器可以被读取或写入作为64位的标量数据,标记为B0-B15。指令类型确定数据尺寸。所有的矢量数据路径侧B 116功能单元(L2单元241、S2单元242、M2单元243、N2单元244、C单元245和P单元246)可以对全局矢量寄存器文件231读取或写入。标量数据路径侧A115功能单元(L1单元221、S1单元222、M1单元223、N1单元224、D1单元225和D2单元226)可以在下面将详述的限制条件下经由交叉路径117从全局矢量寄存器文件231读取。
图8说明P局部寄存器文件234。存了8个独立的64位宽的寄存器,其标记为P0-P15。P局部寄存器文件234的每个寄存器可以被读取或写入作为64位的标量数据。矢量数据路径侧B 116功能单元L2单元241、S2单元242、C单元244和P单元246可以对P局部寄存器文件234写入。仅L2单元241、S2单元242和P单元246可以从P局部寄存器文件234读取。P局部寄存器文件234的普通预期用途包括:从L2单元241、S2单元242或C单元244写入一位SIMD矢量比较结果;由P单元246操纵SIMD矢量比较结果;以及使用操纵结果用于控制进一步的SIMD矢量操作。
图9说明L2/S2局部寄存器文件232。图9中说明的实施例具有8个独立的512位宽的矢量寄存器。优选的指令编码(见图13)允许L2/S2局部寄存器文件232包括高达16个寄存器。图9的实施例仅实施8个寄存器以降低电路尺寸和复杂性。L2/S2局部矢量寄存器文件232的每个寄存器可以被读取或写入作为64位的标量数据,标记为BL0-BL7。L2/S2局部矢量寄存器文件232的每个寄存器可以被读取或写入作为512位的矢量数据,标记为VBL0-VBL7。指令类型确定数据尺寸。所有的矢量数据路径侧B 116功能单元(L2单元241、S2单元242、M2单元243、N2单元244、C单元245和P单元246)可以对L2/S2局部矢量寄存器文件232写入。仅L2单元241和S2单元242可以从L2/S2局部矢量寄存器文件232读取。
图10说明M2/N2/C局部寄存器文件233。图10中说明的实施例具有8个独立的512位宽的矢量寄存器。优选的指令编码(见图13)允许L1/S1局部寄存器文件212包括高达16个寄存器。图10的实施例仅实施8个寄存器以降低电路尺寸和复杂性。M2/N2/C局部矢量寄存器文件233的每个寄存器可以被读取或写入作为64位的标量数据,标记为BM0-BM7。M2/N2/C局部矢量寄存器文件233的每个寄存器可以被读取或写入作为512位的矢量数据,标记为VML0-VML7。所有的矢量数据路径侧B 116功能单元(L2单元241、S2单元242、M2单元243、N2单元244、C单元245和P单元246)可以对M2/N2/C局部矢量寄存器文件233写入。仅M2单元233、N2单元244和C单元245可以从M2/N2/C局部矢量寄存器文件233读取。
对由一侧的所有功能区可访问的全局寄存器文件和仅由一侧的一些功能单元可访问的局部寄存器文件的规定是设计选择。本发明可以通过仅采用对应于所公开的全局寄存器文件的一类寄存器文件来实践。
交叉路径117允许标量数据路径侧A 115和矢量数据路径侧B 116之间的有限数据交换。在每个操作周期期间,一个64位数据字可以被从全局标量寄存器文件A 211调用以用作矢量数据路径侧B 116的一个或多个功能单元的操作数,并且一个64位数据字可以被从全局矢量寄存器文件231调用以用作标量数据路径侧A 115的一个或多个功能单元的操作数。任何标量数据路径侧A 115功能单元(L1单元221、S1单元222、M1单元223、N1单元224、D1单元225和D2单元226)都可以从全局矢量寄存器文件231读取64位操作数。该64位操作数是全局矢量寄存器文件232的访问的寄存器中的512位数据的最低有效位。复数个标量数据路径侧A115功能单元可以采用与相同操作周期期间的操作数相同的64位交叉路径数据。然而,在任何单个操作周期中,仅一个64位操作数被从矢量数据路径侧B 116转移到标量数据路径侧A 115。任何矢量数据路径侧B 116(L2单元241、S2单元242、M2单元243、N2单元244、C单元245和P单元246)都可以从全局标量寄存器文件211读取64位操作数。如果相应的指令是标量指令,则交叉路径操作数数据被视为任意其他64位操作数。如果相应的指令是矢量指令,则操作数的高448位由零填充。复数个矢量数据路径侧B 116功能单元可以采用与相同操作周期期间的操作数相同的64位交叉路径数据。在任何单个操作周期中,仅一个64位操作数被从标量数据路径侧A 115转移到矢量数据路径侧B 116。
流引擎125在某些受限的情况下传输数据。流引擎125控制两个数据流。一个流由特定类型的元素序列构成。对这些流进行操作的程序顺序读取数据,进而在每个元素上操作。每个流具有下列基本属性。流数据具有良好定义的开始时间和结束时间。在整个流中,流数据具有固定的元素尺寸和类型。流数据具有固定的元素序列。因此程序不能在流中随机寻找。流数据仅在激活时被读取。当程序从流读取时不能同时对该流写入。一旦流被打开,则流引擎125:计算地址;从二级统一缓存器(其可能需要来自更高级的存储器的缓存服务)提取所定义的数据类型;执行数据类型操纵,诸如零扩展、符号扩展、数据元素整理/调换(诸如矩阵转置);以及将数据直接传送到CPU 110中的程序化数据寄存器文件。因此,流引擎125有益于对表现良好的数据的实时数字滤波操作。流引擎125从相应的CPU释放这些存储器提取任务以使能其他处理功能。
流引擎125提供以下益处。流引擎125允许多维存储器访问。流引擎125增加功能单元的可用带宽。由于流缓冲器旁通一级数据缓存器123,流引擎125使缓存错失拖延(stalls)的数量最小化。流引擎125降低维持循环所需要的标量操作的数量。流引擎125管理地址指针。流引擎125处理自动释放用于其他计算的地址生成指令间隙(slot)以及D1单元224和D2单元226的地址生成。
CPU 110对指令流水线进行操作。指令在下面进一步描述的固定长度的指令包中提取。所有指令需要相同数量的流水线阶段来用于提取和解码,但是需要不同数量的执行阶段。
图11说明下列流水线阶段:程序提取阶段1110、分派和解码阶段1110以及执行阶段1130。对于所有指令,程序提取阶段1110包括三级。对于所有指令,分派和解码阶段包括三级。执行阶段1130根据指令包括一到四级。
提取阶段1110包括程序地址生成级1111(PG)、程序访问级1112(PA)和程序接收级1113(PR)。在程序地址生成级1111(PG)期间,在CPU中产生程序地址并且将读取请求发送到一级指令缓存器L1I的存储器控制器。在程序访问级1112(PA)期间,一级指令缓存器L1I处理该请求、访问其存储器中的数据并且将提取包发送到CPU边界。在程序接收级1113(PR)期间,CPU寄存该提取包。
指令总是被一次提取十六个32位宽的间隙,构成提取包。图12说明单个提取包的16个指令1201-1216。提取包在512位(16字)边界上对准。优选实施例采用固定的32位指令长度。固定长度的指令是有利的,其原因有以下几个。固定长度的指令使得解码器容易对准。恰当对准的指令提取可以将复数个指令加载到并行指令解码器中。当预定指令对准存储在与固定指令包提取耦连的存储器(提取包在512位边界上对准)中时,预定指令对准可以获得这种恰当对准的指令提取。对准的指令提取允许并行解码器在指令尺寸的提取位上的操作。可变长度的指令需要在每个指令可以被解码之前定位每个指令边界的初始步骤。固定长度指令集通常允许更规则的指令字段的布局。这简化每个解码器的结构,有益于宽发布(wide issue)VLIW中央处理器。
个体指令的执行由每个指令中的p位部分地控制。优选地,该p位是32位宽的间隙的位0。p位确定指令是否与下一个指令并行执行。从较低地址到较高地址扫描指令。如果指令的p位是1,则下一个跟随的指令(较高存储器地址)与该指令并行执行(与该指令在同一个周期内)。如果指令的p位是0,则下一个跟随的指令在该指令之后的周期内被执行。
CPU 110和一级指令缓存器L1I 121流水线相互解耦。从一级指令缓存器L1I返回的提取包可以采用不同数量的时钟周期,这取决于外部情况,诸如是否在一级指令缓存器121中命中或在二级组合式缓存器130中命中。因此程序访问级1112(PA)可以采用几个时钟周期来代替如在其他级中的1个时钟周期。
并行执行的指令组成执行包。在优选实施例中,执行包可以包括高达十六个指令。执行包中任何两个指令都不可以使用相同的功能单元。间隙是以下五个类型之一:1)在CPU110的功能单元(L1单元221、S1单元222、M1单元223、N1单元224、D1单元225、D2单元226、L2单元241、S2单元242、M2单元243、N2单元244、C单元245和P单元246)的一个上执行的自持式指令;2)无单位指令,诸如NOP(无操作)指令或多重NOP指令;3)分支指令;4)常量字段扩展;以及5)条件码扩展。这些间隙类型中的一些将在下面进一步解释。
分派和解码阶段1110包括指令分派到适当执行单元级1121(DS);指令预解码级1122(D1);以及指令解码及操作数读取级1222(D2)。在指令分派到适当执行单元级1121(DS)期间,提取包被划分成执行包中并且分配给合适的功能单元。在指令预解码级1122(D1)期间,源寄存器、目的地寄存器和相关联的路径被解码用于执行功能单元中的指令。在指令解码及操作数读取级1222(D2)期间,完成更加详细的单元解码,并且从寄存器文件读取操作数。
执行阶段1130包括执行级1131-1135(E1-E5)。不同类型的指令需要不同数量的这些级以完成其执行。流水线的这些级对于理解CPU周期边界处的设备状态起到重要的作用。
在执行1级1131(E1)期间,估计指令的条件并且对操作数进行操作。如图11所图示说明的,执行1级1131可以接收来自流缓冲器1141和寄存器文件之一(图示性示出为1142)的操作数。对于加载和存储指令,执行地址生成并且将地址修改写入到寄存器文件。对于分支指令,PG阶段中的分支提取包受到影响。如图11所图示说明的,加载和存储指令访问存储器(在此图示性示出为存储器1151)。对于单周期指令,结果被写入到目的地寄存器文件。这假设指令的任何条件都被估计为正确。如果条件被估计为错误,则在执行1级1131之后指令不写入任何结果或不具有任何流水线操作。
在执行2级1132(E2)期间,加载指令将地址发送到存储器。存储指令将地址和数据发送到存储器。如果发生饱和,则使结果饱和的单周期指令设置控制状态寄存器(CSR)中的SAT位。对于2周期指令,结果被写入目的地寄存器文件。
在执行3级1133(E3)期间,执行数据存储器访问。如果发生饱和,则使结果饱和的任何多重指令设置控制状态寄存器(CSR)中的SAT位。对于3周期指令,结果被写入目的地寄存器文件。
在执行4级1134(E4)期间,加载指令将数据带到CPU边界。对于4周期指令,结果被写入目的地寄存器文件。
在执行5级1135(E5)期间,加载指令将数据写入到寄存器中。这在图11中通过从存储器1151到执行5级1135的输入来图示说明。
图13说明本发明使用的功能单元指令的指令编码1300的示例。本领域技术人员将认识到其他执行编码是可行的并且在本发明的范围内。每个指令由32位组成并且控制各个可控功能单元(L1单元221、S1单元222、M1单元223、N1单元224、D1单元225、D2单元226、L2单元241、S2单元242、M2单元243、N2单元244、C单元245和P单元246)中的一个的操作。位字段被定义如下。
creg字段1301(位29至位31)和z位1302(位28)是用于条件指令的可选字段。这些位被用于条件指令以识别断言寄存器和条件。z位1302(位28)指示断言是否基于断言寄存器中的零或非零。如果z=1,则测试是针对等于零的,如果z=0,则测试是针对非零的。creg=0并且z=0的情况被视为一直正确以允许无条件指令执行。creg字段1301和z字段1302如表1所示被编码在指令中。
表1
条件指令的执行是根据存储在指定数据寄存器中的值而有条件的。对于所有的指令单元,该数据寄存器在全局标量寄存器文件211中。注意z位栏中的“z”指的是上面提到的零/非零比较选择并且“x”是不关心状态。该编码可以仅指定16个全局寄存器的子集作为断言寄存器。做出该选择以保存指令编码中的位。注意无条件指令不具有这些可选位。优选地,对于无条件指令,字段1301和1302中的这些位(28到31)被用作附加操作码位。
dst字段1303(位23到位27)指定相应寄存器文件中的寄存器作为指令结果的目的地。
src2/cst字段1304(位18到位22)具有几个含义,其取决于指令操作码字段(位4到位12用于所有指令,并且附加地,位28到位31用于无条件指令)。第一含义指定相应寄存器文件的寄存器作为第二操作数。第二含义是直接常量。根据指令类型,这被视为扩展到指定数据长度的无符号整数和零或者视为扩展到指定数据长度的有符号整数和符号。
src1字段1305(位13到位17)指定相应的寄存器文件中的寄存器作为第一源操作数。
用于所有指令的操作码字段1306(位4到位12)(并且附加地用于无条件指令的位28到位31)指定指令的类型并且指示适当的指令选项。这包括所使用并且执行操作的功能单元的明确名称。除下面详述的指令选项外,操作码的详细解释超出本发明的范围。
e位1037(位2)仅用于直接常量指令,其中常量可以被扩展。如果e=1,则直接常量以下面详述的方式扩展。如果e=0,则直接常量不被扩展。在该情况下,直接常量由src2/cst字段1304(位18到位22)指定。注意该e位1307仅用于一些指令。因此,通过使用恰当的编码,该e位1307可以从不需要它的指令中省略并且该位用作附加操作码位。
s位1307(位1)指明标量数据路径侧A 115或矢量数据路径侧B 116。如果s=0,则选择标量数据路径侧A115。这将功能单元限制到图2中图示说明的L1单元221、S1单元222、M1单元223、N1单元224、D1单元225、D2单元226以及相应的寄存器文件。类似地,s=1选择矢量数据路径侧B 116,其将功能单元限制到图2中图示说明的L2单元241、S2单元242、M2单元243、N2单元244、P单元246以及相应的寄存器文件。
p位1308(位0)标记执行包。p位确定该指令是否与随后的指令并行执行。从较低地址到较高地址扫描p位。如果对于当前指令p=1,则下一个指令与当前指令并行执行。如果对于当前指令p=0,则下一个指令在当前指令之后的周期中执行。并行执行的所有指令组成执行包。执行包可以包含高达12个指令。执行包中的每个指令必须使用不同的功能单元。
存在两种不同的条件码扩展间隙(slot)。每个执行包可以包含这些独特的32位条件码扩展间隙中的每一个,对于同一执行包中的指令,这32位条件码扩展间隙包含4位creg/z字段。图14说明用于条件码扩展间隙0的编码并且图15说明用于条件码扩展间隙1的编码。
图14说明用于具有32位的条件码扩展间隙0的编码。字段1401(位28到位31)指定分配到同一执行包中的L1单元221指令的4个creg/z位。字段1402(位27到位24)指定分配到同一执行包中的L2单元241指令的4个creg/z位。字段1403(位19到位23)指定分配到同一执行包中的S1单元222指令的4个creg/z位。字段1404(位16到位19)指定分配到同一执行包中的S2单元242指令的4个creg/z位。字段1405(位12到位15)指定分配到同一执行包中的D1单元225指令的4个creg/z位。字段1406(位8到位11)指定分配到同一执行包中的D2单元245指令的4个creg/z位。字段1407(位6和位7)是未使用的/保留的。字段1408(位0到位5)被编码一组独特位(CCEX0)以识别条件码扩展间隙0。一旦检测到条件码扩展间隙0的该独特ID,则采用相应的creg/z位来控制同一执行包中任意的L1单元221、L2单元241、S1单元222、S2单元242、D1单元224、D2单元225指令的条件执行。这些creg/z位如表1所示来解读。如果相应的指令是有条件的(包括creg/z位),则条件码扩展间隙0中的相应位覆盖(override)指令中的条件码位。注意执行包不能具有指向特定执行单元的不止一个指令。指令的执行包不能包括不止一个条件码扩展间隙0。因此creg/z位到功能单元指令的映射是清楚的。将creg/z位设置为等于“0000”使得指令是无条件的。因此恰当编码的条件码扩展间隙0可以使得一些相应的指令是有条件的并且一些指令是无条件的。
图15说明用于具有32位的条件码扩展间隙1的编码。字段1501(位28到位31)指定分配到同一执行包中的M1单元223指令的4个creg/z位。字段1502(位27到位24)指定分配到同一执行包中的M2单元243指令的4个creg/z位。字段1503(位19到位23)指定分配到同一执行包中的C单元245指令的4个creg/z位。字段1504(位16到位19)指定分配到同一执行包中的N1单元224指令的4个creg/z位。字段1505(位12到位15)指定分配到同一执行包中的N2单元244指令的4个creg/z位。字段1506(位5到位11)是未使用的/保留的。字段1507(位0到位5)被编码一组独特位(CCEX1)以识别条件码扩展间隙1。一旦检测到条件码扩展间隙1的该独特ID,则采用相应的creg/z位来控制同一执行包中任意的M1单元223、M2单元243、C单元245、N1单元224和N2单元244指令的条件执行。这些creg/z位如表1中所示来解读。如果相应的指令是有条件的(包括creg/z位),则条件码扩展间隙1中相应的位超控指令中的条件码位。注意执行包不可以具有指向特定执行单元的不止一个指令。指令的执行包不可以包括不止一个条件码扩展间隙1。因此creg/z位到功能单元指令的映射是清楚的。将creg/z位设置为等于“0000”来使得指令是无条件的。因此恰当编码的条件码扩展间隙1可以使得一些指令是有条件的并且一些指令是无条件的。
如上面结合图13所描述,条件码扩展间隙0和条件码扩展间隙1两者都可以包括p位以定义执行包。在优选实施例中,如图14和图15中所图示说明,码扩展间隙0和条件码扩展间隙1优选具有一直被编码为1的位0(p位)。因此,条件码扩展间隙0和条件码扩展间隙1都不可以在执行包的最后一个指令间隙中。
存在两个不同的常量扩展间隙。每个执行包可以包含这些独特32位常量扩展间隙中的每一个,32位常量扩展间隙包括将被串接(concatenate)为高阶位的27位与5位常量字段1305以形成32位常量。如上面的指令编码描述所提到的,仅一些指令将src2/cst字段1304定义为常量而不是源寄存器标识符。这些指令中的至少一些可以采用常量扩展间隙来将该常量扩展到32位。
图16说明常量扩展间隙0的字段。每个执行包可以包括常量扩展间隙0的一个实例和常量扩展间隙1的一个实例。图16说明常量扩展间隙0 1600包括两个字段。字段1601(位5到位31)组成扩展的32位常量的27个最高有效位,该扩展的32位常量包括作为五个最低有效位的目标指令scr2/cst字段1304。字段1602(位0到位4)被编码一组独特位(CSTX0)以识别常量扩展间隙0。在优选实施例中,常量扩展间隙0 1600可以仅被用于扩展同一执行包中的L1单元221指令、D1单元225指令中的数据、S2单元242指令、D2单元226指令中的偏移、M2单元243指令、N2单元244指令、分支指令或C单元245指令中的一个的常量。常量扩展间隙1中除了位0到位4被编码为一组独特位(CSTX1)以识别常量扩展间隙1以外与常量扩展间隙0类似。在优选实施例中,常量扩展间隙1可以仅被用于扩展同一执行包中的L2单元241指令、D2单元226指令中的数据、S1单元222指令、D1单元225指令中的偏移、M1单元223指令或N1单元224指令中的一个的常量。
以如下方式使用常量扩展间隙0和常量扩展间隙1。目标指令必须具有允许常量规范的类型。如本领域已知的,这通过用如上面关于scr2/cst字段1304所描述的常量的最低有效位来代替一个输入操作数寄存器规范字段来实现。指令解码器113根据指令操作码位确定这种情况(其被称为直接字段)。目标指令还包括一个常量扩展位(e位1307),该常量扩展位专用于发出指定的常量没有被扩展(优选地,常量扩展位=0)还是常量被扩展(优选地,常量扩展位=1)的信号。如果指令解码器113检测到常量扩展间隙0或常量扩展间隙1,其为对应于检测到的常量扩展间隙的指令进一步检查该执行包内的其他指令。仅当一个相应指令具有等于1的常量扩展位(e位1307)时进行常量扩展。
图17是说明常量扩展的部分框图1700。图17假设指令解码器113检测同一执行包中的常量扩展间隙和相应的指令。指令解码器113将来自常量扩展间隙的27个扩展位(位字段1601)以及来自相应的指令的5个常量位(位字段1305)供应到串接器1701。串接器1701根据这两部分形成单个32位字。在优选实施例中,来自常量扩展间隙的27个扩展位(位字段1601)是最高有效位并且5个常量位(位字段1305)是最低有效位。该组合的32位字被供应到多路复用器1702的一个输入。来自相应的指令字段1305的5个常量位将第二输入供应到多路复用器1702。多路复用器1702的选择受常量扩展位的状态控制。如果常量扩展位(e位1307)是1(被扩展),则多路复用器1702选择串接的32位输入。如果常量扩展位是0(未扩展),则多路复用器1702选择来自相应的指令字段1305的5个常量位。多路复用器1702将该输出供应到符号扩展单元1703的输入。
符号扩展单元1703根据来自多路复用器1703的输入形成最终操作数值。符号扩展单元1703接收控制输入标量/矢量和数据尺寸。标量/矢量输入指示相应的指令是标量指令还是矢量指令。数据路径侧A115的功能单元(L1单元221、S1单元222、M1单元223、N1单元224、D1单元225和D2单元226)可以仅执行标量指令。指向这些功能单元中的一个的任何指令都是标量指令。数据路径侧B 116的功能单元L2单元241、S2单元242、M2单元243、N2单元244和C单元245可以执行标量指令或矢量指令。指令解码器113根据操作码位确定指令是标量指令还是矢量指令。P单元246可以仅执行标量指令。数据尺寸可以是8位(字节B)、16位(半字H)、32位(字W)或64位(双字D)。
表2列出用于各种选项的符号扩展单元1703的操作。
表2
如上面结合图13所描述的,常量扩展间隙0和常量扩展间隙1两者都可以包括p位以定义执行包。在优选实施例中,如在条件码扩展间隙的情况中,常量扩展间隙0和常量扩展间隙1优选具有总被编码为1的位0(p位)。因此,常量扩展间隙0和常量扩展间隙1都不可以在执行包的最后一个指令间隙中。
执行包包括常量扩展间隙0或1以及标记为常量扩展(e位=1)的不止一个相应指令在技术上是可行的。对于常量扩展间隙0,这将意味着执行包中的L1单元221指令、D1单元225指令中的数据、S2单元242指令、D2单元226指令中的偏移、M2单元243指令或N2单元244指令中不止一个具有为1的e位。对于常量扩展间隙1,这将意味着执行包中的L2单元241指令、D2单元226指令中的数据、S1单元222指令、D1单元225指令中的偏移、M1单元223指令或N1单元224指令中不止一个具有为1的e位。将相同的常量扩展供应到不止一个指令不被预计为是有用的功能。因此,在一个实施例中,指令解码器113可以确定这种情况是无效操作并且不被支持。替代地,该组合可以由施加到标记为常量扩展的每个相应功能单元指令的常量扩展间隙的扩展位支持。
L1单元221、S1单元222、L2单元241、S2单元242和C单元245通常以单指令多数据(SIMD)模式进行操作。在该SIMD模式中,相同的指令被施加到来自两个操作数的打包数据。每个操作数保持设置在预定间隙中的复数个数据元素。SIMD操作通过在数据边界处的进位控制来启用。这种进位控制使能对变化的数据宽度进行的操作。
图18说明进位控制。与门1801接收操作数宽度的算法逻辑单元(对于标量数据路径侧A115功能单元是64位,并且对于矢量数据路径侧B 116功能单元是512位)内的位N的进位输出。与门1801还接收将在下面进一步解释的进位控制信号。与门1801的输出被供应到操作数宽度的算法逻辑单元的位N+1的进位输入。与门(诸如与门1801)被设置在可能的数据边界处的每一对数位之间。例如,对于8位数据,这种与门将在位7和位8、位15和位16、位23和位24等之间。每一个这种与门接收相应的进位控制信号。如果数据尺寸是最小的,则每个进位控制信号是0,从而有效地阻挡相邻位之间的进位传输。如果选择的数据尺寸需要两个算法逻辑单元区段,则相应的进位控制信号是1。下面的表3示出诸如矢量数据路径侧B116功能单元所使用的512位宽的操作数的情况下的示例进位控制信号,其可以被分为8位区段、16位区段、62位区段、64位区段、128位区段或256位区段。在表3中,上面的32位控制上面几位(位128到位511)进位,并且下面的32位控制下面几位(位0到位127)进位。不需要对最高有效位的进位输出进行控制,因此仅需要63个进位控制信号。
表3
本领域中典型的是对2的整数幂(2N)的数据尺寸进行操作。然而,该进位控制技术不限于2的整数幂。本领域技术人员将理解如何将该技术应用到其他数据尺寸或其他操作数宽度。
在优选实施例中,至少L单元241和S单元242采用使用断言寄存器文件234中的寄存器的两种类型的SIMD指令。在优选实施例中,所有这些SIMD矢量断言指令在指令指定的数据尺寸上操作。数据尺寸可以包括字节(8位)数据、半字(16位)数据、字(32位)数据、双字(64位)数据、四倍字(128位)数据以及半矢量(256位)数据。在这些指令类型的第一类型中,功能单元(L单元241或S单元242)对两个通用数据寄存器中的打包数据执行SIMD比较并且将结果供应到断言数据寄存器。指令指定数据尺寸、两个通用数据寄存器操作数和目的地断言寄存器。在优选实施例中,每个断言数据寄存器包括对应于通用数据寄存器的每个最小数据尺寸部分的一个位。在当前实施例中,通用数据寄存器是512位(64字节)并且断言数据寄存器是64位(8字节)。断言数据寄存器的每个位对应于通用数据寄存器的8个位。在指定的数据尺寸(8、16、32、64、128或256位)上执行比较。如果比较为真,则功能单元将“1”供应到对应于该数据尺寸部分的所有断言寄存器位。如果比较为假,则功能单元将“0”供应到对应于该数据尺寸部分的所有断言寄存器位。在优选实施例中,启用的比较操作包括:“小于”、“大于”以及“等于”。
在这些指令类型的第二类型中,功能单元(L单元241或S单元242)基于断言数据寄存器中的数据状态单独对通用数据寄存器中的打包数据执行第一SIMD操作或第二SIMD操作。指令指定数据尺寸、一个或两个通用数据寄存器操作数、控制断言寄存器和通用数据寄存器目的地。例如,功能单元可以针对两个矢量操作数的每个数据尺寸部分选择第一操作数的第一数据元素或第二操作数的第二数据元素以存储在目的地寄存器中,这种选择取决于断言数据寄存器中的相应位的1/0状态。在第二示例中,信号矢量操作数的数据元素可以被保存到存储器或不保存,这取决于断言存储器的相应位的数据。
P单元245的操作允许基于多于一个矢量比较的各种复合矢量SIMD操作。例如,可以使用两个比较来进行范围确定。在SIMD操作中,候选矢量与具有打包在第一数据寄存器内的范围的最小值的第一矢量基准进行比较。“大于”结果是标量数据,其中对应于SIMD数据宽度的位被设置为0或1,这取决于SIMD比较。该结果被存储在第一断言数据寄存器中。进行候选矢量与具有打包在第二数据寄存器内的范围的最大值的第二基准矢量的第二SIMD比较,产生另一标量,其“小于”结果被存储在第二断言寄存器中。然后P单元将第一断言寄存器和第二断言寄存器进行“与(AND)”操作。“AND”结果指示候选矢量的每个SIMD数据部分是在范围内还是在范围外。“AND”结果的P单元BITCNT指令可以产生在比较范围内的数据元素的计数。P单元ENG功能可以用于:将小于比较结果转换成大于或等于比较结果,将大于比较结果转换成小于或等于比较结果,或者将等于比较结果转换成不等于比较结果。
图19说明本发明的流引擎的概念视图。图19说明单个流的处理过程。流引擎1900包括流地址生成器1901。流地址生成器1901连续生成流元素的地址并且将这些元素地址供应到系统存储器1910。存储器1910调用存储在元素地址处的数据(数据元素)并且将这些数据元素供应到数据先进先出(FIFO)存储器1902。数据FIFO 1902在存储器1910和CPU 1920之间提供缓冲。数据格式化器1903接收来自数据FIFO存储器1902的数据元素并且根据流定义来提供数据格式化。该处理过程将在下面描述。流引擎1900将来自数据格式化器1903的格式化数据元素供应到CPU 1920。CPU 1920上的程序消耗该数据并且生成输出。
流元素通常存在于正常存储器中。存储器自身不为该流规定特定结构。程序定义流并且因此通过指定以下流属性来规定结构:流的第一元素的地址;流中的元素的尺寸和类型;流中的数据的格式化;以及与流相关联的地址序列。
流引擎根据穿行整个存储器的指针来定义流的元素的地址序列。多级嵌套循环控制指针所采取的路径。循环级的迭代计数指示该级重复的次数。维度给出该循环级的指针位置之间的距离。
在基础正向流中,最内部循环一直物理消耗来自存储器的连续元素。该最内部循环的隐式维度是1个元素。指针自身以连续递增的次序逐个元素地移动。在内部循环外部的每个级中,该循环基于该循环级的维度的尺寸将指针移动到新位置。
这种形式的寻址允许程序以小数量的参数指定穿过存储器的规则路径。表4列出基础流的寻址参数。
/>
表4
根据本发明的优选实施例,ELEM_BYTES的范围是从1到64字节,如表5所示:
ELEM_BYTES | 流元素长度 |
000 | 1字节 |
001 | 2字节 |
010 | 4字节 |
011 | 8字节 |
100 | 16字节 |
101 | 32字节 |
110 | 64字节 |
111 | 保留 |
表5
上面的定义将流的连续元素映射到存储器中的增加的地址。这对大部分(并非所有的)算法效果良好。一些算法通过以降低的存储器地址、反向流寻址的方式读取元素来更好的服务。例如,根据以下公式,离散卷积计算矢量点积:
在大部分DSP代码中,f[]和g[]表示存储器中的阵列。对于每个输出,算法以正向方向读取f[],但是以反向方向读取g[]。实际的滤波器将[x]和[t-x]的指数范围限制到有限数量的元素。为了支持这种模式,流引擎支持以降低的地址顺序读取元素。
矩阵乘法运算对流引擎提出了独特的问题。矩阵乘积中的每个元素是来自第一矩阵的行与来自第二矩阵的列之间的矢量点积。程序通常全部以行主序或列主序存储矩阵。行主序将单个行的所有元素连续存储在存储器中。列主序将单个列的所有元素连续存储在存储器中。矩阵通常以与语言的默认阵列顺序相同的顺序存储。作为结果,矩阵乘法运算中的两个矩阵中只有一个映射到流引擎的2维流定义。在典型的示例中,第一索引逐步通过第一阵列上的列而逐步通过第二阵列上的行。该问题并不是流引擎所特有的。矩阵乘法运算的访问模式不能很好地符合大多数通用存储器分级体系。一些软件库转置两个矩阵中的一个,使得在乘法运算期间两者均以逐行(或逐列)方式访问。流引擎用转置的流来支持隐式矩阵转置。转置的流避免在存储器中明确转换数据的成本。代替以严格连续元素顺序访问数据,流引擎以其横向顺序有效交换内部两个循环维度,沿第二维度将元素提取到连续矢量通道中。
该算法能够起作用,但是对于小元素尺寸的实施是不切实际的。一些算法工作于多个列和行在一起的矩阵拼接。因此,流引擎定义单独的转置粒度。硬件规定最小的粒度。转置粒度还必须至少是与元素尺寸一样大的。转置粒度导致流引擎在沿维度1移动之前从维度0提取一个或多个连续元素。当粒度等于元素尺寸时,这导致从行主序阵列提取单个列。否则,粒度指定每次从行主序阵列提取2个、4个或更多个列。通过交换该描述中的行和列,这也适用于列主序布局。参数GRANULE指示以字节为单位的转置粒度。
另一种常见矩阵乘法运算技术交换矩阵乘法的最里面的两个循环。当横穿另一个矩阵的行读取时,生成的内部循环不再向下读取一个矩阵的列。例如,该算法可以将一项提升到内部循环以外,用标量值将其代替。在矢量机上,最内部循环可以通过在单个标量与矢量相乘之后进行矢量求和来非常有效地实现。本发明的中央处理单元核110缺乏标量与矢量乘法。替代地,程序必须横穿矢量的长度重复标量值并且使用矢量与矢量乘法。本发明的流引擎用元素重复模式直接支持该使用模式和相关的使用模式。在该模式中,流引擎读取比全矢量尺寸更小的颗粒/粒集(granule)并且复制该颗粒以填充下一个矢量输出。
流引擎将每个复数处理为具有两个子元素的单个元素,其给出了复数的实部和虚部(直角坐标)或量值部分和角度部分(极坐标)。不是所有的程序或外围设备都与这些子元素应该存在于存储器中的顺序一致。因此,流引擎提供了无成本互换复数的两个子元素的能力。该特征互换元素的一半而不解释元素的内容并且可以用于互换任意类型的子元素对,而不仅仅是复数。
算法通常优选以高精度工作,但是高精度值比较低精度值需要更多的存储设备和带宽。通常,程序将在存储器中以低精度存储数据,将这些值提升到较高精度以便计算,然后将这些值降低到较低精度以便存储。流引擎通过允许算法指定一种类型提升水平来直接支持这种方式。在本发明的优选实施例中,每个子元素可以以整数类型的符号扩展或零扩展被提升到较大类型尺寸。同样可行的是流引擎可以支持浮点提升,其分别将16位和32位浮点值提升到32位和64位格式。
流引擎将流定义为数据元素的离散序列,中央处理单元核110消耗连续打包成矢量的数据元素。矢量与流的相似之处在于它们包含多个同类元素和一些隐式序列。因为流引擎读取流,但是中央处理单元核110消耗矢量,因此流引擎必须以一致的方式将流映射到矢量上。
矢量由相同尺寸的通道(lane)组成,每个通道包含子元素。中央处理单元核110将矢量的最右边的通道指示为通道0,而不管设备的当前端字节序(endian)模式如何。通道编号从右到左递增。矢量内的通道的实际数量根据矢量的长度和子元素的数据尺寸变化。
图20说明格式化器1903的格式化操作的序列。格式化器1903包括三个区段:输入区段2010;格式化区段2020;和输出区段2030。输入区段2010接收从由流地址生成器1901访问的系统存储器1910调用的数据。该数据可以通过线性提取流2011或转置提取流2012来实现。
格式化区段2020包括各种格式化块。由格式化器1903通过这些块执行的格式化将在下面进一步描述。复数互换块2021可选地将形成复数元素的两个子元素互换。类型提升块2022可选地将每个数据元素提升到更大数据尺寸。提升包括用于无符号整数的零扩展和用于有符号整数的符号扩展。抽取(decimation)块2023可选地抽取数据元素。在优选实施例中,抽取可以是2:1即每隔另一个数据元素保留一个,或者是4:1即每四个数据元素保留一个。元素重复块2024可选地使个体数据元素重复。在优选实施例中,该数据元素重复是2的整数幂(2N,其中N是整数),包括2倍、4倍、8倍、16倍、32倍和64倍。在优选实施例中,数据重复可以在多个目的地矢量上扩展。矢量长度掩码/组重复块2025具有两个主功能。独立指定的矢量长度VECLEN控制供应到每个输出数据矢量的数据元素。当组重复关闭时,输出数据矢量中的过量通道被零填充并且这些通道被标记为无效。当组重复开启时,指定的矢量长度的输入数据元素被重复以填充输出数据矢量。
输出区段2030保持数据以用于输出到相应的功能单元。用于CPU 2031的寄存器和缓冲器存储将被中央处理单元核110的功能单元用作操作数的格式化数据矢量。
图21说明矢量中的通道分派的第一示例。矢量2100被划分成8个64位通道(8×64位=512位的矢量长度)。通道0包括位0至位63;通道1包括位64至位125;通道2包括位128至位191;通道3包括位192至位255;通道4包括位256至位319;通道5包括位320至位383;通道6包括位384至位447;通道7包括位448至位511。
图22说明矢量中的通道分派的第二示例。矢量2210被划分成16个32位通道(16×32位=512位的矢量长度)。通道0包括位0至位31;通道1包括位32至位63;通道2包括位64至位95;通道3包括位96至位127;通道4包括位128至位159;通道5包括位160至位191;通道6包括位192至位223;通道7包括位224至位255;通道8包括位256至位287;通道9包括位288至位319;通道10包括位320至位351;通道11包括位352至位387;通道12包括位388至位415;通道13包括位416至位447;通道14包括位448至位479;并且通道15包括位480至位511。
流引擎将最里面的流维度直接映射到矢量通道。其将该维度内的靠前的元素映射到较低的通道编号并且将靠后的元素映射到较高的通道编号。无论该特定流以增加地址顺序提前还是以减小地址顺序提前,这都是正确的。无论流如何定义顺序,流引擎以增加通道的顺序将元素存放到矢量中。对于非复合数据,其将第一元素放置在中央处理单元核110提取的第一矢量的通道0中,将第二元素放在通道1中,以此类推。对于复合数据,流引擎将第一元素放置在通道0和通道1中,将第二元素放置在通道2和通道3中,以此类推。不管流方向如何,元素内的子元素保持相同的相对顺序。对于非互换的复合元素,这将每对中具有较低地址的子元素放置在偶数编号的通道中,并且将每对中具有较高地址的子元素放置在奇数编号的通道中。互换的复合元素反转该映射。
流引擎用中央处理单元核110从最内部流维度所能提取的尽可能多的元素填充CPU提取的每个矢量。如果最内部维度不是矢量长度的倍数,则流引擎通过填充零将该维度拉长到多倍矢量长度。如在下面记载的,流引擎也将这些通道标记为无效。因此对于较高维度的流,来自外部维度的每次迭代的第一元素抵达矢量的通道0。流引擎总是将最内部维度映射到矢量中的连续通道。对于转置的流,如果转置交换了维度1和维度0,则最内部维度由沿维度1而非维度0的子元素的群组构成,因为转置交换了这两个维度。
二维流相比于一维流表现出更大的多样化。基础二维流从较大的矩形中提取出较小的矩形。转置的二维流逐列而非逐行读取矩形。第二维度与第一维度重叠的循环流执行有限冲击响应(FIR)滤波分接,其反复循环或对提供输入样品的滑动窗口的样品进行FIR滤波。
图23说明基础二维流。由ELEM_BYTES、ICNT0、DIM1和ICNT1代表的内部两个维度给出充分的灵活性以描述从具有维度2311和2312的较大矩形2310去除具有维度2321和2322的较小矩形2320。在该示例中,矩形2320是64位值的9×13的矩形并且矩形2310是较大的11×19的矩形。下面的流参数定义该流:
ICNT0=9
ELEM_BYTES=8
ICNT1=13
DIM1=88(11乘以8)
因此,0维度2311中的迭代计数是9。1方向2322中的迭代计数是13。注意ELEM_BYTES仅缩放最内部维度。第一维度具有ELEM_BYTES尺寸的ICNT0元素。流地址生成器不缩放外部维度。因此,DIM1=88,其是11个元素,其中每个元素被缩放8个字节。
图24说明该示例流内的元素的顺序。流引擎以图示为顺序2400的顺序提取该流的元素。前9个元素来自矩阵2320的第一行,从左到右为跃程(hop)1到跃程8。第10个元素至第24个元素来自第二行,等等。当流从第9个元素移动到第10个元素时(图24中的跃程9),流引擎基于指针在内部循环的开始处的位置,而不是指针在第一维度的末端处结束的地方,来计算新位置。这使得DIM1独立于ELEM_BYTES和ICNT0。DIM1一直代表每个连续行的第一字节之间的距离。
转置的流在沿维度0访问之前沿维度1访问。以下示例说明一对转置的流,其具有变化的转置粒度。图25说明从具有维度2511和2512的较大矩形2510(14×13)中提取出具有维度2521和2522的较小矩形2520(12×8)。在图25中ELEM_BYTES等于2。
图26说明流引擎将如何提取本示例中具有4字节转置粒度的流。提取模式2600从每个行提取元素对(因为值为4的粒度是值为2的ELEM_BYTES的两倍),但是除此之外向下移动各列。一旦它到达一对列的底部,其用下一对列重复该模式。
图27说明流引擎将如何提取本示例中具有8字节转置粒度的流。整体结构保持相同。如提取模式2700所示,流引擎从每一行提取4个元素(因为值为8的粒度是值为2的ELEM_BYTES的四倍),随后在列上移动到下一行。
迄今为止检查的流从存储器恰好读取每个元素一次。流可以从存储器读取给定元素多次,实际上在一片存储器上循环。FIR滤波器表现出两个常见的循环模式。FIR重新读取每个输出的相同的滤波分接。FIR还从滑动窗口读取输入样品。两个连续的输出将需要来自两个重叠窗口的输入。
图28说明流引擎2800的细节。流引擎2800包含三个主区段:流0 2810;流1 2820;以及共享的L2接口2830。流0 2810和流1 2820两者都包含并行操作的相同硬件。流0 2810和流1 2820两者共享L2接口2830。每个流2810和2820提供每周期具有高达512位/周期的中央处理单元核110。流引擎架构通过其专用流路径和共享的成双L2接口来使能这一效果。
每个流引擎2800包括专用的6维流地址生成器2811/2821,其每一个可以每周期产生一个新的非对准请求。地址生成器2811/2821输出与由流参数定义的序列中的元素重叠的512位对准地址。这将在下面进一步描述。
每个地址生成器2811/2811连接到专用微工作台后援缓冲器(μTLB)2812/2822。μTLB 2812/2822每个周期将单个48位虚拟地址转换为44位物理地址。每个μTLB 2812/2822具有8个条目,其覆盖具有4KB页的最小32KB或具有2MB页的最大16MB。每个地址生成器2811/2811每周期产生两个地址。μTLB 2812/2822每周期仅转化1个地址。为了保持吞吐量,流引擎2800利用大多数流基准将在同一4kB页内这一事实。因此,地址转化不修改地址的位0至位11。如果aout0和aout1排列在同一4KB页中(aout0[47:12]与aout1[47:12]相同),则μTLB 2812/2822仅转化aout0并且重新使用两个地址中的较高位的转化。
转化的地址排列在命令队列2813/2823中。这些地址与来自相应的存储分派和跟踪块2814/2824的信息对准。流引擎2800不明确管理μTLB 2812/2822。系统存储器管理单元(MMU)根据需要在环境切换期间使μTLB无效。
存储分派和跟踪块2814/2824管理流的内部存储设备,探索数据的重新使用并且跟踪每片数据的寿命。这将在下面进一步描述。
引用队列2815/2825存储由相应的地址生成器2811/2821产生的引用的序列。该信息驱动数据格式化网络,使得其可以将数据以正确的顺序呈现给中央处理单元核110。引用队列2815/2825中的每个词条包含用于从数据存储器读出数据并将其对准用于中央处理单元核110的必要信息。引用队列2815/2825在每个间隙中维持表6中列出的以下信息:
表6
当地址生成器2811/2821产生新地址时,存储分派和跟踪块2814/2824将引用插入引用队列2815/2825中。当数据变得可用并且流头寄存器中存在空间时,存储分派和跟踪块2814/2824从引用队列2815/2825中移除引用。当存储分派和跟踪块2814/2824从引用队列2815/2825中移除间隙引用并且格式化数据时,其检查这些引用是否代表对相应间隙的最近引用。存储分派和跟踪块2814/2824比较去除指针的引用队列2815/2825与间隙的记录的Last Reference。如果它们匹配,则存储分派和跟踪块2814/2824一旦处理完数据就将间隙标记为未激活。
流引擎2800具有用于任意数量元素的数据贮存器2816/2826。深度缓冲允许流引擎领先于该流进行提取,从而隐藏存储器系统延迟。正确的缓冲量可能在每个产品代际(product generation)之间发生变化。在当前优选实施例中,流引擎2800为每个流贡献32个间隙。每个间隙持有64个字节的数据。
蝴蝶网络/蝶形网络(Butterfly network)2817/2827由7级蝴蝶网络构成。蝴蝶网络2817/2827接收128字节的输入并且产生64字节的输出。该蝴蝶网络的第一级实际是半级。其收集来自匹配未对准提取的两个间隙的字节并且将它们合并为单个旋转的64字节阵列。剩余的6级形成标准的蝴蝶网络。蝴蝶网络2817/2827执行以下操作:将下一个元素向下旋转到字节通道0;如果被请求,则以2次幂提升数据类型;如果被请求,则将复数的实部和虚部互换;如果中央处理单元核110目前处于大端字节序(endian)模式,将大端字节序转换为小端字节序。用户指定元素尺寸、类型提升以及实/虚互换作为流的参数的一部分。
流引擎2800尝试在中央处理单元核110对数据有需求之前提取并格式化该数据,使得其可以维持充足的吞吐量。流头寄存器2818/2828提供少量的缓冲,使得该过程保留充足的流水线化。除了流引擎2800提供充足的吞吐量这一事实以外,流头寄存器2818/2828在架构上不是直接可见的。每个流还具有流有效寄存器2819/2829。有效寄存器2819/2829指示相应的流头寄存器2818/2828中的哪个元素有效。
两个流2810/2820共享一对独立的L2接口2830:L2接口A(IFA)2833和L2接口B(IFB)2834。对于1024位/周期的聚合带宽,每个L2接口直接向L2控制器提供512位/周期的吞吐量。L2接口使用基于信用的多核总线架构(MBA)协议。L2控制器为每个接口分配其自身的命令信用池(pool of command credits)。当读取L2 RAM、L2缓存器和多核共享存储器控制器(MSMC)存储器(在下文描述)时,该池应该具有足够的信用以使得每个接口可以发送足够的请求来获得充足的回读(read-return)带宽。
为了使性能最大化,两个流都可以使用这两个L2接口,从而允许单个流发送2个请求/周期的峰值命令率。每个接口优选一个流在另一个流之上,但是该偏好对于每个请求来说是动态变化的。IFA 2833和IFB 2834一直优选相反的流,当IFA2833优选流0时,IFB 2834优选流1,反之亦然。
在每个接口2833/2834之前的仲裁器2831/2832在其具有可用信用的每个周期上应用以下基础协议。仲裁器2831/2832检查优选的流是否具有准备好发送的命令。如果是,则仲裁器2831/2832选择该命令。仲裁器2831/2832接下来检查替代的流是否具有准备好发送的至少两个请求或者一个命令并且没有信用。如果是,则仲裁器2831/2832从该替代流中拉出命令。如果任一个接口发布命令,则对于下一个请求,互换优选流和替代流的注释。使用这种简单的算法,两个接口能够尽可能快地分派请求,同时在两个流之间保持公平。第一规则确保每个流可以在具有可用信用的每个周期上发送请求。第二规则提供了当第二接口空闲时第一流借用另一个流的接口的机制。第三规则为横跨两个接口的每个流扩展带宽需求,确保两个接口都不会自身变成瓶颈。
粗粒度旋转器2835/2836使得流引擎2800能够支持转置的矩阵寻址模式。在该模式中,流引擎2800交换其多维循环的两个最内部维度。这对阵列进行逐列访问而非逐行访问。除了启用该转置的访问模式之外,旋转器2835/2836在架构上不是可见的。
流定义模板提供包含数据的流的完整结构。迭代计数和维度提供了大部分的结构,而各种标识提供剩余的细节。对于所有包含数据的流,流引擎定义单个流模板。其支持的所有流类型都适合该模板。流引擎定义用于对该流中的元素进行寻址的六级循环嵌套。流模板中的大多数字段直接映射到该算法中的参数。图29说明流模板寄存器2900。字段上的数字是256位矢量内的位数。表7示出流模板的流字段定义。
/>
表7
循环0是最里面的循环并且循环5是最外面的循环。在当前示例中,DIM0一直等于物理定义连续数据的ELEM_BYTES。因此流模板寄存器2900没有定义DIM0。流引擎2800将所有的迭代计数解释为无符号整数并且将所有的维度解释为无缩放的有符号整数。在任一级处的迭代计数(ICNT0、ICNT1、ICNT2、ICNT3、ICNT4或ICNT5)指示空流。每个迭代计数必须至少是1以定义有效流。上述模板完全指定元素的类型、流的长度和维度。流指令分别指定起始地址。这通常由存储该起始地址的标量寄存器文件211中的标量寄存器来规范。这允许程序使用相同的模板(但是存储开始地址的寄存器不同)打开多个流。
图30说明标识字段2911的子字段定义。如图30中示出的,标识字段2911是6字节或48位。图30示出字段的位数量。表8示出这些字段的定义。
/>
表8
元素类型(ELTYPE)字段3001定义流中的元素的数据类型。ELTYPE字段3001的四位的编码如表9所示来定义。
表9
实数/复数类型确定流引擎是否将每个元素视为实数或复数的两个部分(实部/虚部或者量值/角度)。该字段还指定是否互换复数的两个部分。复数类型具有两倍于其子元素尺寸的总元素尺寸。否则,子元素尺寸等于总元素尺寸。
子元素尺寸以类型提升和矢量通道宽度为目的确定类型。例如,当流请求类型提升时,16位子元素被提升为32位子元素或64位子元素。由于中央处理单元核110一直以小端字节序顺序列出矢量,因此当中央处理单元核110以大端字节序模式操作时,矢量通道宽度是重要的。
总元素尺寸确定流的最小粒度。在流寻址模型中,其为最内部循环的每个迭代确定流提取的字节数量。流一直读取完整的元素,或者以递增顺序或者以递减顺序。因此,流的最内部维度跨过ICNT0×总元素尺寸的字节。
“转置(TRANSPOSE)”字段3002确定流引擎是否以转置的顺序访问流。转置的顺序交换内部的两个寻址级。TRANSPOSE字段3002还指示其转置该流的粒度。TRANSPOSE字段3002的三位的编码被定义为如表10所示以用于正常2D操作。
转置 | 含义 |
000 | 转置禁用 |
001 | 在8位边界上转置 |
010 | 在16位边界上转置 |
011 | 在32位边界上转置 |
100 | 在64位边界上转置 |
101 | 在128位边界上转置 |
110 | 在256位边界上转置 |
111 | 保留 |
表10
流引擎2800实际可以以与元素尺寸不同的粒度对数据元素进行转置。这允许程序从每行提取多列元素。转置粒度必须不小于元素尺寸。TRANSPOSE字段3002以在下文中进一步描述的方式与DIMFMT字段3009交互。
“提升(PROMOTE)”字段3003控制流引擎是否提升流中的子元素以及提升的类型。当被启用时,流引擎2800以2的幂数的尺寸提升类型。PROMOTE字段3003的三位的编码如表11所示来定义。
/>
表11
当PROMOTE为000时,其对应于1倍提升,每个子元素不改变并且占用宽度等于由ELTYPE指定的尺寸的矢量通道。当PROMOTE为001时,对应于2倍提升和零扩展,每个子元素被视为无符号整数并且被零扩展到两倍于由ELTYPE指定的宽度的矢量通道。2倍提升对于64位的初始子元素尺寸是无效的。当PROMOTE为010时,对应于4倍提升和零扩展,每个子元素被视为无符号整数并且被零扩展到四倍于由ELTYPE指定的宽度的矢量通道。4倍提升对于32位或64位的初始子元素尺寸是无效的。当PROMOTE为011时,对应于8倍提升和零扩展,每个子元素被视为无符号整数并且被零扩展到八倍于由ELTYPE指定的宽度的矢量通道。8倍提升对于16位、32位或64位的初始子元素尺寸是无效的。当PROMOTE为101时,对应于2倍提升和符号扩展,每个子元素被视为有符号整数并且被符号扩展到两倍于由ELTYPE指定的宽度的矢量通道。2倍提升对于64位的初始子元素尺寸是无效的。当PROMOTE为110时,对应于4倍提升和符号扩展,每个子元素被视为有符号整数并且被符号扩展到四倍于由ELTYPE指定的宽度的矢量通道。4倍提升对于32位或64位的初始子元素尺寸是无效的。当PROMOTE为111时,对应于对应于8倍提升和零扩展,每个子元素被视为有符号整数并且被符号扩展到八倍于由ELTYPE指定的宽度的矢量通道。8倍提升对于16位、32位或64位的初始子元素尺寸是无效的。
VECLEN字段3004定义流的以字节为单位的流矢量长度。流引擎2800将流分解成VECLEN个字节长的元素组。VECLEN字段3004的三位的编码被定义为如表12所示。
表12
VECLEN必须大于或等于以字节为单位的元素尺寸与重复因子的乘积。如表11所示,64位的最大VECLEN等于矢量数据路径侧B 116的优选矢量尺寸。当VECLEN比中央处理单元核110的本机矢量宽度更短时,流引擎2800填补提供给中央处理单元核110的矢量中的额外通道。GRDUP字段3006确定填补的类型。VECLEN字段3004以下面描述的方式与ELDUP字段3005和GRDUP字段3006交互。
ELDUP字段3005指定重复每个元素的次数。元素尺寸与元素重复量相乘必须不超出64个字节。ELDUP字段3005的三位的编码被定义为如表13所示。
ELDUP | 重复因子 |
000 | 不重复 |
001 | 2次 |
010 | 4次 |
011 | 8次 |
100 | 16次 |
101 | 32次 |
110 | 64次 |
111 | 保留 |
表13
ELDUP字段3005以下面描述的方式与VECLEN字段3004和GRDUP字段3006交互。允许的元素尺寸、元素重复因子和目的地矢量长度之间的关系的特性要求在完成重复之后溢出第一目的地寄存器的重复元素将填充整数个目的地寄存器。这些附加目的地寄存器的数据最终供应相应的流头寄存器2818/2828。在完成第一数据元素的重复之后,下一个数据元素向下旋转到源寄存器3100的最低有效位,丢弃第一数据元素。然后对该新数据元素重复进行该过程。
GRDUP位3006确定是否启用组重复。如果GRDUP位3006为0,则组重复被禁用。如果GRDUP位3006为1,则组重复被启用。当被GRDUP位3006启用时,流引擎2800重复一组元素以填充矢量宽度。VECLEN字段3004定义该组的长度以进行复制。当VECLEN字段3004小于中央处理单元核110的矢量长度并且GRDUP位3006启用组重复时,流引擎2800用流矢量的附加副本来填充额外的通道(参见图21和图22)。因为流矢量长度和中央处理单元核110的矢量长度总是2的整数幂,因此组重复总是产生整数个重复副本。注意,GRDUP和VECLEN不指定重复的数量。所执行的重复的数量优选地基于VECLEN与本机矢量长度的比率,在优选实施例中为64字节/512位。
GRDUP字段3006指定流引擎2800如何填补VECLEN长度之后的位的流矢量至中央处理单元核110的矢量长度。当GRDUP位3006为0时,流引擎2800用零填充额外的通道并且将这些额外矢量标记为无效。当GRDUP位3006为1时,流引擎2800用每个流矢量的元素组的副本填充额外的通道。当VECLEN被设置为中央处理单元核110的本机矢量宽度时,将GRDUP位3006设置为1不起作用。VECLEN必须至少与ELEM_BYTES和元素重复因子ELDUP的乘积一样大。也就是说,元素或元素的重复因子数不能使用VECLEN分隔。
组重复仅对目标矢量尺寸进行操作。当元素尺寸ELEM_BYTES与元素重复因子ELDUP的乘积等于或超过目的地矢量宽度时,组重复不改变所供应的数据。在这些条件下,GRDUP位3006和VECLEN字段3004的状态不影响供应的数据。
以下示例的设置说明VECLEN与GRDUP之间的交互。以下示例中的每一个示出流引擎如何将流映射到横跨不同流矢量长度和矢量数据路径侧B 116的矢量尺寸的矢量上。该示例的流由29个元素(E0到E28)组成,每个元素为64位/8字节。该流可以是29个元素的线性流或者是29个元素的内部循环。这些表图示说明诸如图21所示的8字节通道。每个图示说明的矢量进而被存储在相应的流头寄存器2818/2828中。
表14图示说明当VECLEN为64字节时如何将示例流映射到64字节CPU矢量内的位上。
表14
如表14所示,该流在4个矢量上扩展。如前所述,扩展超出该流的矢量4内的通道被零填充。当VECLEN具有等于本机矢量长度的尺寸时,GRDUP是0还是1无关紧要。在这种VECLEN的情况下,不能发生重复。
除了32字节的VECLEN之外,表15示出与表20中示出的相同的参数。
组重复被禁用(GRDUP=0)。
表15
流的29个元素分布到8个矢量中的通道0至3上。矢量1至7中的额外通道4至7被零填充。在矢量8中,仅通道1具有流元素(E28),所有其他通道都被零填充。
除了16字节的VECLEN之外,表16示出与表22示出的相同的参数。组重复被禁用(GRDUP=0)。
表16
流的29个元素分布到15个矢量中的通道0至1上。矢量1至14中的额外通道2至7被零填充。在矢量15中,仅通道1具有流元素(E28),所有其他通道都被零填充。
除了8字节的VECLEN之外,表17示出与表14示出的相同的参数。组重复被禁用(GRDUP=0)。
表17
流的29个元素全部出现在29个矢量中的通道0上。矢量1至29中的额外通道1至7被零填充。
除了32位的VECLEN之外,表18示出与表15示出的相同的参数。组重复被启用(GRDUP=1)。
表18
流的29个元素分布到8个矢量中的通道0至7上。每个矢量1至7包括四个重复的元素。重复因子(2)这一结果是因为VECLEN(32字节)是64字节的本机矢量长度的一半。在矢量8中,通道0具有流元素(E28)并且通道1至3被零填充。矢量9的通道4至7重复该模式。
除了16字节的VECLEN之外,表19示出与表16示出的相同的参数。组重复被启用(GRDUP=1)。
表19
流的29个元素分布到15个矢量中的通道0至7上。每个矢量1至7包括两个重复四次的元素。重复因子(4)这一结果是因为VECLEN(16字节)是64字节的本机矢量长度的四分之一。在矢量15中,通道0具有流元素(E28)并且通道1被零填充。该模式在矢量15的通道2和3、通道4和5以及通道6和7中被重复。
除了8字节的VECLEN之外,表20示出与表17示出的相同的参数。组重复被启用(GRDUP=1)。
表20
流的29个元素全部出现29个矢量中的通道0至7上。每个矢量1至7包括重复八次的一个元素。重复因子(8)这一结果是因为VECLEN(8字节)是64字节的本机矢量长度的八分之一。因此在矢量1至29中每个通道是相同的。
图31说明矢量长度掩码/组重复块2025的示例性实施例。输入寄存器3100接收来自元素重复块2024的矢量输入。输入寄存器3100包括布置成64个1字节块(字节0至字节63)的64个字节。注意,字节0至字节63各自的长度等于ELEM_BYTES的最小值。多个多路复用器3101至3163将来自源寄存器3100的输入字节耦合到输出寄存器3170。每个多路复用器3101至3163将输入供应到输出寄存器3170的相应的字节1至字节63。并非输入寄存器3100的所有字节(字节0至字节63)都被耦合到每个多路复用器3101至3163。应注意,没有多路复用器供应输出寄存器3170的字节0。输出寄存器3170的字节0一直由输入寄存器3100的字节0供应。
多路复用器3101至3163由多路复用器控制编码器3180控制。多路复用器控制编码器3180接收ELEM_BYTES、VECLEN和GRDUP输入信号并且生成用于多路复用器3101至3163的相应的控制信号。ELEM_BYTES和ELDUP被供应给多路复用器控制编码器3180以检查观察VECLEN至少与ELEM_BYTES和ELDUP的乘积一样大。在操作中,多路复用器控制编码器3180控制多路复用器3101至3163以将数值等于VECLEN的最低有效位从输入寄存器3100转移到输出寄存器3170。如果GRDUP=0,表明组重复被禁用,则多路复用器控制编码器3180控制剩余多路复用器3101至3163将零转移到输出寄存器3170的剩余最高有效通道中的所有位。如果GRDUP=1,表明组重复被启用,则多路复用器控制编码器3180控制剩余多路复用器3101至3163将输入寄存器3100的VECLEN数量的最低有效位重复到输出寄存器3170的最高有效通道中。该控制类似于上述元素重复控制。这用第一矢量填充输出寄存器3170。对于下一个矢量,输入寄存器3100内的数据被向下旋转VECLEN,丢弃先前VECLEN个最低有效位。通过中央处理单元核110经由如下所述的流读取提前指令消耗数据的速率来设置格式化器1903中的数据移动的速率。只要流包括附加数据元素,该组重复格式化就反复进行。
元素重复(ELDUP)和组重复(GRUDP)是独立的。应注意,这些特征包括独立的规格和参数设定值。因此元素重复和组重复可以一起使用或分开使用。因为这些是指定的,因此元素重复允许溢出到下一个矢量,而组重复不允许。
DECIM字段3007控制相应的流的数据元素抽取。流引擎2800从流头寄存器2818/2828中的存储装置上的流中删除数据元素以用于向请求功能单元展示。抽取总是移除整个数据元素,而不是子元素。DECIM字段3007被定义为如表21所列出那样。
表21
如果DECIM字段3007等于00,则不发生抽取。数据元素在不改变的情况下被传递到相应的流头寄存器2818/2828。如果DECIM字段3007等于01,则发生2:1的抽取。在存储于流头寄存器2818/2828中之后,流引擎2800从数据流中移除奇数元素。格式化网络的限制要求所采用的2:1的抽取具有至少2倍的数据提升(PROMOTE不能为000)、ICNT0必须是2的倍数,并且总矢量长度(VECLEN)必须足够大以保持单个提升重复的元素。对于被转置的流(TRANSPOSE≠0),转置粒度(granule)必须是提升之前的以字节为单位的元素尺寸的至少两倍。如果DECIM字段3007等于10,则发生4:1的抽取。在数据流被存储于流头寄存器2818/2828中之后,流引擎2800保持每一第四数据元素,即从数据流中每四个数据元素移除三个元素。格式化网络的限制要求所采用的4:1的抽取具有至少4倍的数据提升(PROMOTE不能为000、001或101)、ICNT0必须是4的倍数,并且总矢量长度(VECLEN)必须足够大以保持单个提升重复的元素。对于经转置的流(TRANSPOSE≠0),抽取一直移除列,并且从不移除行。因此对于2:1的抽取,转置粒度必须是提升之前的以字节为单位的元素尺寸的至少两倍(GRANULE≥2×ELEM_BYTES);并且对于4:1的抽取,转置粒度必须是提升之前的以字节为单位的元素尺寸的至少四倍(GRANULE≥4×ELEM_BYTES)。
“节流(THROTTLE)”字段3008控制流引擎如何领先于中央处理单元核110激进地提取。该字段的两位的编码被定义为如表22所示。
THROTTLE | 描述 |
00 | 最小的节流,最大的提前提取 |
01 | 较少的节流,较多的提前提取 |
10 | 较多的节流,较少的提前提取 |
11 | 最大的节流,最小的提前提取 |
表22
THROTTLE不改变流的含义,并且仅作为提示(hint)。流引擎可以忽略该字段。程序不应该依赖于具体的节流行为来判断程序正确性,因为架构不指定精确的节流行为。THROTTLE允许程序员向硬件提供关于程序的自身行为的提示。通过默认,流引擎尝试尽可能远地领先于中央处理单元核110以隐藏尽可能多的延迟(等效于THOTTLE=11),同时向中央处理单元核110提供充足的流吞吐量。尽管几种关键应用需要这种水平的吞吐量,但其可能导致其他应用的不良系统水平行为。例如,流引擎丢弃穿过环境切换的所有提取的数据。因此,激进的提前提取可能导致具有大量环境切换的系统中的带宽浪费。如果中央处理单元核110非常快地消耗数据,则激进的提前提取仅在这些系统中进行感测。
DIMFMT字段3009定义流模板寄存器2900的循环计数字段ICNT0 2901、ICNT12902、ICNT2 2903、ICNT3 2804、ICNT4 2905和ICNT5 2906中的哪一个、循环维度字段DIM12911、DIM2 2912、DIM3 2913、DIM4 2914和DIM5 2915中的哪一个以及寻址模式字段AM03013、AM1 3014、AM2 3015、AM3 3016、AM4 3017和AM5 3018(FLAGS字段2921的一部分)中的哪一个对于该特定流是有效的。表23列出DIMFMT字段3009的各个值的有效循环。
表23
每个有效循环计数必须至少是1。外部有效循环计数必须大于1。(为1的外部有效循环计数与相应的具有一个较少循环的流没有区别)。
DIR位3010确定内部循环(循环0)的提取方向。如果DIR位3010为0,则循环0在朝向增加地址的正向方向上提取。如果DIR位3010为1,则循环0在朝向减小地址的反向方向上提取。其他循环的提取方向通过相应的循环维度DIM1、DIM2、DIM3、DIM4和DIM5(其为有符号整数)的符号来确定。
CBK0字段3011和CBK1字段3012基于循环寻址的选择来控制循环块尺寸。确定循环块尺寸的方式将在下文更详细地描述。
AM0字段3013、AM1字段3014、AM2字段3015、AM3字段3016、AM4字段3017和AM5字段3018控制相应的循环的寻址模式。这允许为每个循环独立地指定寻址模式。AM0字段3013、AM1字段3014、AM2字段3015、AM3字段3016、AM4字段3017和AM5字段3018中的每一个是三位并且被解码为如表24所列出的那样。
AMx字段 | 含义 |
00 | 线性寻址 |
01 | 由CBK0设置循环寻址块尺寸 |
10 | 由CBK0+CBK1+1设置循环寻址块尺寸 |
11 | 保留 |
表24
在线性寻址中,地址根据地址算法是正向还是反向而前进。在循环寻址中,地址保留在定义的地址块内。在达到循环地址块的末端之后,地址卷绕到块的其他极限。循环寻址块通常被限制到2N个地址,其中N是整数。循环地址算法可以通过切断位之间的进位链并且不允许所选数量的最高有效位改变来进行操作。因此超越循环块的末端的算法仅改变最低有效位。
块尺寸被设置为如表25所列出的那样。
表25
在优选实施例中,循环块尺寸通过由CBK0编码的数值(第一循环地址模式01)来设置或者通过由CBK0+CBK1+1编码的数值(第二循环地址模式10)来设置。例如,对于第一循环地址模式,循环地址块尺寸可以是从512字节到16M字节。对于第二循环地址模式,循环地址块尺寸可以是从1K字节到64G字节。因此编码的块尺寸是2(B+9)字节,其中B是编码块数,对于第一块尺寸(AMx为01)其为CBK0并且对于第二块尺寸(AMx为10)其为CBK0+CBK1+1。
中央处理单元110通过少量的指令和专用寄存器来使流引擎被编程。STROPEN指令开启流。STROPEN命令指定指示开启流0或流1的流编号。STROPEN命令指定存储该流的开始地址的数据寄存器。STROPEN指定存储如上所述的流模板的流模板寄存器。STROPEN指令的变元(argument)在表26中列出。
变元 | 描述 |
流开始地址寄存器 | 存储流开始地址的标量寄存器 |
流编号 | 流0或流1 |
流模板寄存器 | 存储流模板数据的矢量寄存器 |
表26
优选地,流开始地址寄存器是通用标量寄存器文件211中的寄存器。STROPEN指令经由scr1字段1305指定该流开始地址。STROPEN指令通过其操作码指定流0或流1。优选地,流模板寄存器是通用矢量寄存器文件221中的矢量寄存器。STROPEN指令可以经由scr2/cst字段1304指定该流模板寄存器。如果指定的流是激活的,则STROPEN指令关闭先前的流并且用指定的流代替该流。
STRSAVE指令捕获指定流的充足的状态信息以便将来重新开始该流。STRRSTR指令恢复先前保存的流。STRSAVE指令不保存流的任何数据。STRSAVE指令仅保存元数据。该流响应于STRRSTR指令而重新提取流数据。
如上所述,存在流保持寄存器2818或2828内的一些数据无效时的情况。如上所述,当流元素的数量小于流保持寄存器2818/2828尺寸时,这可以发生在内部循环的末端处。当剩余流元素的数量小于由VECLEN定义的通道时,这也可以发生在内部循环的末端处。对于不在内部循环的末端处的时刻,如果VECLEN小于流保持寄存器2818/2828的宽度并且GRDUP被禁用,则流保持寄存器2818/2828中超出VECLEN的通道是无效的。
在优选实施例中,流2800进一步包括有效寄存器2819和2829。有效寄存器2819指示流头寄存器2818中的有效通道。有效寄存器2829指示流头寄存器2828中的有效通道。有效寄存器2819/2829包括用于相应流头寄存器2818/2828内的每个最小ELEM_BYTES通道的一个位。在优选实施例中,最小ELEM_BYTES是1个字节。处理器100的优选数据路径宽度和流头寄存器2818/2828的数据长度为64字节(512位)。有效寄存器2819/2829因此具有64位的数据宽度。有效寄存器2819/2829中的每个位指示流头寄存器2818/2828中的相应字节是否有效。优选地,0指示流头寄存器内的相应字节是无效的,1指示该数据是有效的。
根据本发明的实施例,对于读取流头寄存器2818/2828中的一个以及转移数据到请求功能单元,相应的有效寄存器2819/2829中的无效/有效数据自动转移到断言寄存器文件243内的相应的数据寄存器。该寄存器对应于特定流。在优选实施例中,用于流0的有效数据被存储在断言寄存器P0中,并且用于流1的有效数据被存储在断言寄存器P1中。
可以以各种方式使用存储在断言寄存器文件243中的这种有效数据。功能单元可以使用有效数据指示作为掩码来将矢量流数据与另一组矢量组合并且然后将组合的数据存储到存储器。如同用于所有通道都有效的情况,这使得相同的过程被用于循环数据的末端。这可以用于避免存储无效数据。存储在断言寄存器文件243中的有效指示可以在其他过程中用作掩码或操作数。P单元246可以具有用于对断言寄存器中的1的数量进行计数的指令(BITCNT)。这可以用于确定来自断言寄存器的有效数据元素的计数。
图32说明用于产生存储在有效寄存器2819中的有效/无效指示的示例硬件3200。图32说明用于流0的硬件,流1包括相应的硬件。硬件3200优选地进行操作以在每次数据在流头寄存器2800中被更新时生成一个有效字。第一输入ELTYPE被供应到解码器3201。解码器3201基于元素尺寸ELEM_BYTES以及元素是实数还是复数来产生对应于最小数据尺寸的输出“总元素尺寸(TOTAL ELEMENT SIZE)”。ELTYPE的各个编码的含义被示出于表8。表27针对各个ELTYPE编码示出以字节为单位的解码器3201的示例性输出。应注意,表8列出了位,并且表27列出了字节。
表27
如表27所示,如果元素是实数,则TOTAL ELEMENT SIZE是1、2、4或8字节,并且如果元素是复数,则TOTAL ELEMENT SIZE是2、4、8或16字节。
第二输入PROMOTE被供应到解码器3202。解码器3202产生对应于PROMOTE输入的输出PROMOTE FACTOR。PROMOTE的各个编码的含义如表10所示。表28针对各个PROMOTE编码示出以字节为单位的解码器3202的示例性输出。
表28
扩展类型(零扩展或符号扩展)的差异与解码器3202无关。
解码器3201和3201的输出被供应到乘法器3203。由乘法器3202产生的乘积是对应于TOTAL ELEMENT SIZE和PROMOTE因子的通道尺寸。因为PROMOTE因子总是2的整数次幂(2N),所以该乘法可以通过TOTAL ELEMENT SIZE的相应移位来实现。当PROMOTE因子为1时,其不涉及移位;当PROMOTE因子为2时,其偏移1位;当PROMOTE因子为4时,其偏移2位;当PROMOTE因子为8时,其偏移3位。
“通道数(NUMBER OF LANES)”单元3204接收矢量长度VECLEN和通道尺寸(LANESIZE)并且生成NUMBER OF LANES。表29示出针对以字节为单位的通道尺寸和矢量长度VECLEN的多个通道的示例性解码。
表29
如前所述,VECLEN必须大于或等于元素尺寸与重复因子的乘积。如表29所示,VECLEN也必须大于或等于元素尺寸与PROMOTE因子的乘积。这意味着VECLEN被选择为足够大以使得元素不能与其通过类型提升块2022产生的扩展分开。表29中的对角线下方的标记为“-”的单元指示不允许的参数组合。
单元3204的输出“通道数(NUMBER OF LANES)”充当“通道/剩余元素控制字(LANE/REMAINING ELEMENTS CONTROL WORD)”单元3211的一个输入。第二输入来自多路复用器3212。多路复用器接收输入和/>输入。/>输入和/>输入代表相应循环的当前迭代中剩余元素的数量。
图33说明地址生成器2811的部分示意图。地址生成器2811形成地址以用于提取相应流引擎的限定的流中的下一个元素。开始地址寄存器3301存储数据流的开始地址。如前所述,开始地址寄存器3301优选地是全局标量寄存器文件211中的由开启相应的流的STROPEN指令认定的标量寄存器。如本领域已知的,该开始地址可以从指定的标量寄存器中被复制并且被本地存储在相应的地址生成器2811/2821处。流的第一循环采用Loop0计数寄存器3311、加法器3312、乘法器3313和比较器3314。Loop0计数寄存器3311存储第一循环(Loop0)的迭代计数的工作副本。对于Loop0加法器3312的每次迭代,当由下一个地址信号触发时,对循环计数加1,循环计数被存回到Loop0计数寄存器3311中。乘法器3313将当前循环计数与量值ELEM_BYTES相乘。ELEM_BYTES是Loop0中的每个数据元素的以字节为单位的尺寸。Loop0以ELEM_BYTES的迭代步长尺寸遍历存储器中物理连续的数据元素。
比较器3314将存储在Loop0计数寄存器3311中的计数(由加法器3313递增之后)与来自相应流模板寄存器2900的ICNT0 2901的值进行比较。当加法器3312的输出等于流模板寄存器2900的ICNT0 2901的值时,Loop0的迭代完成。比较器3314生成有效Loop0结束信号。Loop0计数寄存器3311被重置为0并且下一个更高循环(在此情况下为Loop1)的迭代被触发。
用于更高循环(Loop1、Loop2、Loop3、Loop4和Loop5)的电路类似于图33中示出的电路。每个循环包括相应的工作循环计数寄存器、加法器、乘法器和比较器。每个循环的加法器由前一个循环的循环结束信号触发。每个乘法器的第二输入是来自相应流模板的相应维度DIM1、DIM2、DIM3、DIM4和DIM5。每个循环的比较器将工作循环寄存器计数与相应流模板寄存器2900的相应迭代值ICNT1、ICTN2、ICTN3、ICNT4和ICTN5进行比较。循环结束信号生成下一个更高循环的迭代。来自Loop5的循环结束信号结束该流。
图33说明Loop0计数的生成。Loop0计数等于存储在相应工作计数寄存器3311中的更新数据。Loop0计数在工作Loop0计数寄存器3311的每次变化时被更新。类似地生成用于更高循环(Loop1、Loop2、Loop3、Loop4和Loop5)的循环计数。
图33说明Loop0地址的生成。Loop0地址等于来自乘法器3313的数据输出。Loop0地址在工作Loop0计数寄存器3311的每次变化时被更新。用于Loop1、Loop2、Loop3、Loop4和Loop5的类似电路产生相应的循环地址。
本领域已知的是任何计数(如图33中所示)可以呈现为向下计数或向上计数。图33说明向上计数的实施例。本领域技术人员将理解如何修改初始化和比较以将本发明呈现为向下计数电路。另外,本领域技术人员将理解如何修改比较以呈现所描述的寻址模式。本领域中还已知:
即循环向下计数是流模板寄存器中指定的初始迭代计数与如图33所示的产生的循环向上计数之间的差。
LANE/REMAINING ELEMENTS CONTROL WORD单元3211基于来自NUMBER OF LANES单元3204的通道的数量和由多路复用器3212选择的循环向下计数来生成控制字3213。多路复用器3212的控制输入是转置(TRANSPOSE)信号。如果TRANSPOSE被禁用(“000”),则多路复用器3212选择Loop0向下计数对于TRANSPOSE的所有其他合法值(“001”、“010”、“011”、“100”、“101”和“110”),多路复用器3212选择Loop1向下计数/>流引擎总是将最里面的维度映射到矢量中的连续通道。对于正常的流,这是Loop0。对于转置的流,这是Loop1,因为转置交换了这两个维度。
LANE/REMAINING ELEMENTS CONTROL WORD单元3211生成如下所示的控制字3213。控制字3213具有数量等于来自单元3204的通道的数量的位。如果选定循环的元素的剩余计数大于或等于通道的数量,则所有通道都是有效的。对于这种情况,控制字3213全部是1。这表明矢量长度VECLEN内的所有通道都是有效的。如果选定循环的元素的剩余计数非零且小于通道的数量,则一些通道是有效的并且一些通道是无效的。根据上面结合图21和图22所描述的通道分配,从最低有效通道开始向流元素分配通道。在这些情况下,控制字3213包括设置为1的多个最低有效位,其数量等于选定循环向下计数的数量。控制字3213的所有其他位被设置为0。在图32中说明的示例中,通道的数量等于8并且存在5个有效(1)最低有效位,随后是3个无效(0)最高有效位。这对应于具有在最终迭代中剩余的五个元素的循环。
控制字扩展单元3214基于LANE SIZE的量值来扩展控制字3213。经扩展的控制字将具有用于每个最小尺寸通道的一个位。在优选实施例中,最小流元素尺寸是1字节(8位),并且因此最小通道尺寸是1字节(8位)。保持寄存器2818/2828的优选尺寸等于64字节(512位)的矢量尺寸。因此,经扩展的控制字具有64位,一个位用于流保持寄存器2818/2828的每个字节。这个经扩展的控制字填充相应的有效寄存器2819和2829的最低有效位。
对于VECLEN等于矢量长度的情况,该描述是完备的。经扩展的控制字包括用于相应有效寄存器2819/2829内的所有位置的位。存在VECLEN不等于矢量长度的一些附加考虑。当VECLEN不等于矢量长度时,经扩展的控制字不具有足够的位来填充相应的有效寄存器2819/2829。如图32所说明的,经扩展的控制字填充相应的有效寄存器2819/2829的最低有效位。这为VECLEN宽度内的通道提供了有效/无效位。超出VECLEN宽度直到流头寄存器2818的数据宽度的通道需要另一种机制。
图32说明多路复用器3215和组重复单元3216,其提供这些需要的附加有效/无效位。参见上文对VECLEN的描述,如果组重复没有被启用(GRDUP=0),则这些过量通道是无效的。多路复用器3215的第一输入是INVALID 0信号。为了容易实施,该INVALID 0信号包括数量等于VEDLEN的多个位。当GRDUP=0时,多路复用器3215选择该输入。组重复单元3216将该输入重复到流头寄存器2818的所有过量通道。因此有效寄存器2819的最高有效位被设置为0,这表明流头寄存器2818的相应字节是无效的。这发生于表15中示出的示例的矢量1至7、表16中示出矢量1至14以及表17中示出的矢量1至29。
如前所述,如果组重复被启用(GRDUP=1),则流头寄存器2818的过量通道被填充最低有效位的副本。多路复用器3215的第二输入是来自控制字扩展单元3214的经扩展的控制字。当GRDUP=1时,多路复用器3215选择该输入。组重复单元3216将该输入重复到流头寄存器2818的所有过量通道。
存在两种可能的结果。第一,在大多数情况下,VECLEN内的所有通道是有效的并且来自控制字扩展单元3214的位全部为1。这发生于表18中示出的组重复示例的矢量1至7以及表19中示出的组重复示例的矢量1至14。在这些情况下,来自控制字扩展单元3214的经扩展的控制字的所有位为1并且流头寄存器2818的所有通道是有效的。因此组重复单元3216用1填充所有的过量通道。第二,剩余流数据元素的数量可能小于VECLEN内的通道的数量。这发生于表18中所示的组重复示例中示出的矢量8以及表19中示出的组重复示例中示出的矢量15。在这些情况下,VECLEN内的一些通道是有效的并且一些是无效的。组重复单元3216用具有与经扩展的控制字位相同的模式的位来填充过量通道。在任一情况下,对应于经扩展的控制位的过量通道被填充。
图32说明最低有效位和最高有效位之间的边界3217。该边界的位置由VECLEN的尺寸相对于流头寄存器2818的尺寸来设置。
图34说明用于产生有效/无效位的替代硬件的部分示意图。在优选实施例中,图34的装置进行操作以便每次流头寄存器2818变化时产生一个有效输入。输入寄存器3400包括从位0布置到位63的64个位。输入寄存器3400被初始化为全部为0。输入寄存器3400接收来自控制字扩展单元3214(图32)的经扩展的控制字。这指定了用于流头寄存器2818内的直到VECLEN长度的数据的有效位。多个多路复用器3401至3463将来自源寄存器3400的输入位耦合到有效寄存器2819。每个多路复用器3401至3463将输入供应到有效寄存器2819的相应的位1至位63。并非输入寄存器3400的所有输入位(位1至位63)均被耦合到每个多路复用器3401至3463。应注意,不存在供应有效寄存器2819的位0的多路复用器。有效寄存器2819的位0总是由输入寄存器3400的位0供应。
多路复用器3401至3463由多路复用器控制编码器3480控制。多路复用器控制编码器3480接收ELEM_BYTES、VECLEN和GRDUP输入信号并且生成用于多路复用器3401至3463的相应控制信号。ELEM_BYTES和ELDUP被供应到多路复用器控制编码器3180以检查观察VECLEN至少与ELEM_BYTES和ELDUP的乘积一样大。在操作中,多路复用器控制编码器3180控制多路复用器3401至3463将数量等于VECLEN的最低有效位从输入寄存器3400转移到输出寄存器3170。如果GRDUP=0,这表明组重复被禁用,则多路复用器控制编码器3480控制剩余的多路复用器3401至3463将零转移到有效寄存器2819的剩余最高有效通道中的所有位。如果GRDUP=1,这表明组重复被启用,则多路复用器控制编码器3480控制多路复用器3401至3463以将输入寄存器3400的VECLEN数量的最低有效位重复到输出寄存器3470的最高有效通道中。该控制类似于结合图31描述的组重复控制。来自控制编码器3180的相同控制可以用于控制多路复用器3401至3463。这用存储在流头寄存器2818中的矢量的有效数据填充有效寄存器2819。
图35是说明上述流输入操作数编码的部分示意图3500。图35说明对功能单元3520的相应src1输入端的一个指令的src1字段1305进行解码。这些相同的电路可以被重复以用于指令控制功能单元3520的src2/cst字段1304。此外,这些电路被重复以用于可以被同时分派的执行包内的能够采用流数据作为操作数的每个指令。
指令解码器113接收包含指令的src1字段1305的位13至位17。操作码字段(用于所有指令的位4至位14,以及额外用于无条件指令的位28至位31)明确指定相应的功能单元3520和将被执行的功能。在该实施例中,功能单元3520可以是L2单元241、S2单元242、M2单元243、N2单元244或C单元245。图35中说明的指令解码器113的相关部分对src1位字段1305进行解码。子解码器3511确定src1位字段1305是否处于从00000到01111的范围内。如果是这种情况,则子解码器3511将相应的寄存器编号供应到全局矢量寄存器文件231。在该示例中,该寄存器编号是src1位字段1305的四个最低有效位。全局矢量寄存器文件231调用存储在对应于该寄存器编号的寄存器中的数据并且将该数据供应到功能单元3520的src1输入端。该解码通常在本领域是已知的。
子解码器3512确定src1位字段1305是否处于从10000到10111的范围内。如果是这种情况,则子解码器3512将相应的寄存器编号供应到相应的局部矢量寄存器文件。如果指令指向L2单元241或S2单元242,则相应的局部矢量寄存器文件是局部矢量寄存器文件232。如果指令指向M2单元243、N2单元244或C单元245,则相应的局部矢量寄存器文件是局部矢量寄存器文件233。在该示例中,该寄存器编号是src1位字段1305的三个最低有效位。相应的局部矢量寄存器文件232/233调用存储在对应于该寄存器编号的寄存器中的数据并且将该数据供应到功能单元3520的src1输入端。该解码通常在本领域是已知的。
子解码器3513确定src1位字段1305是否为11100。如果是这种情况,则子解码器3513将流0读取信号供应到流引擎2800。然后,流引擎2800将存储在保持寄存器2818中的流0数据供应到功能单元3520的src1输入端。
子解码器3514确定src1位字段1305是否为11101。如果是这种情况,则子解码器3514将流0读取信号供应到流引擎2800。然后,流引擎2800将存储在保持寄存器2818中的流0数据供应到功能单元3520的src1输入端。子解码器3514还将提前信号供应到流0。如前所述,流引擎2800提前在保持寄存器2818中存储流0的数据元素的下一个连续矢量。
通过子解码器3513或子解码器3514将流0读取信号供应到流引擎2800将触发另一个数据移动。根据这种流0读取信号,流引擎2800将存储在有效寄存器2819中的数据供应到用于存储的断言寄存器文件234。根据优选实施例,这是断言寄存器文件234内的预定数据寄存器。在该示例中,数据寄存器P0对应于流0。
子解码器3515确定src1位字段1305是否为11110。如果是这种情况,则子解码器3515将流1读取信号供应到流引擎2800。然后,流引擎2800将存储在保持寄存器2828中的流1数据供应到功能单元3520的src1输入端。
子解码器3516确定src1位字段1305是否为11111。如果是这种情况,则子解码器3516将流1读取信号供应到流引擎2800。然后,流引擎2800将存储在保持寄存器2828中的流1数据供应到功能单元3520的src1输入端。子解码器3514还将提前信号供应到流1。如前所述,流引擎2800提前在保持寄存器2828中存储流1的数据元素的下一个连续矢量。
通过子解码器3515或子解码器3516将流1读取信号供应到流引擎2800将触发另一个数据移动。根据这种流1读取信号,流引擎2800将存储在有效寄存器2829中的数据供应到用于存储的断言寄存器文件234。根据优选实施例,这是断言寄存器文件234内的预定数据寄存器。在该示例中,数据寄存器P1对应于流1。
类似的电路被用于响应于src2/cst字段1304的位编码而选择供应到功能单元3502的scr2输入端的数据。可以用如上所述的方式向功能单元3520的scr2输入端供应常量输入。如果指令解码113生成用于来自scr1字段1305或scr2/sct字段1304的流0的读取信号,则流引擎2800将存储在有效寄存器2819中的数据供应到用于存储的断言寄存器文件234的断言寄存器P0。如果指令解码113生成用于来自scr1字段1305或scr2/sct字段1304的流1的读取信号,则流引擎2800将存储在有效寄存器2829中的数据供应到用于存储的断言寄存器文件234的断言寄存器P1。
致力于操作数规范的指令位的准确数量以及数据寄存器和流的数量是设计选择。本领域技术人员将认识到不同于本申请中描述的其他数量的选择是可能的。尤其是,单个全局矢量寄存器文件的规范以及局部矢量寄存器文件的省略是可能的。本发明采用输入操作数选择字段的位编码来指示流读取并且采用另一个位编码来指示流读取和提前该流。
图35中说明的过程在每次流数据被读取时将有效数据自动转移到断言寄存器文件234中。然后该有效数据被P单元246用于元数据的进一步计算。通过一个或多个矢量数据路径侧B 116功能单元包括L2单元241、S2单元242、M2单元243、N2单元244和C单元245,该有效数据还被用作其他操作的掩码或操作数。存在采用该流有效数据的大量可行的复合逻辑操作。
图36是说明本发明的替代实施例的部分示意图3600。在图36说明的实施例中,流有效寄存器2819/2829不需要自动加载到断言寄存器文件234中的预定寄存器。相反,至P单元246的明确指令可以用于移动该数据。
图36说明将P单元246的相应src1输入端的一个指令的src1字段1305进行解码。这些相同的电路可以被重复用于控制P单元246的指令的src2/cst字段1304。指令解码器113接收位13至17,这些位包括指令的src1字段1305。操作码字段(用于所有指令的位4至12以及额外用于无条件指令的位28至31)明确指定P单元246和将被执行的功能。图36中说明的指令解码器113的相关部分对src1位字段1305进行解码。子解码器3611确定src1位字段1305是否在从00000至01111的范围内。如果是这种情况,则子解码器3511将相应的寄存器编号供应到全局矢量寄存器文件231。在该示例中,该寄存器编号是src1位字段1305的四个最低有效位。全局矢量寄存器文件231调用存储在对应于该寄存器编号的寄存器中的数据并且将该数据供应到P单元246的src1输入端。该解码通常在本领域是已知的。
子解码器3612确定src1位字段1305是否在从10000至10111的范围内。如果是这种情况,则子解码器3612将相应的寄存器编号供应到断言寄存器文件234。在该示例中,该寄存器编号是src1位字段1305的三个最低有效位。相应的局部矢量寄存器文件232/233调用存储在对应于该寄存器编号的寄存器中的数据并且将该数据供应到功能单元3520的src1输入端。该解码通常在本领域是已知的。
子解码器3613确定src1位字段1305是否是11100。如果是这种情况,则子解码器3613将流0有效读取信号供应到流引擎2800。然后流引擎2800将存储在有效寄存器2819中的有效数据供应到P单元246的src1输入端。
子解码器3614确定src1位字段1305是否是11101。如果是这种情况,则子解码器3614将流1有效读取信号供应到流引擎2800。然后流引擎2800将存储在有效寄存器2829中的流1有效数据供应到功能单元3520的src1输入端。
采用流有效寄存器2819/2829作为操作数的P单元246指令可以是前述任何P单元指令,诸如:NEG;BITCNT;RMBD;DECIMATE;EXPAND;AND;NAND;OR;NOR和XOR。
上述特定指令可以被限制到P单元242。因此图35和图36中概述的操作可以一起使用。如果由指令指定的功能单元是L2单元241、S2单元242、M2单元243、N2单元244或C单元245,则src1字段1305被解释为如关于图35所概述的那样。如果由指令指定的功能单元是P单元246,则src1字段1305被解释为如关于图36所概述的那样。图35中说明的将流有效寄存器自动保存到预定断言寄存器可以在本发明的一个实施例中被实施,并且不在另一个实施例中实施。
Claims (20)
1.一种设备,其包括:
存储器,其被配置为存储第一数据矢量;
处理器,其包括:
功能单元,其被配置为对所述第一数据矢量进行操作;
矢量寄存器文件;和
断言寄存器文件;以及
耦合在所述处理器与所述存储器之间的存储器控制器,所述存储器控制器包括:
头寄存器;和
有效寄存器,其中所述存储器控制器被配置为:
从所述存储器检索所述第一数据矢量;
产生包括所述第一数据矢量的第二数据矢量;
将所述第二数据矢量的元素存储在所述头寄存器中;
将与所述第二数据矢量相关联的有效位存储在所述有效寄存器中;以及
响应于来自所述处理器的读指令,使所述第二数据矢量的所述元素被存储在所述矢量寄存器文件中并使所述有效位被存储在所述断言寄存器文件中。
2.根据权利要求1所述的设备,其中:
所述存储器控制器包括组重复单元;以及
所述存储器控制器被配置为:
确定所述处理器的矢量长度是否大于所述第一数据矢量的矢量长度;以及
基于所述处理器的所述矢量长度大于所述第一数据矢量的所述矢量长度,确定是通过利用所述组重复单元复制所述第一数据矢量的元素还是通过利用所述组重复单元增补零元素来产生所述第二数据矢量。
3.根据权利要求2所述的设备,其中所述存储器控制器被配置为使与所述零元素相关联的相应有效位指示所述零元素是无效的。
4.根据权利要求2所述的设备,其中所述处理器的所述矢量长度基于与所述功能单元相关联的若干通道。
5.根据权利要求4所述的设备,其中所述存储器控制器被配置为基于在将相应元素分配给与所述功能单元相关联的所述若干通道中的每个通道之前达到所述第一数据矢量的末端而确定所述处理器的所述矢量长度是否大于所述第一数据矢量的所述矢量长度。
6.根据权利要求2所述的设备,其中所述存储器控制器被配置为接收流模板,所述流模板指定是否基于所述处理器的所述矢量长度大于所述第一数据矢量的所述矢量长度而利用所述组重复单元复制所述第一数据矢量的元素或增补零元素以产生所述第二数据矢量。
7.根据权利要求1所述的设备,其中:
所述头寄存器被配置为具有一组通道;
所述存储器控制器被配置为将所述第二数据矢量的相应元素存储在所述头寄存器的每个通道中;以及
所述存储器控制器被配置为将针对所述头寄存器的每个通道的相应有效位存储在所述有效寄存器中。
8.根据权利要求1所述的设备,其中所述处理器进一步包括断言单元,所述断言单元耦合到所述断言寄存器文件并被配置为基于存储在所述断言寄存器文件中的所述有效位来确定所述第二数据矢量中的有效元素的数量。
9.根据权利要求1所述的设备,其中所述存储器是缓存器架构的二级(L2)缓存器。
10.根据权利要求9所述的设备,其中所述存储器控制器被配置为从所述二级缓存器检索所述第一数据矢量并且经由不包含所述缓存器架构的一级(L1)缓存器的数据路径将所述第二数据矢量提供给所述处理器。
11.一种设备,其包括:
处理器,其包括:
功能单元;和
断言寄存器文件;以及
存储器控制器,其耦合到所述处理器并被配置为耦合到存储器,其中所述存储器控制器包括:
头寄存器;和
有效寄存器,其中所述存储器控制器被配置为:
从所述存储器检索第一数据矢量;
产生包括所述第一数据矢量的第二数据矢量;
将所述第二数据矢量的子集存储在所述头寄存器中;
将与所述第二数据矢量相关联的一组有效性指示符存储在所述有效寄存器中;以及
响应于来自所述处理器的读指令:
将所述第二数据矢量的元素从所述头寄存器提供给所述处理器的所述功能单元;以及
将所述一组有效性指示符中的有效性指示符从所述有效寄存器提供给所述处理器的所述断言寄存器文件。
12.根据权利要求11所述的设备,其中:
所述存储器控制器包括组重复单元;以及
所述存储器控制器被配置为:
确定所述处理器的矢量长度是否大于所述第一数据矢量的矢量长度;以及
基于所述处理器的所述矢量长度大于所述第一数据矢量的所述矢量长度,确定是通过利用所述组重复单元复制所述第一数据矢量的元素还是通过利用所述组重复单元增补零元素来产生所述第二数据矢量。
13.根据权利要求11所述的设备,其中所述处理器进一步包括断言单元,所述断言单元耦合到所述断言寄存器文件并被配置为基于存储在所述断言寄存器文件中的所述有效性指示符来确定所述第二数据矢量中的有效元素的数量。
14.根据权利要求11所述的设备,其中所述存储器是缓存器架构的二级(L2)缓存器。
15.根据权利要求14所述的设备,其中所述存储器控制器被配置为从所述二级缓存器检索所述第一数据矢量并且经由不包含所述缓存器架构的一级(L1)缓存器的数据路径将所述第二数据矢量提供给所述处理器。
16.一种方法,其包括:
由存储器控制器从存储器检索第一数据矢量;
由所述存储器控制器产生包括所述第一数据矢量的第二数据矢量;
将所述第二数据矢量的一部分存储在所述存储器控制器的头寄存器中;
将与所述第二数据矢量相关联的一组有效性指示符存储在所述存储器控制器的有效寄存器中;
将所述第二数据矢量的元素从所述头寄存器提供给所述处理器;以及
将所述一组有效性指示符中的有效性指示符从所述有效寄存器提供给所述处理器的断言寄存器文件。
17.根据权利要求16所述的方法,其中:
产生所述第二数据矢量包括向所述第一数据矢量增补零元素;以及
所述一组有效性指示符包括与所述零元素相关联的指示所述零元素为无效的相应有效性指示符。
18.根据权利要求16所述的方法,其进一步包括基于存储在所述断言寄存器文件中的所述有效性指示符来确定所述第二数据矢量中的有效元素的数量。
19.根据权利要求16所述的方法,其中所述存储器是缓存器架构的二级(L2)缓存器。
20.根据权利要求16所述的方法,其中:
检索所述第一数据矢量、产生所述第二数据矢量、将所述第二数据矢量的所述部分存储在所述头寄存器中以及将所述一组有效性指示符存储在所述有效寄存器中是基于第一指令执行的;并且
提供所述第二数据矢量的所述元素和提供所述有效性指示符是基于第二指令执行的。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/635,449 | 2017-06-28 | ||
US15/635,449 US11269638B2 (en) | 2017-06-28 | 2017-06-28 | Exposing valid byte lanes as vector predicates to CPU |
CN201810674190.3A CN109144568B (zh) | 2017-06-28 | 2018-06-27 | 将有效位通道作为矢量断言暴露于cpu |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810674190.3A Division CN109144568B (zh) | 2017-06-28 | 2018-06-27 | 将有效位通道作为矢量断言暴露于cpu |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117632257A true CN117632257A (zh) | 2024-03-01 |
Family
ID=64738969
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810674190.3A Active CN109144568B (zh) | 2017-06-28 | 2018-06-27 | 将有效位通道作为矢量断言暴露于cpu |
CN202311622432.1A Pending CN117632257A (zh) | 2017-06-28 | 2018-06-27 | 将有效位通道作为矢量断言暴露于cpu |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810674190.3A Active CN109144568B (zh) | 2017-06-28 | 2018-06-27 | 将有效位通道作为矢量断言暴露于cpu |
Country Status (2)
Country | Link |
---|---|
US (2) | US11269638B2 (zh) |
CN (2) | CN109144568B (zh) |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9606803B2 (en) | 2013-07-15 | 2017-03-28 | Texas Instruments Incorporated | Highly integrated scalable, flexible DSP megamodule architecture |
US11256508B2 (en) * | 2013-07-15 | 2022-02-22 | Texas Instruments Incorporated | Inserting null vectors into a stream of vectors |
US11269638B2 (en) * | 2017-06-28 | 2022-03-08 | Texas Instruments Incorporated | Exposing valid byte lanes as vector predicates to CPU |
US11010161B2 (en) * | 2018-03-31 | 2021-05-18 | Micron Technology, Inc. | Multiple types of thread identifiers for a multi-threaded, self-scheduling reconfigurable computing fabric |
US11340904B2 (en) | 2019-05-20 | 2022-05-24 | Micron Technology, Inc. | Vector index registers |
US11327862B2 (en) * | 2019-05-20 | 2022-05-10 | Micron Technology, Inc. | Multi-lane solutions for addressing vector elements using vector index registers |
US11507374B2 (en) | 2019-05-20 | 2022-11-22 | Micron Technology, Inc. | True/false vector index registers and methods of populating thereof |
US11403256B2 (en) | 2019-05-20 | 2022-08-02 | Micron Technology, Inc. | Conditional operations in a vector processor having true and false vector index registers |
CN111709126A (zh) * | 2020-05-29 | 2020-09-25 | 中国科学院长春光学精密机械与物理研究所 | 通信协议测试驱动数据自动生成建模方法及系统 |
CN111798363B (zh) | 2020-07-06 | 2024-06-04 | 格兰菲智能科技有限公司 | 图形处理器 |
US20230297377A1 (en) * | 2022-02-04 | 2023-09-21 | Texas Instruments Incorporated | Circuit, system, and method for matrix decimation |
US11940939B2 (en) * | 2022-03-07 | 2024-03-26 | Qualcomm Incorporated | Encoding byte information on a data bus with separate code |
US20240152477A1 (en) * | 2022-11-03 | 2024-05-09 | Marvell Asia Pte Ltd | Distributed arbitration for shared data path |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5809272A (en) * | 1995-11-29 | 1998-09-15 | Exponential Technology Inc. | Early instruction-length pre-decode of variable-length instructions in a superscalar processor |
GB2409066B (en) * | 2003-12-09 | 2006-09-27 | Advanced Risc Mach Ltd | A data processing apparatus and method for moving data between registers and memory |
WO2013089707A1 (en) * | 2011-12-14 | 2013-06-20 | Intel Corporation | System, apparatus and method for loop remainder mask instruction |
CN104011670B (zh) * | 2011-12-22 | 2016-12-28 | 英特尔公司 | 用于基于向量写掩码的内容而在通用寄存器中存储两个标量常数之一的指令 |
US10628156B2 (en) * | 2013-07-09 | 2020-04-21 | Texas Instruments Incorporated | Vector SIMD VLIW data path architecture |
US9606803B2 (en) * | 2013-07-15 | 2017-03-28 | Texas Instruments Incorporated | Highly integrated scalable, flexible DSP megamodule architecture |
US10073696B2 (en) * | 2013-07-15 | 2018-09-11 | Texas Instruments Incorporated | Streaming engine with cache-like stream data storage and lifetime tracking |
US11269638B2 (en) * | 2017-06-28 | 2022-03-08 | Texas Instruments Incorporated | Exposing valid byte lanes as vector predicates to CPU |
-
2017
- 2017-06-28 US US15/635,449 patent/US11269638B2/en active Active
-
2018
- 2018-06-27 CN CN201810674190.3A patent/CN109144568B/zh active Active
- 2018-06-27 CN CN202311622432.1A patent/CN117632257A/zh active Pending
-
2022
- 2022-03-07 US US17/687,780 patent/US11941399B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
CN109144568A (zh) | 2019-01-04 |
US11269638B2 (en) | 2022-03-08 |
CN109144568B (zh) | 2023-12-15 |
US20190004797A1 (en) | 2019-01-03 |
US11941399B2 (en) | 2024-03-26 |
US20220197637A1 (en) | 2022-06-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109144568B (zh) | 将有效位通道作为矢量断言暴露于cpu | |
US20230418764A1 (en) | Tracking streaming engine vector predicates to control processor execution | |
CN109643233B (zh) | 具有带读取和读取/前进操作数编码的流引擎的数据处理设备 | |
US11119779B2 (en) | Dual data streams sharing dual level two cache access ports to maximize bandwidth utilization | |
CN109952559B (zh) | 具有单独可选元素及成组复制的流式传输引擎 | |
CN108205448B (zh) | 具有在每个维度上可选择的多维循环寻址的流引擎 | |
US20230385063A1 (en) | Streaming engine with early exit from loop levels supporting early exit loops and irregular loops | |
US11921636B2 (en) | Streaming engine with flexible streaming engine template supporting differing number of nested loops with corresponding loop counts and loop offsets | |
US11983559B2 (en) | Streaming engine with short cut start instructions | |
US20240063827A1 (en) | Butterfly network on load data return | |
US20190187985A1 (en) | Storage Organization for Transposing a Matrix Using a Streaming Engine | |
US10140239B1 (en) | Superimposing butterfly network controls for pattern combinations | |
CN116880903A (zh) | 具有提取提前滞后的流引擎 | |
US10983912B2 (en) | Streaming engine with compressed encoding for loop circular buffer sizes | |
US12019561B2 (en) | Pseudo-first in, first out (FIFO) tag line replacement | |
US20240231827A1 (en) | Exposing valid byte lanes as vector predicates to cpu |
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 |