CN109952559B - 具有单独可选元素及成组复制的流式传输引擎 - Google Patents
具有单独可选元素及成组复制的流式传输引擎 Download PDFInfo
- Publication number
- CN109952559B CN109952559B CN201780070308.5A CN201780070308A CN109952559B CN 109952559 B CN109952559 B CN 109952559B CN 201780070308 A CN201780070308 A CN 201780070308A CN 109952559 B CN109952559 B CN 109952559B
- Authority
- CN
- China
- Prior art keywords
- data
- stream
- instruction
- unit
- register
- 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.)
- Active
Links
- 230000010076 replication Effects 0.000 title claims abstract description 97
- 239000013598 vector Substances 0.000 claims abstract description 318
- 230000015654 memory Effects 0.000 claims description 96
- 238000012545 processing Methods 0.000 claims description 70
- 230000004044 response Effects 0.000 claims description 9
- 101100385237 Mus musculus Creg1 gene Proteins 0.000 description 25
- 238000000605 extraction Methods 0.000 description 22
- 125000004122 cyclic group Chemical group 0.000 description 18
- 239000000284 extract Substances 0.000 description 16
- 239000011159 matrix material Substances 0.000 description 13
- 230000009977 dual effect Effects 0.000 description 10
- 238000000034 method Methods 0.000 description 9
- 101000773153 Homo sapiens Thioredoxin-like protein 4A Proteins 0.000 description 8
- 102100030272 Thioredoxin-like protein 4A Human genes 0.000 description 8
- 101000773151 Homo sapiens Thioredoxin-like protein 4B Proteins 0.000 description 7
- 102100030273 Thioredoxin-like protein 4B Human genes 0.000 description 7
- 101100534231 Xenopus laevis src-b gene Proteins 0.000 description 7
- 230000006870 function Effects 0.000 description 6
- 230000008569 process Effects 0.000 description 6
- 230000008859 change Effects 0.000 description 5
- 230000037361 pathway Effects 0.000 description 5
- 230000003139 buffering effect Effects 0.000 description 4
- 238000010586 diagram Methods 0.000 description 4
- 239000002245 particle Substances 0.000 description 4
- 102000001690 Factor VIII Human genes 0.000 description 3
- 108010054218 Factor VIII 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
- 230000009471 action Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 3
- 238000001914 filtration Methods 0.000 description 3
- 239000008187 granular material Substances 0.000 description 3
- 238000013507 mapping Methods 0.000 description 3
- 230000036961 partial effect Effects 0.000 description 3
- 230000017105 transposition Effects 0.000 description 3
- 210000003771 C cell Anatomy 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 101150086656 dim1 gene Proteins 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 238000012913 prioritisation Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 238000013519 translation Methods 0.000 description 2
- 101150008950 CBK1 gene Proteins 0.000 description 1
- 101100326161 Chlamydomonas reinhardtii BKT gene Proteins 0.000 description 1
- 235000008694 Humulus lupulus Nutrition 0.000 description 1
- 230000003213 activating effect 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
- 210000004027 cell Anatomy 0.000 description 1
- 150000001875 compounds Chemical class 0.000 description 1
- 239000000470 constituent Substances 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000001351 cycling effect Effects 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000002789 length control Methods 0.000 description 1
- 230000000670 limiting effect Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 229940050561 matrix product Drugs 0.000 description 1
- 230000007246 mechanism Effects 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
- 230000003362 replicative effect Effects 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 230000011664 signaling Effects 0.000 description 1
- 230000007480 spreading Effects 0.000 description 1
- 238000011282 treatment Methods 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Images
Classifications
-
- 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
- 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
-
- 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
- G06F9/30014—Arithmetic instructions with variable precision
-
- 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/30032—Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
-
- 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/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/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/30098—Register arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30105—Register structure
- G06F9/30112—Register structure comprising data of variable length
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/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/32—Address formation of the next instruction, e.g. by incrementing the instruction 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/3802—Instruction prefetching
-
- 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/3818—Decoding for concurrent execution
- G06F9/3822—Parallel decoding, e.g. parallel decode units
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/383—Operand prefetching
-
- 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/3853—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
-
- 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/0844—Multiple simultaneous or quasi-simultaneous cache accessing
- G06F12/0846—Cache with multiple tag or data arrays being simultaneously accessible
- G06F12/0848—Partitioned cache, e.g. separate instruction and operand caches
-
- 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 Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Computational Mathematics (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Analysis (AREA)
- Quality & Reliability (AREA)
- Advance Control (AREA)
- Complex Calculations (AREA)
Abstract
一种在数字数据处理器中使用的流式传输引擎(2800)指定由多个嵌套循环限定的固定只读数据流。地址产生器(2811、2821)产生数据元素的地址。流磁头寄存器(2818、2828)存储接着将供应到功能单元的数据元素以用作操作数。元素复制单元以指令指定次数任选地复制数据元素。向量掩模单元将从所述元素复制单元接收到的数据元素限于指令指定的向量长度内的最低有效位。如果所述向量长度小于流磁头寄存器大小,那么所述向量掩模单元将所有0存储于所述流磁头寄存器的过量通路中(停用成组复制)或将所述最低有效位的复制副本存储于所述流磁头寄存器(2818、2828)的过量通路中。
Description
技术领域
本发明大体上涉及数字数据处理,且更确切地说,涉及对用于提取操作数的流式传输引擎的控制。
背景技术
现代数字信号处理器(DSP)面临多种挑战。工作负载持续增加,需要增加带宽。片上系统(SOC)的大小及复杂性持续增长。存储器系统时延严重影响某些类别的算法。随着晶体管变小,存储器及寄存器变得较不可靠。随着软体堆叠变大,潜在的相互作用及误差的数目变大。
存储器带宽及调度为对实时数据进行操作的数字信号处理器的问题。对实时数据进行操作的数字信号处理器通常接收输入数据流、对数据流执行滤波函数(例如编码或解码),及输出经变换数据流。由于应用程序在经变换数据流在调度时不可用于输出的情况下失效,系统被称作实时。典型视频编码需要可预测但非依序的输入数据模式。通常,对应存储器存取在可用的地址产生及存储器存取资源内难以实现。典型应用要求存储器存取数据寄存器文件中的负载数据寄存器且接着供应到执行数据处理的功能单元。
发明内容
本发明为一种数字信号处理器中采用的流式传输引擎。通过将对应参数存储于控制寄存器中来指定固定数据流序列。数据流包含多个嵌套循环。一旦开始,数据流为只读的且不能写入。这通常对应于对实时滤波操作的需要。
流式传输引擎包含产生数据元素的地址的地址产生器及存储接着将供应到功能单元的数据元素以用作操作数的流磁头寄存器。流式传输引擎在流数据由流缓冲器中的中央处理单元核心使用之前提取流数据。流磁头寄存器的大小较佳地匹配功能单元的操作性数据大小。指令优选地包含具有对应于寄存器的译码、流只读操作数译码及流读取及前进操作数译码的第一子集的操作数字段。
流引擎包含以指令指定次数任选地复制数据元素的元素复制单元。在优选实施例中,元素数据大小及此元素复制因子的乘积可导致经复制元素溢出流磁头寄存器。
流引擎包含具有两个主要功能的向量掩模/成组复制单元。独立指定的向量长度控制供应到每一输出数据向量的数据元素。向量掩模/成组复制单元将从元素复制单元接收到的数据元素限于指令指定的向量长度内的最低有效位。当成组复制断开时,输出数据向量中的过量通路经零填充。当成组复制接通时,指定向量长度的输入数据元素经复制以填充输出数据向量。
元素复制及成组复制是独立的。应注意,这些特征包含独立的规格及参数设定。因此,元素复制及成组复制可一起或单独使用。归因于指定这些的方式,元素复制准许溢出到下一向量,而成组复制并不如此。
附图说明
图式中说明这些和其它态样,其中:
图1说明根据本发明的一个实施例的双标量/向量数据路径处理器;
图2说明图1中所说明的双标量/向量数据路径处理器中的寄存器及功能单元。
图3说明全局标量寄存器文件;
图4说明由算术功能单元共享的局部标量寄存器文件。
图5说明由乘法功能单元共享的局部标量寄存器文件;
图6说明由加载/存储单元共享的局部标量寄存器文件。
图7说明全局向量寄存器文件;
图8说明谓词寄存器文件;
图9说明由算术功能单元共享的局部向量寄存器文件;
图10说明由乘法及相关功能单元共享的局部向量寄存器文件;
图11说明根据本发明的优选实施例的中央处理单元的管线阶段;
图12说明单个提取分组的十六个指令;
图13说明由本发明使用的指令的指令译码的一实例;
图14说明条件码扩展时隙0的位译码;
图15说明条件码扩展时隙1的位译码;
图16说明常量扩展时隙0的位译码;
图17为说明常量扩展的部分框图;
图18说明根据本发明的用于SIMD操作的进位控制;
图19说明本发明的流式传输引擎的概念图;
图20说明本发明的格式化操作的序列;
图21说明向量中的通路分配的第一实例;
图22说明向量中的通路分配的第二实例;
图23说明基本二维流;
图24说明图21的实例流内的元素的次序;
图25说明从较大矩形提取较小矩形;
图26说明流式传输引擎将用4字节的转置粒度提取此实例的流的方式;
图27说明流式传输引擎将用8字节的转置粒度提取此实例的流的方式;
图28说明本发明的流式传输引擎的细节;
图29说明本发明的流模板寄存器;
图30说明本发明的流模板寄存器的标志字段的子字段定义;
图31说明本发明的复制块;
图32说明向量长度掩模/成组复制块;
图33-37说明用于DIMFMT值的流模板寄存器的位的定义;
图38说明流输入操作数译码。
具体实施方式
图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作为能够同时操作对应功能单元中的多个指令的超长指令字(verylong instruction word;VLIW)处理器进行操作。优选地,编译器组织执行分组中的一起执行的指令。指令调度单元112将每条指令引导到其目标功能单元。指派给指令的功能单元完全由通过编译器产生的指令指定。中央处理单元核心110的硬件不具有在此功能单元指派中的部分。在优选实施例中,指令调度单元112可并联操作多个指令。这类平行指令的数目由执行分组的大小设定。此将在下文进一步详述。
指令调度单元112的调度任务的一个部分为确定指令是在标量数据路径侧A 115还是向量数据路径侧B 116中的功能单元上执行。每条指令内被称作s位的指令位确定指令控制的数据路径。此将在下文进一步详述。
指令解码单元113解码当前执行分组中的每条指令。解码包含识别执行指令的功能单元、识别可能的寄存器文件当中用于为对应数据处理操作供应数据的寄存器,及识别对应数据处理操作的结果的寄存器目的地。如下文进一步解释,指令可包含常量字段而非一个寄存器编号操作数字段。此解码的结果为用于控制目标功能单元以对指定数据执行由对应指令指定的数据处理操作的信号。
中央处理单元核心110包含控制寄存器114。控制寄存器114以与本发明无关的方式存储用于控制标量数据路径侧A 115及向量数据路径侧B 116中的功能单元的信息。此信息可以是模式信息等。
将来自指令解码113的经解码指令及存储于控制寄存器114中的信息供应到标量数据路径侧A 115及向量数据路径侧B 116。因此,标量数据路径侧A 115及向量数据路径侧B 116内的功能单元在指令指定数据之后执行指令指定数据处理操作且将结果存储在一或多个指令指定数据寄存器中。标量数据路径侧A 115及向量数据路径侧B 116中的每一者包含优选地并联操作的多个功能单元。这些将结合图2在下文进一步详述。标量数据路径侧A115与向量数据路径侧B 116之间存在准许数据交换的数据路径117。
中央处理单元核心110包含其它不基于指令的模块。仿真单元118响应于指令准许确定中央处理单元核心110的机器状态。此能力通常将用于算法开发。中断/异常单元119使中央处理单元核心110能够对外部、非同步事件(中断)作出响应且对试图执行不当操作(异常)作出响应。
中央处理单元核心110包含流式传输引擎125。流式传输引擎125将两个数据流从通常高速缓存于二级组合式高速缓存130中的预定地址供应到向量数据路径侧B的寄存器文件。此将受控数据移动从存储器(如高速缓存于二级组合式高速缓存130中)直接提供到功能单元操作数输入端。这在下文进一步详述。
图1说明各种部分之间的总线的示范性数据宽度。一级指令高速缓存121经由总线141将指令供应到指令提取单元111。总线141优选地为512位总线。总线141为单向的,从一级指令高速缓存121到中央处理单元核心110。二级组合式高速缓存130经由总线142将指令供应到一级指令高速缓存121。总线142优选地为512位总线。总线142为单向的,从二级组合式高速缓存130到一级指令高速缓存121。
一级数据高速缓存123经由总线143与标量数据路径侧A 115中的寄存器文件交换数据。总线143优选地为64位总线。一级数据高速缓存123经由总线144与向量数据路径侧B116中的寄存器文件交换数据。总线144优选地为512位总线。总线143及144经说明为双向的,支持中央处理单元核心110数据读取及数据写入两者。一级数据高速缓存123经由总线145与二级组合式高速缓存130交换数据。总线145优选地为512位总线。总线145经说明为双向的,为中央处理单元核心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及到向量数据路径侧B116。
在本发明的优选实施例中,根据题为“包含高速缓存及直接可编址静态随机存取存储器的统一存储器系统架构(UNIFIED MEMORY SYSTEM ARCHITECTURE INCLUDING CACHEAND DIRECTLY ADDRESSABLE STATIC RANDOM ACCESS MEMORY)”的第6,606,686号美国专利,一级数据高速缓存123及二级组合式高速缓存130两者可经配置为选定量的高速缓存或直接可编址存储器。
图2说明标量数据路径侧A115及向量数据路径侧B 116内的功能单元及寄存器文件的其它细节。标量数据路径侧A 115包含全局标量寄存器文件211、L1/S1局部寄存器文件212、M1/N1局部寄存器文件213及D1/D2局部寄存器文件214。标量数据路径侧A 115包含L1单元221、S1单元222、M1单元223、N1单元224、D1单元225及D2单元226。向量数据路径侧B116包含全局向量寄存器文件231、L2/S2局部寄存器文件232、M2/N2/C局部寄存器文件233及谓词寄存器文件234。向量数据路径侧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单元221相同类型的操作。任选地,由L1单元221及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或谓词寄存器文件234的指令指定寄存器中。
向量数据路径侧B 116包含S2单元242。S2单元242通常接受两个512位操作数且产生一个512位结果。两个操作数各自从全局向量寄存器文件231、L2/S2局部寄存器文件232或谓词寄存器文件234中的指令指定寄存器召回。除了较宽512位数据以外,S2单元242优选地执行类似于S1单元222的指令。结果可写入全局向量寄存器文件231、L2/S2局部寄存器文件232、M2/N2/C局部寄存器文件233或谓词寄存器文件234的指令指定寄存器中。可能存在一起使用L2单元241及S2单元242两者的某些双重操作(被称作双发布指令)。结果可写入全局向量寄存器文件231、L2/S2局部寄存器文件232或M2/N2/C局部寄存器文件233的指令指定寄存器中。
向量数据路径侧B 116包含M2单元243。M2单元243通常接受两个512位操作数且产生一个512位结果。两个操作数各自从全局向量寄存器文件231或M2/N2/C局部寄存器文件233中的指令指定寄存器召回。除了较宽512位数据以外,M2单元243优选地执行类似于M1单元223的指令。结果可写入全局向量寄存器文件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优选地执行:“搜索(Rake)”及“搜寻(Search)”指令;使每时钟周期至多512个2位PN*8位乘以I/Q复数相乘;8位及16位绝对差和(Sum-of-Absolute-Difference;SAD)计算,每时钟周期至多512个SAD;水平相加及水平最小/最大指令;及向量排列指令。C单元245亦含有用于控制C单元245指令的某些操作的4个向量控制寄存器(CUCR0到CUCR3)。控制寄存器CUCR0到CUCR3在某些C单元245操作中用作操作数。控制寄存器CUCR0到CUCR3优选地使用:在对通用排列指令(VPERM)的控制中;及作为SIMD多重内积运算(multiple DOT product operation;DOTPM)及SIMD多重绝对差和(SAD)运算的掩模。控制寄存器CUCR0优选地用于存储用于伽罗瓦域乘法运算(Galois Field Multiplyoperation;GFMPY)的多项式。控制寄存器CUCR1优选地用于存储伽罗瓦域多项式产生器函数。
向量数据路径侧B 116包含P单元246。P单元246对谓词寄存器文件234的寄存器执行基本逻辑运算。P单元246对谓词寄存器文件234具有直接的存取以从谓词寄存器文件读取及对其写入。这些运算包含AND、ANDN、OR、XOR、NOR、BITR、NEG、SET、BITCNT、RMBD、位抽取(BIT Decimate)及扩展(Expand)。P单元246的通常预期使用包含操纵用于控制另一SIMD向量运算的SIMD向量比较结果。
图3说明全局标量寄存器文件211。存在命名为A0到A15的16个独立64位宽标量寄存器。全局标量寄存器文件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。存在命名为D0到D16的16个独立64位宽标量寄存器。D1/D2局部寄存器文件214的各寄存器可读取或写入为64位标量数据。所有标量数据路径侧A 115功能单元(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中说明的实施例具有命名为AL0到AL7的8个独立64位宽标量寄存器。优选指令译码(参见图13)准许L1/S1局部寄存器文件212包含至多16个寄存器。图5的实施例实施仅8个寄存器以减小电路大小且降低复杂度。L1/S1局部寄存器文件212的各寄存器可读取或写入为64位标量数据。所有标量数据路径侧A 115功能单元(L1单元221、S1单元222、M1单元223、N1单元224、D1单元225及D2单元226)可写入L1/S1局部标量寄存器文件212中。可从L1/S1局部标量寄存器文件212读取仅L1单元221及S1单元222。
图6说明M1/N1局部寄存器文件213。图6中说明的实施例具有命名为AM0到AM7的8个独立64位宽标量寄存器。优选指令译码(参见图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/N1局部标量寄存器文件213读取仅M1单元223及N1单元224。
图7说明全局向量寄存器文件231。存在16个独立512位宽标量寄存器。全局向量寄存器文件231的命名为B0到B15的各寄存器可读取或写入为64位标量数据。全局向量寄存器文件231的命名为VB0到VB15的各寄存器可读取或写入为512位向量数据。指令类型确定数据大小。所有向量数据路径侧B 116功能单元(L2单元241、S2单元242、M2单元243、N2单元244、C单元245及P单元246)可读取或写入全局向量寄存器文件231中。在下文将详述的限制下,标量数据路径侧A 115功能单元(L1单元221、S1单元222、M1单元223、N1单元224、D1单元225及D2单元226)可经由交叉路径117从全局向量寄存器文件231读取。
图8说明谓词寄存器文件234。存在命名为P0到P7的8个独立64位宽寄存器。谓词寄存器文件234的各寄存器可读取或写入为64位标量数据。向量数据路径侧B 116功能单元L2单元241、S2单元242、C单元244及P单元246可写入谓词寄存器文件234中。可从谓词寄存器文件234读取仅L2单元241、S2单元242及P单元246。谓词寄存器文件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的命名为BL0到BL7的各寄存器可读取或写入为64位标量数据。L2/S2局部向量寄存器文件232的命名为VBL0到VBL7的各寄存器可读取或写入为512位向量数据。指令类型确定数据大小。所有向量数据路径侧B 116功能单元(L2单元241、S2单元242、M2单元243、N2单元244、C单元245及P单元246)可写入L2/S2局部向量寄存器文件232中。可从L2/S2局部向量寄存器文件232读取仅L2单元241及S2单元242。
图10说明M2/N2/C局部寄存器文件233。图10中所说明的实施例具有8个独立512位宽标量寄存器。优选指令译码(参见图13)准许M2/N2/C局部寄存器文件233包含至多16个寄存器。图10的实施例实施仅8个寄存器以减小电路大小且降低复杂度。M2/N2/C局部向量寄存器文件233的命名为BM0到BM7的各寄存器可读取或写入为64位标量数据。M2/N2/C局部向量寄存器文件233的命名为VBM0到VBM7的各寄存器可读取或写入为512位向量数据。所有向量数据路径侧B 116功能单元(L2单元241、S2单元242、M2单元243、N2单元244、C单元245及P单元246)可写入M2/N2/C局部向量寄存器文件233中。可从M2/N2/C局部向量寄存器文件233读取仅M2单元243、N2单元244及C单元245。
可由一侧的所有功能单元存取的全局寄存器文件及可由一侧的功能单元中的仅一些存取的局部寄存器文件的提供为一种设计选择。本发明可以采用对应于所公开的全局寄存器文件的仅一种类型的寄存器文件实践。
交叉路径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位操作数为全局向量寄存器文件231的经存取寄存器中的512位数据的最低有效位。多个标量数据路径侧A 115功能单元可使用与同一操作周期期间的操作数相同的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位操作数从标量数据路径侧A115输送到向量数据路径侧B 116。
在某些受约束情况下,流式传输引擎125输送数据。流式传输引擎125控制两个数据流。流由特定类型的一系列元素组成。对流进行操作的程序顺序地读取数据,随后对各元素进行操作。每一流具有以下基本特性。流数据具有界限分明的开始及结束时间。流数据在整个流中具有固定元素大小及类型。流数据具有固定元素顺序。因此,程序不能在所述流内随机地搜寻。流数据在激活时为只读的。程序在从流读取的同时不能写入所述流中。一旦流打开,流式传输引擎125:计算地址;从二级统一高速缓存(其可要求来自较高级存储器的高速缓存服务)提取限定数据类型;执行数据类型操纵,例如零扩展、符号扩展、数据元素分选/调换(例如矩阵转置);及将数据直接递送到中央处理单元核心110内的经编程数据寄存器文件。流式传输引擎125因此可用于良性数据的实时数字滤波操作。流式传输引擎125免于来自实现其它处理功能的对应中央处理单元核心110的这些存储器提取任务。
流式传输引擎125提供以下益处。流式传输引擎125准许多维存储器存取。流式传输引擎125将可用带宽增加到功能单元。流式传输引擎125最小化由于流缓冲器绕过一级数据高速缓存123的高速缓存未命中停顿的数目。流式传输引擎125减少所需的标量运算的数目以维持循环。流式传输引擎125管理地址指针。流式传输引擎125针对其它计算处置自动地释放地址产生指令时隙及D1单元225及D2单元226的地址产生。
中央处理单元核心110对指令管线进行操作。在下文进一步描述的固定长度的指令分组中提取指令。所有指令要求用于提取及解码的相同数目个管线阶段,但要求不同数目的执行阶段。
图11说明以下管线阶段:程序提取阶段1110、调度及解码阶段1120及执行阶段1130。程序提取阶段1110对于所有指令包含三个级。调度及解码阶段1120对于所有指令包含三个级。执行阶段1130包含依赖于指令的一个到四个级。
提取阶段1110包含程序地址产生级1111(PG)、程序存取级1112(PA)及程序接收级1113(PR)。在程序地址产生级1111(PG)期间,程序地址产生于中央处理单元核心110中且读取请求发送到一级指令高速缓存L1I的存储器控制器。在程序存取级1112(PA)期间,一级指令高速缓存L1I处理请求,存取其存储器中的数据,为将提取分组发送到中央处理单元核心110边界。在程序接收级1113(PR)期间,中央处理单元核心110登记所述提取分组。
指令始终一次提取十六个32位宽时隙,构成提取分组,图12说明单个提取分组的16个指令1201到1216。提取分组与512位(16字)边界对准。优选实施例采用固定的32位指令长度。固定长度指令由于一些原因是有利的。固定长度指令易于实现解码器对准。恰当对准的指令提取可将多个指令加载到并行指令解码器中。所述恰当对准的指令提取在存储于与固定指令分组提取耦合的存储器(在512位边界上对准的提取分组)中时可通过预定指令对准实现。对准指令提取准许并行解码器对设定指令大小的提取位的操作。可变长度指令在其可经解码之前要求定位每一指令边界的初始步骤。固定长度指令集通常准许指令字段的更规则布局。这简化每一解码器的构造,其对于广发布VLIW中央处理器为一优点。
个别指令的执行部分地受每条指令中的p位控制。此p位优选地为32位宽时隙的位0。p位确定指令是否与下一指令并行执行。指令从较低地址到较高地址经扫描。如果指令的p位为1,那么下一指令(较高存储器地址)与(同一周期中的)所述指令并行地执行。如果指令的p位为0,那么下一指令在所述指令之后的周期中执行。
中央处理单元核心110及一级指令高速缓存L1I 121管线彼此解耦。取决于外部环境,例如是一级指令高速缓存121中存在命中还是二级组合式高速缓存130中存在命中,从一级指令高速缓存L1I返回的提取分组可耗费不同时钟周期数。因此,程序存取级1112(PA)可耗费若干时钟周期而非如在其它级中的1个时钟周期。
并行执行的指令构成执行分组。在优选实施例中,执行分组可含有至多十六个指令。执行分组中无两个指令可使用相同功能单元。时隙为五种类型中的一种:1)在中央处理单元核心110的功能单元(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)条件码扩展。这些时隙类型中的一些将在下文进一步解释。
调度及解码阶段1120包含指令调度到适当指令调度级(DS)1121、指令解码级1(DC1)1122;及指令解码级2(DC2)1123。在指令调度到适当指令调度级(DS)1121期间,提取分组分裂成执行分组且指派给适当功能单元。在指令解码级1(DC1)1122期间,源寄存器、目的地寄存器及相关联路径经解码用于执行功能单元中的指令。在指令解码级2(DC2)1123期间,更详细地进行单元解码,以及从寄存器文件读取操作数。
执行阶段1130包含执行级1131到1135(E1到E5)。不同类型的指令需要不同数目的这些级以完成其执行。管线的这些级在理解中央处理单元核心110周期边界处的装置状态中起重要作用。
在执行1级1131(E1)期间,评估指令条件且对操作数进行操作。如图11中所示出,执行1级1131可从流缓冲器1141及示意性地示出为1142的寄存器文件中的一个接收操作数。对于加载及存储指令,地址产生经执行且地址修改写入寄存器文件中。对于分支指令,PG级1111中的分支提取分组受影响。如图11中所示出,加载及存储指令存取存储器在本文中示意性地示出为存储器1151。对于单周期指令,结果写入目标寄存器文件中。此假设指令的任何条件评估为真。如果条件评估为假,那么指令在执行1级1131之后并不写入任何结果或具有任何管线操作。
在执行2级1132(E2)期间,加载指令将地址发送到存储器。存储指令将地址及数据发送到存储器。使结果饱和的单周期指令在饱和发生时设定控制状态寄存器(CSR)中的SAT位。对于2周期指令,结果写入目标寄存器文件中。
在执行3级1133(E3)期间,执行数据存储器存取。使结果饱和的任何乘法指令在饱和发生时设定控制状态寄存器(CSR)中的SAT位。对于3周期指令,结果写入目标寄存器文件中。
在执行4级1134(E4)期间,加载指令将数据引入到中央处理单元核心110边界。对于4周期指令,结果写入目标寄存器文件中。
在执行5级1135(E5)期间,加载指令将数据写入寄存器中。这在图11中通过从存储器1151到执行5级1135的输入示意性地说明。
图13说明由本发明使用的功能单元指令的指令译码1300的一实例。所属领域的技术人员将认识到,其它指令译码是可行的且在本发明的范围内。每条指令由33个位组成且控制可单独控制的功能单元(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)取决于指令操作码字段具有若干含义(位3到12用于所有指令且另外位28到31用于无条件指令)。第一含义将对应寄存器文件的寄存器指定为第二操作数。第二含义为立即常量。取决于指令类型,这被视为无符号整数且零扩展到指定数据长度或被视为有符号整数且符号扩展到指定数据长度。
src1字段1305(位13到17)将对应寄存器文件中的寄存器指定为第一源操作数。
用于所有指令的操作码字段1306(位3到12)(及另外用于无条件指令的位28到31)指定指令的类型且指明适当指令选项。此包含所使用的功能单元及所执行的操作的明确标识。除了下文详述的指令选项以外,操作码的详细解释超出本发明的范围。
e位1307(位2)仅用于立即常量指令,其中常量可扩展。如果e=1,那么立即常量以下文详述的方式扩展。如果e=0,那么立即常量不扩展。在这种情况下,立即常量由src2/cst字段1304(位18到22)指定。应注意,此e位1307仅用于一些指令。因此,使用恰当译码,此e位1307可从不需要其的指令省略,且此位用作额外操作码位。
s位1308(位1)指明标量数据路径侧A 115或向量数据路径侧B 116。如果s=0,那么选择标量数据路径侧A 115。此将功能单元限于图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位1309(位0)标记执行分组。p位确定指令是否与后续指令并行执行。p位指令从较低地址到较高地址经扫描。如果对于当前指令p=1,那么下一指令与当前指令并行执行。如果对于当前指令p=0,那么下一指令在当前指令之后的周期中执行。并行执行的所有指令构成执行分组。执行分组可含有至多十二个指令。执行分组中的每条指令必须使用不同功能单元。
存在两个不同条件码扩展时隙。每一执行分组可含有这些独特32位条件码扩展时隙中的每一个,所述每一个时隙含有用于相同执行分组中的指令的4位creg/z字段。图14说明条件码扩展时隙0的译码,且图15说明条件码扩展时隙1的译码。
图14说明具有33个位的条件码扩展时隙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单元226指令的4个creg/z位。字段1407(位6及7)未使用/保留。字段1408(位0到5)经译码一组独特位(CCEX0)以识别条件码扩展时隙0。一旦检测到条件码扩展时隙0的此唯一ID,对应creg/z位用于控制相同执行分组中的任何L1单元221、L2单元241、S1单元222、S2单元242、D1单元225及D2单元226指令的条件执行。如表1中所示解释这些creg/z位。如果对应指令为有条件的(包含creg/z位),那么条件码扩展时隙0的对应位重写指令中的条件码位。应注意,无执行分组可具有引导到特定执行单元的多于一个指令。无指令的执行分组可含有多于一个条件码扩展时隙0。因此,creg/z位到功能单元指令的映射为明确的。设定creg/z位等于“0000”使指令为无条件的。因此,经恰当译码的条件码扩展时隙0可使一些对应指令有条件且一些无条件。
图15说明具有33个位的条件码扩展时隙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(位6到11)未使用/保留。字段1507(位0到5)经译码一组独特位(CCEX1)以识别条件码扩展时隙1。一旦检测到条件码扩展时隙1的此唯一ID,对应creg/z位用于控制相同执行分组中的任何M1单元223、M2单元243、C单元245、N1单元224及N2单元244指令的条件执行。如表1中所示解释这些creg/z位。如果对应指令为有条件的(包含creg/z位),那么条件码扩展时隙1的对应位重写指令中的条件码位。应注意,无执行分组可具有引导到特定执行单元的多于一个指令。无指令的执行分组可含有多于一个条件码扩展时隙1。因此,creg/z位到功能单元指令的映射为明确的。设定creg/z位等于“0000”使指令为无条件的。因此,经恰当译码的条件码扩展时隙1可使一些指令有条件且一些无条件。
如上文结合图13所描述,条件码扩展时隙0及条件码扩展时隙1两者包含用以限定执行分组的p位是可行的。在优选实施例中,如图14和15中所示出,码扩展时隙0及条件码扩展时隙1优选地具有始终编码为1的位0(p位)。因此,条件码扩展时隙0或条件码扩展时隙1都不可在执行分组的最末指令时隙中。
存在两个不同常量扩展时隙。每一执行分组可含有这些独特的32位常量扩展时隙中的每一个,所述每一个时隙含有待与5位常量字段1305级联为高阶位以形成32位常量的27个位。如上文的指令译码描述中所提及,仅一些指令将src2/cst字段1304限定为常量而非源寄存器标识符。所述指令中的至少一些可采用常量扩展时隙来将此常量扩展到32个位。
图16说明常量扩展时隙0的字段。每一执行分组可包含常量扩展时隙0的一个个例及常量扩展时隙1的一个个例。图16说明包含两个字段的常量扩展时隙0 1600。字段1601(位5到31)构成包含目标指令scr2/cst字段1304作为五个最低有效位的经扩展32位常量的最高有效的27个位。字段1602(位0到4)经译码一组独特位(CSTX0)以识别常量扩展时隙0。在优选实施例中,常量扩展时隙0 1600可仅用于扩展相同执行分组中的L1单元221指令、D1单元225指令中的数据、S2单元242指令、D2单元226指令中的偏移、M2单元243指令、N2单元244指令、分支指令或C单元245指令中的一者的常量。除了位0到4经译码一组独特位(CSTX1)以识别常量扩展时隙1之外,常量扩展时隙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接收控制输入标量/向量及数据大小。标量/向量输入指示对应指令是标量指令还是向量指令。数据路径侧A 115的功能单元(L1单元221、S1单元222、M1单元223、N1单元224、D1单元225及D2单元226)可仅执行标量指令。涉及这些功能单元中的一个的任何指令为标量指令。数据路径侧B功能单元L2单元241、S2单元242、M2单元243、N2单元244及C单元245可执行标量指令或向量指令。指令解码器113从操作码位确定指令是标量指令还是向量指令。P单元246可仅执行标量指令。数据大小可为8位(字节B)、16位(半字H)、33位(字W)或64位(双字D)。
表2列出针对各种选项的符号扩展单元1703的操作。
指令类型 | 操作数大小 | 常量长度 | 动作 |
标量 | B/H/W/D | 5个位 | 符号扩展到64个位 |
标量 | B/H/W/D | 33个位 | 符号扩展到64个位 |
向量 | B/H/W/D | 5个位 | 符号扩展到操作数大小且在整个向量中复制 |
向量 | B/H/W | 33个位 | 在每一32位(W)通路中复制32位常量 |
向量 | D | 33个位 | 符号扩展到64个位且在每一64位(D)通路中复制 |
表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指令中的多于一个的e位为1。对于常量扩展时隙1,这将意味着执行分组中的L2单元241指令、D2单元226指令中的数据、S1单元222指令、D1单元225指令中的偏移、M1单元223指令或N1单元224指令中的多于一个的e位为1。预期将相同常量扩展供应到多于一个指令并非有用功能。因此,在一个实施例中,指令解码器113可确定此情况为无效操作且不支持。替代地,可用应用于每一对应功能单元指令标记常量扩展的常量扩展时隙的扩展位支持此组合。
特殊向量谓词指令使用谓词寄存器文件234中的寄存器来控制向量运算。在当前实施例中,所有这些SIMD向量谓词指令对选定数据大小进行操作。数据大小可包含字节(8位)数据、半字(16位)数据、字(32位)数据、双字(64位)数据、四字(128位)数据及半向量(256位)数据。谓词寄存器的每一位控制SIMD操作是否在数据的对应字节上执行。P单元245的操作准许基于多于一个向量比较的各种复合向量SIMD操作。举例来说,可使用两个比较进行范围确定。候选向量与具有打包在第一数据寄存器内的范围的最小值的第一向量参考相比较。候选向量与具有打包在第二数据寄存器内的范围的最大值的第二参考向量进行第二比较。两个所得谓词寄存器的逻辑组合将准许向量条件操作以确定候选向量的每一数据部分在范围内还是超出范围。
L1单元221、S1单元222、L2单元241、S2单元242及C单元245通常在单指令多数据(SIMD)模式中操作。在此SIMD模式中,相同指令应用于来自两个操作数的打包数据。每一操作数保存置于预定时隙中的多个数据元素。通过数据边界处的进位控制来启用SIMD操作。这类进位控制使得能够对不同数据宽度进行操作。
图18说明进位控制。AND门1801接收操作数宽算术逻辑单元内的位N的进位输出(对于标量数据路径侧A 115功能单元64位且对于向量数据路径侧B 116功能单元512位)。AND门1801还接收下文将进一步解释的进位控制信号。将AND门1801的输出供应到操作数宽算术逻辑单元的位N+l的进位输入。例如AND门1801的AND门设置在可能的数据边界处的每一对位之间。举例来说,对于8位数据,此类AND门将处于位7与8、位15与16、位23与24等之间。每一这类AND门接收对应进位控制信号。如果数据大小为最小值,那么每一进位控制信号为0,有效地阻挡相邻位之间的进位发射。如果所选数据大小需要两个算术逻辑单元部分,那么对应进位控制信号为1。下文表3示出在例如由向量数据路径侧B 116功能单元使用的512位宽操作数的情况下的实例进位控制信号,所述操作数可划分成8位、16位、32位、64位、128位或256位部分。在表3中,较高32位控制较高位(位128到511)进位,且较低32位控制较低位(位0到127)进位。不需要控制最高有效位的进位输出,因此仅要求63个进位控制信号。
表3
通常在所属领域中,对为2的整数幂(2N)的数据大小进行操作。然而,此进位控制技术不限于2的整数幂。所属领域的技术人员将理解如何将此技术应用于其它数据大小及其它操作数宽度。
图19说明本发明的流式传输引擎的概念图。图19说明单个流的过程。流式传输引擎1900包含流地址产生器1901。流地址产生器1901顺序地产生流的元素的地址且将这些元素地址供应到系统存储器1910。存储器1910召回存储于元素地址处的数据(数据元素)且将这些数据元素供应到数据先进先出(first-in-first-out;FIFO)存储器1902。数据FIFO1902在存储器1910与CPU 1920之间提供缓冲。数据格式器1903从数据FIFO存储器1902接收数据元素且根据流定义提供数据格式化。此过程将在下文中描述。流式传输引擎1900将格式化数据元素从数据格式器1903供应到CPU 1920。CPU 1920上的程序消耗数据且产生输出。
流元素通常驻留在常规存储器中。存储器自身未在流上强加特定结构。程序定义流且因此通过指定以下流属性强加结构:流的第一元素的地址;流中的元素的大小及类型;流中的数据的格式化;及与流相关联的地址序列。
流式传输引擎就穿过存储器的指针来说限定流的元素的地址序列。多级嵌套循环控制指针采用的路径。循环等级的迭代计数指示等级重复的次数。尺寸给出所述循环等级的指针位置之间的距离。
在基本前进流中,最内循环始终消耗来自存储器的物理上相连的元素。此最内循环的隐含尺寸为1个元素。指针自身以连续、递增次序在元素间移动。在内循环外的每一等级中,所述循环基于循环等级尺寸的大小将指针移动到新位置。
此寻址形式允许程序以少量参数指定通过存储器的规则路径。表4列出基本流的寻址参数。
表4
上文的定义将流的连续元素映射到存储器中的递增地址。这良好地适于大部分算法但非全部。一些算法通过读取递减的存储器地址中的元素、后向流寻址更好地服务。举例来说,离散卷积按照下式计算向量内积:
在大部分DSP代码中,f[]及g[]表示存储器中的阵列。对于每一输出,算法在正向方向上读取f[],但在相反方向上读取g[]。实用滤波器将[x]及[t-x]的索引范围限于有限数目个元素。为支持这一模式,流式传输引擎以递减地址次序支持读取元素。
矩阵乘法针对流式传输引擎呈现出独特的问题。矩阵乘积中的每一元素是来自第一矩阵的行与来自第二矩阵的列之间的向量内积。程序通常以行优先或列优先次序存储所有矩阵。行优先次序将单个行的所有元素连续地存储在存储器中。列优先次序将单个列的所有元素连续地存储在存储器中。矩阵通常以与语言的默认阵列次序相同的次序存储。因此,矩阵乘法中的两个矩阵中的仅一者映射到流式传输引擎的2维流定义上。在典型实例中,第一索引除第二阵列上的行以外跨过第一阵列上的列。这一问题不是流式传输引擎所独有的。矩阵乘法的访问模式与大部分通用存储器层次结构不良地配合。一些软件库转置两个矩阵中的一个,以使得两者在乘法期间按行(或按列)访问。流式传输引擎通过转置流支持隐含矩阵转置。转置流避免明确转换存储器中的数据的成本。流式传输引擎以其遍历次序有效地交换两个内循环尺寸而非以严格地连续元素次序存取数据,从而沿相连向量通路中的第二尺寸提取元素。
这一算法起作用,但对于小元素大小的实施是不切实际的。一些算法对多个列及行在一起的矩阵瓦起作用。因此,流式传输引擎限定分离转置粒度。硬件强加最小粒度。转置粒度还必须至少与元素大小一样大。转置粒度使得流式传输引擎在沿尺寸1移动之前从尺寸0提取一或多个连续元素。当粒度等于元素大小时,这使得从行优先阵列提取单个列。否则,粒度指定从行优先阵列一次提取2个、4个或更多个列。这通过交换描述中的行及列还可适用于列优先布局。参数GRANULE指示字节中的转置粒度。
另一常见矩阵乘法技术交换矩阵乘法的两个最内循环。所得内循环在跨一个矩阵的行进行读取时不再读取另一矩阵的列。举例来说,算法可提出内循环外的一个术语,用标量值替代所述术语。在向量机上,最内循环可通过单个逐标量乘法,继之以向量相加来极有效地实施。本发明的中央处理单元核心110缺乏逐向量乘法。相反地,程序必须跨向量长度复制标量值且使用逐向量乘法。本发明的流式传输引擎通过元素复制模式直接支持此及相关使用模型。在此模式中,流式传输引擎读取小于全向量大小的颗粒且复制所述颗粒以填充下一向量输出。
流式传输引擎将每一复数处理为具有两个子元素的单个元素,所述两个子元素给出复数的实及虚(矩形)或幅值及角度(极性)部分。并非所有程序或外围装置都同意这些子元素应出现在存储器中的次序。因此,流式传输引擎提供无成本地调换复数的两个子元素的能力。此特征调换元素的半部而不解释元素的内容,且可用于交换任何类型的子元素对,而不仅是复数。
算法通常优选地以高精度工作,但高精度值相比于较低精度值需要更大存储及带宽。通常,程序以低精度将数据存储于存储器中,将所述值提升到较高精度以供计算且接着将所述值降级到较低精度以供存储。流式传输引擎直接通过允许算法指定类型提升的一个等级来支持此动作。在本发明的优选实施例中,每一子元素可通过整数类型的符号或零扩展提升到较大类型大小。流式传输引擎可支持浮点提升,从而将16位及32位浮点值分别提升到32位及64位格式也是可行的。
流式传输引擎将流限定为数据元素的离散序列,中央处理单元核心110消耗在向量中连续打包的数据元素。向量类似于流,其含有具有某一隐含序列的多个同类元素。由于流式传输引擎读取流,但中央处理单元核心110消耗向量,流式传输引擎必须以一致方式将流映射到向量上
向量由相等大小的通路组成,每一通路含有子元素。中央处理单元核心110将向量的最右通路指明为通路0,无关于装置的当前端序模式。通路数目从右到左增加。向量内的实际通路数目取决于向量的长度及子元素的数据大小而变化。
图20说明格式器1903的格式化操作的序列。格式器1903包含三个部分:输入部分2010;格式化部分2020;及输出部分2030。输入部分2010在由流地址产生器1901访问时接收从系统存储器1910召回的数据。此数据可以是通路线性提取流2011或经转置提取流2012。
格式化部分2020包含各种格式化块。下文将进一步描述通过格式器1903利用这些块执行的格式化。复数调换块2021任选地调换形成复数元素的两个子元素。类型提升块2022任选地将每一数据元素提升为较大数据大小。提升包含针对无符号整数的零扩展及针对带符号整数的符号扩展。抽取块2023任选地抽取数据元素。在优选实施例中,抽取可为4:1保持每第四个数据元素的2:1保持每隔一个数据元素。元素复制块2024任选地复制个别数据元素。在优选实施例中,此数据元素复制为2的整数幂(2N,当N是整数时),包含2x、4x、8x、16x、32x及64x。在优选实施例中,数据复制可在多个目的地向量上扩展。向量长度掩模/成组复制块2025具有两个主要功能。独立指定的向量长度VECLEN控制供应到每一输出数据向量的数据元素。当成组复制断开时,输出数据向量中的过量通路经零填充。当成组复制接通时,指定向量长度的输入数据元素经复制以填充输出数据向量。
输出部分2030保存数据以供输出到对应功能单元。CPU的寄存器及缓冲器2031存储待由中央处理单元核心110的功能单元用作操作数的数据的格式化向量。
图21说明向量中的通路分配的第一实例。向量2100经划分成8个64位通路(8×64位=512位向量长度)。通路0包含位0到63;通路1包含位64到127;通路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到383;通路12包含位384到415;通路13包含位416到447;通路14包含位448到479;且通路15包含位480到511。
流式传输引擎将最内流尺寸直接映射到向量通路。其将所述尺寸内的早期元素映射到较低通路号且将稍晚元素映射到较高通路号。无论此特定流是以递增或递减地址次序前进,这总为真。无论流限定的次序为何,流式传输引擎以递增通路次序将元素沉积在向量中。对于非复数数据,其将中央处理单元核心110提取的第一元素放置于第一向量的通路0中,将第二元素放置在通路1中,等等。对于复数数据,流式传输引擎将第一元素放置在通路0及1中,将第二元素放置在通路2及3中,等等。无论流方向如何,元素内的子元素保留相同相对次序。对于未调换复数元素,此将每一对中具有较低地址的子元素放置在偶数编号的通路中,且将每一对中具有较高地址的子元素放置在奇数编号的通路中。调换复数元素使此映射反向。
流式传输引擎填充每一向量,中央处理单元核心110从最内流尺寸提取尽可能多的元素。如果最内尺寸并非向量长度的倍数,流式传输引擎用零将所述尺寸填补到向量长度的倍数。因此对于较高尺寸流,来自外部尺寸的每一迭代的第一元素到达向量的通路0。流式传输引擎始终将最内尺寸映射到向量中的连续通路。对于经转置流,由于转置交换这两个尺寸,最内尺寸由沿尺寸1而非尺寸0的子元素的群组组成。
二维流与一维流相比较呈现更多种类。基本二维流从较大矩形提取较小矩形。经转置2D流按列而非按行读取矩形。循环流,其中第二尺寸与第一尺寸重叠,执行有限脉冲响应(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尺寸2321的迭代计数是9。1方向2322上的迭代计数是13。应注意,ELEM_BYTES仅按比例缩放最内尺寸。第一尺寸具有大小为ELEM_BYTES的ICNT0元素。流地址产生器并不按比例缩放外部尺寸。因此,DIM1=88,其为11个元素以每元素8字节缩放。
图24说明此实例流内的元素次序。流式传输引擎按次序2400中所说明的次序提取流的元素。前9个元素来自矩形2320的第一行,在跃点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为ELEM_BYTES 2的两倍),但另外沿列向下移动。一旦其到达一对列的底部,其关于下一对列重复这一模式。
图27说明流式传输引擎将用8字节的转置粒度提取此实例的流的方式。整体结构保持相同。如提取模式2700中所示,流式传输引擎在移动到列中的下一行之前从每一行提取4个元素(由于粒度8为ELEM_BYTES 2的四倍)。
所检验的流到目前为止从存储器读取每一元素恰好一次。流可从存储器多次读取给定元素,实际上在一件存储器上循环。FIR滤波器呈现两种常见循环模式。FIR针对每一输出重读相同滤波器分接头。FIR还从滑动窗读取输入样本。两个连续输出将需要来自两个重叠窗的输入。
图28说明流式传输引擎2800的细节。流式传输引擎2800含有三个主要部分:流02810、流1 2820;及共享L2接口2830。流0 2810及流1 2820两者含有并行操作的相同硬件。流0 2810及流1 2820两者共享L2接口2830。每一流2810及2820每一周期向中央处理单元核心110提供至多512位/周期。流式传输引擎架构使得能够此穿过其专用流路径及共享双L2接口。
每一流式传输引擎2800包含专用6维流地址产生器2811/2821,其每周期可各自产生一个新的未对准请求。地址产生器2811/2821输出与由流参数限定的序列中的元素重叠的512位对准地址。这将在下文进一步描述。
每一地址产生器2811/2811连接到专用微型表后备缓冲器(μTLB)2812/2822。μTLB2812/2822每一周期将单个48位虚拟地址转换为44位物理地址。每一μTLB 2812/2822具有8个条目,覆盖具有4kB页的32kB最小值或具有2MB页的16MB最大值。每一地址产生器2811/2821每周期产生2个地址。μTLB 2812/2822每周期仅转译1个地址。为维持吞吐量,流式传输引擎2800利用大部分流参考将在同一4kB页内的事实。因此,地址转译并不修改地址的位0到11。如果aout0及aout1线在同一4kB页中(aout0[47:12]相同于aout1[47:12]),那么μTLB2812/2822仅转译aout0且将所述转译重用于两个地址的较高位。
经转译地址在命令队列2813/2823中列队。这些地址与来自对应存储分配及跟踪块2814/2824的信息对准。流式传输引擎2800并不明确地管理μTLB 2812/2822。系统存储器管理单元(MMU)在上下文切换期间视需要使μTLB无效。
存储分配及跟踪2814/2824管理流的内部存储,发现数据重用且跟踪每一数据片的寿命。这将在下文进一步描述。
参考队列2815/2825存储由对应地址产生器2811/2821产生的参考物的序列。这一信息驱动数据格式化网路,以使得其可以正确次序向中央处理单元核心110呈现数据。参考队列2815/2825中的每一入口含有读出数据存储的数据且使所述数据关于中央处理单元核心110对准所必需的信息。参考队列2815/2825在每一时隙中维持表5中列出的以下信息:
数据时隙低 | 与aout0相关联的数据的下半部的时隙号 |
数据时隙高 | 与aout1相关联的数据的上半部的时隙号 |
旋转 | 旋转数据以使下一元素与通路0对准的字节数目 |
长度 | 此参考物中的有效字节数目 |
表5
存储分配及跟踪2814/2824在参考队列2815/2825中插入参考物作为地址产生器2811/2821产生新地址。存储分配及跟踪2814/2824在数据变得可用且流磁头寄存器中存在空间时从参考队列2815/2825去除参考物。在存储分配及跟踪2814/2824从参考队列2815/2825去除时隙参考物且格式化数据时,其检查参考物是否表示对对应时隙的最后参考。存储分配及跟踪2814/2824将参考队列2815/2825去除指针与时隙的所记录最后参考进行比较。如果其匹配,那么存储分配及跟踪2814/2824在其用所述数据进行后将时隙标记为未激活。
流式传输引擎2800具有用于元素的任意数的数据存储2816/2826。深度缓冲允许流式传输引擎远在所述流之前提取,从而隐藏存储器系统时延。缓冲的合宜量可能在一代代乘积的范围内变化。在当前优选实施例中,流式传输引擎2800将32个时隙抽取到每一流。每一时隙保存64字节的数据。
蝶形网络2817/2827由7级蝶形网络。组成蝶形网络2817/2827接收128字节的输入且产生64字节的输出。蝶形的第一级实际上为半级。其从两个时隙收集与未对准提取匹配的字节且将其合并到单个、经旋转64字节阵列中。剩余6级形成标准蝶形网络。蝶形网络2817/2827执行以下操作:使下一元素向下旋转到字节通路0;如果需要,以2的幂提升数据类型;如果需要,调换复数的实及虚分量;如果中央处理单元核心110目前处于大端模式,将大端转换成小端。用户将元素大小、类型提升及实/虚调换指定为流的参数的部分。
流式传输引擎2800试图先于中央处理单元核心110的要求提取及格式化数据,以使得其可维持全部吞吐量。流磁头寄存器2818/2828提供少量缓冲以使得过程保持完全管线化。除了流式传输引擎2800提供全部吞吐量的事实以外,保持寄存器2818/2828并非直接结构上可见的。
两个流2810/2820共享一对独立L2接口2830:L2接口A(IFA)2833及L2接口B(IFB)2834。每一L2接口将512位/周期吞吐量直接提供到L2控制器以用于1024位/周期的集合宽带。L2接口使用基于信用的多核总线架构(MBA)协议。L2控制器向其自身的命令信用池指派每一接口。池应具有充分信用以使得每一接口可发送足够请求以在读取L2 RAM、L2高速缓存及多核共享内存控制器(MSMC)存储器(下文描述)时实现全部读取返回带宽。
为了使性能最大化,两个流可使用两个L2接口,允许单个流以2个请求/周期的速率发送峰值命令。每一接口相比于一个流更偏好另一者,但此偏好在请求间动态地改变。IFA 2833及IFB 2834始终偏好相反的流,当IFA 2833偏好流0时,IFB 2834偏好流1,且反之亦然。
仲裁器2831/2832先于每一接口2833/2834对具有可用信用的每一周期应用以下基本协议。仲裁器2831/2832检查优选流是否具有准备好发送的命令。如果是,那么仲裁器2831/2832选择所述命令。仲裁器2831/2832紧接着检查替代流是否具有至少两个准备好发送的请求,或一个命令且无信用。如果是,那么仲裁器2831/2832从替代流拉动命令。如果任一个接口发布命令,那么优选及替代流的概念针对下一请求调换。使用此简单算法,两个接口调度请求在保持两个流之间的公平性时尽可能迅速。第一规则确保每一流可在具有可用信用的每一周期上发送请求。第二规则为一个流提供机制以在第二接口空闲时借用另一者的接口。第三规则跨两个接口扩散对每一流的带宽要求,确保接口自身不会成为瓶颈。
粗晶粒旋转器2835/2836使得流式传输引擎2800能够支持经转置矩阵寻址模式。在此模式中,流式传输引擎2800交换其多维循环的两个最内尺寸。此按列而非按行访问阵列。除了在启用此经转置访问模式时以外,旋转器2835/2836并非结构上可见的。
流定义模板提供含有数据的流的全部结构。迭代计数及尺寸提供大部分结构,而各种标志提供其余细节。对于所有含数据流,流式传输引擎限定单个流模板。其支持的所有流类型拟合此模板。流式传输引擎限定用于寻址流内的元素的六级循环嵌套。流模板中的大部分字段直接映射到所述算法中的参数。图29说明流模板寄存器2900。字段上方的数字是256位向量内的位号。表6示出流模板的流字段定义。
表6
循环0是最内循环且循环5是最外循环。在当前实例中,DIM0始终等于限定物理上相连数据的ELEM_BYTES。因此,流模板寄存器2900并不限定DIM0。流式传输引擎2800将所有迭代计数解译为无符号整数且将所有尺寸解译为未密封的带符号整数。上方模板完全指定元素类型、流的长度及尺寸。流指令单独地指定开始地址。这通常将根据存储此开始地址的全局标量寄存器文件211中的标量寄存器的规格。这允许程序使用相同模板打开多个流。
图30说明标志字段2911的子字段定义。如图30中所示,标志字段2911为6字节或48位。图30示出字段的位号。表7示出这些字段的定义。
表7
元素类型(ELTYPE)字段3001限定流中的元素的数据类型。ELTYPE字段3001的四个位的译码如表8中所示经限定。
表8
实数/复数类型确定流式传输引擎是否将每一元素视为实数或复数的两个部分(实数/虚数或幅值/角度)。此字段还指定是否调换复数的两个部分。复数类型具有两倍于其子元素大小的总元素大小。否则,子元素大小等于总元素大小。
子元素大小出于类型提升及向量通路宽度的目的确定类型。举例来说,当流请求类型提升时,16位子元素被提升到32位子元素或64位子元素。当中央处理单元核心110在大端模式中操作时向量通路宽度至关紧要,这是由于其始终以小端次序布局向量。
总元素大小确定流的最小粒度。在流寻址模型中,其确定流针对最内循环的每一迭代提取的字节数目。流始终以递增或递减次序读取全部元素。因此,流的最内尺寸横跨ICNT0×总元素大小字节。
TRANSPOSE字段3002确定流式传输引擎是否以经转置次序访问所述流。经转置次序交换两个内寻址等级。TRANSPOSE字段3002还指示其转置流的粒度。如表9中所示针对正常2D操作限定TRANSPOSE字段3002的三个位的译码。
转置 | 含义 |
000 | 停用转置 |
001 | 在8位边界上转置 |
010 | 在16位边界上转置 |
011 | 在32位边界上转置 |
100 | 在64位边界上转置 |
101 | 在128位边界上转置 |
110 | 在256位边界上转置 |
111 | 保留 |
表9
流式传输引擎2800可以与元素大小不同的粒度转置数据元素。这允许程序从每一行提取元素的多个列。转置粒度必须不小于元素大小。TRANSPOSE字段3002以下文进一步描述的方式与DIMFMT字段3009相互作用。
PROMOTE字段3003控制流式传输引擎是否提升流中的子元素及提升类型。在启用时,流式传输引擎2800以2的幂大小提升类型。如表10中所示限定PROMOTE字段3003的三个位的译码。
表10
当PROMOTE为000时,对应于1x提升,每一子元素无变化且占据宽度等于由ELTYPE指定的大小的向量通路。当PROMOTE为001时,对应于2x提升及零扩展,每一子元素被视为无符号整数且零扩展到两倍于由ELTYPE指定的宽度的向量通路。2x提升对64位的初始子元素大小无效。当PROMOTE为010时,对应于4x提升及零扩展,每一子元素被视为无符号整数且零扩展到四倍于由ELTYPE指定的宽度的向量通路。4x提升对32或64位的初始子元素大小无效。当PROMOTE为011时,对应于8x提升及零扩展,每一子元素被视为无符号整数且零扩展到八倍于由ELTYPE指定的宽度的向量通路。8x提升对16、32或64位的初始子元素大小无效。当PROMOTE为101时,对应于2x提升及符号扩展,每一子元素被视为有符号整数且符号扩展到两倍于由ELTYPE指定的宽度的向量通路。2x提升对64位的初始子元素大小无效。当PROMOTE为110时,对应于4x提升及符号扩展,每一子元素被视为有符号整数且符号扩展到四倍于由ELTYPE指定的宽度的向量通路。4x提升对32或64位的初始子元素大小无效。当PROMOTE为111时,对应于8x提升及零扩展,每一子元素被视为有符号整数且符号扩展到八倍于由ELTYPE指定的宽度的向量通路。8x提升对16、32或64位的初始子元素大小无效。
VECLEN字段3004在字节中限定流的流向量长度。流式传输引擎2800将流分裂成VECLEN字节长的元素群组。如表11中所示限定VECLEN字段3004的三个位的译码。
表11
VECLEN必须大于或等于字节中的元素大小与复制因子的乘积。如表11中所示,64字节的最大VECLEN等于向量数据路径侧B 116的优选向量大小。当VECLEN短于中央处理单元核心110的自然向量宽度时,流式传输引擎2800填补提供到中央处理单元核心110的向量中的额外通路。GRDUP字段3006确定填补类型。VECLEN字段3004以下文详述的方式与ELDUP字段3005及GRDUP字段3006相互作用。
ELDUP字段3005指定复制每一元素的次数。元素大小乘以元素复制量不得超过64字节。如表12中所示限定ELDUP字段3005的三个位的译码。
ELDUP | 复制因子 |
000 | 无复制 |
001 | 2次 |
010 | 4次 |
011 | 8次 |
100 | 16次 |
101 | 32次 |
110 | 64次 |
111 | 保留 |
表12
ELDUP字段3005以下文详述的方式与VECLEN字段3004及GRDUP字段3006相互作用。
表13A到13D示出针对ELEM_BYTES值1及ELDUP的不同值1到64的输入字节与输出字节之间的连接。表13A到13D的列列出从字节0到字节63的输出字节。表13A到13D的主体列出所述行的元素复制因子的对应输入字节。
ELDUP | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
2 | 0 | 0 | 1 | 1 | 2 | 2 | 3 | 3 | 4 | 4 | 5 | 5 | 6 | 6 | 7 | 7 |
4 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 2 | 2 | 2 | 2 | 3 | 3 | 3 | 3 |
8 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
16 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
32 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
64 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
表13A
ELDUP | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
1 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
2 | 6 | 6 | 9 | 9 | 10 | 10 | 11 | 11 | 12 | 12 | 13 | 13 | 14 | 14 | 15 | 15 |
4 | 4 | 4 | 4 | 4 | 5 | 5 | 5 | 5 | 6 | 6 | 6 | 6 | 7 | 7 | 7 | 7 |
8 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
16 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
32 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
64 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
表13B
ELDUP | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 |
1 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 |
2 | 16 | 16 | 17 | 17 | 18 | 18 | 19 | 19 | 20 | 20 | 21 | 21 | 22 | 22 | 23 | 23 |
4 | 8 | 8 | 8 | 8 | 9 | 9 | 9 | 9 | 10 | 10 | 10 | 10 | 11 | 11 | 11 | 11 |
8 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 5 | 5 | 5 | 5 | 5 | 5 | 5 | 5 |
16 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 |
32 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
64 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
表13C
ELDUP | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |
1 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |
2 | 24 | 24 | 25 | 25 | 26 | 26 | 27 | 27 | 28 | 28 | 29 | 29 | 30 | 30 | 31 | 31 |
4 | 12 | 12 | 12 | 12 | 13 | 13 | 13 | 13 | 14 | 14 | 14 | 14 | 15 | 15 | 15 | 15 |
8 | 6 | 6 | 6 | 6 | 6 | 6 | 6 | 6 | 7 | 7 | 7 | 7 | 7 | 7 | 7 | 7 |
16 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
32 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
64 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
表13D
表13A到13D的ELDUP=000(指示无复制)的行示出输出字节是对应输入字节。表13A到13D的ELDUP=110(指示复制因子64)的行示出所有输出字节等于输入字节0。
表14A到14D示出针对ELEM_BYTES值2及ELDUP的不同值1到64的输入字节与输出字节之间的连接。ELEM_BYTES值2的复制值64扩展超过向量数据路径侧B116的向量大小进入下一向量。
ELDUP | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
2 | 0 | 1 | 0 | 1 | 2 | 3 | 2 | 3 | 4 | 4 | 5 | 4 | 5 | 6 | 7 | 7 |
4 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 2 | 3 | 2 | 3 | 2 | 3 | 2 | 3 |
8 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 |
16 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 |
32 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 |
64 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 |
表14A
ELDUP | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
1 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
2 | 8 | 9 | 8 | 9 | 10 | 11 | 10 | 11 | 12 | 13 | 12 | 13 | 14 | 14 | 15 | 15 |
4 | 4 | 5 | 4 | 5 | 4 | 5 | 4 | 5 | 6 | 7 | 6 | 7 | 6 | 7 | 6 | 7 |
8 | 2 | 3 | 2 | 3 | 2 | 3 | 2 | 3 | 2 | 3 | 2 | 3 | 2 | 3 | 2 | 3 |
16 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 |
32 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 |
64 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 |
表14B
ELDUP | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 |
1 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 |
2 | 16 | 17 | 16 | 17 | 18 | 19 | 18 | 19 | 20 | 21 | 20 | 21 | 22 | 23 | 22 | 23 |
4 | 8 | 9 | 8 | 9 | 8 | 9 | 8 | 9 | 10 | 11 | 10 | 11 | 10 | 11 | 10 | 11 |
8 | 4 | 5 | 4 | 5 | 4 | 5 | 4 | 5 | 4 | 5 | 4 | 5 | 4 | 5 | 4 | 5 |
16 | 2 | 3 | 2 | 3 | 2 | 3 | 2 | 3 | 2 | 3 | 2 | 3 | 2 | 3 | 2 | 3 |
32 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 |
64 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 |
表14C
ELDUP | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |
1 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |
2 | 24 | 25 | 24 | 25 | 26 | 27 | 26 | 27 | 28 | 29 | 28 | 29 | 30 | 31 | 30 | 31 |
4 | 12 | 13 | 12 | 13 | 12 | 13 | 12 | 13 | 14 | 15 | 14 | 15 | 14 | 15 | 14 | 15 |
8 | 6 | 7 | 6 | 7 | 6 | 7 | 6 | 7 | 6 | 7 | 6 | 7 | 6 | 7 | 6 | 7 |
16 | 2 | 3 | 2 | 3 | 2 | 3 | 2 | 3 | 2 | 3 | 2 | 3 | 2 | 3 | 2 | 3 |
32 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 |
64 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 |
表14D
在表14A到14D中,每一元素为两个字节且占据一对相邻输入字节0/1、2/3、4/5……62/63。表14A到14D的ELDUP=000(指示无复制)的行示出输出字节是对应输入字节。这与ELEM_BYTES=1的情况相同。表14A到14D的ELDUP=101(指示复制因子32)及ELDUP=110(指示复制因子64)的行示出输出字节为第一输入元素从输入字节0/1的重复。
表15A到15D示出针对ELEM_BYTES值4及ELDUP的不同值1到64的输入字节与输出字节之间的连接。ELEM_BYTES值4的复制值32或64扩展超过向量数据路径侧B 116的向量大小进入下一向量。
ELDUP | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
2 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 4 | 5 | 6 | 7 |
4 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 |
8 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 |
16 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 |
32 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 |
64 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 |
表15A
ELDUP | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
1 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
2 | 8 | 9 | 10 | 11 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 12 | 13 | 14 | 15 |
4 | 4 | 5 | 6 | 7 | 4 | 5 | 6 | 7 | 4 | 5 | 6 | 7 | 4 | 5 | 6 | 7 |
8 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 |
16 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 |
32 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 |
64 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 |
表15B
ELDUP | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 |
1 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 |
2 | 16 | 17 | 18 | 19 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 20 | 21 | 22 | 23 |
4 | 8 | 9 | 10 | 11 | 8 | 9 | 10 | 11 | 8 | 9 | 10 | 11 | 8 | 9 | 10 | 11 |
8 | 4 | 5 | 6 | 7 | 4 | 5 | 6 | 7 | 4 | 5 | 6 | 7 | 4 | 5 | 6 | 7 |
16 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 |
32 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 |
64 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 |
表15C
ELDUP | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |
1 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |
2 | 24 | 25 | 26 | 27 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 28 | 29 | 30 | 31 |
4 | 12 | 13 | 14 | 15 | 12 | 13 | 14 | 15 | 12 | 13 | 14 | 15 | 12 | 13 | 14 | 15 |
8 | 4 | 5 | 6 | 7 | 4 | 5 | 6 | 7 | 4 | 5 | 6 | 7 | 4 | 5 | 6 | 7 |
16 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 |
32 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 |
64 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 |
表15D
在表15A到15D中,每一元素为四个字节且占据四重输入字节0/1/2/3、4/5/6/7……60/61/62/63。表15A到15D的ELDUP=000(指示无复制)的行示出输出字节是对应输入字节。这与ELEM_BYTES=1的情况相同。表15A到15D的ELDUP=011(指示复制因子16)、ELDUP=101(指示复制因子32)及ELDUP=110(指示复制因子64)的行示出输出字节为第一输入元素从输入字节0/1/2/3的重复。
表16A到16D示出针对ELEM_BYTES值8及ELDUP的不同值1到64的输入字节与输出字节之间的连接。ELEM_BYTES值8的复制值16、32或64扩展超过向量数据路径侧B 116的向量大小进入下一向量。
ELDUP | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
2 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
4 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
16 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
32 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
64 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
表16A
ELDUP | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
1 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
2 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
4 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
16 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
32 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
64 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
表16B
ELDUP | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 |
1 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 |
2 | 16 | 17 | 18 | 19 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 20 | 21 | 22 | 23 |
4 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
8 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
16 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
32 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
64 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
表16C
表16D
在表16A到16D中,每一元素为八个字节且占据一组八个输入字节0/1/2/3/4/5/6/7……56/57/58/59/60/61/62/63。表16A到16D的ELDUP=000(指示无复制)的行示出输出字节是对应输入字节。这与ELEM_BYTES=1的情况相同。表16A到16D的ELDUP=011(指示复制因子8)、ELDUP=011(指示复制因子16)、ELDUP=101(指示复制因子32)及ELDUP=110(指示复制因子64)的行示出输出字节为第一输入元素从输入字节0/1/2/3/4/5/6/7的重复。
表17A到17D示出针对ELEM字节值16及ELDUP的不同值1到64的输入字节与输出字节之间的连接。ELEM_BYTES值16的复制值8、16、32或64扩展超过向量数据路径侧B 116的向量大小进入下一向量。
ELDUP | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
2 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
4 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
8 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
32 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
64 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
表17A
ELDUP | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
1 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
2 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
4 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
8 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
32 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
64 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
表17B
表17C
ELDUP | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |
1 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |
2 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
4 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
8 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
32 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
64 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
表17D
在表17A到17D中,每一元素为十六个字节且占据一组十六个输入字节0/1……14/15……32/33……62/63。表17A到17D的ELDUP=000(指示无复制)的行示出输出字节是对应输入字节。这与ELEM_BYTES=1的情况相同。表17A到17D的ELDUP=010(指示复制因子4)、ELDUP=011(指示复制因子8)、ELDUP=011(指示复制因子16)、ELDUP=101(指示复制因子32)及ELDUP=110(指示复制因子64)的行示出输出字节为第一输入元素从输入字节0/1……14/15的重复。
表18A到18D示出针对ELEM字节值32及ELDUP的不同值1到64的输入字节与输出字节之间的连接。ELEM_BYTES值32的复制值4、8、16、32或64扩展超过向量数据路径侧B 116的向量大小进入下一向量。
ELDUP | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
2 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
4 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
8 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
32 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
64 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
表18A
ELDUP | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
1 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
2 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
4 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
8 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
16 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
32 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
64 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
表18B
ELDUP | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 |
1 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 |
2 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
4 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
8 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
32 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
64 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
表18C
ELDUP | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |
1 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |
2 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
4 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
8 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
16 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
32 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
64 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
表18D
在表18A到18D中,每一元素为三十二个字节且占据一组三十二个输入字节0/1……30/31及32/33……62/63。表18A到18D的ELDUP=000(指示无复制)的行示出输出字节是对应输入字节。这与ELEM_BYTES=1的情况相同。表18A到18D的ELDUP=001(指示复制因子2)、ELDUP=010(指示复制因子4)、ELDUP=011(指示复制因子8)、ELDUP=011(指示复制因子16)、ELDUP=101(指示复制因子32)及ELDUP=110(指示复制因子64)的行示出输出字节为第一输入元素从输入字节0/1……30/31的重复。
表19A到19D示出针对ELEM字节值64及ELDUP的不同值1到64的输入字节与输出字节之间的连接。ELEM_BYTES值64的复制值2、4、8、16、32或64扩展超过向量数据路径侧B 116的向量大小进入下一向量。
表19A
ELDUP | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
1 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
2 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
4 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
8 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
16 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
32 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
64 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
表19B
ELDUP | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 |
1 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 |
2 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 |
4 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 |
8 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 |
16 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 |
32 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 |
64 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 |
表19C
ELDUP | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |
1 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |
2 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |
4 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |
8 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |
16 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |
32 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |
64 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |
表19D
在表19A到19D中,每一元素为六十四个字节且占据一组六十四个输入字节0/1……62/63。表19A到19D的ELDUP=000(指示无复制)的行示出输出字节是对应输入字节。这与ELEM_BYTES=1的情况相同。所有其它行示出输出字节为第一输入元素从输入字节0/1……62/63的重复。
图31说明元素复制块2024的示范性实施例。输入寄存器3100从抽取块2023接收向量输入。输入寄存器3100包含布置于64个1字节块byte0到byte63中的64个字节。应注意,字节byte0到byte63的长度各自等于ELEM_BYTES的最小值。多个多路复用器3101到3163将输入字节从源寄存器3100耦合到输出寄存器3170。每一多路复用器3101到3163将输入供应到输出寄存器3170的对应byte1到byte63。并非所有输入寄存器3100的输入字节byte0到byte63都耦合到每一多路复用器3101到3163。应注意,不存在供应输出寄存器3170的byte0的多路复用器。输出寄存器3170的Byte0始终由输入寄存器3100的byte0供应。
多路复用器3101到3163受多路复用器控制编码器3180控制。多路复用器控制编码器3180接收ELEM_BYTES及ELDUP输入信号且产生用于多路复用器3101到3163的对应控制信号。表13A到13D、14A到14D、15A到15D、16A到16D、17A到17D、18A到18D及19A到19D直接转译为多路复用器3101到3163的多路复用器控制以实现所需元素复制。检查表13A到13D、14A到14D、15A到15D、16A到16D、17A到17D、18A到18D及19A到19D示出并非所有输入字节都可供应每一输出字节。因此,表13A到13D、14A到14D、15A到15D、16A到16D、17A到17D、18A到18D及19A到19D示出图31中的输入寄存器3100与多路复用器3101到3163之间的所需连接。此外,表13A到13D、14A到14D、15A到15D、16A到16D、17A到17D、18A到18D及19A到19D示出多路复用器控制编码3180中所需的编码。
如上文所提到,存在产生比目的地寄存器3170的大小(优选地512位)更多的位的元素大小及复制因子(ELDUP)的组合。在这种情况下,在目的地寄存器3170充满后,此数据从元素复制块2024供应到向量长度掩模/成组复制块2025以供最终供应到对应流磁头寄存器2818/2828。格式器1903中的数据移动的速率由中央处理单元核心110经由下文所描述的流读取及前进指令消耗数据的速率设定。
接着,元素复制块2024将经复制元素供应到另一目的地向量。所准许元素大小、元素复制因子与目的地向量长度之间的关系的本质要求溢出第一目的地寄存器的经复制元素将在复制完成之后填充整数数目个目的地寄存器。这些额外目的地寄存器的数据最终供应对应流磁头寄存器2818/2828。在第一数据元素的复制完成之后,下一数据元素向下旋转到丢弃第一数据元素的源寄存器3100的最低有效位。所述过程接着针对此新数据元素重复。
GRDUP位3006确定是否启用成组复制。如果GRDUP位3006为0,那么停用成组复制。如果GRDUP位3006为1,那么启用成组复制。当由GRDUP位3006启用时,流式传输引擎2800复制一组元素以填充向量宽度。VECLEN字段3004限定复制的群组的长度。当VECLEN字段3004小于中央处理单元核心110的向量长度且GRDUP位3006启用成组复制时,流式传输引擎2800用流向量的额外副本填充额外通路(参见图20及21)。由于流向量长度及中央处理单元核心110的向量长度始终为二的整数幂,成组复制始终产生二的整数幂数目个复制副本。应注意,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个元素的内循环。这些表说明例如图20中绘示的8字节通路。每一所说明向量随后存储于对应流磁头寄存器2818/2828中。
表20说明当VECLEN为64字节时实例流映射到64字节CPU向量内的位上的方式。
CPU向量 | 通路7 | 通路6 | 通路5 | 通路4 | 通路3 | 通路2 | 通路1 | 通路0 |
1 | E7 | E6 | E5 | E4 | E3 | E2 | E1 | E0 |
2 | E15 | E14 | E13 | E12 | E11 | E10 | E9 | E8 |
3 | E23 | E22 | E21 | E20 | E19 | E18 | E17 | E16 |
4 | 0 | 0 | 0 | E28 | E27 | E26 | E25 | E24 |
表20
如表20中所示,流在4个向量上扩展。如先前所描述,延伸超出所述流的向量4内的通路经零填充。当VECLEN的大小等于自然向量长度时,GRDUP是0还是1无关紧要。复制不可通过所述VECLEN发生。
除了32字节的VECLEN以外,表21示出与表20中所示的相同的参数。停用成组复制(GRDUP=0)。
CPU向量 | 通路7 | 通路6 | 通路5 | 通路4 | 通路3 | 通路2 | 通路1 | 通路0 |
1 | 0 | 0 | 0 | 0 | E3 | E2 | E1 | E0 |
2 | 0 | 0 | 0 | 0 | E7 | E6 | E5 | E4 |
3 | 0 | 0 | 0 | 0 | E11 | E10 | E9 | E8 |
4 | 0 | 0 | 0 | 0 | E15 | E14 | E13 | E12 |
5 | 0 | 0 | 0 | 0 | E19 | E18 | E17 | E16 |
6 | 0 | 0 | 0 | 0 | E23 | E22 | E21 | E20 |
7 | 0 | 0 | 0 | 0 | E27 | E26 | E25 | E24 |
8 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | E28 |
表21
流的29个元素分布在8个向量中的通路0到3上。向量1到7中的额外通路4到7经零填充。
除了16字节的VECLEN以外,表22示出与表20中所示的相同的参数。停用成组复制(GRDUP=0)。
CPU向量 | 通路7 | 通路6 | 通路5 | 通路4 | 通路3 | 通路2 | 通路1 | 通路0 |
1 | 0 | 0 | 0 | 0 | 0 | 0 | E1 | E0 |
2 | 0 | 0 | 0 | 0 | 0 | 0 | E3 | E2 |
3 | 0 | 0 | 0 | 0 | 0 | 0 | E5 | E4 |
4 | 0 | 0 | 0 | 0 | 0 | 0 | E7 | E6 |
5 | 0 | 0 | 0 | 0 | 0 | 0 | E9 | E8 |
6 | 0 | 0 | 0 | 0 | 0 | 0 | E11 | E10 |
7 | 0 | 0 | 0 | 0 | 0 | 0 | E13 | E12 |
8 | 0 | 0 | 0 | 0 | 0 | 0 | E15 | E14 |
9 | 0 | 0 | 0 | 0 | 0 | 0 | E17 | E16 |
10 | 0 | 0 | 0 | 0 | 0 | 0 | E19 | E18 |
11 | 0 | 0 | 0 | 0 | 0 | 0 | E21 | E20 |
12 | 0 | 0 | 0 | 0 | 0 | 0 | E23 | E22 |
13 | 0 | 0 | 0 | 0 | 0 | 0 | E25 | E24 |
14 | 0 | 0 | 0 | 0 | 0 | 0 | E27 | E26 |
15 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | E28 |
表22
流的29个元素分布在15个向量中的通路0到1上。向量1到14中的额外通路2到7经零填充。在向量15中,仅通路1具有流元素(E28),所有其它通路经零填充。
除了8字节的VECLEN以外,表23示出与表20中所示的相同的参数。停用成组复制(GRDUP=0)。
表23
流的29个元素均出现在29个向量中的通路0上。向量1到29中的额外通路1到7经零填充。
除了32字节的VECLEN且启用成组复制(GRDUP=1)以外,表24示出与表20中所示的相同的参数。
CPU向量 | 通路7 | 通路6 | 通路5 | 通路4 | 通路3 | 通路2 | 通路1 | 通路0 |
1 | E3 | E2 | E1 | E0 | E3 | E2 | E1 | E0 |
2 | E7 | E6 | E5 | E4 | E7 | E6 | E5 | E4 |
3 | E11 | E10 | E9 | E8 | E11 | E10 | E9 | E8 |
4 | E15 | E14 | E13 | E12 | E15 | E14 | E13 | E12 |
5 | E19 | E18 | E17 | E16 | E19 | E18 | E17 | E16 |
6 | E23 | E22 | E21 | E20 | E23 | E22 | E21 | E20 |
7 | E27 | E26 | E25 | E24 | E27 | E26 | E25 | E24 |
8 | 0 | 0 | 0 | E28 | 0 | 0 | 0 | E28 |
表24
流的29个元素分布在8个向量中的通路0到7上。每一向量1到7包含四个经复制元素。复制因子(2)产生,这是因为VECLEN(32字节)是64字节的自然向量长度的一半。在向量8中,通路0具有流元素(E28),且通路1到3经零填充。向量9的通路4到7复制此模式。
除了16字节的VECLEN以外,表25示出与表20中所示的相同的参数。启用成组复制(GRDUP=1)。
CPU向量 | 通路7 | 通路6 | 通路5 | 通路4 | 通路3 | 通路2 | 通路1 | 通路0 |
1 | E1 | E0 | E1 | E0 | E1 | E0 | E1 | E0 |
2 | E3 | E2 | E3 | E2 | E3 | E2 | E3 | E2 |
3 | E5 | E4 | E5 | E4 | E5 | E4 | E5 | E4 |
4 | E7 | E6 | E7 | E6 | E7 | E6 | E7 | E6 |
5 | E9 | E8 | E9 | E8 | E9 | E8 | E9 | E8 |
6 | E11 | E10 | E11 | E10 | E11 | E10 | E11 | E10 |
7 | E13 | E12 | E13 | E12 | E13 | E12 | E13 | E12 |
8 | E15 | E14 | E15 | E14 | E15 | E14 | E15 | E14 |
9 | E17 | E16 | E17 | E16 | E17 | E16 | E17 | E16 |
10 | E19 | E18 | E19 | E18 | E19 | E18 | E19 | E18 |
11 | E21 | E20 | E21 | E20 | E21 | E20 | E21 | E20 |
12 | E23 | E22 | E23 | E22 | E23 | E22 | E23 | E22 |
13 | E25 | E24 | E25 | E24 | E25 | E24 | E25 | E24 |
14 | E27 | E26 | E27 | E26 | E27 | E26 | E27 | E26 |
15 | 0 | E28 | 0 | E28 | 0 | E28 | 0 | E28 |
表25
流的29个元素分布在15个向量中的通路0到7上。每一向量1到7包含两个经四次复制的元素。复制因子(4)产生,这是因为VECLEN(16字节)是64字节的自然向量长度的四分之一。在向量15中,通路0具有流元素(E28),且通路1经零填充。此模式在向量15的通路2及3、通路4及5以及通路6及7中经复制。
除了8字节的VECLEN以外,表26示出与表20中所示的相同的参数。启用成组复制(GRDUP=1)。
表26
流的29个元素均出现在29个向量中的通路0到7上。每一向量1到7包含一个经八次复制的元素。复制因子(8)产生,这是因为VECLEN(8字节)是64字节的自然向量长度的八分之一。因此,每一通路在向量1到29中相同。
图32说明向量长度掩模/成组复制块2025的示范性实施例。输入寄存器3200从元素复制块2024接收向量输入。输入寄存器3200包含布置于64个1字节块byte0到byte63中的64个字节。应注意,字节byte0到byte63的长度各自等于ELEM_BYTES的最小值。多个多路复用器3201到3263将输入字节从源寄存器3200耦合到输出寄存器3270。每一多路复用器3201到3263将输入供应到输出寄存器3270的对应byte1到byte63。并非所有输入寄存器3200的输入字节byte0到byte63都耦合到每一多路复用器3201到3263。应注意,不存在供应输出寄存器3270的byte0的多路复用器。输出寄存器3270的Byte0始终由输入寄存器3200的byte0供应。
多路复用器3201到3263受多路复用器控制编码器3280控制。多路复用器控制编码器3280接收ELEM_BYTES、ELDUP、VECLEN及GRDUP输入信号且产生用于多路复用器3201到3263的对应控制信号。将ELEM_BYTES及ELDUP供应到多路复用器控制编码器3180以进行检查从而确认VECLEN至少与ELEM_BYTES及ELDUP的乘积一样大。在操作中,多路复用器控制编码器3280控制多路复用器3201到3263以将数值等于VECLEN的最低有效位从输入寄存器3200输送到输出寄存器3270。如果GRDUP=0指示停用成组复制,那么多路复用器控制编码器3280控制剩余多路复用器3201到3263以将零输送到输出寄存器3270的剩余最高有效通路中的所有位。如果GRDUP=1指示启用成组复制,那么多路复用器控制编码器3280控制剩余多路复用器3201到3263以将输入寄存器3200的最低有效位的VECLEN数值复制到输出寄存器3270的最高有效通路中。此控制类似于上文所描述的元素复制控制。用第一向量填充输出寄存器3270。对于下一向量,输入寄存器3200内的数据通过VECLEN向下旋转,丢弃先前的VECLEN最低有效位。格式器1903中的数据移动的速率由中央处理单元核心110经由下文所描述的流读取及前进指令消耗数据的速率设定。只要流包含额外数据元素,此成组复制格式化即重复。
元素复制(ELDUP)及成组复制(GRUDP)是独立的。应注意,这些特征包含独立的规格及参数设定。因此,元素复制及成组复制可一起或单独使用。归因于指定这些的方式,元素复制准许溢出到下一向量,而成组复制并不如此。
DECIM字段3007控制对应流的数据元素抽取。流式传输引擎2800在存储于流磁头寄存器2818/2828以供呈现于请求功能单元之后从流删除数据元素。抽取始终去除全部数据元素,而非子元素。如表27中所列出的限定DECIM字段3007。
DECIM | 抽取因子 |
00 | 不抽取 |
01 | 2次 |
10 | 4次 |
11 | 保留 |
表27
如果DECIM字段3007等于00,那么抽取不发生。数据元素被传递给对应流磁头寄存器2818/2828而不改变。如果DECIM字段3007等于01,那么2:1抽取发生。流式传输引擎2800在存储于流磁头寄存器2818/2828中之后从数据流去除奇数元素。格式化网络中的限制要求采用至少2x的数据提升(PROMOTE不能为000)的2:1抽取,ICNT0必须为2的倍数且总向量长度(VECLEN)必须足够大以保持单个经提升、复制元素。对于经转置流(TRANSPOSE≠0),转置颗粒在提升之前必须为字节中的元素大小的至少两倍。如果DECIM字段3007等于10,那么4:1抽取发生。流式传输引擎2800在存储于流磁头寄存器2818/2828中之后保留每第四个数据元素,从数据流移除三个元素。格式化网络中的限制要求采用至少4x的数据提升(PROMOTE不能为000、001或101)的4:1抽取,ICNT0必须为4的倍数且总向量长度(VECLEN)必须足够大以保持单个经提升、复制元素。对于经转置流(TRANSPOSE≠0),抽取始终去除列,且决不去除行。因此,转置颗粒必须:在用于2:1抽取的提升(GRANULE≥2×ELEM_BYTES)之前为字节中的元素大小的至少两倍;且在用于4:1抽取的提升(GRANULE≥4×ELEM_BYTES)之前为字节中的元素大小的至少四倍。
THROTTLE字段3008控制流式传输引擎先于中央处理单元核心110提取的强烈程度。如表28中所示限定此字段的两个位的译码。
THROTTLE | 描述 |
00 | 最小节流,最大提取提前 |
01 | 更小节流,更大提取提前 |
10 | 更大节流,更小提取提前 |
11 | 最大节流,最小提取提前 |
表28
THROTTLE并不改变流的含义,且仅用作暗示。流式传输引擎可忽略此字段。针对程序正确性,程序不应依赖于特定节流特性,这是因为架构并不指定精确节流特性。节流允许程序员向硬件提供有关程序自身的特性的提示。默认地,流式传输引擎试图远远先于中央处理单元核心110,这是由于其可隐藏尽可能多的时延(等同THOTTLE=11),同时向中央处理单元核心110提供完整流吞吐量。虽然若干关键应用需要此吞吐量水平,但其可引起其它者的不良系统级特性。举例来说,流式传输引擎在上下文切换中丢弃所有提取数据。因此,侵略性提取提前在具有大量上下文切换的系统中可导致带宽浪费。侵略性提取提前仅在中央处理单元核心110极迅速地消耗数据的那些系统中有意义。
DIMFMT字段3009实现流模板寄存器2800的循环计数字段ICNT0 2801、ICNT12802、ICNT2 2803、ICNT3 2804、ICNT4 2805及ICNT5 2806、循环尺寸字段DIM1 2855、DIM22823、DIM3 2824、DIM4 2825及DIM5 2826及寻址模式字段AM0 3013、AM1 3014、AM2 3015、AM3 3016、AM4 3017及AM5 3018(FLAGS字段2811的部分)的重定义。此准许一些循环尺寸字段及循环计数以较少循环为代价包含更多位。表29列出针对DIMFMT字段3009的不同值的循环尺寸字段的大小。
表29
应注意,DIM0始终等于数据元素大小ELEM_BYTES。表30列出针对DIMFMT字段3009的不同值的循环计数字段的大小。
表30
DIMFMT字段3009有效地限定循环尺寸及流模板寄存器2800的循环计数位。图28说明当DIMFMT为111时的默认情况。
图33到37说明针对DIMFMT的其它值的流模板寄存器的位的定义。应注意,FLAGS字段(3311、3411、3511、3611及3711)的位置及含义对于DIMFMT的所有值相同。
图33说明针对DIMFMT值000的流模板寄存器3300的位的定义。对于DIMFMT值000,存在三个循环:loop0、loop2及loop4。对于loop0,ICNT0字段3301包含位0到33,且DIM0字段等于ELEM_BYTES。对于loop2,ICNT2字段3302包含位32到63,且DIM2字段3321包含位160到191。对于loop4,INTC4字段3303包含位64到95,且DIM4字段3322包含位192到223。
图34说明针对DIMFMT值001的流模板寄存器3400的位的定义。对于DIMFMT值001,存在四个循环:loop0、loop1、loop2及loop4。对于loop0,ICNT0字段3401包含位0到16,且DIM0字段等于ELEM_BYTES。对于loop1,ICNT1字段3402包含位16到31,且DIM1字段3423包含位224到255。对于loop2,INTC2字段3403包含位32到63,且DIM2字段3421包含位160到191。对于loop4,INTC4字段3404包含位64到95,且DIM4字段3422包含位192到223。
图35说明针对DIMFMT值010的流模板寄存器3500的位的定义。对于DIMFMT值010,存在四个循环:loop0、loop2、loop3及loop4。对于loop0,ICNT0字段3501包含位0到32,且DIM0字段等于ELEM_BYTES。对于loop2,ICNT2字段3502包含位32到47,且DIM2字段3521包含位160到191。对于loop3,INTC3字段3503包含位48到63,且DIM3字段3523包含位224到255。对于loop4,INTC4字段3504包含位64到95,且DIM4字段3522包含位192到223。
图36说明针对DIMFMT值011的流模板寄存器3600的位的定义。对于DIMFMT值011,存在五个循环:loop0、loop1、loop2、loop3及loop4。对于loop0,ICNT0字段3601包含位0到15,且DIM0字段等于ELEM_BYTES。对于loop1,ICNT1字段3602包含位16到31,且DIM1字段3621包含位144到159。对于loop2,ICNT2字段3603包含位32到47,且DIM2字段3621包含位160到191。对于loop3,INTC3字段3604包含位48到63,且DIM3字段3624包含位224到255。对于loop4,INTC4字段3605包含位64到95,且DIM4字段3623包含位192到223。
图37说明针对DIMFMT值101的流模板寄存器3700的位的定义。对于DIMFMT值110,存在六个循环:loop0、loop1、loop2、loop3、loop4及loop5。对于loop0,ICNT0字段3701包含位0到15,且DIM0字段等于ELEM_BYTES。对于loop1,ICNT1字段3702包含位16到31,且DIM1字段3721包含位144到159。对于loop2,ICNT2字段3703包含位32到47,且DIM2字段3722包含位160到191。对于loop3,INTC3字段3704包含位48到63,且DIM3字段3725包含位224到255。对于loop4,INTC4字段3705包含位64到79,且DIM4字段3723包含位192到207。对于loop5,INTC5字段3706包含位80到95,且DIM5字段3724包含位208到223。
DIR位3010确定内循环(Loop0)的提取方向。如果DIR位3010为0,那么Loop0提取对于递增地址处于正向方向。如果DIR位3010为1,那么Loop0提取对于递减地址处于后向方向。其它循环的提取方向通过为带符号整数的对应循环尺寸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中的每一者为三个位且如表31中所列出的解码。
AMx字段 | 含义 |
00 | 线性寻址 |
01 | 由CBK0设定的循环寻址块大小 |
10 | 由CBK0+CBK1+1设定的循环寻址块大小 |
11 | 保留 |
表31
在线性寻址中,所述地址根据地址算术正向或反向前进。在循环寻址中,地址保持在限定地址块内。在到达循环地址块的末端之后,地址回绕块的其它限制。循环寻址块通常受限于2N个地址,其中N是整数。循环地址算术可通过切割位之间的进位链而非允许选定数目个最高有效位改变而操作。因此,超过循环块的末端的算术仅改变最低有效位。
如表32中所列出设定块大小。
表32
在优选实施例中,循环块大小由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指令的自变量在表33中列出。
自变量 | 描述 |
流开始地址寄存器 | 存储流开始地址的标量寄存器 |
流编号 | 流0或流1 |
流模板寄存器 | 存储流模板数据的向量寄存器 |
表33
流开始地址寄存器优选地为全局标量寄存器文件211中的标量寄存器。STROPEN指令通过其操作码指定流0或流1。流模板寄存器优选地为通用向量寄存器文件221中的向量寄存器。如果指定流经激活,那么STROPEN指令关闭先前的流且用指定流替换所述流。
STRCLOSE指令关闭流。STRCLOSE命令指定待关闭的流的流编号。
STRSAVE指令捕获指定流的足够的状态信息以在将来重新启动所述流。STRRSTR指令恢复先前保存的流。STRSAVE指令并不保存流的数据中的任一者。STRSAVE指令仅保存元数据。流响应于STRRSTR指令再提取数据。
流式传输引擎处于三种状态中的一种:未激活:激活;或冻结。当未激活时,流式传输引擎不动作。从未激活流式传输引擎提取数据的任何尝试都是错误的。流式传输引擎是未激活的,直到程序打开流。在程序消耗流中的所有元素或程序关闭所述流之后,流式传输引擎也变成未激活。使用流的程序明确地激活流式传输引擎及使所述流式传输引擎失活。操作环境经由流式传输引擎的隐含冻结特性在上下文切换边界中管理流,所述流式传输引擎与其自身的显式保存及还原动作耦合。
激活的流式传输引擎具有与其相关联的流。程序可从激活的流式传输引擎提取新的流元素。流式传输引擎保持激活直到以下中的一者为止。当所述流从流提取最后一个元素时,其变成未激活。当程序明确地关闭所述流时,其变成未激活。当中央处理单元核心110对中断或异常作出响应时,流式传输引擎冻结。当流式传输引擎引擎冻结时,冻结的流式传输引擎捕获恢复其所处的流所必需的所有状态。流式传输引擎响应于中断及异常冻结。这与保存及还原冻结流上下文的特殊指令组合,以使得操作环境可干净地切换上下文。当中央处理单元核心110返回到中断上下文时冻结流再激活。
图38为说明上文所描述的流输入操作数译码的部分示意图3800。图38说明对功能单元3820的对应src1输入的一个指令的src1字段1305进行解码。这些相同电路经复制用于src2/cst字段1304及功能单元3820的src2输入。另外,这些电路经复制用于执行分组内可同时调度的每条指令。
指令解码器113接收包括指令的src1字段1305的位13到17。操作码字段(对于所有指令为位4到12,且另外对于无条件指令为位28到31)明确地指定对应功能单元3820。在此实施例中,功能单元3820可以是L2单元241、S2单元242、M2单元243、N2单元244或C单元245。图38中所说明的指令解码器113的相关部分解码src1位字段1305。子解码器3811确定src1位字段1305是否在00000到01111范围内。如果情况如此,那么子解码器3811将对应寄存器编号供应到全局向量寄存器文件231。在此实例中,这一寄存器字段是src1位字段1305的四个最低有效位。全局向量寄存器文件231召回存储于对应于此寄存器编号的寄存器中的数据且将此数据供应到功能单元3820的src1输入。此解码是所属领域中一般已知的。
子解码器3812确定src1位字段1305是否在10000到10111范围内。如果情况如此,那么子解码器3812将对应寄存器编号供应到对应局部向量寄存器文件。如果指令涉及L2单元241或S2单元242,那么对应局部向量寄存器文件为局部向量寄存器字段232。如果指令涉及M2单元243、N2单元244或C单元245,那么对应局部向量寄存器文件为局部向量寄存器字段。在此实例中,这一寄存器字段是src1位字段1305的三个最低有效位。局部向量寄存器文件231召回存储于对应于此寄存器编号的寄存器中的数据且将此数据供应到功能单元3820的src1输入。对应局部向量寄存器文件232/233召回存储于对应于此寄存器编号的寄存器中的数据且将此数据供应到功能单元3820的src1输入。此解码是所属领域中一般已知的。
子解码器3813确定src1位字段1305是否为11100。如果情况如此,那么子解码器3813将流0读取信号供应到流式传输引擎2800。流式传输引擎2800接着将存储于保持寄存器2818中的流0数据供应到功能单元3820的src1输入。
子解码器3814确定src1位字段1305是否为11101。如果情况如此,那么子解码器3814将流0读取信号供应到流式传输引擎2800。流式传输引擎2800接着将存储于保持寄存器2818中的流0数据供应到功能单元3820的src1输入。子解码器3814还将前进信号供应到流0。如先前所描述,流式传输引擎2800前进到将流0的数据元素的下一依序向量存储于保持寄存器2818中。
子解码器3815确定src1位字段1305是否为11110。如果情况如此,那么子解码器3815将流1读取信号供应到流式传输引擎2800。流式传输引擎2800接着将存储于保持寄存器2828中的流1数据供应到功能单元3820的src1输入。
子解码器3816确定src1位字段1305是否为11111。如果情况如此,那么子解码器3816将流1读取信号供应到流式传输引擎2800。流式传输引擎2800接着将存储于保持寄存器2828中的流1数据供应到功能单元3820的src1输入。子解码器3814还将前进信号供应到流1。如先前所描述,流式传输引擎2800前进到将流1的数据元素的下一依序向量存储于保持寄存器2828中。
类似电路用于响应于src2/cst字段1304的位译码选择供应到功能单元3802的scr2输入的数据。功能单元3820的src2输入可以上文所描述的方式供应有常量输入。
精确数目个指令位致力于操作数规格,且数据寄存器及流的数目为设计选择。所属领域的技术人员将认识到,应用中描述的其它数目选择是可行的。具体地说,单个全局向量寄存器文件的规格且省略局部向量寄存器文件是可行的。本发明采用输入操作数选择字段的位译码来指明流读取,及采用另一位译码来指定流读取且使流前进。
Claims (26)
1.一种数字数据处理器,其包括:
指令存储器,其存储指令,所述指令各自指定数据处理操作及至少一个数据操作数字段;
指令解码器,其连接到所述指令存储器以用于从所述指令存储器顺序地召回指令且确定指定的所述数据处理操作及指定的所述至少一个数据操作数字段;
至少一个操作单元,其连接到数据寄存器文件及所述指令解码器以用于对对应于由所述指令解码器解码的指令的至少一个操作数执行数据处理操作且存储结果;
流式传输引擎,其连接到所述指令解码器,所述流式传输引擎可响应于流开始指令操作以从存储器召回多个数据元素的指令指定序列的流,所述流式传输引擎包含地址产生器,其用于产生对应于多个数据元素的指令指定序列的所述流的流存储器地址,
元素复制单元,其接收从存储器召回的对应于所述流存储器地址的数据元素,所述元素复制单元可用于以指令指定的元素复制次数重复召回的数据元素,
向量长度掩模单元,其从所述元素复制单元接收数据元素,所述向量长度掩模单元可用于将从所述元素复制单元接收到的数据元素限于指令指定的向量长度内的最低有效位,及
流磁头寄存器,其存储接着将由所述至少一个操作单元使用的所述流的至少一个数据元素;且
其中所述至少一个操作单元对流操作数指令作出响应以从所述流磁头寄存器接收至少一个操作数。
2.根据权利要求1所述的数字数据处理器,其中:
所述流操作数指令包含流操作数只读指令及流操作数读取及递增指令;
所述指令解码器对流操作数只读指令及流操作数读取及递增指令作出响应,以将数据作为操作数从所述流磁头寄存器供应到所述至少一个操作单元;及
所述指令解码器对流操作数读取及递增指令作出响应,以控制所述流式传输引擎将下一经提取数据元素存储于所述流磁头寄存器中。
3.根据权利要求2所述的数字数据处理器,其中所述数据寄存器文件包含标示为寄存器编号的存储数据的多个数据寄存器,以及
其中所述指令解码器可用于
解码具有数据操作数字段的指令以将存储于对应数据寄存器中的数据供应到对应操作单元,所述数据操作数字段具有位译码的第一子集,
解码具有数据操作数字段的指令以将存储于所述流磁头寄存器中的所述数据供应到所述对应操作单元,所述数据操作数字段具有预定读取位译码,及
解码具有数据操作数字段的指令以将存储于所述流磁头寄存器中的所述数据供应到所述对应操作单元且通过将所述流的下一依序数据元素存储于所述流磁头寄存器中来使所述流式传输引擎前进,所述数据操作数字段具有预定读取/前进位译码。
4.根据权利要求1所述的数字数据处理器,其进一步包括:
流定义模板寄存器,其存储至少部分地指定所述多个数据元素的所述指令指定序列的所述流的流定义模板。
5.根据权利要求4所述的数字数据处理器,其进一步包括:
存储于所述流定义模板寄存器中的所述流定义模板,其具有
元素大小字段,其指定所述数据元素的元素大小,
元素复制因子字段,其指定所述元素复制单元的元素复制因子,及
向量长度字段,其指定所述向量长度掩模单元的所述向量长度。
6.根据权利要求5所述的数字数据处理器,其中:
所述指令指定的向量长度至少为元素大小及元素复制因子的乘积。
7.根据权利要求1所述的数字数据处理器,其中:
所述流磁头寄存器经划分成元素数据大小的通路;及
所述流式传输引擎将所述流的一个数据元素存储于所述流磁头寄存器的每一通路中。
8.根据权利要求7所述的数字数据处理器,其中:
所述至少一个操作单元中的每一者对具有预定操作单元数据大小的所述至少一个操作数执行所述数据处理操作;
所述流磁头寄存器具有所述预定操作单元数据大小;
如果所述向量长度小于所述预定操作单元数据大小,那么所述向量长度掩模单元将所有0存储在所述流磁头寄存器的过量通路中。
9.根据权利要求7所述的数字数据处理器,其中:
所述至少一个操作单元中的每一者对具有预定操作单元数据大小的所述至少一个操作数执行所述数据处理操作;
所述流磁头寄存器具有所述预定操作单元数据大小;
如果所述向量长度小于所述预定操作单元数据大小,且:
所述向量长度掩模单元具有成组复制停用状态,那么所述向量长度掩模单元将所有0存储于所述流磁头寄存器的过量通路中,且
所述向量长度掩模单元具有成组复制启用状态,那么所述向量长度掩模单元将所述指令指定的向量长度内的最低有效位的复制副本存储于所述流磁头寄存器的过量通路中。
10.根据权利要求9所述的数字数据处理器,其进一步包括:
流定义模板寄存器,其存储至少部分地指定所述多个数据元素的所述指令指定序列的所述流的流定义模板,存储于所述流定义模板寄存器中的所述流定义模板具有元素大小字段,其指定所述数据元素的元素大小,
元素复制因子字段,其指定所述元素复制单元的元素复制因子,
向量长度字段,其指定所述向量长度掩模单元的所述向量长度,及
成组复制字段,其具有所述成组复制停用状态或所述成组复制启用状态中的一者。
11.根据权利要求1所述的数字数据处理器,其中:
所述指令存储器存储至少一个流保存指令及至少一个流恢复指令;
响应于流保存指令的所述流式传输引擎保存当前打开流的状态元数据且停止所述当前打开流;且
响应于流恢复指令的所述流式传输引擎召回所述当前打开流的先前保存的状态元数据,重新打开所述当前打开流且恢复对应于所存储元数据的所述当前打开流。
12.根据权利要求1所述的数字数据处理器,其进一步包括:
所述流式传输引擎对流结束指令作出响应以停止数据的召回;及
所述指令存储器包含在对应流开始指令与对应流结束指令之间的间隔期间控制所述至少一个操作单元以避免存储器写入包含所述流的指令指定的复数个数据元素的存储器的块内的存储器地址的指令。
13.根据权利要求1所述的数字数据处理器,其进一步包括:
所述流式传输引擎对流结束指令作出响应以停止数据的召回。
14.根据权利要求1所述的数字数据处理器,其进一步包括:
所述流式传输引擎对召回多个数据元素的所述指令指定序列中的所有数据元素作出响应以停止数据召回。
15.根据权利要求1所述的数字数据处理器,其进一步包括:
一级数据高速缓存,其连接到所述至少一个操作单元,所述一级数据高速缓存暂时存储供由所述至少一个操作单元操纵的数据,所述一级数据高速缓存在对应数据存储于其中时服务于所述至少一个操作单元存储器读取及写入,且所述一级数据高速缓不存在对应数据存储于其中时涉及对较高级存储器的所述至少一个操作单元存储器读取及写入;及
二级高速缓存,其连接到所述一级数据高速缓存且连接到所述流式传输引擎,所述二级高速缓存暂时存储供由所述至少一个操作单元操纵的数据,所述二级高速缓存服务于存储器读取及写入上的一级数据高速缓存未命中,所述二级高速缓存在对应数据存储于其中时服务于流式传输引擎存储器读取,以及所述二级高速缓不存在对应数据存储于其中时涉及对较高级存储器的所述至少一个操作单元存储器读取及写入以及流式传输引擎存储器读取。
16.一种数字数据处理器,其包括:
指令存储器,其存储指令,所述指令各自指定数据处理操作及至少一个数据操作数字段;
指令解码器,其连接到所述指令存储器以用于从所述指令存储器顺序地召回指令且确定指定的所述数据处理操作及指定的所述至少一个数据操作数字段;
至少一个功能单元,其连接到数据寄存器文件及所述指令解码器以用于对对应于由所述指令解码器解码的指令的至少一个操作数执行数据处理操作且存储结果;
流式传输引擎,其连接到所述指令解码器,所述流式传输引擎可响应于流开始指令操作以从存储器召回多个数据元素的指令指定序列的流,所述流式传输引擎包含
第一地址产生器,其用于产生对应于多个数据元素的指令指定序列的第一流的第一流存储器地址,
第一元素复制单元,其接收从对应于所述第一流存储器地址的存储器召回的数据元素,所述第一元素复制单元可用于以指令指定的第一元素复制次数重复召回的数据元素,
第一向量长度掩模单元,其从所述第一元素复制单元接收数据元素,所述向量长度掩模单元可用于将从所述第一元素复制单元接收到的数据元素限于指令指定的第一向量长度内的最低有效位,
第一流磁头寄存器,其存储接着将由所述至少一个功能单元使用的所述第一流的数据元素,
第二地址产生器,其用于产生对应于多个数据元素的指令指定序列的第二流的
第二流存储器地址,
第二元素复制单元,其接收从对应于所述第二流存储器地址的存储器召回的数据元素,所述第二元素复制单元可用于以指令指定的第二元素复制次数重复召回的数据元素,
第二向量长度掩模单元,其从所述第二元素复制单元接收数据元素,所述第二向量长度掩模单元可用于将从所述第二元素复制单元接收到的数据元素限于指令指定的第二向量长度内的最低有效位,
第二流磁头寄存器,其存储接着将由所述至少一个功能单元使用的所述第二流的数据元素;
其中所述至少一个功能单元对第一流操作数指令作出响应以从所述第一流磁头寄存器接收至少一个操作数;及
其中所述至少一个功能单元对第二流操作数指令作出响应以从所述第二流磁头寄存器接收至少一个操作数。
17.根据权利要求16所述的数字数据处理器,其中:
所述第一流操作数指令包含第一流操作数只读指令及第一流操作数读取及递增指令;
所述指令解码器对第一流操作数只读指令及第一流操作数读取及递增指令作出响应,以将数据作为操作数从所述第一流磁头寄存器供应到至少一个操作单元;
所述指令解码器对第一流操作数读取及递增指令作出响应,以控制第一流式传输引擎将下一经提取第一数据元素存储于所述第一流磁头寄存器中;
所述第二流操作数指令包含第二流操作数只读指令及第二流操作数读取及递增指令;
所述指令解码器对第二流操作数只读指令及第二流操作数读取及递增指令作出响应,以将数据作为操作数从所述第二流磁头寄存器供应到至少一个操作单元;及
所述指令解码器对第二流操作数读取及递增指令作出响应,以控制第二流式传输引擎将下一经提取第二数据元素存储于所述第二流磁头寄存器中。
18.根据权利要求17所述的数字数据处理器,其中所述数据寄存器文件包含标示为寄存器编号的存储数据的多个数据寄存器,以及
其中所述指令解码器可用于
解码具有数据操作数字段的指令以将存储于对应数据寄存器中的数据供应到对应操作单元,所述数据操作数字段具有位译码的第一子集,
解码具有数据操作数字段的指令以将存储于所述第一流磁头寄存器中的所述数据供应到所述对应操作单元,所述数据操作数字段具有预定第一读取位译码,
解码具有数据操作数字段的指令以将存储于所述第一流磁头寄存器中的所述数据供应到所述对应操作单元且通过将所述第一流的下一依序数据元素存储于所述第一流磁头寄存器中来使所述第一流式传输引擎前进,所述数据操作数字段具有预定第一读取/前进位译码,
解码具有数据操作数字段的指令以将存储于所述第二流磁头寄存器中的所述数据供应到所述对应操作单元,所述数据操作数字段具有预定第二读取位译码,及
解码具有数据操作数字段的指令以将存储于所述第二流磁头寄存器中的所述数据供应到所述对应操作单元且通过将所述第二流的下一依序数据元素存储于所述第二流磁头寄存器中来使所述第二流式传输引擎提前,所述数据操作数字段具有预定第二读取/提前位译码。
19.根据权利要求16所述的数字数据处理器,其进一步包括:
第一流定义模板寄存器,其存储至少部分地指定第一数据元素的所述指令指定序列的所述第一流的第一流定义模板;及
第二流定义模板寄存器,其存储至少部分地指定第二数据元素的所述指令指定序列的所述第二流的第二流定义模板。
20.根据权利要求19所述的数字数据处理器,其进一步包括:
存储于所述第一流定义模板寄存器中的所述第一流定义模板,其具有
第一元素大小字段,其指定所述第一数据元素的第一元素大小,
第一元素复制因子字段,其指定所述第一元素复制单元的第一元素复制因子,及
第一向量长度字段,其指定所述第一向量长度掩模单元的第一向量长度;及
存储于所述第二流定义模板寄存器中的所述第二流定义模板,其具有
第二元素大小字段,其指定所述第二数据元素的第二元素大小,
第二元素复制因子字段,其指定所述第二元素复制单元的第二元素复制因子,及
第二向量长度字段,其指定所述第二向量长度掩模单元的第二向量长度。
21.根据权利要求20所述的数字数据处理器,其中:
所述指令指定的第一向量长度至少为第一元素大小及第一元素复制因子的乘积;及
所述指令指定的第二向量长度至少为第二元素大小及所述第二元素复制因子的乘积。
22.根据权利要求16所述的数字数据处理器,其中:
所述第一流磁头寄存器经划分成第一元素数据大小的通路;
第一流式传输引擎将所述第一流的一个数据元素存储于所述第一流磁头寄存器的每一通路中;
所述第二流磁头寄存器经划分成第二元件数据大小的通路;及
第二流式传输引擎将所述第二流的一个数据元素存储于所述第二流磁头寄存器的每一通路中。
23.根据权利要求22所述的数字数据处理器,其中:
至少一个操作单元中的每一者对具有预定操作单元数据大小的所述至少一个操作数执行所述数据处理操作;
所述第一流磁头寄存器具有所述预定操作单元数据大小;
如果所述第一向量长度小于所述预定操作单元数据大小,那么所述第一向量长度掩模单元将所有0存储于所述第一流磁头寄存器的过量通路中;
所述第二流磁头寄存器具有所述预定操作单元数据大小;
如果所述第二向量长度小于所述预定操作单元数据大小,那么所述第二向量长度掩模单元将所有0存储于所述第二流磁头寄存器的过量通路中。
24.根据权利要求23所述的数字数据处理器,其中:
至少一个操作单元中的每一者对具有预定操作单元数据大小的所述至少一个操作数执行所述数据处理操作;
所述第一流磁头寄存器具有所述预定操作单元数据大小;
如果所述第一向量长度小于所述预定操作单元数据大小,且:
所述第一向量长度掩模单元具有成组复制停用状态,那么所述第一向量长度掩模单元将所有0存储于所述第一流磁头寄存器的过量通路中,且
所述第一向量长度掩模单元具有成组复制启用状态,那么所述第一向量长度掩模单元将指令指定的向量长度内的最低有效位的复制副本存储于所述第一流磁头寄存器的过量通路中;
所述第二流磁头寄存器具有所述预定操作单元数据大小;且
如果所述第二向量长度小于所述预定操作单元数据大小,且:
所述第二向量长度掩模单元具有成组复制停用状态,那么所述第二向量长度掩模单元将所有0存储于所述第二流磁头寄存器的过量通路中,且
所述第二向量长度掩模单元具有成组复制启用状态,那么所述第二向量长度掩模单元将指令指定的向量长度内的最低有效位的复制副本存储于所述第二流磁头寄存器的过量通路中。
25.根据权利要求24所述的数字数据处理器,其进一步包括:
第一流定义模板寄存器,其存储至少部分地指定第一数据元素的所述指令指定序列的所述流的第一流定义模板,存储于所述第一流定义模板寄存器中的所述第一流定义模板具有
第一元素大小字段,其指定所述第一数据元素的第一元素大小,
第一元素复制因子字段,其指定所述第一元素复制单元的第一元素复制因子,
第一向量长度字段,其指定所述向量长度掩模单元的第一向量长度,及
第一成组复制字段,其具有所述第一成组复制停用状态或所述第一成组复制启用状态中的一者;
第二流定义模板寄存器,其存储至少部分地指定第二数据元素的所述指令指定序列的所述流的第二流定义模板,存储于所述第二流定义模板寄存器中的所述第二流定义模板具有
第二元素大小字段,其指定所述第二数据元素的第二元素大小,
第二元素复制因子字段,其指定所述第二元素复制单元的第二元素复制因子,
第二向量长度字段,其指定所述第二向量长度掩模单元的第二向量长度,及
第二成组复制字段,其具有所述第二成组复制停用状态或所述第二成组复制启用状态中的一者。
26.根据权利要求16所述的数字数据处理器,其进一步包括:
一级数据高速缓存,其连接到至少一个操作单元,所述一级数据高速缓存暂时存储供由至少一个操作单元操纵的数据,所述一级数据高速缓存在对应数据存储于其中时服务于至少一个操作单元存储器读取及写入,且所述一级数据高速缓不存在对应数据存储于其中时涉及对较高级存储器的至少一个操作单元存储器读取及写入;及
二级高速缓存,其连接到所述一级数据高速缓存且连接到所述流式传输引擎,所述二级高速缓存暂时存储供由至少一个操作单元操纵的数据,所述二级高速缓存服务于存储器读取及写入上的一级数据高速缓存未命中,所述二级高速缓存在对应数据存储于其中时服务于第一流式传输引擎存储器读取和第二流式传输引擎存储器读取,以及所述二级高速缓不存在对应数据存储于其中时涉及对较高级存储器的至少一个操作单元存储器读取及写入以及流式传输引擎存储器读取。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310618020.4A CN116521237A (zh) | 2016-12-30 | 2017-12-29 | 具有单独可选元素及成组复制的流式传输引擎 |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/395,028 | 2016-12-30 | ||
US15/395,028 US10459843B2 (en) | 2016-12-30 | 2016-12-30 | Streaming engine with separately selectable element and group duplication |
PCT/US2017/068884 WO2018126099A1 (en) | 2016-12-30 | 2017-12-29 | Streaming engine with separately selectable element and group duplication |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310618020.4A Division CN116521237A (zh) | 2016-12-30 | 2017-12-29 | 具有单独可选元素及成组复制的流式传输引擎 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109952559A CN109952559A (zh) | 2019-06-28 |
CN109952559B true CN109952559B (zh) | 2023-06-06 |
Family
ID=62709095
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310618020.4A Pending CN116521237A (zh) | 2016-12-30 | 2017-12-29 | 具有单独可选元素及成组复制的流式传输引擎 |
CN201780070308.5A Active CN109952559B (zh) | 2016-12-30 | 2017-12-29 | 具有单独可选元素及成组复制的流式传输引擎 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310618020.4A Pending CN116521237A (zh) | 2016-12-30 | 2017-12-29 | 具有单独可选元素及成组复制的流式传输引擎 |
Country Status (3)
Country | Link |
---|---|
US (4) | US10459843B2 (zh) |
CN (2) | CN116521237A (zh) |
WO (1) | WO2018126099A1 (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10203958B2 (en) | 2013-07-15 | 2019-02-12 | Texas Instruments Incorporated | Streaming engine with stream metadata saving for context switching |
US9606803B2 (en) * | 2013-07-15 | 2017-03-28 | Texas Instruments Incorporated | Highly integrated scalable, flexible DSP megamodule architecture |
EP3336691B1 (en) * | 2016-12-13 | 2022-04-06 | ARM Limited | Replicate elements instruction |
EP3336692B1 (en) | 2016-12-13 | 2020-04-29 | Arm Ltd | Replicate partition instruction |
EP3586226B1 (en) * | 2017-02-23 | 2023-07-05 | ARM Limited | Multiply-accumulation in a data processing apparatus |
WO2019005169A1 (en) * | 2017-06-30 | 2019-01-03 | Intel Corporation | APPARATUS AND METHOD FOR MEMORY OPERATIONS READY FOR DATA |
CN113626076A (zh) * | 2020-05-08 | 2021-11-09 | 安徽寒武纪信息科技有限公司 | 数据处理方法及装置以及相关产品 |
US11442729B2 (en) * | 2020-10-26 | 2022-09-13 | Google Llc | Bit-packed array processing using SIMD |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7428547B2 (en) * | 1998-01-26 | 2008-09-23 | At&T Corp. | System and method of organizing data to facilitate access and streaming |
US7865637B2 (en) * | 2003-06-18 | 2011-01-04 | Nethra Imaging, Inc. | System of hardware objects |
CN103281594A (zh) * | 2012-01-12 | 2013-09-04 | 特克特朗尼克公司 | 监控基于开放互联网的自适应视频流式传输 |
CN104011670A (zh) * | 2011-12-22 | 2014-08-27 | 英特尔公司 | 用于基于向量写掩码的内容而在通用寄存器中存储两个标量常数之一的指令 |
CN104025603A (zh) * | 2011-11-08 | 2014-09-03 | 高通股份有限公司 | 最后有效系数的位置的渐进式译码 |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5864703A (en) * | 1997-10-09 | 1999-01-26 | Mips Technologies, Inc. | Method for providing extended precision in SIMD vector arithmetic operations |
US20040073773A1 (en) * | 2002-02-06 | 2004-04-15 | Victor Demjanenko | Vector processor architecture and methods performed therein |
US8103866B2 (en) | 2004-06-18 | 2012-01-24 | Nethra Imaging Inc. | System for reconfiguring a processor array |
US8650240B2 (en) * | 2009-08-17 | 2014-02-11 | International Business Machines Corporation | Complex matrix multiplication operations with data pre-conditioning in a high performance computing architecture |
US20130067109A1 (en) | 2011-09-12 | 2013-03-14 | Tektronix, Inc. | Monitoring Over-the-Top Adaptive Video Streaming |
US9411585B2 (en) * | 2011-09-16 | 2016-08-09 | International Business Machines Corporation | Multi-addressable register files and format conversions associated therewith |
CN104067224B (zh) * | 2011-12-23 | 2017-05-17 | 英特尔公司 | 在不同的粒度水平下对数据值进行广播和掩码的指令执行 |
WO2013095669A1 (en) * | 2011-12-23 | 2013-06-27 | Intel Corporation | Multi-register scatter instruction |
WO2013101218A1 (en) * | 2011-12-30 | 2013-07-04 | Intel Corporation | Vector frequency expand instruction |
US9606803B2 (en) | 2013-07-15 | 2017-03-28 | Texas Instruments Incorporated | Highly integrated scalable, flexible DSP megamodule architecture |
US20160124651A1 (en) | 2014-11-03 | 2016-05-05 | Texas Instruments Incorporated | Method for performing random read access to a block of data using parallel lut read instruction in vector processors |
US20160179520A1 (en) * | 2014-12-23 | 2016-06-23 | Intel Corporation | Method and apparatus for variably expanding between mask and vector registers |
US10503502B2 (en) * | 2015-09-25 | 2019-12-10 | Intel Corporation | Data element rearrangement, processors, methods, systems, and instructions |
-
2016
- 2016-12-30 US US15/395,028 patent/US10459843B2/en active Active
-
2017
- 2017-12-29 CN CN202310618020.4A patent/CN116521237A/zh active Pending
- 2017-12-29 CN CN201780070308.5A patent/CN109952559B/zh active Active
- 2017-12-29 WO PCT/US2017/068884 patent/WO2018126099A1/en active Application Filing
-
2019
- 2019-10-29 US US16/666,740 patent/US11106591B2/en active Active
-
2021
- 2021-08-31 US US17/462,105 patent/US11860790B2/en active Active
-
2024
- 2024-01-02 US US18/401,824 patent/US20240134800A1/en active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7428547B2 (en) * | 1998-01-26 | 2008-09-23 | At&T Corp. | System and method of organizing data to facilitate access and streaming |
US7865637B2 (en) * | 2003-06-18 | 2011-01-04 | Nethra Imaging, Inc. | System of hardware objects |
CN104025603A (zh) * | 2011-11-08 | 2014-09-03 | 高通股份有限公司 | 最后有效系数的位置的渐进式译码 |
CN104011670A (zh) * | 2011-12-22 | 2014-08-27 | 英特尔公司 | 用于基于向量写掩码的内容而在通用寄存器中存储两个标量常数之一的指令 |
CN103281594A (zh) * | 2012-01-12 | 2013-09-04 | 特克特朗尼克公司 | 监控基于开放互联网的自适应视频流式传输 |
Also Published As
Publication number | Publication date |
---|---|
US20210390055A1 (en) | 2021-12-16 |
US20180189184A1 (en) | 2018-07-05 |
CN116521237A (zh) | 2023-08-01 |
WO2018126099A1 (en) | 2018-07-05 |
US20200065252A1 (en) | 2020-02-27 |
US11860790B2 (en) | 2024-01-02 |
US10459843B2 (en) | 2019-10-29 |
US11106591B2 (en) | 2021-08-31 |
US20240134800A1 (en) | 2024-04-25 |
CN109952559A (zh) | 2019-06-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20210149820A1 (en) | Two address translations from a single table look-aside buffer read | |
US11941399B2 (en) | Exposing valid byte lanes as vector predicates to CPU | |
CN109952559B (zh) | 具有单独可选元素及成组复制的流式传输引擎 | |
CN109643233B (zh) | 具有带读取和读取/前进操作数编码的流引擎的数据处理设备 | |
US20230385063A1 (en) | Streaming engine with early exit from loop levels supporting early exit loops and irregular loops | |
US10810131B2 (en) | Streaming engine with multi dimensional circular addressing selectable at each dimension | |
US11921636B2 (en) | Streaming engine with flexible streaming engine template supporting differing number of nested loops with corresponding loop counts and loop offsets | |
CN109997109B (zh) | 具有提取提前滞后的流引擎 | |
US11983559B2 (en) | Streaming engine with short cut start instructions | |
US20240063827A1 (en) | Butterfly network on load data return | |
US10140239B1 (en) | Superimposing butterfly network controls for pattern combinations | |
US11803477B2 (en) | Streaming engine with compressed encoding for loop circular buffer sizes |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |