CN116880903A - 具有提取提前滞后的流引擎 - Google Patents

具有提取提前滞后的流引擎 Download PDF

Info

Publication number
CN116880903A
CN116880903A CN202310820302.2A CN202310820302A CN116880903A CN 116880903 A CN116880903 A CN 116880903A CN 202310820302 A CN202310820302 A CN 202310820302A CN 116880903 A CN116880903 A CN 116880903A
Authority
CN
China
Prior art keywords
data
memory
stream
amount
cache
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202310820302.2A
Other languages
English (en)
Inventor
M·皮尔逊
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Texas Instruments Inc
Original Assignee
Texas Instruments Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Texas Instruments Inc filed Critical Texas Instruments Inc
Publication of CN116880903A publication Critical patent/CN116880903A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0893Caches characterised by their organisation or structure
    • G06F12/0897Caches characterised by their organisation or structure with two or more cache hierarchy levels
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0656Data buffering arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30047Prefetch instructions; cache control instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/452Instruction code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Advance Control (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Complex Calculations (AREA)

Abstract

本申请涉及具有提取提前滞后的流引擎。描述的实例将对共享存储器或资源的存取控制为是突发性的。存取控制器确定准备好发出的存取数目N是否小于当前缓冲器容量M(4402)。如果N小于M,那么所述存取控制器发出所有就绪存取(4403)。否则,所述存取控制器确定所述当前缓冲器容量M是否小于滞后量R(4404)。如果所述当前缓冲器容量M小于所述滞后量R,那么存取控制器等待(4405)。如果所述当前缓冲器容量M大于或等于所述滞后量R,那么存取控制器发出R个存取(4406)。当缓冲器容量受约束时,此用于束缚对所述滞后量R的存取。流引擎调调用由控制寄存器指定的多个嵌套循环的固定数据流以进行存储直到使用。

Description

具有提取提前滞后的流引擎
分案申请的相关信息
本申请是申请号为201780072883.9、申请日为2017年12月20日、发明名称为“具有提取提前滞后的流引擎”的中国发明专利申请的分案申请。
技术领域
此大体上涉及数字数据处理,且更特定来说,涉及用于操作数提取的流引擎的控制。
背景技术
现代数字信号处理器(DSP)面临多种挑战。工作负荷继续增加,从而需要增加带宽。芯片上系统(SOC)大小及复杂性继续增长。存储器系统延时严重影响某些类别的算法。随着晶体管越来越小,存储器及寄存器变得更加不可靠。随着软件堆叠越来越大,潜在相互作用及错误数目变得越来越大。
存储器带宽及调度是操作实时数据的数字信号处理器的一个问题。操作实时数据的数字信号处理器通常接收输入数据流、对所述数据流执行滤波函数(例如编码或解码)及输出经变换数据流。系统被称为实时的,这是因为如果经变换数据流在调度时不可用于输出那么应用就发生故障。典型的视频编码需要可预测但非循序的输入数据模式。通常,对应的存储器存取难以在可用地址生成及存储器存取资源内实现。典型的应用需要存储器存取以在数据寄存器文件中加载数据寄存器且接着供应到执行数据处理的功能单元。
发明内容
描述的实例将对共享存储器或资源的存取控制为是突发性的。存取控制器确定至少一个存取是否准备好发出。所述存取控制器确定准备好发出的所述存取数目N是否小于当前缓冲器容量M。如果N小于M,所述存取控制器就发出所有准备就绪的存取。否则,所述存取控制器确定所述当前缓冲器容量M是否小于滞后量R。如果所述当前缓冲器容量M小于所述滞后量R,那么所述存取控制器等待直到所述当前缓冲器容量M大于或等于所述滞后量R。如果所述当前缓冲器容量M大于或等于所述滞后量R,那么所述存取控制器发出R个存取。当缓冲器容量受约束时,此用于束化对所述滞后量R的存取。
在优选实施例中,所述存取请求单元是数字信号处理器中采用的流引擎。多个嵌套循环的固定数据流序列由控制寄存器指定。一旦开始,所述数据流就是只读的且不能被写入。准备就绪存取是针对所述数据流中的剩余数据元素的存储器存取。当前缓冲器容量是流缓冲器中的未使用存储空间量。所述滞后量优选地由存储器映射数据寄存器中的数据设置。
附图说明
图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说明图21的实例流内的元素次序。
图24说明从较大矩形提取较小矩形。
图25说明流引擎在4个字节的转置粒度下将如何提取此实例的流。
图26说明流引擎在8个字节的转置粒度下将如何提取此实例的流。
图27说明实例实施例的流引擎的细节。
图28说明实例实施例的流模板寄存器。
图29说明实例实施例的流模板寄存器的旗标字段的子字段定义。
图30说明展示实例实施例的数据的流引擎供应的部分示意图。
图31说明存储数据流的实施例的概念图。
图32说明流引擎中的数据缓冲器的高速缓冲存储器构造的细节(现有技术)。
图33是说明用于循环0的早期地址及早期循环计数的生成的部分示意图。
图34A及34B一起是说明早期地址生成器的操作的流程图。
图35是说明用于循环0的后期地址及后期循环计数的生成的部分示意图。
图36是说明后期地址生成器的操作的流程图。
图37说明存储早期及后期循环计数的扩展控制寄存器的实例位指派。
图38说明存储早期及后期地址的扩展控制寄存器的实例位指派。
图39说明存储在流引擎中生成错误的提取的虚拟地址的扩展控制寄存器的实例位指派。
图40说明存储详述检测到的错误的性质的数据的扩展控制寄存器的实例位指派。
图41说明实例实施例的错误检测及校正。
图42是说明实例实施例的提取滞后可应用到其的多处理器多存储器系统的示意图。
图43是说明包含采用滞后的优先级技术的实例实施例的硬件的部分示意图。
图44是说明采用滞后的优先级技术的流程图。
具体实施方式
图1说明根据优选实施例的双标量/向量数据路径处理器。处理器100包含单独的一级指令高速缓冲存储器(L1I)121及一级数据高速缓冲存储器(L1D)123。处理器100包含保持指令及数据两者的二级组合指令/数据高速缓冲存储器(L2)130。图1说明一级指令高速缓冲存储器121与二级组合指令/数据高速缓冲存储器130之间的连接(总线142)。图1说明一级数据高速缓冲存储器123与二级组合指令/数据高速缓冲存储器130之间的连接(总线145)。在处理器100的优选实施例中,二级组合指令/数据高速缓冲存储器130既存储指令以备份一级指令高速缓冲存储器121又存储数据以备份一级数据高速缓冲存储器123。在优选实施例中,二级组合指令/数据高速缓冲存储器130以图1中未说明的方式进一步连接到更高级高速缓冲存储器及/或主存储器。在优选实施例中,中央处理单元核心110、一级指令高速缓冲存储器121、一级数据高速缓冲存储器123及二级组合指令/数据高速缓冲存储器130形成在单个集成电路上。此单个集成电路任选地包含其它电路。
中央处理单元核心110受指令提取单元111所控制而从一级指令高速缓冲存储器121提取指令。指令提取单元111确定将执行的下一条指令且调用一组提取包大小的此类指令。下文进一步详述提取包的性质及大小。在高速缓冲存储器命中后(如果这些指令是存储于一级指令高速缓冲存储器121中),从一级指令高速缓冲存储器121直接提取指令。在高速缓冲存储器未命中后(指定指令提取包不是存储于一级指令高速缓冲存储器121中),在二级组合高速缓冲存储器130中寻找这些指令。在优选实施例中,一级指令高速缓冲存储器121中的高速缓冲存储器线的大小等于提取包的大小。这些指令的存储器位置是二级组合高速缓冲存储器130中的命中或未命中。从二级组合高速缓冲存储器130服务命中。从更高级高速缓冲存储器(未说明)或从主存储器(未说明)服务未命中。所请求的指令可同时被供应到一级指令高速缓冲存储器121及中央处理单元核心110两者以加速使用。
在优选实施例中,中央处理单元核心110包含多个功能单元以执行指令指定数据处理任务。指令分派单元112确定提取的每一指令的目标功能单元。在优选实施例中,中央处理单元110操作为超长指令字(VLIW)处理器,其能够同时操作对应功能单元中的多个指令。优选地,编译器将指令组织于一起执行的执行包中。指令分派单元112将每一指令引导到其目标功能单元。指派到指令的功能单元完全由通过编译器产生的指令指定。中央处理单元核心110的硬件不参与此功能单元指派。在优选实施例中,指令分派单元112可并行操作多个指令。此类并行指令的数目由执行包的大小设置。下文将进一步详述此。
指令分派单元112的分派任务的一部分是确定是否将在标量数据路径侧A 115或向量数据路径侧B 116中的功能单元上执行指令。称为s位的每一指令内的指令位确定指令控制哪一数据路径。下文将进一步详述此。
指令解码单元113解码当前执行包中的每一指令。解码包含:识别执行指令的功能单元、识别用于从可能寄存器文件之中供应数据以用于对应数据处理操作的寄存器及识别对应数据处理操作的结果的寄存器目的地。如下文进一步解释,指令可包含常数字段代替一个寄存器号操作数字段。此解码的结果是用于控制目标功能单元对指定数据执行由对应指令指定的数据处理操作的信号。
中央处理单元核心110包含控制寄存器114。控制寄存器114以与实例实施例不相关的方式存储用于控制标量数据路径侧A 115及向量数据路径侧B 116中的功能单元的信息。此信息可为模式信息或类似物。
来自指令解码113的经解码指令及存储于控制寄存器114中的信息被供应到标量数据路径侧A115及向量数据路径侧B 116。因此,标量数据路径侧A 115及向量数据路径侧B116内的功能单元根据指令指定数据执行指令指定数据处理操作且将结果存储于一或多个指令指定数据寄存器中。标量数据路径侧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与向量数据路径侧B 116中的寄存器文件交换数据。总线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及到向量数据路径侧B 116是单向的。
在优选实施例中,一级数据高速缓冲存储器123及二级组合高速缓冲存储器130两者可根据标题为“包含高速缓冲存储器及可直接寻址静态随机存取存储器的统一存储器系统架构(UNIFIED MEMORY SYSTEM ARCHITECTURE INCLUDING CACHE AND DIRECTLYADDRESSABLE STATIC RANDOM ACCESS MEMORY)”的第US 6,606,686号专利经配置为所选择量的高速缓冲存储器或可直接寻址存储器。
图2说明标量数据路径侧A 115及向量数据路径侧B 116内的功能单元及寄存器文件的另外细节。标量数据路径侧A 115包含全局标量寄存器文件211、L1/S1局部寄存器文件212、M1/N1局部寄存器文件213及D1/D2局部寄存器文件214。标量数据路径侧A115包含L1单元221、S1单元222、M1单元223、N1单元224、D1单元225及D2单元226。向量数据路径侧B 116包含全局向量寄存器文件231、L2/S2局部寄存器文件232、M2/N2局部寄存器文件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单元221通常接受两个512位操作数且产生一个512位结果。两个操作数各自从全局向量寄存器文件231、L2/S2局部寄存器文件232或谓词寄存器文件234中的指令指定寄存器调用。L2单元241优选地类似于L1单元221执行指令,除了是对更宽的512位数据执行指令外。结果可被写入到全局向量寄存器文件231、L2/S2局部寄存器文件222、M2/N2/C局部寄存器文件233或谓词寄存器文件234的指令指定寄存器中。
向量数据路径侧B 116包含S2单元242。S2单元242通常接受两个512位操作数且产生一个512位结果。两个操作数各自从全局向量寄存器文件231、L2/S2局部寄存器文件232或谓词寄存器文件234中的指令指定寄存器调用。S2单元242优选地类似于S1单元222执行指令,除了是对更宽的512位数据执行指令外。结果可被写入到全局向量寄存器文件231、L2/S2局部寄存器文件222、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中的指令指定寄存器调用。M2单元243优选地类似于M1单元222执行指令,除了是对更宽的512位数据执行指令外。结果可被写入到全局向量寄存器文件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位绝对差值和(SAD)计算,每时钟循环高达512个SAD;水平加法及水平最小/最大指令;及向量排列指令。C单元245包含用于控制C单元245指令的某些操作的4个向量控制寄存器(CUCR0到CUCR3)。控制寄存器CUCR0到CUCR3在某些C单元245操作中用作操作数。控制寄存器CUCR0到CUCR3优选地:用于控制一般排列指令(VPERM);及用作用于SIMD多个点积运算(DOTPM)及SIMD多个绝对差值和(SAD)运算的掩码。控制寄存器CUCR0优选地用于存储用于伽罗瓦(Galios)字段乘法运算(GFMPY)的多项式。控制寄存器CUCR1优选地用于存储伽罗瓦字段多项式生成器函数。
向量数据路径侧B 116包含P单元246。P单元246在局部谓词寄存器文件234的寄存器上执行基本逻辑运算。P单元246可以直接读取及写入谓词寄存器文件234。这些操作包含AND、ANDN、OR、XOR、NOR、BITR、NEG、SET、BITCNT、RMBD、BIT抽取及扩展。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位标量数据。所有标量数据路径侧A115功能单元(L1单元221、S1单元222、M1单元223、N1单元224、D1单元225及D2单元226)可写入L1/S1局部标量寄存器文件212。仅L1单元221及S1单元222可读取L1/S1局部标量寄存器文件212。
图6说明M1/N1局部寄存器文件213。图6中说明的实施例具有标示为AM0到AM7的8个独立64位宽标量寄存器。优选指令编码(参见图13)准许M1/N1局部寄存器文件213包含高达16个寄存器。图6的实施例实施仅8个寄存器以减小电路大小及复杂度。可读取或写入M1/N1局部寄存器文件213中的每一寄存器作为64位标量数据。所有标量数据路径侧A115功能单元(L1单元221、S1单元222、M1单元223、N1单元224、D1单元225及D2单元226)可写入M1/N1局部标量寄存器文件213。仅M1单元223及N1单元224可读取M1/N1局部标量寄存器文件213。
图7说明全局向量寄存器文件231。存在16个独立512位宽标量寄存器。可读取或写入全局向量寄存器文件231中的每一寄存器作为标示为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说明P局部寄存器文件234。存在标示为P0到P15的8个独立64位宽寄存器。可读取或写入P局部寄存器文件234中的每一寄存器作为64位标量数据。向量数据路径侧B 116功能单元(L2单元241、S2单元242、C单元244及P单元246)可写入P局部寄存器文件234。仅L2单元241、S2单元242及P单元246可读取P局部标量寄存器文件234。P局部寄存器文件234的常见预期使用包含:从L2单元241、S2单元242或C单元244写入一个位SIMD向量比较结果;通过P单元246操纵SIMD向量比较结果;及使用所操纵的结果控制另一SIMD向量运算。
图9说明L2/S2局部寄存器文件232。图9中说明的实施例具有8个独立512位宽标量寄存器。优选指令编码(参见图13)准许L2/S2局部寄存器文件232包含高达16个寄存器。图9的实施例实施仅8个寄存器以减小电路大小及复杂度。可读取或写入L2/S2局部向量寄存器文件232中的每一寄存器作为标示为BL0到BL7的64位标量数据。可读取或写入L2/S2局部向量寄存器文件232中的每一寄存器作为标示为VBL0到VBL7的512位向量数据。指令类型确定数据大小。所有向量数据路径侧B 116功能单元(L2单元241、S2单元242、M2单元233、N2单元244、C单元245及P单元246)可写入L2/S2局部向量寄存器文件232。仅L2单元241及S2单元242可读取L2/S2局部向量寄存器文件232。
图10说明M2/N2/C局部寄存器文件233。图10中说明的实施例具有8个独立512位宽标量寄存器。优选指令编码(参见图13)准许L1/S1局部寄存器文件212包含高达16个寄存器。图10的实施例实施仅8个寄存器以减小电路大小及复杂度。可读取或写入M2/N2/C局部向量寄存器文件233中的每一寄存器作为标示为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单元233、N2单元244及C单元245可读取M2/N2/C局部向量寄存器文件233。
提供可由一侧的所有功能单元存取的全局寄存器文件及可由一侧的仅部分功能单元存取的局部寄存器文件是一种设计选择。可采用对应于所揭示的全局寄存器文件的仅一种类型的寄存器文件实践实例实施例。
交叉路径117准许标量数据路径侧A 115与向量数据路径侧B 116之间的有限数据交换。在每一操作循环期间,一个64位数据字可从全局标量寄存器文件A 211调用以由向量数据路径侧B 116的一或多个功能单元用作操作数,且一个64位数据字可从全局向量寄存器文件231调用以由标量数据路径侧A 115的一或多个功能单元用作操作数。任何标量数据路径侧A 115功能单元(L1单元221、S1单元222、M1单元223、N1单元224、D1单元225及D2单元226)可从全局向量寄存器文件231读取64位操作数。此64位操作数是全局向量寄存器文件232的经存取寄存器中的512位数据的最低有效位。多个标量数据路径侧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位操作数从标量数据路径侧A 115转移到向量数据路径侧B 116。
在某些受约束的情况中,流引擎125传送数据。流引擎125控制两个数据流。流由特定类型的元素序列构成。对流操作的程序循序地读取数据,从而依次对每一元素操作。每个流具有以下基本性质。流数据具有明确定义的开始及结束时间。流数据在整个流内具有固定元素大小及类型。流数据具有固定元素序列。因此,程序不能在流内随机寻找。流数据在活动时是只读的。程序不能在读取流的同时写入流。一旦流被打开,流引擎125:计算地址;从二级统一高速缓冲存储器(其可能需要来自更高级存储器的高速缓冲存储器服务)提取定义的数据类型;执行数据类型操纵,例如零扩展、符号扩展、数据元素分类/交换,例如矩阵转置;及将数据直接递送到中央处理单元核心110内的经编程数据寄存器文件。流引擎125因此可用于对良好的数据进行实时数字滤波操作。流引擎125从对应中央处理单元核心110释放这些存储器提取任务,从而实现其它处理功能。
流引擎125提供以下益处。流引擎125准许多维存储器存取。流引擎125增加功能单元可用的带宽。流引擎125最小化高速缓冲存储器未命中停顿的数目,这是因为流缓冲器绕过一级数据高速缓冲存储器123。流引擎125减小维持循环所需的标量操作的数目。流引擎125管理地址指针。流引擎125自动处置地址生成,从而释放地址生成指令槽及D1单元224及D2单元226以用于其它计算。
中央处理单元核心110在指令管线上操作。提取下文进一步描述的固定长度的指令包中的指令。所有指令需要相同数目个管线阶段以提取及解码,但需要不同数目个执行阶段。
图11说明以下管线阶段:程序提取阶段1110、分派及解码阶段1120及执行阶段1130。程序提取阶段1110包含针对所有指令的三个阶段。分派及解码阶段包含针对所有指令的三个阶段。执行阶段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管线与彼此解耦。从一级指令高速缓冲存储器L1I返回提取包可取决于外部环境(例如,在一级指令高速缓冲存储器121中是否存在命中或在二级组合高速缓冲存储器130中是否存在命中)而采用不同数目个时钟循环。因此,程序存取阶段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(无操作)指令;3)分支指令;4)常数字段扩展;5)条件代码扩展。下文将进一步解释部分这些槽类型。
分派及解码阶段1120包含指令分派到适当执行单元阶段1121(DS)、指令预解码阶段1122(D1);及指令解码、操作数读取阶段1123(D2)。在指令分派到适当执行单元阶段1121(DS)期间,提取包被分成执行包且被指派到适当功能单元。在指令预解码阶段1122(D1)期间,源寄存器、目的寄存器及相关联路径经解码用于在功能单元中执行指令。在指令解码、操作数读取阶段1123(D2)期间,完成更多细节单元解码,以及从寄存器文件读取操作数。
执行阶段1130包含执行阶段1131到1135(E1到E5)。不同类型的指令需要不同数目个这些阶段来完成其执行。管线的这些阶段在理解中央处理单元核心110循环边界处的装置状态中扮演重要角色。
在执行1阶段1131(E1)期间,评估指令的条件,且操作操作数。如图11中说明,执行1阶段1131可从流缓冲器1141及寄存器文件中的一者(示意性地展示为1142)接收操作数。对于加载及存储指令,执行地址生成,且地址修改被写入到寄存器文件。对于分支指令,影响PG阶段中的分支提取包。如图11中说明,加载及存储此处示意性地展示为存储器1151的指令存取存储器。对于单循环指令,结果被写入到目的寄存器文件。此假设将指令的任何条件都评估为真。如果条件被评估为假,那么在执行1阶段1131之后指令不写入任何结果或具有任何管线操作。
在执行2阶段1132(E2)期间,加载指令将地址发送到存储器。存储指令将地址及数据发送到存储器。如果发生饱和,那么使结果饱和的单循环指令设置控制状态寄存器(CSR)中的SAT位。对于2循环指令,结果被写入到目的寄存器文件。
在执行3阶段1133(E3)期间,执行数据存储器存取。如果发生饱和,那么使结果饱和的任何乘法指令设置控制状态寄存器(CSR)中的SAT位。对于3循环指令,结果被写入到目的寄存器文件。
在执行4阶段1134(E4)期间,加载指令将数据带到中央处理单元核心110边界。对于4循环指令,结果被写入到目的寄存器文件。
在执行5阶段1135(E5)期间,加载指令将数据写入到寄存器中。在图11中示意性地说明此,其中来自存储器1151的输入执行5阶段1135。
图13说明由实例实施例使用的功能单元指令的指令编码1300的实例。其它指令编码是可行的且在实例实施例的范围内。每一指令由32个位构成且控制个别可控功能单元(L1单元221、S1单元222、M1单元223、N1单元224、D1单元225、D2单元226、L2单元241、S2单元242、M2单元243、N2单元244、C单元245及P单元246)的一者的操作。如下那样定义位字段。
creg字段1301(位29到31)及z位1302(位28)是用于条件指令中的任选字段。这些位用于条件指令以识别谓词寄存器及条件。z位1302(位28)指示谓词是否是基于谓词寄存器中的零或非零。如果z=1,那么测试等于零。如果z=0,那么测试是非零。creg=0且z=0的情况被视作一直是真以允许无条件指令执行。creg字段1301及z字段1302被编码于指令中,如表1中展示。
表1
条件指令的执行以存储于指定数据寄存器中的值为条件。此数据寄存器在所有功能单元的全局标量寄存器文件211中。注意:z位列中的“z”是指上文提到的零/非零比较选择,且“x”是不在意状态。此编码可仅将16个全局寄存器的子集指定为谓词寄存器。做出此选择以保存指令编码中的位。注意:无条件指令不具有这些任选位。对于无条件指令,字段1301及1302中的这些位(位28到31)优选地用作额外操作码位。
dst字段1303(位23到27)将对应寄存器文件中的寄存器指定为指令结果的目的地。
src2/cst字段1304(位18到22)取决于指令操作码字段(用于所有指令的位4到12及用于无条件指令的额外位28到31)具有若干含义。第一含义将对应寄存器文件的寄存器指定为第二操作数。第二含义是直接常数。取决于指令类型,此被视作扩展到指定数据长度的无符号整数及零或被视作扩展到指定数据长度的带符号整数及符号。
scr1字段1305(位13到17)将对应寄存器文件中的寄存器指定为第一源操作数。
用于所有指令的操作码字段1306(位4到12)(及用于无条件指令的额外位28到31)指定指令类型且标示适当指令选项。此包含使用的功能单元及执行的操作的明确标示。操作码的详细解释超出了此描述的范围,除了下文详述的指令选项外。
e位1307(位2)仅用于直接常数指令,其中常数可扩展。如果e=1,那么直接常数以下文详述的方式扩展。如果e=0,那么直接常数不扩展。在所述情况中,直接常数由src2/cst字段1304(位18到22)指定。注意:此e位1307用于仅一些指令。因此,在适当编码情况下,可从无需e位1307的指令省略此e位1307,且此位用作额外操作码位。
s位1307(位1)标示标量数据路径侧A 115或向量数据路径侧B 116。如果s=0,那么选择标量数据路径侧A 115。此将功能单元限于L1单元221、S1单元222、M1单元223、N1单元224、D1单元225及D2单元226及图2中说明的对应寄存器文件。类似地,s=1选择向量数据路径侧B 116,从而将功能单元限于L2单元241、S2单元242、M2单元243、N2单元244、P单元246及图2中说明的对应寄存器文件。
p位1308(位0)标记执行包。p位确定指令是否与下一指令并行执行。p位从较低地址扫描到较高地址。如果针对当前指令p=1,那么下一指令与当前指令并行执行。如果针对当前指令p=0,那么下一指令在当前指令之后的循环中执行。并行执行的所有指令构成执行包。执行包可含有高达十二个指令。执行包中的每一指令必须使用不同的功能单元。
存在两个不同的条件代码扩展槽。每一执行包可含有这些唯一32位条件代码扩展槽中的每一者,其含有用于相同执行包中的指令的4位creg/z字段。图14说明用于条件代码扩展槽0的编码,且图15说明用于条件代码扩展槽1的编码。
图14说明用于具有32个位的条件代码扩展槽0的编码。字段1401(位28到31)指定指派到相同执行包中的L1单元221指令的4个creg/z位。字段1402(位27到24)指定指派到相同执行包中的L2单元241指令的4个creg/z位。字段1403(位19到23)指定指派到相同执行包中的S1单元222指令的4个creg/z位。字段1404(位16到19)指定指派到相同执行包中的S2单元242指令的4个creg/z位。字段1405(位12到15)指定指派到相同执行包中的D1单元225指令的4个creg/z位。字段1406(位8到11)指定指派到相同执行包中的D2单元245指令的4个creg/z位。字段1407(位6及7)未使用/经保留。字段1408(位0到5)被编码为一组唯一位(CCEX0)以识别条件代码扩展槽0。一旦检测到条件代码扩展槽0的此唯一ID,就采用对应creg/z位控制相同执行包中的任何L1单元221、L2单元241、S1单元222、S2单元242、D1单元224及D2单元225指令的条件执行。如表1中展示那样解译这些creg/z位。如果对应指令是有条件的(包含creg/z位),那么条件代码扩展槽0中的对应位覆盖指令中的条件代码位。注意:没有执行包可具有针对特定执行单元的一个以上指令。没有指令的执行包可含有一个以上条件代码扩展槽0。因此,creg/z位到功能单元指令的映射是明确的。将creg/z位设置为等于“0000”使指令是无条件的。因此,适当编码的条件代码扩展槽0可使一些对应指令是有条件的且使一些对应指令是无条件的。
图15说明用于具有32个位的条件代码扩展槽1的编码。字段1501(位28到31)指定指派到相同执行包中的M1单元223指令的4个creg/z位。字段1502(位27到24)指定指派到相同执行包中的M2单元243指令的4个creg/z位。字段1503(位19到23)指定指派到相同执行包中的C单元245指令的4个creg/z位。字段1504(位16到19)指定指派到相同执行包中的N1单元224指令的4个creg/z位。字段1505(位12到15)指定指派到相同执行包中的N2单元244指令的4个creg/z位。字段1506(位5及11)未使用/经保留。字段1507(位0到5)被编码为一组唯一位(CCEX1)以识别条件代码扩展槽1。一旦检测到条件代码扩展槽1的此唯一ID,就采用对应creg/z位控制相同执行包中的任何M1单元223、M2单元243、C单元245、N1单元224及N2单元244指令的条件执行。如表1中展示那样解译这些creg/z位。如果对应指令是有条件的(包含creg/z位),那么条件代码扩展槽1中的对应位覆盖指令中的条件代码位。注意:没有执行包可具有针对特定执行单元的一个以上指令。没有指令的执行包可含有一个以上条件代码扩展槽1。因此,creg/z位到功能单元指令的映射是明确的。将creg/z位设置为等于“0000”使指令是无条件的。因此,适当编码的条件代码扩展槽1可使一些指令是有条件的且使一些指令是无条件的。
条件代码扩展槽0及条件代码扩展槽1两者都包含p位以如上文连同图13描述那样定义执行包是可行的。在优选实施例中,如图14及15中说明,代码扩展槽0及条件代码扩展槽1优选地始终使位0(p位)编码为1。因此,条件代码扩展槽0及条件代码扩展槽1两者都不可在执行包的最后指令槽中。
存在两个不同的常数扩展槽。每一执行包可含有这些唯一32位常数扩展槽中的每一者,其含有27个位作为高阶位与5位常数字段1305连接以形成32位常数。如上文在指令编码描述中提到,仅一些指令将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指令的一者的常数。常数扩展槽1类似于常数扩展槽0,除了位0到4被编码为一组唯一位(CSTX1)以识别常数扩展槽1。在优选实施例中,常数扩展槽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)、32个位(字W)或64个位(双字D)。
表2列举针对各种选项的符号扩展单元1703的操作。
表2
常数扩展槽0及常数扩展槽1两者都包含p位以如上文连同图13描述那样定义执行包是可行的。在优选实施例中,如在条件代码扩展槽的情况中,常数扩展槽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(用于标量数据路径侧A115功能单元的64个位及用于向量数据路径侧B 116功能单元的512个位)的进位输出。AND门1801还接收进位控制信号,下文将进一步解释此。AND门1801的输出被供应到操作数宽算术逻辑单元的位N+1的进位输入。AND门(例如AND门1801)被安置在可能数据边界处的每一对位之间。举例来说,对于8位数据,此AND门将在位7与8、位15与16、位23与24等之间。每一此AND门接收对应进位控制信号。如果数据大小是最小值,那么每一进位控制信号是0,从而有效地阻挡邻近位之间的进位传输。如果所选择的数据大小需要算术逻辑单元区段两者,那么对应进位控制信号是1。下文表3展示针对例如由可被分成8个位、16个位、32个位、64个位、128个位或256个位的区段的向量数据路径侧B 116功能单元使用的512位宽操作数的情况的实例进位控制信号。在表3中,较高32个位控制较高位(位128到511)进位且较低32个位控制较低位(位0到127)进位。无需控制最高有效位的进位输出,因此仅需要63个进位控制信号。
表3
实例实施例可操作是2的整次幂(2N)的数据大小。然而,此进位控制技术不限于2的整次幂。此技术可适用于其它数据大小及其它操作数宽度。
图19说明实例实施例的流引擎的概念图。图19说明单个流的过程。流引擎1900包含流地址生成器1901。流地址生成器1901循序地生成流的元素的地址且将这些元素地址供应到系统存储器1910。存储器1910调用存储在元素地址(数据元素)处的数据且将这些数据元素供应到数据先进先出(FIFO)存储器1902。数据FIFO 1902提供存储器1910与CPU 1920之间的缓冲。数据格式器1903从数据FIFO存储器1902接收数据元素且根据流定义提供数据格式化。下文将描述此过程。流引擎1900将经格式化数据元素从数据格式器1903供应到CPU1920。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说明向量中的通道分配的第一实例。向量2000被分成8个64位通道(8×64个位=512位向量长度)。通道0包含位0到63;通道1包含位64到125;通道2包含位128到191;通道3包含位192到255,通道4包含位256到319,通道5包含位320到383,通道6包含位384到447且通道7包含位448到511。
图21说明向量中的通道分配的第二实例。向量2100被分成16个32位通道(16×32个位=512位向量长度)。通道0包含位0到31;通道1包含位32到63;通道2包含位64到95;通道3包含位96到127;通道4包含位128到159;通道5包含位160到191;通道6包含位192到223;通道7包含位224到255;通道8包含位256到287;通道9占据位288到319;通道10包含位320到351;通道11包含位352到387;通道12包含位388到415;通道13包含位416到447;通道14包含位448到479;且通道15包含位480到511。
流引擎将最内流维度直接映射到向量通道。其将所述维度内的较早元素映射到较低通道数目且将较晚元素映射到较高通道数目。这是真的,无论此特定流是以递增还是以递减地址次序前进。无论流定义了什么次序,流引擎以递增通道次序将元素沉积于向量中。对于非复杂数据,其将第一元素放置于中央处理单元核心110提取的第一向量的通道0中,将第二元素放置于中央处理单元核心110提取的第一向量的通道1中,诸如此类。对于复杂数据,流引擎将第一元素放置于通道0及1中,将第二元素放置于通道2及3中,诸如此类。元素内的子元素留存相同相对排序,无论流方向为何。对于非交换的复杂元素,此将具有每一对较低地址的子元素放置于偶数通道中,且将具有每一对较高地址的子元素放置于奇数通道中。交换的复杂元素反转此映射。
流引擎用其可尽可能多的元素从最内流维度填充中央处理单元核心110提取的每一向量。如果最内维度并非向量长度的倍数,那么流引擎用零将所述维度填补成向量长度的倍数。因此,对于较高维度流,来自外维度的每一迭代的第一元素到达向量的通道0中。流引擎总是将最内维度映射到向量中的连续通道。对于经转置流,最内维度由沿维度1(并非维度0)的子元素群组构成,这是因为转置交换这两个维度。
与一维流相比,二维流展现极大变化。基本二维流从较大矩形提取较小矩形。经转置2-D流逐列(而非逐行)读取矩形。循环流,在第二维度与第一维度重叠的情况下,执行有限脉冲响应(FIR)滤波器抽头(其重复地循环)或FIR滤波器样本(其提供输入样本滑动窗)。
图22说明基本二维流。由ELEM_BYTES、ICNT0、DIM1及ICNT1表示的两个内维度给出足够的灵活性以描述从具有维度2211及2212的较大矩形2210提取具有维度2221及2222的较小矩形2220。在此实例中,矩形2220是64位值的9乘13矩形,且矩形2210是较大11乘19矩形。以下流参数定义此流:
ICNT0=9
ELEM_BYTES=8
ICNT1=13
DIM1=88(11乘8)
因此,0维度2221中的迭代计数是9。1方向2222上的迭代计数是13。注意:ELEM_BYTES仅按比例缩放最内维度。第一维度具有大小ELEM_BYTES的ICNT0元素。流地址生成器不会按比例缩放外维度。因此,DIM1=88,其是每元素按8个字节缩放的11个元素。
图23说明此实例流内的元素次序。流引擎以次序2300中说明的次序提取用于流的元素。前9个元素来自矩形2220的第一行,在跳跃1到8中从左到右。第10到第24个元素来自第二行,诸如此类。当流从第9个元素移动到第10个元素时(图23中的跳跃9),流引擎基于指针在内循环的起点处的位置计算新的位置,而非指针在第一维度末尾结束处的位置。此使DIM1独立于ELEM_BYTES及ICNT0。DIM1总是表示每一连续行的第一字节之间的距离。
经转置流沿着维度0之前的维度1存取。以下实例说明改变转置粒度的一对经转置流。图24说明从具有维度2411及2412的较大矩形2410(14×13)提取具有维度2421及2422的较小矩形2420(12×8)。在图24中,ELEM_BYTES等于2。
图25说明流引擎在4个字节的转置粒度下将如何提取此实例的流。提取模式2500从每一行提取元素对(因为粒度4是ELEM_BYTES 2的两倍),但另外向下移动列。一旦其到达一对列的底部,其就针对下一对列重复此模式。
图26说明流引擎在8个字节的转置粒度下将如何提取此实例的流。整体结构保持相同。流引擎在移动到列中的下一行之前从每一行提取4个元素(因为粒度8是ELEM_BYTES2的四倍),如提取模式2600中展示。
目前检查的流只从存储器读取每一元素一次。流可多次从存储器读取给定元素,实际上在存储器块内循环。FIR滤波器展现两个常见的循环模式。FIR针对每一输出重新读取相同滤波器抽头。FIR还从滑动窗读取输入样本。两个连续输出将需要来两个重叠窗的输入。
图27说明流引擎2700的细节。流引擎2700含有三个主要区段:流0 2710;流12720;及共享L2接口2730。流0 2710及流1 2720两者都含有并行操作的相同硬件。流0 2710及流1 2720两者都共享L2接口2730。每一流2710及2720每个循环向中央处理单元核心110提供高达512位/循环。流引擎架构使此能够通过其专用流路径及共享双L2接口。
每一流引擎2700包含专用4维流地址生成器2711/2721,其每循环可各自生成一个新的非对准请求。地址生成器2711/2721输出512位对准地址,其与由流参数定义的序列中的元素重叠。下文将进一步描述此。
每一地址生成器2711/2721连接到专用微表后备缓冲器(μTLB)2712/2722。μTLB2712/2722每一循环将单个48位虚拟地址转换成44位物理地址。每一μTLB 2712/2722具有8个条目,从而用4KB页面覆盖最小32kB或用2MB页面覆盖最大16MB。每一地址生成器2711/2721每循环生成2个地址。μTLB 2712/2722每循环仅转译1个地址。为了维持处理量,流引擎2700利用多数流参考将在相同4kB页面内的事实。因此,地址转译不会修改地址的位0到11。如果相同4kB页面中的aout0及aout1线(aout0[47:12]是相同aout1[47:12]),那么μTLB2712/2722仅转译aout0且针对两个地址的较高位重新使用转译。
使经转译地址在命令队列2713/2723中排队。这些地址与来自对应存储分配及跟踪块2714/2724的信息对准。流引擎2700不会明确管理μTLB 2712/2722。系统存储器管理单元(MMU)在上下文切换在必要时使μTLB期间无效。
存储分配及跟踪2714/2724管理流的内部存储,从而发现数据重新使用且跟踪每一数据块的寿命。下文将进一步描述此。
参考队列2715/2725存储由对应地址生成器2711/2721生成的参考序列。此信息驱动数据格式化网络使得其以正确的次序将数据呈现给中央处理单元核心110。参考队列2715/2725中的每一条目含有从数据存储读出数据且针对中央处理单元核心110对准其必要的信息。参考队列2715/2725将表5中列出的以下信息维持于每一槽中:
表5
数据槽低 与aout0相关联的数据的下半部分的槽数目
数据槽高 与aout1相关联的数据的上半部分的槽数目
旋转 旋转数据以对准下一元素与通道0的字节数目
长度 此参考中的有效字节数目
在地址生成器2711/2721生成新的地址时,存储分配及跟踪2714/2724将参考插入于参考队列2715/2725中。当数据变为可用且在保持寄存器的流中存在空间时,存储分配及跟踪2714/2724从参考队列2715/2725移除参考。随着存储分配及跟踪2714/2724从参考队列2715/2725移除槽参考及格式化数据,其检查所述参考是否表示对对应槽的最后参考。存储分配及跟踪2714/2724比较参考队列2715/2725移除指针与槽的经记录最后参考。如果其匹配,那么存储分配及跟踪2714/2724将槽标记为一旦用数据完成就不活动。
流引擎2700具有用于任意数目个元素的数据存储装置2716/2737。深缓冲允许流引擎远超前地在流中提取,从而隐藏存储器系统延时。适当量的缓冲可因产品生成的不同而不同。在当前优选实施例中,流引擎2700使32个槽专用于每一流。每一槽保持64个字节的数据。
蝴蝶网络2717/2727由7级蝴蝶网络构成。蝴蝶网络2717/2727接收128个字节的输入且生成64个字节的输出。蝴蝶的第一级实际上是半级。其从匹配非对准提取的两个槽收集字节且将其并入到单个旋转64字节阵列中。剩余6个级形成标准蝴蝶网络。蝴蝶网络2717/2727执行以下操作:将下一元素向下旋转到字节通道0;如有要求以2的幂为单元提升数据类型;交换复数的实部分量及虚部分量;如果中央处理单元核心110目前在大端模式中就将大端转换成小端。用户将元素大小、类型提升及实部/虚部交换指定为流的参数的部分。
流引擎2700尝试在中央处理单元核心110需要数据之前提取及格式化数据,使得其可维持完整处理量。保持寄存器2718/2728提供少量缓冲使得过程保持完全流水线化。保持寄存器2718/2728并非是架构直接可见的,除了流引擎2700提供完整处理量的事实外。
两个流2710/2720共享一对独立L2接口2730:L2接口A(IFA)2733与L2接口B(IFB)2734。每一L2接口将512个位/循环处理量直接提供到L2控制器以实现1024个位/循环的总带宽。L2接口使用基于信用的多核总线架构(MBA)协议。L2控制器向每一接口指派其自身的命令信用池。所述池应具有足够的信用使得每一接口可在读取L2RAM、L2高速缓冲存储器及多核共享存储器控制器(MSMC)RAM时发送足够的请求来实现完整读取返回带宽。
为了最大化性能,两个流都可使用L2接口两者,从而允许单个流发送2个请求/循环的峰值命令速率。每一接口优先选择一个流而非另一流,但此偏好根据请求的不同而动态地改变。IFA 2733及IFB 2734总是优先选择相反流,当IFA 2733优先选择流0时,IFB2734优先选择流1,且反之亦然。
每一接口2733/2734之前的仲裁器2731/2732对其具有可用信用的每个循环应用以下基本协议。仲裁器2731/2732检查优选流是否具有准备发送的命令。如果优选流具有准备发送的命令,仲裁器2731/2732选取所述命令。仲裁器2731/2732然后检查替代流是具有准备发送的至少两个请求,还是具有一个命令且不具有信用。如果是这样的话,仲裁器2731/2732从替代流提取命令。如果任一接口发出命令,那么优选及替代流的概念交换下一请求。使用此简单算法,两个接口尽可能快地分派请求同时留存两个流之间的公平性。第一规则确保每一流可在具有可用信用的每循环上发送请求。第二规则为一个流提供一机制以在第二接口是闲置时借用其它流的接口。第三规则跨两个接口扩展每一流的带宽需求,从而确保接口本身都不会变成瓶颈。
粗粒旋转器2735/2736使流引擎2700能够支持经转置矩阵寻址模式。在此模式中,流引擎2700互换其多维循环的两个最内维度。此逐列而非逐行存取阵列。旋转器2735/2736是架构不可见的,除了启用此经转置存取模式外。
流定义模板提供含有数据的流的完整结构。迭代计数及维度提供大多数结构,同时各种旗标提供细节的剩余者。针对所有含有数据的流,流引擎定义单个流模板。其支持的所有流类型都适合此模板。每一字段上方的数目指示256位向量内的字节数目。流引擎定义用于寻址流内的元素的四级循环嵌套。流模板中的大多数字段直接映射到所述算法中的参数。图28说明流模板寄存器2800。字段上方的数目是512位向量内的字节数目。表6展示流模板的流字段定义。
表6
在当前实例中,DIM0总是等于的是定义物理连续数据的ELEM_BYTES。流模板主要包含32位字段。流模板将ICNT3限于8个位且将FLAGS字段限于24个位。流引擎2700将所有迭代计数解译为无符号整数,且将所有维度解译为未缩放的带符号整数。上文模板完整地指定元素类型、流的长度及维度。流指令单独地指定起始地址。此通常是通过存储此起始地址的标量寄存器文件211中的标量寄存器指定。此允许程序使用相同模板打开多个流。
图29说明旗标字段2900的子字段定义。如图29中展示,旗标字段2900是3个字节或24个位。图29展示字段的位数目。表7展示这些字段的定义。
表7
元素类型(ELTYPE)字段2901定义流中的元素的数据类型。此字段的四个位的编码如图8中展示那样被定义。
表8
子元素大小确定用于类型提升目的的类型及向量通道宽度。举例来说,当流请求类型提升时,16位子元素提升到32位子元素。向量通道宽度在中央处理单元核心110在大端模式中操作时是重要的,这是因为其总是以小端次序布置向量。
总元素大小确定流的最小粒度。在流寻址模型中,其确定流针对最内循环的每一迭代提取的字节的数目。流总是以递增或递减次序读取整个元素。因此,流的最内维度横跨ICNT0×总元素大小个字节。
实数-复数类型确定流引擎是将每一元素视作复数的实数还是两个部分(实部/虚部或量值/角度)。此字段还指定是否交换复数的两个部分。复数类型具有是其子元素大小两倍的总元素大小。另外,子元素大小等于总元素大小。
DIR位2902确定内循环(Loop0)的提取方向。如果DIR位2902是0,那么Loop0提取是朝向递增地址的前向方向。内循环(Loop0)。如果DIR位2902是1,那么Loop0提取是朝向递减地址的后向方向。
TRANSPOSE字段2903确定流引擎是否以经转置次序存取流。经转置次序交换两个内寻址级。TRANSPOSE字段还指示其转置流的粒度。此字段的四个位的编码如图9中展示那样被定义。
表9
流引擎2700实际上以不同于元素大小的粒度转置。此允许程序从每一行提取多个列的元素。转置粒度必须不小于元素大小。
PROMOTE字段2904控制流引擎是否提升流中的子元素及提升类型。当启用时,流引擎2700通过单个2次幂大小来提升类型。此字段的两个位的编码如图10中展示那样被定义。
表10
PROMOTE 描述
00 无提升
01 无符号整数提升,零扩展
10 有符号整数提升,符号扩展
11 浮点提升
当流指定无提升时,每一子元素占据宽度等于由ELTYPE指定的大小的向量通道。另外,每一子元素占据两倍大的向量通道。当PROMOTE是00时,流引擎从存储器提取一半左右的数据以满足相同数目个流提取。
提升模式01b及10b将传入子元素分别视作无符号及带符号整数。对于无符号整数,流引擎通过用零填充新的位来提升。对于带符号整数,流引擎通过用符号位的副本填充新的位来提升。带符号的正整数具有等于0的最高有效位。关于带符号的正整数的提升,新的位填充零。带符号的负整数具有等于1的最高有效位。关于带符号的负整数的提升,新的位填充1。
提升模式11b将传入子元素视作浮点数。浮点提升将每一子元素视作浮点类型。流引擎支持两种浮点提升:短浮点(16位)到单精度浮点(32位);单精度浮点(32位)到双精度浮点(64位)。
THROTTLE字段2905控制流引擎在中央处理单元核心110之前提取的积极程度。此字段的两个位的编码如图11中展示那样被定义。
表11
THROTTLE 描述
00 最小节流,最大提前提取
01 较少节流,较多提前提取
10 较多节流,较少提前提取
11 最大节流,最小提前提取
THROTTLE不会改变流的意义,且仅用作暗示。流引擎可忽略此字段。程序不应依赖于程序正确性的指定节流行为,因为架构不会指定精确节流阀行为。THROTTLE允许程序员向硬件提供关于程序自身的行为的暗示。默认情况下,流引擎尝试尽可能远离中央处理单元核心110以尽可能多地隐藏延时,同时向中央处理单元核心110提供完整流处理量。虽然若干关键应用需要此级别的处理量,但其可导致其它者的系统级行为不良。举例来说,流引擎丢弃跨上下文切换的所有提取数据。因此,积极的提前提取可导致具有大量上下文切换的系统中的带宽浪费。如果中央处理单元核心110非常快速地消耗数据,那么积极的提前提取仅在那些系统中有意义。
中央处理单元核心110通过少量指令及专门寄存器将流引擎暴露到程序。STROPEN指令打开流。STROPEN命令指定指示打开流0或流1的流数目。STROPEN指定存储流模板的流模板寄存器,如上文描述。STROPEN指令的论证在表12中列出。
表12
论证 描述
流起始地址寄存器 存储流起始地址的标量寄存器
流数目 流0或流1
流模板寄存器 存储流模板数据的向量寄存器
流起始地址寄存器优选地是通用标量寄存器文件211中的标量寄存器。STROPEN指令通过其操作码指定流0或流1。流模板寄存器优选地是通用向量寄存器文件221中的向量寄存器。如果指定流是活动的,那么STROPEN指令关闭现有流且以指定流取代所述流。
STRCLOSE指令关闭流。STRCLOSE命令指定将关闭的流的流数目。
STRSAVE指令捕获指定流的足够状态信息以将来重新启动所述流。STRRSTR指令重新存储先前保存的流。STRSAVE指令不保存流的数据中的任何者。STRSAVE指令仅保存元数据。所述流响应于STRRSTR指令重新提取数据。
流引擎在三种状态的一者中:非活动;活动或冻结。当非活动时,流引擎什么都不做。从非活动流引擎提取数据的任何尝试都是错误。直到程序打开流,流引擎都是非活动的。在程序消耗流中的所有元素或程序关闭流之后,流引擎也变为非活动。使用流的程序明确地激活流引擎及或使流引擎不活动。操作环境经由流引擎的隐式冻结行为并结合其自身显式保存及重新存储行为管理跨上下文切换边界的流。
活动流引擎具有与其相关联的流。程序可从活动流引擎提取新的流元素。流引擎保持活动直到以下一者。当流从流提取最后元素时,其变成非活动。当程序明确地关闭流时,其变成非活动。当中央处理单元核心110响应于中断或异常时,流引擎冻结。冻结的流引擎捕获流引擎冻结时恢复流所需的所有状态。流引擎响应于中断及异常冻结。此与特殊指令组合以保存及重新存储冻结流上下文,使得操作环境可利索地切换上下文。当中央处理单元核心110返回到中断上下文时,冻结流重新激活。
图30是说明上文描述的流输入操作数编码的部分示意图3000。图30说明解码功能单元3020的对应src1输入的一个指令的src1字段1305。对于功能单元3020的src2/cst字段1304及src2输入,复制这些相同电路。另外,对于可同时指派的执行包内的每一指令,复制这些电路。
指令解码器113接收包括指令的src1字段1305的位13到17。操作码字段(用于所有指令的位4到12及用于无条件指令的额外位28到31)明确地指定对应功能单元3020。在此实施例中,功能单元3020可为L2单元241、S2单元242、M2单元243、N2单元244或C单元245。图30中说明的指令解码器113的相关部分解码src1位字段1305。子解码器3011确定src1位字段1305是否在从00000到01111的范围内。如果是这样的话,子解码器3011就将对应寄存器数目供应到全局向量寄存器文件231。在此实例中,此寄存器字段是src1位字段1305的四个最低有效位。全局向量寄存器文件231调用存储于对应于此寄存器数目的寄存器中的数据且将此数据供应到功能单元3020的src1输入。此解码通常是已知的。
子解码器3012确定src1位字段1305是否在从10000到10111的范围内。如果是这样的话,子解码器3012就将对应寄存器数目供应到对应局部向量寄存器文件。如果指令被引导到L2单元241或S2单元242,对应局部向量寄存器文件就是局部向量寄存器字段232。如果指令被引导到M2单元243、N2单元244或C单元245,对应局部向量寄存器文件就是局部向量寄存器字段233。在此实例中,此寄存器字段是src1位字段1305的三个最低有效位。局部向量寄存器文件231调用存储于对应于此寄存器数目的寄存器中的数据且将此数据供应到功能单元3020的src1输入。对应局部向量寄存器文件232/233调用存储于对应于此寄存器数目的寄存器中的数据且将此数据供应到功能单元3020的src1输入。此解码通常是已知的。
子解码器3013确定src1位字段1305是否是11100。如果是这样的话,子解码器3013就将流0读取信号供应到流引擎2700。接着,流引擎2700将存储于保持寄存器2718中的流0数据供应到功能单元3020的src1输入。
子解码器3014确定src1位字段1305是否是11101。如果是这样的话,子解码器3014就将流0读取信号供应到流引擎2700。接着,流引擎2700将存储于保持寄存器2718中的流0数据供应到功能单元3020的src1输入。子解码器3014还将前进信号供应到流0。如先前描述,流引擎2700前进以将流0的下一循序数据元素存储于保持寄存器2718中。
子解码器3015确定src1位字段1305是否是11110。如果是这样的话,子解码器3015就将流1读取信号供应到流引擎2700。接着,流引擎2700将存储于保持寄存器2728中的流1数据供应到功能单元3020的src1输入。
子解码器3016确定src1位字段1305是否是11111。如果是这样的话,子解码器3016就将流1读取信号供应到流引擎2700。接着,流引擎2700将存储于保持寄存器2728中的流1数据供应到功能单元3020的src1输入。子解码器3014还将前进信号供应到流1。如先前描述,流引擎2700前进以将流2的下一循序数据元素存储于保持寄存器2728中。
类似电路用于响应于src2/cst字段1304的位编码选择供应到功能单元3002的scr2输入的数据。可以上文描述的方式向功能单元3020的src2输入供应常数输入。
专用于操作数规范的指令位的确切数目及数据寄存器及流的数目是设计选择。其它数目选择是可行的。举例来说,单个全局向量寄存器文件的规范及局部向量寄存器文件的省略是可行的。实例实施例采用输入操作数选择字段的位编码标示流读取且采用另一位编码标示流读取且使流前进。
图31是说明支持流0的提取流数据的高速缓冲存储器存储的分量的部分框图。流1的分量是类似的。数据存储装置2716从概念上讲是数据先进先出(FIFO)缓冲器。在优选实施例中,此FIFO以下文所详述的高速缓冲存储器方式实施。
早期地址生成器3101生成存储器提取的地址。后期地址生成器3102生成将加载到流头寄存器2718中的下一个元素的地址。流数据存储装置2716在其从存储器提取与供应到中央处理单元110的功能单元之间缓冲流数据。控制关于存储于参考队列2515中的数据的数据移动。
图32说明用于流数据存储装置2716中的多个高速缓冲存储器线的细节。高速缓冲存储器结构3200包含表示内部结构的高速缓冲存储器线3210、3220及3230。高速缓冲存储器线3210、3220及3230包含:地址标签3211;有效位3212;就绪位3213;动作位3214、最近使用(LRU)的指示符3215;奇偶位3216;及多个数据字3217。数据字3217的位长度由中央处理单元核心110的最小可寻址数据量设置。此通常是8个位/1字节。
高速缓冲存储器结构3200存储来自通过多位地址存取的更远存储器的数据。高速缓冲存储器结构3200经组织以促进此存储且促进在高速缓冲存储器中找到此数据。每一高速缓冲存储器线3210、3220及3230通常存储2N相应数据字3216,其中N是整数。地址标签3211包含对应高速缓冲存储器线3210、3220及3230的最高有效地址位。数据字3216在沿着维度3201的对应高速缓冲存储器线3210、3220及3230内的位置用作对应地址的最低有效位的代理。
为了确定存储器存取是否是高速缓冲存储于高速缓冲存储器结构3200内的数据(高速缓冲存储器命中),高速缓冲存储器结构3200比较所有高速缓冲存储器线的地址标签3211与所存取的存储器位置的最高有效位。在检测到匹配之后,沿维度3201的高速缓冲存储器线内的位置对应于准许识别所存取的数据字的地址的最低有效位。
表13列出有效、就绪、活动及最后参考字段的字符。
表13
有效 单个位指示标签地址是否有效
就绪 单个位指示数据已到达此地址
活动 单个位指示是否存在对此数据来说优秀的任何参考
最后参考 值指示对参考队列中的此槽的最近参考
每一高速缓冲存储器线3210、3220及3230包含对应有效位3212。有效位3212的第一状态指示所述高速缓冲存储器线的对应数据字3216是有效的。此有效位的相反状态指示对应数据字3216不是有效的。存在其中存储于高速缓冲存储器结构3200内的数据将不是有效的若干例子。在数字信号处理器系统100初始激活之后,高速缓冲存储器结构3200将不被加载。因此,高速缓冲存储器结构3200将不存储有效数据。因此,所有高速缓冲存储器线最初被标记为无效。在高速缓冲存储器存起期间,所请求的地址与地址标签3211的比较将不会检测到匹配,除非对应有效位3212指示数据是有效的。
每一高速缓冲存储器线3210、3220及3230包含对应就绪位3213。就绪位3213的第一状态指示对应高速缓冲存储器线的数据都未到达。就绪位3213的第二状态指示此高速缓冲存储器线的提取数据已到达。
每一高速缓冲存储器线3210、3220及3230包含对应动作位3214。活动位3214的第一状态指示对对应高速缓冲存储器线的数据的参考都不是待决的。活动位3214的第二状态指示对此高速缓冲存储器线的数据的参考都不是待决的。
每一高速缓冲存储器线3210、3220及3230包含对应最后参考字段3215。最后参考字段3215通常是多个位。最后参考字段3215指示对参考队列中的此槽的最近参考。如下文在进一步细节中描述,此信息用于高速缓冲存储器线的分配。
高速缓冲存储器结构3200不包含对应脏位。根据数据流的结构,存储于高速缓冲存储器结构3200中的数据无法不被改变。高速缓冲存储器结构3200仅用于读取存取。存储于高速缓冲存储器结构3200内的数据因此从不是脏的。因此,无需脏位。
表14详述有效、就绪及活动位的交互。
表14
使用此元数据,存储分配及跟踪2714/2724可识别流中的数据重新使用机会。存储分配及跟踪2714/2724对每一地址执行以下步骤。其比较地址与其标签阵列中的相关标签。当命中时,其取消与此地址相关联的命令。当未命中时,其分配自由槽,从而设置有效=1、就绪=0,且更新外送命令以将其正提取的数据引导到此槽。在任一情况中,槽数目与地址相关联。存储分配及跟踪2714/2724将参考插入于参考队列中。存储分配及跟踪2714/2724设置活动=1且将最后参考更新到参考队列中的参考的位置。此是插入时参考队列的插入指针的值。此过程将生成的地址转换成表示数据的槽数目。从此之后,流引擎无需直接跟踪地址。
为了最大化重新使用及最小化暂停,流引擎2700以以下次序分配槽:如果可用,以FIFO次序,最近分配之后的一个槽;最低可用槽数(如果存在的话);且如果无可用的槽,暂停且迭代这两个步骤直到分配成功。此将趋向于以FIFO次序分配槽,但如果特定重新使用模式违背所述次序那么避免暂停。
图33说明早期地址生成器3101的部分示意图。早期地址生成器3102形成用于提取对应流引擎的定义流中的下一元素的地址。起始地址寄存器3201存储数据流的起始地址。如先前描述,起始地址寄存器3301优选地是由打开对应流的STROPEN指令标示的全局标量寄存器文件211中的标量寄存器。此起始地址可从指定标量寄存器复制且被本地存储在对应地址生成器2711或2721处。流的第一循环采用Loop0计数寄存器3311、加法器3312、乘法器3313及比较器3314。Loop0计数寄存器3311存储第一循环(Loop0)的迭代计数的工作副本。对于Loop0加法器3312的每一迭代,如由下一地址信号触发,加1到循环计数,其被存储回到Loop0计数寄存器3311中。乘法器3313乘当前循环计数及数量ELEM_BYTES。ELEM_BYTES是以字节的循环中的每一数据元素的大小。Loop0以ELEM_BYTES的迭代步长遍历存储器中的物理上连续的数据元素。
比较器3314比较存储于Loop0计数寄存器3311中(在由加法器3313递增之后)的计数与来自对应流模板寄存器2800的ICNT0 2810的值。当加法器3312的输出等于流模板寄存器2800的ICNT0 2810的值时,Loop0的迭代完成。比较器3314生成有效Loop0结束信号。Loop0计数寄存器3311复位到0,且次高循环(在此情况中是Loop1)的迭代被触发。
较高循环(Loop1、Loop2、Loop3)的电路类似于图33中说明的电路。每一循环包含对应工作循环计数寄存器、加法器、乘法器及比较器。每一循环的加法器由先验循环的循环结束信号触发。到每一乘法器的第二输入是对应流模板的对应维度DIM1、DIM2及DIM3。每一循环的比较器比较工作循环寄存器计数与对应流模板寄存器2800的对应迭代值ICNT1、ICNT2及ICNT3。循环结束信号生成次高循环的迭代。来自loop3的循环结束信号结束流。
图33说明早期loop0计数的生成。早期loop0计数等于存储于对应工作计数寄存器3311中的经更新数据。早期loop0计数基于工作loop0计数寄存器3311的每一变化更新。较高循环(Loop1、Loop2、Loop3)的早期循环计数类似地生成。
图33说明早期loop0地址的生成。早期loop0地址等于从乘法器3313输出的数据。早期loop0地址基于工作loop0计数寄存器3311的每一变化更新。Loop1、Loop2及Loop3的类似电路产生对应早期循环地址。
图34A及34B一起是说明采用早期地址生成器3101的流的数据提取方式的流程图3400。流程图3400以入口点A开始到测试块3401。测试块3401确定是否需要来自存储器的下一提取。下文详述确定此的优选方式。如果测试块3201确定无需存储器提取(测试块3201处的否),那么流循环回到测试块3401以进行另一确定。流保持在测试块3401直到需要存储器提取(测试块3401处的是)。
当需要存储器提取时(测试块3401处的是),块3402执行标签比较。比较下一提取地址的最高有效位与流数据存储装置2716中的高速缓冲存储器线中的每一者的地址标签3211。如先前描述,除非对应有效位3212指示有效,否则不确认匹配。
测试块3403确定块3402的地址比较是否发现匹配(命中)。如果测试块3403确定匹配(命中)(测试块3402处的是),那么流前进到块3404。块3404使当前提取地址与生成命中的高速缓冲存储器线/槽数相关联。在命中之后,当前提取地址的流数据已经被存储在流数据存储装置2717中。块3405更新参考队列。对应参考队列2715或2725存储指示数据在高速缓冲存储器内的位置的数据。如先前描述,存储于参考队列中的此数据准许调用对应头寄存器2718/2728中的向量且与所述向量对准。
块3406在流中生成下一地址。此将通常是loop0中的下一元素。然而,当前流元素可能是嵌套循环中的一者的结束。下一地址根据指定流数据模式以先前描述的方式生成。流经由入口点A返回到测试块3401。
在未命中情况中(测试块3403处的否),对应于当前提取地址的数据未被存储于对应流数据存储装置2616或2726中。过程3400尝试将新的高速缓冲存储器线分配到当前提取地址。测试块3407确定高速缓冲存储器线是否可用于分配。如下文将描述,未使用的高速缓冲存储器线可能不能用于分配。一旦分配,高速缓冲存储器线就仅通过消耗存储于所述高速缓冲存储器线中的所有流数据经由来自对应头寄存器2718/2728的中央处理单元核心110读取解除分配。由于数据流的性质,先前分配的所有高速缓冲存储器线存储将由中央处理单元核心110使用的对应于当前提取数据的数据之前的数据。因此,高速缓冲存储器线不会被逐出,这是因为其存储所需的当前数据之前的数据。因此,高速缓冲存储器线不会被分配直到存储于所述高速缓冲存储器线中的所有流数据都被中央处理单元核心110消耗。如下文详述,此数据消耗是必要的但非将重新分配的高速缓冲存储器线的充分条件。如果高速缓冲存储器线不可用于分配(测试块3407处的否),块3408在一个存储器循环内暂停流。过程保持在此循环中直到至少一个高速缓冲存储器线可用于分配(测试块3407处的是)。
如果至少一个高速缓冲存储器线可用于分配(测试块3407处的是),那么测试块3409确定最后使用的高速缓冲存储器线之后的高速缓冲存储器线是否可用于分配。如果此高速缓冲存储器线可用于分配(测试块3409处的是),那么块3410分配此高速缓冲存储器线。如果此高速缓冲存储器线不可用于分配(测试块3409处的否),那么块3411分配可用的最低高速缓冲存储器线。优选分配模式是以先进先出(FIFO)次序。因此,分配的优选高速缓冲存储器线是最后使用的高速缓冲存储器线之后的高速缓冲存储器线。因此,有效数据将趋向于在高速缓冲存储器线内旋转,其中分配是在被中央处理单元核心110消耗之后。此分配模式趋向于以FIFO次序分配槽。如果特定数据重新使用模式违背此FIFO次序,上文描述的分配模式(如果最后使用的高速缓冲存储器线之后的高速缓冲存储器线不可用,就分配可用的最低高速缓冲存储器线)避免暂停。
在分配当前提取地址的高速缓冲存储器线之后,流就前进到块3412。块3412将刚分配的高速缓冲存储器线的有效位设置为1,将就绪位设置为0且将活动位设置为1。此指示刚分配的高速缓冲存储器线是有效的,未就绪,且数据正飞行到高速缓冲存储器线。下一块3413对刚分配的高速缓冲存储器线请求高速缓冲存储器服务。在优选实施例中,流数据绕过L1D高速缓冲存储器123且直接从L2高速缓冲存储器130请求数据。此设计选择防止流数据干扰由中央处理单元核心110使用的其它数据。
测试块3414等待数据返回到流数据存储装置2716。数据的返回延迟是未知且可变的。此最新提取的数据可被存储于L2高速缓冲存储器130中且为快速可用的。此数据可能不被存储于L2高速缓冲存储器130中且因此必须从另一级别的存储器提取。此另一级别的存储器可在数个请求程序之间共享。在此事件中,存取的请求程序之间通常存在仲裁。因此,存储器延时既是未知也是可变的。
在返回所请求数据(测试块3414处的是)之后,块3415将此数据存储于分配的高速缓冲存储器线中。块3416将对应就绪位变位1,从而指示数据准备好消耗。
过程流前进到块3404。块3404使当前提取地址与生成命中的高速缓冲存储器线/槽数相关联。块3405更新参考队列。对应参考队列2715或2725存储指示数据在高速缓冲存储器内的位置的数据。块3406在流中生成下一地址。流经由入口点A返回到测试块3401。
图35类似于图33,其说明生成最近Loop0计数及最近Loop0地址的实例电路。流的第一循环采用Loop0计数寄存器3511、加法器3512、乘法器3513及比较器3514。乘法器3513具有接收ELEM_BYTES的第二输入。在图35中,每一迭代由流前进信号触发。因此,最近计数电路的计数值及最近地址的地址值反映将供应到功能单元的下一数据。此将是存储于对应头寄存器2218/2228中的流元素。循环Loop1、Loop2及Loop3的电路是类似的,除了到对应乘法器的第二输入是对应流模板的对应维度DIM1、DIM2及DIM3。循环结束信号生成次高循环的迭代。
如描述,每一流引擎保持循环计数及循环地址的两个副本:早期副本,指示流引擎当前正在何处提取;及最近副本,其指示中央处理单元核心110提交的最近迭代。在多数情况中,最近副本给出程序的当前状态的最清楚指示。早期副本仅指示流引擎在中央处理单元核心110之前提取的程度。早期副本与最近副本之间的差异反映存储于数据存储装置2217/2237中的流数据量。计数数据及地址数据是相关的。任何特定实施例可包含仅计数数据、仅地址数据或两者。
任何计数,例如图33及35中说明,可经体现为向下计数或向上计数。图33及35说明向上计数实施例。初始化及比较可修改以在向下计数电路中体现描述的这些技术。此外,比较可修改以体现所描述的寻址模式。
图36是说明将采用最近地址生成器3102填充流头寄存器的方式的流程图3600。流程图3600以测试块3601开始。测试块3601确定是否将数据流的下一数据元素加载到对应流头寄存器中。如先前描述,在优选实施例中,流数据保持在流头寄存器中,其中流数据可被多个功能单元多次提取,直到流引擎遇到读取及前进操作数编码。在检测到读取及前进操作数编码之后,流引擎就将头寄存器中的当前数据供应到请求功能单元且以数据流中的下一循序数据取代流头寄存器中的数据。如先前提到,流引擎可取决于指定流数据大小与向量大小的关系用一个以上流数据元素填充头寄存器。如果不取代流头寄存器数据(测试块3601处的否),那么控制循环回到测试块3601以进行另一确定。流保持在测试块3601直到需要取代存储于头寄存器中的数据(测试块3601处的是)。
当需要取代头寄存器时(测试块3601处的是),块3602就获得用于下一头寄存器填充的数据地址。在优选实施例中,经由对应参考队列2715/2725进行此确定。测试块3603确定此刚存取的高速缓冲存储器线是否有效。如果高速缓冲存储器线有效(测试块3603处的是),那么块3604将数据调用到临时缓冲器。如果高速缓冲存储器线无效(测试块3603处的否),那么块3605零填充临时缓冲器。
在任一情况中,块3606旋转且格式化数据。上文已描述此过程。数据旋转对准头寄存器中的适当槽中的流的数据元素。数据格式化包含多个子元素交换、数据提升、转置及复制,如先前描述。在旋转及格式化之后,块3607将数据存储于向量槽中的对应头寄存器2718/2728中,如先前描述。
图37说明标示为SEn_ICNT 3700的扩展控制寄存器(ECR)的实例位指派。根据优选实施例,流引擎2700包含两个此ECR:流0的SE0_INCT及流1的SE1_INCT。每一SEn_ICNT存储每一打开流的对应流模板中定义的循环的早期及最近循环计数。SEn_ICNT 3700允许程序员在调试程序时确定流引擎是否在给定流内。在优选实施例中,SEn_ICNT 3700仅可由调试程序存取。存取SEn_ICNT 3700的任何其它尝试生成权限错误。SEn_ICNT 3700包含早期loop0计数3701、早期loop1计数3702、早期loop2计数3703、早期loop3计数3704、最近loop0计数3705、最近loop1计数3706、最近loop2计数3707及最近loop3计数3708。每一计数值字段具有至少与对应流模板寄存器的对应迭代计数的位宽度一样大的位宽度。相应早期及最近计数类似,但在不同时间更新,下文将进一步描述此。
图38说明标示为SEn_ADDR 3800的ECR的实例位指派。根据优选实施例,流引擎2700包含两个此ECR:流0的SE0_ADDR及流1的SE1_ADDR。每一SEn_ADDR存储每一打开流的对应流模板中定义的循环的早期及最近循环地址。SEn_ADDR 3800允许程序员在调试程序时确定流引擎在给定流内的何处。在优选实施例中,SEn_ADDR 3800仅可由调试程序存取。存取SEn_ADDR 3800的任何其它尝试生成权限错误。SEn_ADDR 3800包含早期loop0地址3801、早期loop1地址3802、早期loop2地址3803、早期loop3地址3804、最近loop0地址3805、最近loop1地址3806、最近loop2地址3807及最近loop3地址3808。每一地址字段具有至少与处理器100的地址的位宽度一样大的位宽度。相应早期及最近地址是类似的,但在不同时间更新,下文将进一步描述此。
流引擎2700报告包含以下的一系列错误:编程错误;存储器转译错误;在存储装置阵列中检测到的位错误;由系统报告的总线错误及功能故障。流引擎同步报告错误,与程序执行对准。
流引擎2700通过用指示错误的旗标标记来自流引擎的数据同步报告错误。当且仅当程序尝试消耗此经标记数据,所述数据触发内部中央处理单元核心110异常事件。尝试消耗标记为错误的数据的任何指令生成中央处理单元核心110内部异常事件。由流引擎2700辨识的错误与经历异常的指令之间的关系不取决于暂停时序。
当流引擎2700检测到要报告的错误时,其标记内部存储装置2716/2726中受影响的数据。并行地,流引擎2700报告一对对应扩展控制寄存器(错误地址寄存器SEn_FAR与错误源寄存器SEn_FSR)中的错误的细节。每一流具有一组其自身的扩展控制寄存器SEn_FAR与SEn_FSR。扩展控制寄存器SEO_FAR及SEO_FSR存储流0的数据,且扩展控制寄存器SE1_FAR及SE1_FSR存储流1的数据。取决于错误,流引擎2700还可停用流的另一请求生成。在优选实施例中,错误地址寄存器SEn_FAR及错误源寄存器SEn_FSR仅可由调试程序存取。
流引擎2700记录触发对应扩展控制寄存器SEn_FAR中的错误的虚拟地址。在图39中说明实例SEn_FAR寄存器3900。在当前实施例中,每一SEn_FAR寄存器是64个位。第一字段3901存储生成错误的流引擎提取的虚拟地址。在优选实施例中,此虚拟地址是49个位(位0到40)。SEn_FAR寄存器的剩余位(第二字段3902)被保留且未用于当前实例中。如果实施例的虚拟地址超过49个位,那么就使用这些位。
流引擎270将错误状态记录在对应寄存器SEn_FSR中。在图40中说明实例SEn_FSR寄存器4000。在当前实施例中,每一SEn_FSR寄存器是64个位。第一字段4001存储遭遇错误的细节。第二字段4002(SEn_FSR寄存器4000的剩余位)被保留且未用于当前实例实施例中。表15展示SEn_FSR寄存器4000中的细节字段4001的编码。
表15
如表15中展示,如果不存在错误,那么位12(位字段4001的最高有效位)是0,且如果存在错误,那么位12是1位字段4001的一组编码被搁置以指示存储器管理单元错误。存储器管理单元错误包含存储器转译错误,例如:缺乏权限;缺乏呈现的虚拟地址的有效转译条目;及在转译期间遭遇的实际物理错误。位字段4001的第二组编码被搁置以指示2级高速缓冲存储器错误。其它编码指示流引擎错误。
“1000000000001”的编码指示流引擎内部存储数据错误。此指示对应数据存储装置2716/2726具有错误。在优选实施例中,奇偶位用数据位存储。在使用之后,从所述数据计算新的奇偶性且比较所述奇偶性与所存储的奇偶性。新的奇偶性与所存储的奇偶性之间的差异指示内部存储错误。
“1000000000010”的编码指示流引擎流模板错误。在打开流之后,中央处理单元核心110指示存储数据流的参数的流模板寄存器。流模板寄存器(图28及29)的一些可行数据编码产生不被此优选实施例支持的选项组合。这些包含:提升之后的元素大小、及元素复制超过向量长度;在提升之后转置颗粒大小、元素复制及抽取超过向量长度;经转置流的无效维度或地址对准;当提升被停用时启用抽取;经转置流的迭代计数超出范围;用于任何字段中的经保留编码;及任何经保留字段中的非零值。后面的两个错误是不正确地指定的模板的指示。
“1000000000011”的编码指示流引擎活动不匹配。当中央处理单元核心110尝试与当前流状态(不活动、活动、冻结)不一致的操作时,将发生此。
“1000000000100”的编码指示在流是不活动时中央处理单元核心110虚假读取。不能读取不活动流。读取不活动流的尝试生成此错误。
“1000000000101”的编码指示地址位48翻转。认为虚拟地址具有49个位,其通常被存储于64位标量寄存器中。中央处理单元核心110符号将49位虚拟地址扩展到64个位以进行存储。因此,不准许虚拟地址的位49(符号位)的变化。切换虚拟地址的位49的任何流数据提取操作生成此错误。
“1000000000110”的编码指示2级高速缓冲存储器碎片数据返回。导致碎片数据从经组合2级高速缓冲存储器130返回的流数据提取生成此错误。
“1000000000111”的编码被保留且未使用。
一旦检测到这些流引擎错误的任何者,流引擎尝试将生成错误的数据提取的虚拟地址存储于SEn_FAR中且将对应错误代码存储于SEn_FSR中,如上文详述。流引擎并不总是能够使地址与每个错误相关联。在优选实施例中,在这些环境中,流引擎不能够报告错误地址:当激活冻结流(坏的STRRSTR)时的无效流状态;经转置流期间的数据存储装置阵列中的位错误;由系统在经转置流期间报告的总线错误。在那些环境中,流引擎将把SEn_FAR清零。因为流引擎可并行生成多个地址以满足去往中央处理单元核心的单个数据阶段,所以流引擎选择那些地址的一者以报告两个地址是否都经历错误。流引擎在这些并行地址之中不定义架构次序;相反,流引擎选取以在两个错误并行发生时报告错误的地址是实施方案定义的。
在发生了这些错误之后,流引擎不会立即触发到中央处理单元核心的错误。当数据被中央处理单元核心110消耗时,错误状态与受影响的数据一起流过流引擎数据存储装置2716/2726。当且仅当程序实际上消耗数据时,中央处理单元核心110触发内部异常事件。由于中央处理单元核心110的流水线性质,在流引擎检测到错误的时间与中央处理单元核心110发生异常的时间之间许多循环可通过。如果程序从未消耗受影响的数据,那么中央处理单元核心110将从不生成异常事件。举例来说,如果程序用无效模板打开流,且接着在不从其读取任何数据的情况下关闭此流,那么流引擎将不会导致中央处理单元核心110发生异常。此行为将流引擎提取视作推测的直到在中央处理单元核心110上运行的程序实际上消耗数据。如果错误是可恢复的,例如页面错误,那么当中央处理单元核心110从异常事件处理程序返回时,流将在触发异常的数据项的点处恢复。
图41说明实例实施例的错误检测及校正。图1及27中说明的部分被给定相同参考数字。图41说明中央处理单元核心110、一级指令高速缓冲存储器(L1I)121、一级数据高速缓冲存储器(L1D)123与二级组合指令/数据高速缓冲存储器(L2)130之间的连接。
图41说明包含L1I高速缓冲存储器121及错误校正硬件的程序存储器控制器(PMC)4110。L1I高速缓冲存储器121经由2×256位校正单元4141及16×32位奇偶性生成器4142从L2 SRAM/高速缓冲存储器130接收数据。在将指令供应到中央处理单元核心110时,比较存储于L1I高速缓冲存储器121中的奇偶位与来自16×32位奇偶性检测器4111的最近计算的奇偶位。如果其匹配,那么指令经由多路复用器4112被供应到中央处理单元核心110。如果其不匹配,那么指令从L2 SRAM/高速缓冲存储器130调用,接着再次经受奇偶性测试。在高速缓冲未命中于L1I高速缓冲存储器121中时,L2 SRAM/高速缓冲存储器经由2×256位校正单元4141及16×32位奇偶性生成器4142将所请求的指令供应到L1I高速缓冲存储器121且并行地经由多路复用器4122直接供应指令。
图41说明包含L1D高速缓冲存储器123及错误校正硬件的数据存储器控制器(DMC)4020。L1D高速缓冲存储器123经由2×256位校正单元4121及16×32位奇偶性生成器4122从L2 SRAM/高速缓冲存储器接收数据。在将数据供应到中央处理单元核心110时,比较存储于L1D高速缓冲存储器123中的奇偶位与来自16×32位奇偶性检测器4123的最近计算的奇偶位。如果其匹配,那么数据经由多路复用器4124被供应到中央处理单元核心110。如果其不匹配,那么数据从L2 SRAM/高速缓冲存储器130调用,接着再次经受奇偶性测试。在高速缓冲未命中于L1D高速缓冲存储器123中时,L2SRAM/高速缓冲存储器经由2×256位校正单元4121及16×32位奇偶性生成器4122将所请求的数据供应到L1D高速缓冲存储器123且并行地经由多路复用器4124直接将数据供应到中央处理单元核心110。
来自中央处理单元核心110的写入在16×32位校验子发生器4125中经受奇偶性生成。从中央处理单元核心110接收的数据及计算出的奇偶位被存储于L1D高速缓冲存储器123中。
在从L1D高速缓冲存储器123写回时,在2×256位校验子发生器4143中比较最近计算出的奇偶位与所存储的奇偶性。如果这些匹配,那么数据被存储于L2 SRAM/高速缓冲存储器130中。如果其不匹配,那么2×256位校验子发生器4145尝试校正。如果实现了校正,那么被校正的数据被存储于L2 SRAM/高速缓冲存储器130中。校正失败生成错误。
图41说明包含单独流0 2710及流1 2720的流缓冲器125。流0 2710经由2×256位校正单元4151及16×32位奇偶性生成器4152从L2 SRAM/高速缓冲存储器接收数据。在将数据供应到中央处理单元核心110时,比较存储于流2210中的奇偶位与16×32位奇偶性检测器4131中的最近计算的奇偶位。如果其匹配,那么将数据被供应到中央处理单元核心110。如果其不匹配,那么存在错误。流1 2720与2×256位校正单元4153、16×32位奇偶性生成器4154及16×32位奇偶性检测器4132类似地操作。
图41说明包含L2 SRAM/高速缓冲存储器130及错误校正硬件的统一存储器控制器(UMC)4140。L2 SRAM/高速缓冲存储器130经由2×256位校验子发生器4144从多核共享存储器控制器(MSMC)4160接收数据。新的奇偶性经生成以存储于L2 SRAM/高速缓冲存储器130中,且如果需要就尝试校正。在不匹配且校正失败之后,从MSMC 4160调用数据,接着数据再次经受奇偶性测试。关于从L2 SRAM/高速缓冲存储器130到MSMC 4160的写入,不存在奇偶校验或校正。
周期性地,2×256位校验子生成4145及2×256校正4146遍历存储于L2 SRAM/高速缓冲存储器130中的数据。数据及奇偶性被调用,生成且校验新的奇偶性且如果需要就尝试校正所述新的奇偶性。如果数据是正确的,那么在L2 SRAM/高速缓冲存储器130中不进行改变。如果数据被校正,那么被校正的数据被存储回于L2 SRAM/高速缓冲存储器130中。数据校正失败生成错误。
高性能计算系统,例如上文描述的流引擎,需要对随机存取存储器池进行低延时高带宽存取以适当地利用可用硬件。存储器性能按比例缩放赶不上计算机架构及工艺增强,从而在许多应用中导致存储器瓶颈。这些最先进的存储器,尤其是芯片外存储器,需要空间及时间局部性以有效地利用数据总线及存取数据阵列。在多核系统中,快速存储器带宽资源趋向于是不足的且许多计算机元件必须共享对其的存取。提供此资源分配的仲裁器通常将尝试向类似优先级业务提供资源的公平分布。此公平性可能实际上通过损坏有效地利用存储器所需的时间及空间局部性阻碍存储器效率。
作为此系统的实例,主装置A及B尝试存取存储器Z。作为贪婪的请求程序,A及B将尽可能快地发送尽可能多的请求直到其保留所有可用数据缓冲容量。接着,其将暂停直到部分先前请求返回。在具有大的芯片外存储器的多数系统中,存储器返回带宽低于请求程序发出容量。因此,数据请求返回比原始发送的慢。对于贪婪的主装置,一旦一个请求返回,新的请求就会消失。一旦数据缓冲是满的,请求发出且以存储器返回带宽的速度返回从而在请求之间留下时隙。此导致最初的背对背请求紧张直到数据缓冲是满的,然后是稳态,其中缓慢的一对一滴漏请求匹配存储器返回带宽。
来自A及B请求程序的请求速率的此下降降低每一请求的时间及空间局部性。此又降低存储器存取的效率。此降低的存储器效率进一步降低请求返回速率,从而导致请求之间的时隙增长,从而进一步减低局部性。此反馈关系使系统性能动态地降级,尤其是随着更多请求程序进入池以对存储器Z进行存取。
贪婪的主装置将基于需要被发送的请求的数目(N)基于主装置的程序或功能及基于缓冲、可用性或其它约束主装置能够发送的请求数目(M)利用请求算法。此算法通常看起来像:
1.如果N==0,那么不发送请求(没有需要)。
2.(N>0)且(N≤M),发送N个请求。
3.(N>0)且(N>M),发送M个请求。
如先前描述,这些贪婪的主装置降低由存储器处置的请求的时间及空间局部性。此将通常导致交换地址转译条目所需的更多存储器页变化及增加的延时。实例实施例以贪婪的主装置请求速率引入滞后。此滞后将滞后命令数目(R)添加到计算且看起来如此:
1.如果N==0,那么不发送请求(没有需要)。
2.如果(N>0)且(N≤M),那么发送N个请求。
3.如果(N>0)且(N>M):
a.如果(M<R),那么等待直到更多缓冲可用;
b.如果(M≥R),那么发出R个请求。
在第二情况中(N≤M),存在比发送请求更多的可用缓冲。因此,所有待决请求应被发送。在第三情况中(N>M),存在比可用缓冲更多的请求。在此情况中,实例实施例使用滞后。此滞后不发送任何请求直到R请求集群可被一起发送。此确保不论何时存在R个以上请求要发送,请求程序都将把R个请求集群在一起。然而,此强制集群潜在地增加任何个别命令上的延时。然而,此强制集群确保存储器处的更好时间及空间局部性以最大化所述效率。因为整体系统在存储器带宽上遭遇瓶颈,所以最大化所述利用将导致整体更高的执行系统。
图42说明实例实施例的提取滞后可应用到其的多处理器多存储器系统4200。系统4200包含多个数据处理器。这些处理器包含数据处理器4201及4202,每一者由先前所描述的处理器100构成。每一处理器4201及4202包含标量数据路径115、向量数据路径116、一级指令高速缓冲存储器(L1I)121、一级数据高速缓冲存储器(L1D)123、流引擎125及二级组合指令/数据高速缓冲存储器(L2)130。这些元件如先前描述那样连接及起作用。如图42中指示,系统4200可包含相同类型的额外数据处理器。系统4200包含多个精简指令集计算机(RISC)中央处理单元(CPU)4211到4213。这些数据处理器类型仅用作实例,且更大或更小数目个其它数据处理器类型是可行的。
多处理器多存储器系统4200包含多个类型的多个存储器。这些包含共享存储器类型A 4231及4232及共享存储器类型B 4241及4342。系统4200还包含共享资源4251。共享资源4251可包含输入装置、输出装置或在数据处理器4201、4202、4211及4213之中共享的其它类型的装置。这些存储器类型仅是实例且其它存储器及更大或更小数目个共享资源类型是可行的。
多核共享存储器控制器4220调解数据处理器4201、4202、4211…4213与资源4231、4232、4241、4342…4251之间的数据移动。此调解包含优先权及排序、地址转译及匹配各种处理器及存储器的数据流类型。
实例实施例的此部分滞后假设至少部分共享存储器的存取延时在存取在时间及空间上是局部的而非不相关时增强。举例来说,支持页面模式存取的存储器在对相同页面的存取在时间上邻近时展示减小的延时。与来自不同源的时间上邻近的存取相比,来自单个源的存储器存取具有更大的可能性展现此时间及空间局部性。因此,把来自单个源的存取分组以供应到共享资源的技术可减小延时。
图43及44说明将此滞后应用到此应用的流引擎。图43说明实践实例实施例的硬件的部分示意图。图44说明实例实施例的此方面的过程。此描述假设突发分组发生于流引擎与对应二级组合高速缓冲存储器之间。在此情况中,二级组合高速缓冲存储器将通常保存从更高级存储器寻求服务的突发性。实例实施例的滞后可在多处理器系统内的其它位置处实施。举例来说,多核共享存储器控制器4220可向来自RISC CPU 4211及4213的存储器请求提供滞后。
图43说明待决请求数目N、可用缓冲量M及滞后值R的计算。待决请求数目N使用多个乘法器4301、4302、4303及4304计算。第一乘法器4301接收数量ELEM_BYTES作为第一输入。此是定义的数据流的数据元素的大小。如上文提到,ELEM_BYTES由流定义模板定义。在优选实施例中,流定义模板包含字段EFLAGS,其子集是ELTYPE字段。如表8中展示,ELETYPE字段编码数量ELEM_BYTES。此编码仅是实例,且设置数量ELEM_BYTES的其它技术是可行的。到乘法器4301的第二输入是来自图33中说明的早期计数寄存器3311的数量Loop0计数。乘法器4302用乘法器4301的积乘来自早期计数寄存器3321(图33中未说明,但类同于Loop0计数寄存器3311)的数量Loop1计数。类似地,乘法器4303用乘法器4302的积乘来自早期计数寄存器3331的数量Loop2计数,且乘法器4304用乘法器4303的积乘来自早期计数寄存器3341的数量Loop3计数。因为早期循环计数寄存器3311、3321、3331及3341存储剩余数目个其对应循环,所以此数量是由指定数据流所需的数据元素提取的数目。乘以ELEM_BYTES因此产生待由数据流提取的剩余数据量。此数量标示为N。
块4311在未分配的对应数据存储装置2716/2726内生成数个高速缓冲存储器线。乘法器4312用此积乘高速缓冲存储器线大小。此高速缓冲存储器线大小必须以与ELEM_BYTES相同的单位表达。乘法器4312的积输出是可用数据缓冲量M。在最初打开数据流之后,就不分配高速缓冲存储器线且可用数据缓冲量M将处于其最大值。可用数据缓冲量M在高速缓冲存储器线分配到新的数据后减小,且在解除分配高速缓冲存储器线后在数据由中央处理单元核心110消耗之后增加。
寄存器4321存储滞后常数R。此优选地是可由中央处理单元核心110写入的存储器映射寄存器。针对实例实施例的提取滞后读取寄存器4321中的数据。
提取控制器4330从N、M及R个输入形成提取确定。如先前描述且如图44中展示那样进行此提取确定。此提取确定在图34的测试块3401中用于确定是否从流引擎发出提取请求。提取控制器4330对发出的提取数目计数且因此控制测试块3401提取发出。提取控制器4330可实施于异步逻辑机器中,作为有限状态机或作为适当编程的逻辑控制器。
图44是说明提取滞后的处理4400的流程图。测试块4401确定至少一个提取请求是否就绪。在流引擎实施例中,此确定未提取且存储所有数据元素的流是否打开。关闭的流无需提取。如果已经提取及存储所有指定数据元素,就无需提取。如果请求未就绪(测试块4401处的否),那么测试块4401重复直到至少一个请求就绪。
如果至少一个请求就绪(测试块4401处的是),那么块4402比较就绪请求数目N与当前可用的数据缓冲量M。在流引擎实施例中,就绪请求数目R等于对应数据流中的尚未提取的数据元素的数目乘以数据元素大小。在流引擎实施例中,当前可用的缓冲量M等于未分配的高速缓冲存储器线的数目乘以高速缓冲存储器线大小。如果就绪请求数目R小于或等于当前可用的数据缓冲量M(测试块4402处的是),那么块4403分派全部N个就绪请求。
如果就绪请求数目N大于当前可用的数据缓冲数目M(测试块4402处的否),那么测试块4404确定当前可用的数据缓冲量M是否小于滞后R。如果当前可用的数据缓冲量M小于滞后R(测试块4404处的是),那么块4405在一个存储器循环内进入等待状态。接着,流返回到测试块4404以确定当前可用的数据缓冲量M是否小于滞后R。在流引擎实施例中,数据缓冲量M取决于未分配的高速缓冲存储器线的数目。如上文详述,数据存储装置2716/2725中的高速缓冲存储器线在中央处理单元110处理读取及前进指令编码时被解除分配。在其它实施例中,数据缓冲量将通常在消耗所提取的数据之后减少。过程4400保持在此循环中直到数据缓冲量M大于或等于滞后R。
如果当前可用的数据缓冲量M大于或等于滞后R(测试块4404处的否),那么块4406分派R个请求。如上文提到,在流引擎实施例中,此允许过程3400在提取数据流时超越测试块3401。
实例实施例的此方面的滞后需要:直到R个请求集群可被一起发送才发送请求。每当存在R个以上请求就绪时,此集群R一起请求。然而,此强制集群潜在地增加任何个别命令上的延时。然而,此强制集群确保存储器处的更好时间及空间局部性以最大化效率。存取的存储器系统可包含进一步地址转译或可包含具有用于背对背相同页面存取的减小的延时的存储器。强制集群更好地利用此类存储器资产。强制集群降低在地址转译硬件中需要改变表查找条目的可能性,这是因为集群请求更可能具有空间局部性。此趋向于避免对地址转译条目交换的需要。因为此类地址转译条目交换的延时是不确定的且可为冗长的,所以减小了平均延时。此类集群请求的更可能空间局部性更可能准许背对背存取相同存储器页面。此还趋向于减小平均延时。

Claims (55)

1.一种数据处理系统,其包括:
处理核心;
存储器;以及
流引擎,其经配置以接收存储在所述存储器中的多个数据元素并将所述多个数据元素作为数据流提供给所述处理核心,所述流引擎包括:
提取控制器,其用于发送来自所述流引擎的存取所述存储器的请求以检索所述数据元素;和
缓冲器,其用于存储从所述存储器检索的数据元素;
其中所述提取控制器经配置以:
确定待由所述流引擎发送到所述存储器的待决请求的数目N;基于所述缓冲器中的可用存储量来确定所述流引擎能够发送的请求的数目M;
比较M和N;
当N既大于0又小于或等于M时,将来自所述流引擎的所述N个待决请求发送到所述存储器;及
当N既大于零又大于M时:
比较M与滞后值R;及
当M不小于R时,将来自所述流引擎的所述N个待决请求中的R个请求发送到所述存储器。
2.根据权利要求1所述的数据处理系统,其中所述流引擎包括寄存器以存储所述滞后值。
3.根据权利要求2所述的数据处理系统,其中所述寄存器是能够由所述处理核心存取的存储器映射寄存器。
4.根据权利要求1所述的数据处理系统,其中数据流包括多个嵌套循环,所述多个嵌套循环中的每一循环具有循环计数,且其中N是基于所述循环计数和所述数据流的所述数据元素的大小来确定的。
5.根据权利要求4所述的数据处理系统,其中N被确定为所述循环计数中的每一者与所述数据流的所述数据元素的所述大小的乘积。
6.根据权利要求4所述的数据处理系统,其中所述流引擎包括流模板寄存器以存储流定义模板,所述流定义模板包括用于指定所述循环计数中的每一者的相应字段。
7.根据权利要求1所述的数据处理系统,所述缓冲器包括多个高速缓冲存储器线,每个高速缓冲存储器线具有高速缓冲存储器线大小,且其中M是基于所述缓冲器中的所述高速缓冲存储器线中的多少个高速缓冲存储器线未被分配而确定的。
8.根据权利要求1所述的数据处理系统,其中所述缓冲器经配置以存储响应于所述待决请求而从所述存储器检索到的数据元素,且其中所述流引擎包括作为所述数据流的一部分、到所述处理核心、从所述存储器中检索到的所述数据元素的输出。
9.根据权利要求1所述的数据处理系统,其中所述存储器是所述数据处理系统的二级L2高速缓冲存储器。
10.根据权利要求1所述的数据处理系统,其中,当N既大于零又大于M时,所述提取控制器进一步经配置以:
当M小于R时,等待一段时间而不向所述存储器发送所述N个待决请求中的任何一者;及
在所述一段时间之后:
确定M是否仍小于R;及
响应于确定M不小于R,将来自所述流引擎的所述N个待决请求中的R个请求发送到所述存储器。
11.根据权利要求10所述的数据处理系统,其中所述一段时间是所述数据处理系统的一个存储器周期。
12.根据权利要求1所述的数据处理系统,其中所述缓冲器是先进先出FIFO缓冲器。
13.根据权利要求1所述的数据处理系统,其中所述处理核心包括数字信号处理DSP核心。
14.根据权利要求1所述的数据处理系统,其中所述数据处理系统是芯片上系统SOC集成电路。
15.一种用于发送存取计算系统中的存储器的请求的方法,所述方法包括:确定待由所述计算系统的请求程序发送到所述存储器的待决请求的数目N;
基于可用缓冲资源的量来确定所述请求程序被限制发送的请求的数目M;
比较M和N;
当N既大于0又小于或等于M时,将所述N个待决请求发送到所述存储器;以及
当N既大于零又大于M时:
比较M与滞后值R;且
当M不小于R时,将来自所述请求程序的所述N个待决请求中的R个请求发送到所述存储器。
16.根据权利要求15所述的方法,其包括:
当N既大于零又大于M时;
当M小于R时,等待一段时间而不发送来自所述请求程序的任何请求;及
在所述一段时间后:
确定M是否仍小于R;及
响应于确定M不小于R,将来自所述请求程序的所述N个待决请求中的R个请求发送到所述存储器。
17.根据权利要求16所述的方法,其包括:
当在所述一段时间后M仍然小于R时:
等待额外一段时间而不发送来自所述请求程序的任何请求;及
在所述额外一段时间后:
确定M是否仍小于R;及
响应于确定M不小于R,将来自所述请求程序的所述N个待决请求中的R个请求发送到所述存储器。
18.根据权利要求16所述的方法,其中所述一段时间相当于所述计算系统的一个存储器周期。
19.一种处理装置,其包括:
存储器;
高速缓冲存储器,其包括一组线,所述一组线包括未分配的线子集;及
提取控制器,其耦合在所述存储器和所述高速缓冲存储器之间,其中所述提取控制器经操作以:
确定与指向所述存储器的待决请求相关联的第一数据量;
确定与所述未分配的线子集相关联的第二数据量;
当所述第一数据量小于或等于所述第二数据量时,将所述待决请求提供给所述存储器;
当所述第一数据量大于所述第二数据量且所述第二数据量大于或等于滞后值时,基于所述滞后值提供所述待决请求的子集;及
当所述第一数据量大于所述第二数据量且所述第二数据量小于所述滞后值时,等待提供所述待决请求,直到所述第二数据量大于或等于所述滞后值。
20.根据权利要求19所述的处理装置,其中所述处理装置包括:
处理核心;及
流引擎,其包括所述提取控制器和所述高速缓冲存储器,其中所述流引擎经配置以:
响应于所述提取控制器向所述存储器提供所述待决请求,从所述存储器接收数据;
将所接收的所述数据存储在所述高速缓冲存储器的所述未分配的线子集中;且
将所接收的所述数据作为数据流从所述高速缓冲存储器提供到所述处理核心。
21.根据权利要求20所述的处理装置,其中:
所述流引擎包括经配置以存储一组循环计数的一组循环计数器;且
所述提取控制器经配置以基于存储在所述一组循环计数器中的所述一组循环计数来确定所述第一数据量。
22.根据权利要求21所述的处理装置,其中:
所述一组循环计数是一组嵌套循环计数;且
所述提取控制器经配置以基于所述一组嵌套循环计数的乘积来确定所述第一数据量。
23.根据权利要求21所述的处理装置,其中所述流引擎包括流模板寄存器以存储流定义模板,所述流定义模板指定所述一组循环计数。
24.根据权利要求23所述的处理装置,其中:
所述流模板寄存器进一步指定每个元素的数据大小;及
所述提取控制器经配置以基于所述一组循环计数与每个元素的所述数据大小的乘积来确定所述第一数据量。
25.根据权利要求20所述的处理装置,其中所述流引擎包括寄存器以存储所述滞后值。
26.根据权利要求25所述的处理装置,其中所述寄存器是存储器映射寄存器。
27.根据权利要求19所述的处理装置,其中所述存储器是二级L2高速缓冲存储器。
28.一种处理装置,包括:
存储器;
高速缓冲存储器,其包括一组线,所述一组线包括未分配的线子集;和
提取控制器,其耦合在所述存储器和所述高速缓冲存储器之间,其中所述提取控制器经操作以:
确定指向所述存储器的待决请求的数目;
确定所述未分配的线子集中的线的数目;
当所述待决请求的数目小于或等于所述未分配的线子集中的所述线的数目时,将所述待决请求提供给所述存储器;
当所述待决请求的数目大于所述未分配的线子集中的所述线的数目且所述未分配的线子集中的所述线的数目大于或等于滞后值时,基于所述滞后值提供所述待决请求的子集;和
当所述待决请求的数目大于所述未分配的线子集中的所述线的数目且所述未分配的线子集中的所述线的数目小于所述滞后值时,等待提供所述待决请求,直到所述未分配的线子集中的所述线的数目大于或等于所述滞后值。
29.根据权利要求28所述的处理装置,其中所述处理装置包括:
处理核心;和
流引擎,其包括所述提取控制器和所述高速缓冲存储器,其中所述流引擎经配置以:
响应于所述提取控制器向所述存储器提供所述待决请求,从所述存储器接收数据;
将所接收的所述数据存储在所述高速缓冲存储器的所述未分配的线子集中;和
将所接收的所述数据作为数据流从所述高速缓冲存储器的所述未分配的线子集提供到所述处理核心。
30.根据权利要求29所述的处理装置,其中:
所述流引擎包括经配置以存储一组循环计数的一组循环计数器;和
所述提取控制器经配置以基于存储在所述一组循环计数器中的所述一组循环计数来确定所述待决请求的数目。
31.根据权利要求30所述的处理装置,其中所述提取控制器经配置以基于所述一组循环计数的乘积来确定所述待决请求的数目。
32.根据权利要求30所述的处理装置,其中所述流引擎包括流模板寄存器以存储流定义模板,所述流定义模板指定所述一组循环计数。
33.根据权利要求27所述的处理装置,其中所述存储器是二级L2高速缓冲存储器。
34.一种方法,其包括:
接收指向存储器的一组待决存储器请求;
确定与所述一组待决存储器请求相关联的第一数据量;
确定与耦合到所述存储器的高速缓冲存储器的未分配子集相关联的第二数据量;
接收滞后值;和
基于所述第一数据量小于或等于所述第二数据量,向所述存储器提供所述一组待决存储器请求;且
基于所述第一数据量大于所述第二数据量且所述第二数据量小于所述滞后值,等待向所述存储器提供所述一组待决存储器请求,直到所述第二数据量大于或等于所述滞后值。
35.根据权利要求34所述的方法,进一步包括基于所述第一数据量大于所述第二数据量且所述第二数据量大于或等于所述滞后值,基于所述滞后值向所述存储器提供所述一组待决存储器请求的子集。
36.根据权利要求34所述的方法,进一步包括:
将一组循环计数存储在一组循环计数器中;且
基于存储在所述一组循环计数器中的所述一组循环计数来确定所述第一数据量。
37.根据权利要求36所述的方法,其中:
所述一组循环计数是一组嵌套循环计数;和
所述第一数据量是基于所述一组嵌套循环计数的乘积而确定的。
38.一种电路装置,包括:
存储器控制器,其经配置以耦合到存储器和至少一个处理单元,其包括:
地址生成器,其经配置以使用一组循环响应于来自所述至少一个处理单元的指令而生成一组地址以从所述存储器检索一组数据;
数据存储,其经配置以存储从所述存储器检索的所述一组数据;和
提取电路系统,其包括:
一组寄存器,所述一组寄存器中的每个寄存器经配置以存储所述一组循环中的相应循环的相应循环计数;
第一组计算电路系统,其经配置以基于存储在所述一组寄存器中的所述循环计数来确定所述一组数据的待决部分中的数据量;
第二组计算电路系统,其经配置以确定所述数据存储中的可用空间量;和
提取控制器,其耦合到所述第一组计算电路系统和所述第二组计算电路系统、并经配置以提供提取命令以从所述存储器检索所述一组数据,以使得:
当所述一组数据的所述待决部分中的所述数据量小于或等于所述数据存储中的所述可用空间量时,向所述存储器提供与所述待决部分相关联的一组提取命令;
当所述一组数据的所述待决部分中的所述数据量大于所述数据存储中的所述可用空间量且所述数据存储中的所述可用空间量大于滞后值时,向所述存储器提供与所述未决部分相关联的所述一组提取命令的子集,所述子集具有基于所述滞后值的量;和
当所述一组数据的所述待决部分中的所述数据量大于所述数据存储中的所述可用空间量且所述数据存储中的所述可用空间量小于所述滞后值时,延迟提供与所述待决部分相关联的所述一组提取命令,直到所述数据存储中的所述可用空间量至少满足所述滞后值。
39.根据权利要求38所述的电路装置,其中所述第一组计算电路系统包括:
第一乘法器,其包括耦合到所述一组寄存器中的第一寄存器以接收所述一组循环中的第一循环的第一循环计数的第一输入、以及经耦合以接收与所述指令相关联的元素大小的第二输入;和
一组乘法器,所述一组乘法器中的每个乘法器包括耦合到所述一组寄存器中的相应寄存器的相应第一输入、以及耦合到前一乘法器的输出的相应输入。
40.根据权利要求39所述的电路装置,其中所述存储器控制器包括经配置以存储流定义模板的流模板寄存器,所述流定义模板指定所述元素大小。
41.根据权利要求40所述的电路装置,其中所述流定义模板进一步指定所述一组循环中的每一循环的相应初始循环计数。
42.根据权利要求38所述的电路装置,其中所述第二组计算电路系统包括:
子电路,其经配置以确定所述数据存储中的可用线的数目;和
乘法器,其耦合到所述子电路且经配置以将所述数据存储中的所述可用线的数目乘以所述数据存储的线大小。
43.根据权利要求38所述的电路装置,其中所述提取电路系统包括经配置以存储所述滞后值的滞后寄存器。
44.根据权利要求38所述的电路装置,其中所述滞后寄存器是存储器映射寄存器。
45.根据权利要求38所述的电路装置,其中所述地址产生器包括经配置以产生所述一组循环的所述循环计数的一组计数器。
46.根据权利要求38所述的电路装置,其中所述指令是流打开指令。
47.根据权利要求38所述的电路装置,其中所述存储器控制器经配置以将所述一组数据作为数据流提供到所述至少一个处理单元。
48.根据权利要求38所述的电路装置,其进一步包括所述存储器和所述至少一个处理单元,其中:
所述存储器是高速缓冲存储器层次结构的二级L2高速缓冲存储器;和
所述存储器控制器在不包括所述高速缓冲存储器层次结构的一级L1高速缓冲存储器的数据路径中耦合在所述存储器和所述至少一个处理单元之间。
49.一种方法,其包括:
接收指令,
使用一组循环,基于所述指令生成一组地址以用于从存储器检索一组数据;
基于所述一组循环的循环计数来确定所述一组数据的待决部分中的数据量;
确定数据存储中的可用空间量;和
提供一组提取命令以用于从存储器检索所述一组数据的所述待决部分,以使得当所述一组数据的所述待决部分中的所述数据量大于所述数据存储中的所述可用空间量且所述数据存储中的所述可用空间量小于滞后值时,延迟提供与所述待决部分相关联的所述一组提取命令,直到所述数据存储中的所述可用空间量至少满足所述滞后值。
50.根据权利要求49所述的方法,其中提供所述一组提取命令进一步使得:
当所述一组数据的所述待决部分中的所述数据量小于所述数据存储中的所述可用空间量时,提供所述一组提取命令;和
当所述一组数据的所述待决部分中的所述数据量大于所述数据存储中的所述可用空间量且所述数据存储中的所述可用空间量至少为所述滞后值时,基于所述滞后值提供所述一组提取命令的子集。
51.根据权利要求49所述的方法,其中确定所述待决部分中的所述数据量包括:
将所述一组循环中的第一循环的第一循环计数乘以与所述指令相关联的元素大小以产生临时值;和
将所述临时值乘以所述一组循环的剩余部分中的每个循环的相应循环计数。
52.根据权利要求51所述的方法,其中确定所述数据量包括从存储在流模板寄存器中的流定义模板检索所述元素大小。
53.根据权利要求49所述的方法,其中确定所述数据存储中的所述可用空间量包括:
确定所述数据存储中的可用线数量;和
将所述可用线数量乘以所述数据存储的线大小。
54.根据权利要求49所述的方法,进一步包括将所述一组数据作为数据流提供给处理器。
55.根据权利要求54所述的方法,其中:
所述存储器是高速缓冲存储器层次结构的二级L2高速缓冲存储器;和
将所述一组数据提供给所述处理器是经由不包括所述高速缓冲存储器层次结构的一级L1高速缓冲存储器的数据路径来提供所述一组数据。
CN202310820302.2A 2016-12-20 2017-12-20 具有提取提前滞后的流引擎 Pending CN116880903A (zh)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US15/384,416 2016-12-20
US15/384,416 US10209887B2 (en) 2016-12-20 2016-12-20 Streaming engine with fetch ahead hysteresis
PCT/US2017/067648 WO2018119103A1 (en) 2016-12-20 2017-12-20 Streaming engine with fetch ahead hysteresis
CN201780072883.9A CN109997109B (zh) 2016-12-20 2017-12-20 具有提取提前滞后的流引擎

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
CN201780072883.9A Division CN109997109B (zh) 2016-12-20 2017-12-20 具有提取提前滞后的流引擎

Publications (1)

Publication Number Publication Date
CN116880903A true CN116880903A (zh) 2023-10-13

Family

ID=62562468

Family Applications (2)

Application Number Title Priority Date Filing Date
CN201780072883.9A Active CN109997109B (zh) 2016-12-20 2017-12-20 具有提取提前滞后的流引擎
CN202310820302.2A Pending CN116880903A (zh) 2016-12-20 2017-12-20 具有提取提前滞后的流引擎

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN201780072883.9A Active CN109997109B (zh) 2016-12-20 2017-12-20 具有提取提前滞后的流引擎

Country Status (3)

Country Link
US (4) US10209887B2 (zh)
CN (2) CN109997109B (zh)
WO (1) WO2018119103A1 (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9520180B1 (en) 2014-03-11 2016-12-13 Hypres, Inc. System and method for cryogenic hybrid technology computing and memory
US11042468B2 (en) 2018-11-06 2021-06-22 Texas Instruments Incorporated Tracking debug events from an autonomous module through a data pipeline
US11137943B2 (en) 2020-03-04 2021-10-05 Micron Technology, Inc. Internal commands for access operations
US11449236B2 (en) * 2020-05-01 2022-09-20 Western Digital Technologies, Inc. Data storage device with syndrome weight minimization for data alignment
US11789642B2 (en) * 2021-06-28 2023-10-17 Micron Technology, Inc. Loading data from memory during dispatch
KR20230092151A (ko) * 2021-12-17 2023-06-26 삼성전자주식회사 스토리지 장치 및 이의 동작 방법
CN115080101B (zh) * 2022-06-30 2023-08-18 北京亚控科技发展有限公司 应用管理方法、应用订阅方法及相关设备

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6279077B1 (en) 1996-03-22 2001-08-21 Texas Instruments Incorporated Bus interface buffer control in a microprocessor
US7177985B1 (en) * 2003-05-30 2007-02-13 Mips Technologies, Inc. Microprocessor with improved data stream prefetching
CN100533403C (zh) * 2004-07-14 2009-08-26 奥普提克斯晶硅有限公司 高速缓冲存储器管理系统和方法
US7685409B2 (en) 2007-02-21 2010-03-23 Qualcomm Incorporated On-demand multi-thread multimedia processor
US8095781B2 (en) * 2008-09-04 2012-01-10 Verisilicon Holdings Co., Ltd. Instruction fetch pipeline for superscalar digital signal processors and method of operation thereof
US8484436B2 (en) * 2010-09-02 2013-07-09 Atmel Corporation Processor independent loop entry cache
US20120320772A1 (en) * 2011-06-14 2012-12-20 Qualcomm Incorporated Communication devices for transmitting data based on available resources
CN105009102B (zh) * 2013-01-15 2019-01-25 慧与发展有限责任合伙企业 用于多级聚合架构的系统和方法
US9606803B2 (en) 2013-07-15 2017-03-28 Texas Instruments Incorporated Highly integrated scalable, flexible DSP megamodule architecture
EP3025237A4 (en) * 2013-07-26 2017-04-19 Intel Corporation Methods and apparatus for supporting persistent memory
GB2519107B (en) * 2013-10-09 2020-05-13 Advanced Risc Mach Ltd A data processing apparatus and method for performing speculative vector access operations
CN104182361B (zh) * 2014-08-20 2018-06-26 北京国双科技有限公司 数据缓存处理方法及装置
CN105898376A (zh) * 2015-12-11 2016-08-24 乐视网信息技术(北京)股份有限公司 一种视频流的在线播放方法、装置和系统

Also Published As

Publication number Publication date
US20190187903A1 (en) 2019-06-20
US20210349635A1 (en) 2021-11-11
US10642490B2 (en) 2020-05-05
US11068164B2 (en) 2021-07-20
WO2018119103A1 (en) 2018-06-28
US10209887B2 (en) 2019-02-19
US12079470B2 (en) 2024-09-03
US20180173422A1 (en) 2018-06-21
US20200326854A1 (en) 2020-10-15
CN109997109A (zh) 2019-07-09
CN109997109B (zh) 2023-07-21

Similar Documents

Publication Publication Date Title
US12045614B2 (en) Streaming engine with cache-like stream data storage and lifetime tracking
US12099400B2 (en) Streaming engine with deferred exception reporting
US20210149820A1 (en) Two address translations from a single table look-aside buffer read
US11994949B2 (en) Streaming engine with error detection, correction and restart
US11693660B2 (en) Data processing apparatus having streaming engine with read and read/advance operand coding
CN109997109B (zh) 具有提取提前滞后的流引擎
US11709778B2 (en) Streaming engine with early and late address and loop count registers to track architectural state
US11210097B2 (en) Stream reference register with double vector and dual single vector operating modes

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