[go: up one dir, main page]

CN109144568A - 将有效位通道作为矢量断言暴露于cpu - Google Patents

将有效位通道作为矢量断言暴露于cpu Download PDF

Info

Publication number
CN109144568A
CN109144568A CN201810674190.3A CN201810674190A CN109144568A CN 109144568 A CN109144568 A CN 109144568A CN 201810674190 A CN201810674190 A CN 201810674190A CN 109144568 A CN109144568 A CN 109144568A
Authority
CN
China
Prior art keywords
data
register
stream
instruction
unit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201810674190.3A
Other languages
English (en)
Other versions
CN109144568B (zh
Inventor
J·茨比亚克
S·H·特兰
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
Priority to CN202311622432.1A priority Critical patent/CN117632257A/zh
Publication of CN109144568A publication Critical patent/CN109144568A/zh
Application granted granted Critical
Publication of CN109144568B publication Critical patent/CN109144568B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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 OR CALCULATING; 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/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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 OR CALCULATING; 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 OR CALCULATING; 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/30072Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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 OR CALCULATING; 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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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 OR CALCULATING; 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/345Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3889Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
    • G06F9/3891Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute organised in groups of units sharing resources, e.g. clusters

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Multimedia (AREA)
  • Advance Control (AREA)
  • Complex Calculations (AREA)

Abstract

数字数据处理器(100)中采用的流引擎(125、2800)指定固定的只读数据流。一旦被提取,数据流中的数据元素就以固定的顺序设置在流头寄存器(2818、2828)中的通道(2100、2200)中。一些通道(2100、2200)例如在剩余数据元素的数量小于流头寄存器(2818、2828)中的通道(2100、2200)的数量时可能是无效的。流引擎(125、2800)自动产生存储在流有效寄存器(2819、2829)中的指示通道保持有效数据的有效数据字。流有效寄存器(2819、2829)中的数据可以被自动存储在断言寄存器(P0、P1)中或以其他方式使其可用。该数据可以用于控制矢量SIMD操作或者可以与其他断言寄存器数据结合。

Description

将有效位通道作为矢量断言暴露于CPU
相关申请
本专利申请是对2014年7月15日提交的序列号为14/331,986且题为 “HIGHLYINTEGRATED SCALABLE,FLEXIBLE DSP MEGAMODULE ARCHITECTURE”的美国专利申请的改善,其要求2013年7月15日提交的序 列号为61/846,148的美国临时专利申请的优先权。
技术领域
本发明的技术领域是数字数据处理,并且更具体是用于操作数提取的流引 擎的控制。
背景技术
现代的数字信号处理器(DSP)面对多重挑战。工作量不断增加需要增加带 宽。芯片上系统(SOC)在尺寸和复杂性上不断增长。存储器系统延迟严重影 响某些类型的算法。随着晶体管变小,存储器和寄存器变得更不可靠。随着软 件堆栈变大,可能的交互和误差的数量变得更大。
对于操作实时数据的数字信号处理器,存储器带宽和调度是一个问题。操 作实时数据的数字信号处理器通常接收输入数据流、对数据流执行滤波功能(诸 如编码或解码)并且输出经转换的数据流。该系统被称为实时的是因为如果经 转换的数据流在被调度时对于输出不可用则应用失败。典型的视频编码需要可 预测的但非时序的输入数据模式。通常相应的存储器访问难以在可用的地址生 成和存储器访问资源内实现。典型的应用需要存储器访问加载数据寄存器文件 (RF)中的数据寄存器,然后供应给执行数据处理的功能单元。
发明内容
本发明是具有流引擎的数字数据处理器,该流引擎从存储器调用预定数量 的数据元素的指令指定序列的流以便由数据处理功能单元按顺序使用。每个数 据元素具有预定尺寸和数据类型。数据元素被打包在矢量流头寄存器中的限定 数据宽度的通道中。
数据被多个矢量功能单元中的一个采用。指令的操作数字段可以被编码以 作为功能单元的操作数对流头寄存器进行读取。操作数字段的不同编码读取流 头数据并且将该流提前到打包在流头寄存器中的下一组数据元素。
有时不是所有的通道都包括有效数据。在流的末端处或者在内部环路的末 端处,可能存在比最后一个矢量中的通道数量更少的剩余数据元素。超出数据 元素数量的通道不能包括有效数据。如果发生这种情况,则流引擎将全部0存 储在过量通道中。在本发明中,流引擎还产生标量,该标量针对矢量流头寄存 器中的每个最小数据尺寸具有一个位。在所描述的实施例中,功能单元以8位 的最小流引擎数据尺寸对512位数据进行操作。这意味着有效数据字是64位。
可以以两种替代方式访问流有效数据。在第一替代方案中,每次流头寄存 器被读取时,流有效数据被自动写入到预定数据寄存器。在第二替代方案中, 至少一个功能单元可以经由指令的操作数字段的特殊编码来读取该有效数据。
在优选的实施例中,流有效数据被存储在标量数据寄存器文件中,该标量 数据寄存器文件可以被断言功能单元访问。矢量SIMD比较指令基于比较的结 果对标量断言寄存器进行填写(populate)。矢量SIMD条件指令可以基于指定 的标量断言寄存器的状态执行替代数据处理操作。断言功能单元可以在允许复 合数据处理操作的一个或两个断言数据寄存器上执行各种指令。
附图说明
本发明的这些方面和其他方面在附图中说明,其中:
图1说明根据本发明的一个实施例的成双的标量/矢量数据路径处理器;
图2说明图1中说明的成双的标量/矢量数据路径处理器中的寄存器和功能 单元;
图3说明全局标量寄存器文件;
图4说明由算法功能单元共享的局部标量寄存器文件;
图5说明由乘法功能单元共享的局部标量寄存器文件;
图6说明由局部/存储单元共享的局部标量寄存器文件;
图7说明全局矢量寄存器文件;
图8说明断言寄存器文件;
图9说明由算法功能单元共享的局部矢量寄存器文件;
图10说明由乘法功能单元和相关功能单元共享的局部矢量寄存器文件;
图11说明根据本发明的优选实施例的中央处理单元的流水线阶段;
图12说明单个提取包的十六个指令;
图13说明本发明使用的指令的指令编码的示例;
图14说明条件码扩展间隙(slot)0的位编码;
图15说明条件码扩展间隙1的位编码;
图16说明常量扩展间隙的位编码0;
图17是说明常量扩展的部分框图;
图18说明根据本发明的用于SIMD操作的进位控制;
图19说明本发明的流引擎的概念视图;
图20说明本发明的格式化操作的序列;
图21说明矢量中的通道分配的第一示例;
图22说明矢量中的通道分配的第二示例;
图23说明基本的二维流;
图24说明图23的示例流中的元素的顺序;
图25说明从较大的矩形中取出较小的矩形;
图26说明流引擎将如何提取该示例中具有4个字节的移项粒度的流;
图27说明流引擎将如何提取该示例中具有8个字节的移项粒度的流;
图28说明本发明的流引擎的细节;
图29说明本发明的流模板寄存器;
图30说明本发明的流模板寄存器的标记字段的子字段定义;
图31说明本发明的矢量长度掩码/组重复块的示例性实施例;
图32是生成流引擎有效或无效指示的示例性实施例的部分示意图;
图33是说明生成循环地址和循环计数的流引擎地址生成器的部分示意图;
图34说明用于产生有效/无效位的替代硬件的部分示意图;
图35说明示出本发明的流引擎供应数据的部分示意图;以及
图36说明示出流引擎供应有效数据到断言单元的部分示意图。
具体实施方式
图1说明根据本发明的优选实施例的成双的标量/矢量数据路径处理器。处 理器100包括分开的一级指令缓存器(L1I)121和一级数据缓存器(L1D)123。 处理器100包括二级组合式指令/数据缓存器(L2)130,其保持指令和数据两者。 图1说明一级指令缓存器121和二级组合式指令/数据缓存器130之间的连接(总 线142)。图1说明一级数据缓存器123和二级组合式指令/数据缓存器130之间 的连接(总线145)。在处理器100的优选实施例中,二级组合式指令/数据缓存 器130存储这两个指令以备份一级指令缓存器121并且存储数据以备份一级数 据缓存器123。在优选实施例中,二级组合式指令/数据缓存器130进一步以本 领域已知的但图1中未说明的方式连接到更高级的缓存器和/或主存储器。在优 选实施例中,中央处理单元核心110、一级指令缓存器121、一级数据缓存器123 以及二级组合式指令/数据缓存器130被形成在单个集成电路上。该信号集成电 路可选择地包括其他电路。
中央处理单元核心110在指令提取单元111控制下从一级指令缓存器121 提取指令。指令提取单元111确定将被执行的下一个指令并且调用提取包尺寸 的一组此类指令。提取包的性质和尺寸在下面进一步详述。如本领域已知的, 在缓存命中之后(如果这些指令被存储在一级指令缓存器121中),指令被直接 从一级指令缓存器121中提取。在缓存错失之后(指定的指令提取包没有被存 储在一级指令缓存器121中),在二级组合式缓存器130中寻找这些指令。在优 选实施例中,一级指令缓存器121中的缓存线的尺寸等于提取包的尺寸。这些 指令的存储器位置在二级组合式缓存器130中或命中或错失。命中是由二级组 合式缓存器130服务。错失是由更高级缓存器(未图示说明)或由主存储器(未 图示说明)服务。如本领域已知的,所请求的指令可以被同时供应到一级指令 缓存器121和中央处理单元核心110两者以加速使用。
在本发明的优选实施例中,中央处理单元核心110包括复数个功能单元以 执行指令指定的数据处理任务。指令分派单元112确定每个提取的指令的目标 功能单元。在优选实施例中,中央处理单元110作为超长指令字(VLIW)处理 器进行操作,其能够同时处理相应的功能单元中的复数个指令。优选地,编译 器组织执行包中一起被执行的指令。指令分派单元112将每个指令引导到其目 标功能单元。分配给指令的功能单元完全由编译器产生的指令来指定。中央处 理单元核心110的硬件不参与该功能单元分配。在优选实施例中,指令分派单 元12可以并行操作复数个指令。这种并行指令的数量由执行包的尺寸设定。这将在下面进一步详述。
指令分派单元112的分派任务的一部分是确定指令在标量数据路径侧A 115 中的功能单元上执行还是在矢量数据路径侧B 116中的功能单元上执行。每个指 令中被称为s位的指令位确定该指令控制哪个数据路径。这将在下面进一步详 述。
指令解码单元113对当前执行包中的每个指令解码。解码包括识别执行该 指令的功能单元、从可能的寄存器文件(RF)中识别用于为相应的数据处理操 作供应数据的寄存器以及识别相应的数据处理操作的结果的寄存器目的地。如 下面进一步解释的,指令可以包括代替一个寄存器编号操作数字段的常量字段。 该解码的结果是信号,这些信号用于控制目标功能单元以便对指定数据执行由 相应的指令所指定的数据处理操作。
中央处理单元核心110包括控制寄存器114。控制寄存器114存储用于以与 本发明不相关的方式控制标量数据路径侧A 115和矢量数据路径侧B 116中的功 能单元的信息。该信息可以是模式信息等。
来自指令解码器113的已解码的指令和存储在控制寄存器114中的信息被 供应到标量数据路径侧A115和矢量数据路径侧B 116。结果,标量数据路径侧 A115和矢量数据路径侧B 116中的功能单元根据指令指定的数据执行指令指定 的数据处理操作并且将结果存储在一个或多个指令指定的数据寄存器中。标量 数据路径侧A115和矢量数据路径侧B116中的每一个包括优选并行操作的复数 个功能单元。这些将结合图2进一步详述。标量数据路径侧A115和矢量数据路 径侧B 116之间存在允许数据交换的数据路径117。
中央处理单元核心110进一步包括非基于指令的模块。仿真单元118允许 响应于指令来确定中央处理单元核心110的机器状态。这种能力通常将被用于 算法开发。中断/异常单元119使得中央处理单元核心110能够响应外部异步事 件(中断)并且回应执行不适当操作的尝试(异常)。
中央处理单元核心110包括流引擎125。流引擎125将两个数据流从通常缓 存在二级组合式缓存器130中的预定地址供应到矢量数据路径侧B的寄存器文 件。这提供从存储器(如缓存在二级组合式缓存器130中的)直接到功能单元 操作数输入端的受控数据移动。这将在下面进一步详述。
图1说明各个部分之间的总线的示例性数据宽度。一级指令缓存器121将 指令经由总线141供应到指令提取单元111。优选地,总线141是512位总线。 总线141从一级指令缓存器121单向通到中央处理单元10。二级组合式缓存器 130将指令经由总线142供应到一级指令缓存器121。优选地,总线142是512 位总线。总线142从二级组合式缓存器130单向通到一级指令缓存器121。
一级数据缓存器123与标量数据路径侧A115中的寄存器文件经由总线143 交换数据。优选地,总线143是64位总线。一级数据缓存器123与矢量数据路 径侧B 116中的寄存器文件经由总线144交换数据。优选地,总线144是512 位总线。总线143和144被图示说明为双向支持中央处理单元110数据读取和 数据写入两者。一级数据缓存器123与二级组合式缓存器130经由总线145交 换数据。优选地,总线145是512位总线。总线145被图示说明为双向支持中 央处理单元110数据读取和数据写入两者的缓存服务。
如本领域已知的,在缓存命中之后(如果请求的数据存储在一级数据缓存 器123中),CPU数据请求直接从一级数据缓存器123提取。在缓存错失之后(指 定的数据没有存储在一级数据缓存器123中),在二级组合式缓存器130中寻找 该数据。该请求数据的存储器位置在二级组合式缓存器130中或命中或错失。 命中是由二级组合式缓存器130服务。错失是由另一级缓存器(未图示说明) 或由主存储器(未图示说明)服务。如本领域已知的,所请求的指令可以同时 供应到一级数据缓存器123和中央处理单元核心110两者以加速使用。
二级组合式缓存器130将第一数据流的数据经由总线146供应到流引擎 125。优选地,总线146是512位总线。流引擎125将该第一数据流的数据经由 总线147供应到矢量数据路径侧B 116的功能单元。优选地,总线147是512 位总线。二级组合式缓存器130将第二数据流的数据经由总线148供应到流引 擎125。优选地,总线148是512位总线。流引擎125将该第二数据流的数据经 由总线149供应到矢量数据路径侧B 116的功能单元。优选地,总线149是512 位总线。根据本发明的优选实施例,总线146、147、148和149被图示说明为 从二级组合式缓存器130单向通到流引擎125并且通到矢量数据路径侧B 116。
在缓存命中之后(如果请求的数据存储在二级组合式缓存器130中),流引 擎数据请求直接从二级组合式缓存器130提取。在缓存错失之后(指定的数据 没有存储在二级组合式缓存器130中),从另一级缓存器(未图示说明)或从主 存储器(未图示说明)寻找该数据。在一些实施例中,一级数据缓存器123缓 存未存储在二级组合式缓存器130中的数据在技术上是可行的。如果支持该操 作,则根据在二级组合式缓存器130中错失的流引擎数据请求,二级组合式缓 存器130应该对于流引擎请求的数据监听一级数据缓存器1233。如果一级数据 缓存器123存储该数据,则其监听响应将包括随后被供应以服务流引擎请求的数据。如果一级数据缓存器123没有存储该数据,则其监听响应将指示此结果 并且二级组合式缓存器130必须服务来自另一级缓存器(未图示说明)或来自 主存储器(未图示说明)的这一流引擎请求。
在本发明的优选实施例中,根据题为“UNIFIED MEMORY SYSTEM ARCHITECTUREINCLUDING CACHE AND DIRECTLY ADDRESSABLE STATIC RANDOM ACCESS MEMORY”的美国专利No.6,606,686,一级数据缓 存器123和二级组合式缓存器130两者都可以被配置为选定数量的缓存器或直 接可寻址的存储器。
图2进一步说明标量数据路径侧A115和矢量数据路径侧B 116中的功能单 元和寄存器文件的细节。标量数据路径侧A115包括全局标量寄存器文件(RF) 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/C局部寄存器文件 233和断言寄存器文件214。矢量数据路径侧B 116包括L2单元241、S2单元 242、M2单元243、N2单元244、C单元245和P单元246。在功能单元可以从 哪个寄存器文件读取或者可以写入哪个寄存器文件上存在限制。这些将在下面 详述。
标量数据路径侧A 115包括L1单元221。L1单元221通常接受两个64位 操作数并且产生一个64位结果。这两个操作数都是从全局标量寄存器文件211 或L1/S1局部寄存器文件212中的指令指定的寄存器调用的。L1单元221优选 执行以下指令选择的操作:64位加/减操作;32位最小/最大操作;8位单指令多 数据(SIMD)指令(诸如绝对值求和、最小值和最大值确定);循环最小/最大 操作以及寄存器文件之间的各种移动操作。结果可以被写入全局标量寄存器文 件211、L1/S1局部寄存器文件212、M1/N1局部寄存器文件213或D1/D2局部寄存器文件214的指令指定的寄存器中。
标量数据路径侧A 115包括S1单元222。S1单元222通常接受两个64位 操作数并且产生一个64位结果。这两个操作数都是从全局标量寄存器文件211 或L1/S1局部寄存器文件212中的指令指定的寄存器调用的。S1单元222优选 执行与L1单元211相同类型的操作。由L1单元211和S1单元222支持的数据 处理操作之间可以选择性地存在轻微变化。结果可以被写入全局标量寄存器文 件211、L1/S1局部寄存器文件212、M1/N1局部寄存器文件213或D1/D2局部 寄存器文件214的指令指定的寄存器中。
标量数据路径侧A 115包括M1单元223。M1单元223通常接受两个64位 操作数并且产生一个64位结果。这两个操作数都是从全局标量寄存器文件211 或M1/N1局部寄存器文件213中的指令指定的寄存器调用的。M1单元223优 选执行以下指令选择的操作:8位乘法操作;复杂的点积操作;32位计数操作; 复杂的共轭乘法操作以及按位逻辑操作、移位、加和减。结果可以被写入全局 标量寄存器文件211、L1/S1局部寄存器文件212、M1/N1局部寄存器文件213 或D1/D2局部寄存器文件214的指令指定的寄存器中。
标量数据路径侧A 115包括N1单元224。N1单元224通常接受两个64位 操作数并且产生一个64位结果。这两个操作数都是从全局标量寄存器文件211 或M1/N1局部寄存器文件213中的指令指定的寄存器调用的。N1单元224优选 执行与M1单元223相同类型的操作。可以存在同时采用M1单元223和N1单 元224两者的某些双重操作(称为成双发布的指令)。结果可以被写入全局标量 寄存器文件211、L1/S1局部寄存器文件212、M1/N1局部寄存器文件213或D1/D2 局部寄存器文件214的指令指定的寄存器中。
标量数据路径侧A 115包括D1单元225和D2单元226。D1单元225和 D2单元226通常均接受两个64位操作数并且均产生一个64位结果。D1单元 225和D2单元226通常执行地址计算以及相应的加载和存储操作。D1单元225 用于64位的标量加载和存储。D2单元226用于512位的矢量加载和存储。优 选地,D1单元225和D2单元226也执行:对加载和存储数据进行调换、打包 以及拆包;64位SIMD算法操作以及64位按位逻辑操作。D1/D2局部寄存器文 件214将通常存储用于对相应的加载和存储进行地址计算的基础地址和偏移地 址。这两个操作数都是从全局标量寄存器文件211或D1/D2局部寄存器文件214 中的指令指定的寄存器调用的。计算的结果可以被写入全局标量寄存器文件 211、L1/S1局部寄存器文件212、M1/N1局部寄存器文件213或D1/D2局部寄 存器文件214的指令指定的寄存器中。
矢量数据路径侧B 116包括L2单元241。L2单元241通常接受两个512位 操作数并且产生一个512位结果。这两个操作数都是从全局矢量寄存器文件231、 L2/S2局部寄存器文件232或断言寄存器文件234中的指令指定的寄存器调用 的。除了更宽的512位数据之外,L2单元241优选执行与L1单元221类似的 指令。结果可以被写入全局矢量寄存器文件231、L2/S2局部寄存器文件232、 M2/N2/C局部寄存器文件233或断言寄存器文件214的指令指定的寄存器中。
矢量数据路径侧B 116包括S2单元242。S2单元242通常接受两个512位 操作数并且产生一个512位结果。这两个操作数都是从全局矢量寄存器文件231、 L2/S2局部寄存器文件232或断言寄存器文件234中的指令指定的寄存器调用 的。S2单元242优选与S1单元222类似地执行指令。结果可以被写入全局矢量 寄存器文件231、L2/S2局部寄存器文件232、M2/N2/C局部寄存器文件233或 断言寄存器文件214的指令指定的寄存器中。
矢量数据路径侧B 116包括M2单元243。M2单元243通常接受两个512 位操作数并且产生一个512位结果。这两个操作数都是从全局矢量寄存器文件 231或M2/N2/C局部寄存器文件233中的指令指定的寄存器调用的。除了更宽 的512位数据之外,M2单元243优选执行与M1单元222类似的指令。结果可 以被写入全局矢量寄存器文件231、L2/S2局部寄存器文件232或M2/N2/C局部 寄存器文件233的指令指定的寄存器中。
矢量数据路径侧B 116包括N2单元244。N2单元244通常接受两个512 位操作数并且产生一个512位结果。这两个操作数都是从全局矢量寄存器文件 231或M2/N2/C局部寄存器文件233中的指令指定的寄存器调用的。N2单元244 优选执行与M2单元243相同类型的指令。可以存在同时采用M2单元243和 N2单元244两者的某些双重操作(称为成双发布的指令)。结果可以被写入全 局矢量寄存器文件231、L2/S2局部寄存器文件232或M2/N2/C局部寄存器文件 233的指令指定的寄存器中。
矢量数据路径侧B 116包括C单元245。C单元245通常接受两个512位操 作数并且产生一个512位结果。这两个操作数都是从全局矢量寄存器文件231 或M2/N2/C局部寄存器文件233中的指令指定的寄存器调用的。C单元245优 选执行:“搜查”和“搜索”指令;每个时钟周期高达512个2位PN*8位乘法 的I/Q复杂乘法;8位和16位的绝对差值求和(SAD)计算,每个时钟周期高 达512个SAD;水平加法和水平最小/最大指令;以及矢量排列指令。C单元245 还包括用于控制C单元245指令的某些操作的4个矢量控制寄存器(CUCR0到 CUCR3)。控制寄存器CUCR0到CUCR3用作某些C单元245操作的操作数。 控制寄存器CUCR0到CUCR3优选用于控制通用排列指令(VPERM),并且用 作SIMD多重点积操作(DOTPM)和SIMD多重绝对差值求和(SAD)操作的 掩码。控制寄存器CUCR0优选用于存储伽罗瓦(Galios)域乘法操作(GFMPY) 的多项式。控制寄存器CUCR1优选用于存储伽罗瓦域多项式发生器函数。
矢量数据路径侧B 116包括P单元246。P单元246在局部断言寄存器文件 234的寄存器上执行基础逻辑操作。P单元246具有从断言寄存器文件234读取 和对断言寄存器文件234写入的直接访问权。这些操作包括单寄存器一元操作, 诸如:NEG(否定),其将单个寄存器的每个位反转;BITCNT(位计数),其返 回单个寄存器中具有预定数字状态(1或0)的位的数量的计数;RMBD(最右 位检测),其返回从最低有效位位置(最右)到具有预定数字状态(1或0)的 第一位位置的位位置的数量;DECIMATE,其选择待输出的每个指令指定的第N (第1、第2、第4等)位;以及EXPAND,其将每个位重复指令指定的N次 (2、4等)。这些操作包括双寄存器二元操作,诸如:AND,其将两个寄存器的 数据按位取“与”;NAND,其将两个寄存器的数据按位取“与”和“非”;OR, 其将两个寄存器的数据按位取“或”;NOR,其将两个寄存器的数据按位取“或” 和“非”;以及XOR,其对两个寄存器的数据取“异或”。这些操作包括将数据从断言寄存器文件234的断言寄存器转移到另一个指定断言寄存器或转移到全 局矢量寄存器文件231中的指定数据寄存器。P单元246的普通预期用途包括用 于控制进一步SIMD矢量操作的SIMD矢量比较结果的操纵。BITCNT指令可以 用于对断言寄存器中“1”的数量进行计数以确定来自断言寄存器的有效数据元 素的数量。
图3说明全局标量寄存器文件211。存在16个独立的64位宽标量寄存器, 其标记为A0-A15。全局标量寄存器文件211的每个寄存器可以被读取或写入作 为64位的标量数据。所有的标量数据路径侧A 115功能单元(L1单元221、S1 单元222、M1单元223、N1单元224、D1单元225和D2单元226)可以对全 局标量寄存器文件211读取或写入。全局标量寄存器文件211可以被读取为32 位或读取为64位并且可以仅被写入为64位。指令的执行确定读取数据的尺寸。 矢量数据路径侧B 116功能单元(L2单元241、S2单元242、M2单元243、N2 单元244、C单元245和P单元246)可以在下面将详述的限制条件下经由交叉 路径117从全局标量寄存器文件211读取。
图4说明D1/D2局部寄存器文件214。存在16个独立的64位宽的标量寄 存器,其标记为D0-D16。D1/D2局部寄存器文件214的每个寄存器可以被读取 或写入作为64位的标量数据。所有的标量数据路径侧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中说明的实施例具有8个独立的 64位宽的标量寄存器,其标记为AL0-AL7。优选的指令编码(见图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单元221和S1单元222可以从 L1/S1局部寄存器文件212读取。
图6说明M1/N1局部寄存器文件213。图6中说明的实施例具有8个独立 的64位宽的标量寄存器,其被标记为AM0-AM7。优选的指令编码(见图13) 允许M1/N1局部寄存器文件213包括高达16个寄存器。图6的实施例仅实施8 个寄存器以降低电路尺寸和复杂性。M1/N1局部寄存器文件213的每个寄存器 可以被读取或写入作为64位的标量数据。所有的标量数据路径侧A 115功能单 元(L1单元221、S1单元222、M1单元223、N1单元224、D1单元225和D2单元226)可以对M1/N1局部寄存器文件213写入。仅M1单元223和N1单元 224可以从M1/N1局部寄存器文件213读取。
图7说明全局矢量寄存器文件231。存在16个独立的512位宽的矢量寄存 器。全局矢量寄存器文件231的每个寄存器可以被读取或写入作为64位的标量 数据,标记为B0-B15。指令类型确定数据尺寸。所有的矢量数据路径侧B 116 功能单元(L2单元241、S2单元242、M2单元243、N2单元244、C单元245 和P单元246)可以对全局矢量寄存器文件231读取或写入。标量数据路径侧A 115功能单元(L1单元221、S1单元222、M1单元223、N1单元224、D1单元225和D2单元226)可以在下面将详述的限制条件下经由交叉路径117从全 局矢量寄存器文件231读取。
图8说明P局部寄存器文件234。存了8个独立的64位宽的寄存器,其标 记为P0-P15。P局部寄存器文件234的每个寄存器可以被读取或写入作为64位 的标量数据。矢量数据路径侧B 116功能单元L2单元241、S2单元242、C单 元244和P单元246可以对P局部寄存器文件234写入。仅L2单元241、S2单 元242和P单元246可以从P局部寄存器文件234读取。P局部寄存器文件234 的普通预期用途包括:从L2单元241、S2单元242或C单元244写入一位SIMD 矢量比较结果;由P单元246操纵SIMD矢量比较结果;以及使用操纵结果用 于控制进一步的SIMD矢量操作。
图9说明L2/S2局部寄存器文件232。图9中说明的实施例具有8个独立的 512位宽的矢量寄存器。优选的指令编码(见图13)允许L2/S2局部寄存器文 件232包括高达16个寄存器。图9的实施例仅实施8个寄存器以降低电路尺寸 和复杂性。L2/S2局部矢量寄存器文件232的每个寄存器可以被读取或写入作为 64位的标量数据,标记为BL0-BL7。L2/S2局部矢量寄存器文件232的每个寄 存器可以被读取或写入作为512位的矢量数据,标记为VBL0-VBL7。指令类型 确定数据尺寸。所有的矢量数据路径侧B 116功能单元(L2单元241、S2单元242、M2单元243、N2单元244、C单元245和P单元246)可以对L2/S2局部 矢量寄存器文件232写入。仅L2单元241和S2单元242可以从L2/S2局部矢 量寄存器文件232读取。
图10说明M2/N2/C局部寄存器文件233。图10中说明的实施例具有8个 独立的512位宽的矢量寄存器。优选的指令编码(见图13)允许L1/S1局部寄 存器文件212包括高达16个寄存器。图10的实施例仅实施8个寄存器以降低 电路尺寸和复杂性。M2/N2/C局部矢量寄存器文件233的每个寄存器可以被读 取或写入作为64位的标量数据,标记为BM0-BM7。M2/N2/C局部矢量寄存器 文件233的每个寄存器可以被读取或写入作为512位的矢量数据,标记为 VML0-VML7。所有的矢量数据路径侧B 116功能单元(L2单元241、S2单元 242、M2单元243、N2单元244、C单元245和P单元246)可以对M2/N2/C 局部矢量寄存器文件233写入。仅M2单元233、N2单元244和C单元245可 以从M2/N2/C局部矢量寄存器文件233读取。
对由一侧的所有功能区可访问的全局寄存器文件和仅由一侧的一些功能单 元可访问的局部寄存器文件的规定是设计选择。本发明可以通过仅采用对应于 所公开的全局寄存器文件的一类寄存器文件来实践。
交叉路径117允许标量数据路径侧A115和矢量数据路径侧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:计 算地址;从二级统一缓存器(其可能需要来自更高级的存储器的缓存服务)提 取所定义的数据类型;执行数据类型操纵,诸如零扩展、符号扩展、数据元素 整理/调换(诸如矩阵转置);以及将数据直接传送到CPU 110中的程序化数据 寄存器文件。因此,流引擎125有益于对表现良好的数据的实时数字滤波操作。 流引擎125从相应的CPU释放这些存储器提取任务以使能其他处理功能。
流引擎125提供以下益处。流引擎125允许多维存储器访问。流引擎125 增加功能单元的可用带宽。由于流缓冲器旁通一级数据缓存器123,流引擎125 使缓存错失拖延(stalls)的数量最小化。流引擎125降低维持循环所需要的标 量操作的数量。流引擎125管理地址指针。流引擎125处理自动释放用于其他 计算的地址生成指令间隙(slot)以及D1单元224和D2单元226的地址生成。
CPU 110对指令流水线进行操作。指令在下面进一步描述的固定长度的指令 包中提取。所有指令需要相同数量的流水线阶段来用于提取和解码,但是需要 不同数量的执行阶段。
图11说明下列流水线阶段:程序提取阶段1110、分派和解码阶段1110以 及执行阶段1130。对于所有指令,程序提取阶段1110包括三级。对于所有指令, 分派和解码阶段包括三级。执行阶段1130根据指令包括一到四级。
提取阶段1110包括程序地址生成级1111(PG)、程序访问级1112(PA)和 程序接收级1113(PR)。在程序地址生成级1111(PG)期间,在CPU中产生程 序地址并且将读取请求发送到一级指令缓存器L1I的存储器控制器。在程序访 问级1112(PA)期间,一级指令缓存器L1I处理该请求、访问其存储器中的数 据并且将提取包发送到CPU边界。在程序接收级1113(PR)期间,CPU寄存 该提取包。
指令总是被一次提取十六个32位宽的间隙,构成提取包。图12说明单个 提取包的16个指令1201-1216。提取包在512位(16字)边界上对准。优选实 施例采用固定的32位指令长度。固定长度的指令是有利的,其原因有以下几个。 固定长度的指令使得解码器容易对准。恰当对准的指令提取可以将复数个指令 加载到并行指令解码器中。当预定指令对准存储在与固定指令包提取耦连的存 储器(提取包在512位边界上对准)中时,预定指令对准可以获得这种恰当对 准的指令提取。对准的指令提取允许并行解码器在指令尺寸的提取位上的操作。 可变长度的指令需要在每个指令可以被解码之前定位每个指令边界的初始步骤。固定长度指令集通常允许更规则的指令字段的布局。这简化每个解码器的 结构,有益于宽发布(wide issue)VLIW中央处理器。
个体指令的执行由每个指令中的p位部分地控制。优选地,该p位是32位 宽的间隙的位0。p位确定指令是否与下一个指令并行执行。从较低地址到较高 地址扫描指令。如果指令的p位是1,则下一个跟随的指令(较高存储器地址) 与该指令并行执行(与该指令在同一个周期内)。如果指令的p位是0,则下一 个跟随的指令在该指令之后的周期内被执行。
CPU 110和一级指令缓存器L1I 121流水线相互解耦。从一级指令缓存器 L1I返回的提取包可以采用不同数量的时钟周期,这取决于外部情况,诸如是否 在一级指令缓存器121中命中或在二级组合式缓存器130中命中。因此程序访 问级1112(PA)可以采用几个时钟周期来代替如在其他级中的1个时钟周期。
并行执行的指令组成执行包。在优选实施例中,执行包可以包括高达十六 个指令。执行包中任何两个指令都不可以使用相同的功能单元。间隙是以下五 个类型之一:1)在CPU 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)条件码扩展。这些间隙类型中的一些将在下面进一步解 释。
分派和解码阶段1110包括指令分派到适当执行单元级1121(DS);指令预 解码级1122(D1);以及指令解码及操作数读取级1222(D2)。在指令分派到适 当执行单元级1121(DS)期间,提取包被划分成执行包中并且分配给合适的功 能单元。在指令预解码级1122(D1)期间,源寄存器、目的地寄存器和相关联 的路径被解码用于执行功能单元中的指令。在指令解码及操作数读取级1222 (D2)期间,完成更加详细的单元解码,并且从寄存器文件读取操作数。
执行阶段1130包括执行级1131-1135(E1-E5)。不同类型的指令需要不同 数量的这些级以完成其执行。流水线的这些级对于理解CPU周期边界处的设备 状态起到重要的作用。
在执行1级1131(E1)期间,估计指令的条件并且对操作数进行操作。如 图11所图示说明的,执行1级1131可以接收来自流缓冲器1141和寄存器文件 之一(图示性示出为1142)的操作数。对于加载和存储指令,执行地址生成并 且将地址修改写入到寄存器文件。对于分支指令,PG阶段中的分支提取包受到 影响。如图11所图示说明的,加载和存储指令访问存储器(在此图示性示出为 存储器1151)。对于单周期指令,结果被写入到目的地寄存器文件。这假设指令 的任何条件都被估计为正确。如果条件被估计为错误,则在执行1级1131之后 指令不写入任何结果或不具有任何流水线操作。
在执行2级1132(E2)期间,加载指令将地址发送到存储器。存储指令将 地址和数据发送到存储器。如果发生饱和,则使结果饱和的单周期指令设置控 制状态寄存器(CSR)中的SAT位。对于2周期指令,结果被写入目的地寄存 器文件。
在执行3级1133(E3)期间,执行数据存储器访问。如果发生饱和,则使 结果饱和的任何多重指令设置控制状态寄存器(CSR)中的SAT位。对于3周 期指令,结果被写入目的地寄存器文件。
在执行4级1134(E4)期间,加载指令将数据带到CPU边界。对于4周期 指令,结果被写入目的地寄存器文件。
在执行5级1135(E5)期间,加载指令将数据写入到寄存器中。这在图11 中通过从存储器1151到执行5级1135的输入来图示说明。
图13说明本发明使用的功能单元指令的指令编码1300的示例。本领域技 术人员将认识到其他执行编码是可行的并且在本发明的范围内。每个指令由32 位组成并且控制各个可控功能单元(L1单元221、S1单元222、M1单元223、 N1单元224、D1单元225、D2单元226、L2单元241、S2单元242、M2单元 243、N2单元244、C单元245和P单元246)中的一个的操作。位字段被定义 如下。
creg字段1301(位29至位31)和z位1302(位28)是用于条件指令的可 选字段。这些位被用于条件指令以识别断言寄存器和条件。z位1302(位28) 指示断言是否基于断言寄存器中的零或非零。如果z=1,则测试是针对等于零的, 如果z=0,则测试是针对非零的。creg=0并且z=0的情况被视为一直正确以允许 无条件指令执行。creg字段1301和z字段1302如表1所示被编码在指令中。
表1
条件指令的执行是根据存储在指定数据寄存器中的值而有条件的。对于所 有的指令单元,该数据寄存器在全局标量寄存器文件211中。注意z位栏中的“z” 指的是上面提到的零/非零比较选择并且“x”是不关心状态。该编码可以仅指定 16个全局寄存器的子集作为断言寄存器。做出该选择以保存指令编码中的位。 注意无条件指令不具有这些可选位。优选地,对于无条件指令,字段1301和1302 中的这些位(28到31)被用作附加操作码位。
dst字段1303(位23到位27)指定相应寄存器文件中的寄存器作为指令结 果的目的地。
src2/cst字段1304(位18到位22)具有几个含义,其取决于指令操作码字 段(位4到位12用于所有指令,并且附加地,位28到位31用于无条件指令)。 第一含义指定相应寄存器文件的寄存器作为第二操作数。第二含义是直接常量。 根据指令类型,这被视为扩展到指定数据长度的无符号整数和零或者视为扩展 到指定数据长度的有符号整数和符号。
src1字段1305(位13到位17)指定相应的寄存器文件中的寄存器作为第一 源操作数。
用于所有指令的操作码字段1306(位4到位12)(并且附加地用于无条件 指令的位28到位31)指定指令的类型并且指示适当的指令选项。这包括所使用 并且执行操作的功能单元的明确名称。除下面详述的指令选项外,操作码的详 细解释超出本发明的范围。
e位1037(位2)仅用于直接常量指令,其中常量可以被扩展。如果e=1, 则直接常量以下面详述的方式扩展。如果e=0,则直接常量不被扩展。在该情况 下,直接常量由src2/cst字段1304(位18到位22)指定。注意该e位1307仅 用于一些指令。因此,通过使用恰当的编码,该e位1307可以从不需要它的指 令中省略并且该位用作附加操作码位。
s位1307(位1)指明标量数据路径侧A 115或矢量数据路径侧B 116。如 果s=0,则选择标量数据路径侧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位1308(位0)标记执行包。p位确定该指令是否与随后的指令并行执行。 从较低地址到较高地址扫描p位。如果对于当前指令p=1,则下一个指令与当前 指令并行执行。如果对于当前指令p=0,则下一个指令在当前指令之后的周期中 执行。并行执行的所有指令组成执行包。执行包可以包含高达12个指令。执行 包中的每个指令必须使用不同的功能单元。
存在两种不同的条件码扩展间隙(slot)。每个执行包可以包含这些独特的 32位条件码扩展间隙中的每一个,对于同一执行包中的指令,这32位条件码扩 展间隙包含4位creg/z字段。图14说明用于条件码扩展间隙0的编码并且图15 说明用于条件码扩展间隙1的编码。
图14说明用于具有32位的条件码扩展间隙0的编码。字段1401(位28到 位31)指定分配到同一执行包中的L1单元221指令的4个creg/z位。字段1402 (位27到位24)指定分配到同一执行包中的L2单元241指令的4个creg/z位。 字段1403(位19到位23)指定分配到同一执行包中的S1单元222指令的4个 creg/z位。字段1404(位16到位19)指定分配到同一执行包中的S2单元242 指令的4个creg/z位。字段1405(位12到位15)指定分配到同一执行包中的 D1单元225指令的4个creg/z位。字段1406(位8到位11)指定分配到同一执 行包中的D2单元245指令的4个creg/z位。字段1407(位6和位7)是未使用 的/保留的。字段1408(位0到位5)被编码一组独特位(CCEX0)以识别条件 码扩展间隙0。一旦检测到条件码扩展间隙0的该独特ID,则采用相应的creg/z 位来控制同一执行包中任意的L1单元221、L2单元241、S1单元222、S2单元 242、D1单元224、D2单元225指令的条件执行。这些creg/z位如表1所示来 解读。如果相应的指令是有条件的(包括creg/z位),则条件码扩展间隙0中的 相应位覆盖(override)指令中的条件码位。注意执行包不能具有指向特定执行 单元的不止一个指令。指令的执行包不能包括不止一个条件码扩展间隙0。因此 creg/z位到功能单元指令的映射是清楚的。将creg/z位设置为等于“0000”使得 指令是无条件的。因此恰当编码的条件码扩展间隙0可以使得一些相应的指令 是有条件的并且一些指令是无条件的。
图15说明用于具有32位的条件码扩展间隙1的编码。字段1501(位28到 位31)指定分配到同一执行包中的M1单元223指令的4个creg/z位。字段1502 (位27到位24)指定分配到同一执行包中的M2单元243指令的4个creg/z位。 字段1503(位19到位23)指定分配到同一执行包中的C单元245指令的4个 creg/z位。字段1504(位16到位19)指定分配到同一执行包中的N1单元224 指令的4个creg/z位。字段1505(位12到位15)指定分配到同一执行包中的 N2单元244指令的4个creg/z位。字段1506(位5到位11)是未使用的/保留 的。字段1507(位0到位5)被编码一组独特位(CCEX1)以识别条件码扩展 间隙1。一旦检测到条件码扩展间隙1的该独特ID,则采用相应的creg/z位来 控制同一执行包中任意的M1单元223、M2单元243、C单元245、N1单元224 和N2单元244指令的条件执行。这些creg/z位如表1中所示来解读。如果相应 的指令是有条件的(包括creg/z位),则条件码扩展间隙1中相应的位超控指令 中的条件码位。注意执行包不可以具有指向特定执行单元的不止一个指令。指 令的执行包不可以包括不止一个条件码扩展间隙1。因此creg/z位到功能单元指 令的映射是清楚的。将creg/z位设置为等于“0000”来使得指令是无条件的。 因此恰当编码的条件码扩展间隙1可以使得一些指令是有条件的并且一些指令 是无条件的。
如上面结合图13所描述,条件码扩展间隙0和条件码扩展间隙1两者都可 以包括p位以定义执行包。在优选实施例中,如图14和图15中所图示说明, 码扩展间隙0和条件码扩展间隙1优选具有一直被编码为1的位0(p位)。因 此,条件码扩展间隙0和条件码扩展间隙1都不可以在执行包的最后一个指令 间隙中。
存在两个不同的常量扩展间隙。每个执行包可以包含这些独特32位常量扩 展间隙中的每一个,32位常量扩展间隙包括将被串接(concatenate)为高阶位 的27位与5位常量字段1305以形成32位常量。如上面的指令编码描述所提到 的,仅一些指令将src2/cst字段1304定义为常量而不是源寄存器标识符。这些 指令中的至少一些可以采用常量扩展间隙来将该常量扩展到32位。
图16说明常量扩展间隙0的字段。每个执行包可以包括常量扩展间隙0的 一个实例和常量扩展间隙1的一个实例。图16说明常量扩展间隙0 1600包括两 个字段。字段1601(位5到位31)组成扩展的32位常量的27个最高有效位, 该扩展的32位常量包括作为五个最低有效位的目标指令scr2/cst字段1304。字 段1602(位0到位4)被编码一组独特位(CSTX0)以识别常量扩展间隙0。在 优选实施例中,常量扩展间隙0 1600可以仅被用于扩展同一执行包中的L1单元 221指令、D1单元225指令中的数据、S2单元242指令、D2单元226指令中 的偏移、M2单元243指令、N2单元244指令、分支指令或C单元245指令中 的一个的常量。常量扩展间隙1中除了位0到位4被编码为一组独特位(CSTX1) 以识别常量扩展间隙1以外与常量扩展间隙0类似。在优选实施例中,常量扩 展间隙1可以仅被用于扩展同一执行包中的L2单元241指令、D2单元226指 令中的数据、S1单元222指令、D1单元225指令中的偏移、M1单元223指令 或N1单元224指令中的一个的常量。
以如下方式使用常量扩展间隙0和常量扩展间隙1。目标指令必须具有允许 常量规范的类型。如本领域已知的,这通过用如上面关于scr2/cst字段1304所 描述的常量的最低有效位来代替一个输入操作数寄存器规范字段来实现。指令 解码器113根据指令操作码位确定这种情况(其被称为直接字段)。目标指令还 包括一个常量扩展位(e位1307),该常量扩展位专用于发出指定的常量没有被 扩展(优选地,常量扩展位=0)还是常量被扩展(优选地,常量扩展位=1)的 信号。如果指令解码器113检测到常量扩展间隙0或常量扩展间隙1,其为对应 于检测到的常量扩展间隙的指令进一步检查该执行包内的其他指令。仅当一个 相应指令具有等于1的常量扩展位(e位1307)时进行常量扩展。
图17是说明常量扩展的部分框图1700。图17假设指令解码器113检测同 一执行包中的常量扩展间隙和相应的指令。指令解码器113将来自常量扩展间 隙的27个扩展位(位字段1601)以及来自相应的指令的5个常量位(位字段 1305)供应到串接器1701。串接器1701根据这两部分形成单个32位字。在优 选实施例中,来自常量扩展间隙的27个扩展位(位字段1601)是最高有效位并 且5个常量位(位字段1305)是最低有效位。该组合的32位字被供应到多路复 用器1702的一个输入。来自相应的指令字段1305的5个常量位将第二输入供 应到多路复用器1702。多路复用器1702的选择受常量扩展位的状态控制。如果 常量扩展位(e位1307)是1(被扩展),则多路复用器1702选择串接的32位 输入。如果常量扩展位是0(未扩展),则多路复用器1702选择来自相应的指令 字段1305的5个常量位。多路复用器1702将该输出供应到符号扩展单元1703 的输入。
符号扩展单元1703根据来自多路复用器1703的输入形成最终操作数值。 符号扩展单元1703接收控制输入标量/矢量和数据尺寸。标量/矢量输入指示相 应的指令是标量指令还是矢量指令。数据路径侧A 115的功能单元(L1单元221、 S1单元222、M1单元223、N1单元224、D1单元225和D2单元226)可以仅 执行标量指令。指向这些功能单元中的一个的任何指令都是标量指令。数据路 径侧B 116的功能单元L2单元241、S2单元242、M2单元243、N2单元244 和C单元245可以执行标量指令或矢量指令。指令解码器113根据操作码位确 定指令是标量指令还是矢量指令。P单元246可以仅执行标量指令。数据尺寸可 以是8位(字节B)、16位(半字H)、32位(字W)或64位(双字D)。
表2列出用于各种选项的符号扩展单元1703的操作。
表2
如上面结合图13所描述的,常量扩展间隙0和常量扩展间隙1两者都可以 包括p位以定义执行包。在优选实施例中,如在条件码扩展间隙的情况中,常 量扩展间隙0和常量扩展间隙1优选具有总被编码为1的位0(p位)。因此, 常量扩展间隙0和常量扩展间隙1都不可以在执行包的最后一个指令间隙中。
执行包包括常量扩展间隙0或1以及标记为常量扩展(e位=1)的不止一个 相应指令在技术上是可行的。对于常量扩展间隙0,这将意味着执行包中的L1 单元221指令、D1单元225指令中的数据、S2单元242指令、D2单元226指 令中的偏移、M2单元243指令或N2单元244指令中不止一个具有为1的e位。 对于常量扩展间隙1,这将意味着执行包中的L2单元241指令、D2单元226 指令中的数据、S1单元222指令、D1单元225指令中的偏移、M1单元223指 令或N1单元224指令中不止一个具有为1的e位。将相同的常量扩展供应到不 止一个指令不被预计为是有用的功能。因此,在一个实施例中,指令解码器113 可以确定这种情况是无效操作并且不被支持。替代地,该组合可以由施加到标 记为常量扩展的每个相应功能单元指令的常量扩展间隙的扩展位支持。
L1单元221、S1单元222、L2单元241、S2单元242和C单元245通常以 单指令多数据(SIMD)模式进行操作。在该SIMD模式中,相同的指令被施加 到来自两个操作数的打包数据。每个操作数保持设置在预定间隙中的复数个数 据元素。SIMD操作通过在数据边界处的进位控制来启用。这种进位控制使能对 变化的数据宽度进行的操作。
图18说明进位控制。与门1801接收操作数宽度的算法逻辑单元(对于标 量数据路径侧A 115功能单元是64位,并且对于矢量数据路径侧B 116功能单 元是512位)内的位N的进位输出。与门1801还接收将在下面进一步解释的进 位控制信号。与门1801的输出被供应到操作数宽度的算法逻辑单元的位N+1的 进位输入。与门(诸如与门1801)被设置在可能的数据边界处的每一对数位之 间。例如,对于8位数据,这种与门将在位7和位8、位15和位16、位23和 位24等之间。每一个这种与门接收相应的进位控制信号。如果数据尺寸是最小 的,则每个进位控制信号是0,从而有效地阻挡相邻位之间的进位传输。如果选 择的数据尺寸需要两个算法逻辑单元区段,则相应的进位控制信号是1。下面的 表3示出诸如矢量数据路径侧B 116功能单元所使用的512位宽的操作数的情况 下的示例进位控制信号,其可以被分为8位区段、16位区段、62位区段、64位 区段、128位区段或256位区段。在表3中,上面的32位控制上面几位(位128 到位511)进位,并且下面的32位控制下面几位(位0到位127)进位。不需 要对最高有效位的进位输出进行控制,因此仅需要63个进位控制信号。
表3
本领域中典型的是对2的整数幂(2N)的数据尺寸进行操作。然而,该进 位控制技术不限于2的整数幂。本领域技术人员将理解如何将该技术应用到其 他数据尺寸或其他操作数宽度。
在优选实施例中,至少L单元241和S单元242采用使用断言寄存器文件234中的寄存器的两种类型的SIMD指令。在优选实施例中,所有这些SIMD矢 量断言指令在指令指定的数据尺寸上操作。数据尺寸可以包括字节(8位)数据、 半字(16位)数据、字(32位)数据、双字(64位)数据、四倍字(128位) 数据以及半矢量(256位)数据。在这些指令类型的第一类型中,功能单元(L 单元241或S单元242)对两个通用数据寄存器中的打包数据执行SIMD比较并 且将结果供应到断言数据寄存器。指令指定数据尺寸、两个通用数据寄存器操 作数和目的地断言寄存器。在优选实施例中,每个断言数据寄存器包括对应于 通用数据寄存器的每个最小数据尺寸部分的一个位。在当前实施例中,通用数 据寄存器是512位(64字节)并且断言数据寄存器是64位(8字节)。断言数 据寄存器的每个位对应于通用数据寄存器的8个位。在指定的数据尺寸(8、16、 32、64、128或256位)上执行比较。如果比较为真,则功能单元将“1”供应 到对应于该数据尺寸部分的所有断言寄存器位。如果比较为假,则功能单元将 “0”供应到对应于该数据尺寸部分的所有断言寄存器位。在优选实施例中,启 用的比较操作包括:“小于”、“大于”以及“等于”。
在这些指令类型的第二类型中,功能单元(L单元241或S单元242)基于 断言数据寄存器中的数据状态单独对通用数据寄存器中的打包数据执行第一 SIMD操作或第二SIMD操作。指令指定数据尺寸、一个或两个通用数据寄存器 操作数、控制断言寄存器和通用数据寄存器目的地。例如,功能单元可以针对 两个矢量操作数的每个数据尺寸部分选择第一操作数的第一数据元素或第二操 作数的第二数据元素以存储在目的地寄存器中,这种选择取决于断言数据寄存 器中的相应位的1/0状态。在第二示例中,信号矢量操作数的数据元素可以被保 存到存储器或不保存,这取决于断言存储器的相应位的数据。
P单元245的操作允许基于多于一个矢量比较的各种复合矢量SIMD操作。 例如,可以使用两个比较来进行范围确定。在SIMD操作中,候选矢量与具有 打包在第一数据寄存器内的范围的最小值的第一矢量基准进行比较。“大于”结 果是标量数据,其中对应于SIMD数据宽度的位被设置为0或1,这取决于SIMD 比较。该结果被存储在第一断言数据寄存器中。进行候选矢量与具有打包在第 二数据寄存器内的范围的最大值的第二基准矢量的第二SIMD比较,产生另一 标量,其“小于”结果被存储在第二断言寄存器中。然后P单元将第一断言寄 存器和第二断言寄存器进行“与(AND)”操作。“AND”结果指示候选矢量的 每个SIMD数据部分是在范围内还是在范围外。“AND”结果的P单元BITCNT 指令可以产生在比较范围内的数据元素的计数。P单元ENG功能可以用于:将 小于比较结果转换成大于或等于比较结果,将大于比较结果转换成小于或等于 比较结果,或者将等于比较结果转换成不等于比较结果。
图19说明本发明的流引擎的概念视图。图19说明单个流的处理过程。流 引擎1900包括流地址生成器1901。流地址生成器1901连续生成流元素的地址 并且将这些元素地址供应到系统存储器1910。存储器1910调用存储在元素地址 处的数据(数据元素)并且将这些数据元素供应到数据先进先出(FIFO)存储 器1902。数据FIFO 1902在存储器1910和CPU1920之间提供缓冲。数据格式 化器1903接收来自数据FIFO存储器1902的数据元素并且根据流定义来提供数 据格式化。该处理过程将在下面描述。流引擎1900将来自数据格式化器1903 的格式化数据元素供应到CPU 1920。CPU 1920上的程序消耗该数据并且生成输 出。
流元素通常存在于正常存储器中。存储器自身不为该流规定特定结构。程 序定义流并且因此通过指定以下流属性来规定结构:流的第一元素的地址;流 中的元素的尺寸和类型;流中的数据的格式化;以及与流相关联的地址序列。
流引擎根据穿行整个存储器的指针来定义流的元素的地址序列。多级嵌套 循环控制指针所采取的路径。循环级的迭代计数指示该级重复的次数。维度给 出该循环级的指针位置之间的距离。
在基础正向流中,最内部循环一直物理消耗来自存储器的连续元素。该最 内部循环的隐式维度是1个元素。指针自身以连续递增的次序逐个元素地移动。 在内部循环外部的每个级中,该循环基于该循环级的维度的尺寸将指针移动到 新位置。
这种形式的寻址允许程序以小数量的参数指定穿过存储器的规则路径。表4 列出基础流的寻址参数。
表4
根据本发明的优选实施例,ELEM_BYTES的范围是从1到64字节,如表5 所示:
ELEM_BYTES 流元素长度
000 1字节
001 2字节
010 4字节
011 8字节
100 16字节
101 32字节
110 64字节
111 保留
表5
上面的定义将流的连续元素映射到存储器中的增加的地址。这对大部分(并 非所有的)算法效果良好。一些算法通过以降低的存储器地址、反向流寻址的 方式读取元素来更好的服务。例如,根据以下公式,离散卷积计算矢量点积:
在大部分DSP代码中,f[]和g[]表示存储器中的阵列。对于每个输出,算法以正向方向读取f[],但是以反向方向读取g[]。实际的滤波器将[x]和[t-x]的指数范围 限制到有限数量的元素。为了支持这种模式,流引擎支持以降低的地址顺序读 取元素。
矩阵乘法运算对流引擎提出了独特的问题。矩阵乘积中的每个元素是来自 第一矩阵的行与来自第二矩阵的列之间的矢量点积。程序通常全部以行主序或 列主序存储矩阵。行主序将单个行的所有元素连续存储在存储器中。列主序将 单个列的所有元素连续存储在存储器中。矩阵通常以与语言的默认阵列顺序相 同的顺序存储。作为结果,矩阵乘法运算中的两个矩阵中只有一个映射到流引 擎的2维流定义。在典型的示例中,第一索引逐步通过第一阵列上的列而逐步 通过第二阵列上的行。该问题并不是流引擎所特有的。矩阵乘法运算的访问模 式不能很好地符合大多数通用存储器分级体系。一些软件库转置两个矩阵中的 一个,使得在乘法运算期间两者均以逐行(或逐列)方式访问。流引擎用转置 的流来支持隐式矩阵转置。转置的流避免在存储器中明确转换数据的成本。代 替以严格连续元素顺序访问数据,流引擎以其横向顺序有效交换内部两个循环 维度,沿第二维度将元素提取到连续矢量通道中。
该算法能够起作用,但是对于小元素尺寸的实施是不切实际的。一些算法 工作于多个列和行在一起的矩阵拼接。因此,流引擎定义单独的转置粒度。硬 件规定最小的粒度。转置粒度还必须至少是与元素尺寸一样大的。转置粒度导 致流引擎在沿维度1移动之前从维度0提取一个或多个连续元素。当粒度等于 元素尺寸时,这导致从行主序阵列提取单个列。否则,粒度指定每次从行主序 阵列提取2个、4个或更多个列。通过交换该描述中的行和列,这也适用于列主 序布局。参数GRANULE指示以字节为单位的转置粒度。
另一种常见矩阵乘法运算技术交换矩阵乘法的最里面的两个循环。当横穿 另一个矩阵的行读取时,生成的内部循环不再向下读取一个矩阵的列。例如, 该算法可以将一项提升到内部循环以外,用标量值将其代替。在矢量机上,最 内部循环可以通过在单个标量与矢量相乘之后进行矢量求和来非常有效地实 现。本发明的中央处理单元核110缺乏标量与矢量乘法。替代地,程序必须横 穿矢量的长度重复标量值并且使用矢量与矢量乘法。本发明的流引擎用元素重 复模式直接支持该使用模式和相关的使用模式。在该模式中,流引擎读取比全 矢量尺寸更小的颗粒/粒集(granule)并且复制该颗粒以填充下一个矢量输出。
流引擎将每个复数处理为具有两个子元素的单个元素,其给出了复数的实 部和虚部(直角坐标)或量值部分和角度部分(极坐标)。不是所有的程序或外 围设备都与这些子元素应该存在于存储器中的顺序一致。因此,流引擎提供了 无成本互换复数的两个子元素的能力。该特征互换元素的一半而不解释元素的 内容并且可以用于互换任意类型的子元素对,而不仅仅是复数。
算法通常优选以高精度工作,但是高精度值比较低精度值需要更多的存储 设备和带宽。通常,程序将在存储器中以低精度存储数据,将这些值提升到较 高精度以便计算,然后将这些值降低到较低精度以便存储。流引擎通过允许算 法指定一种类型提升水平来直接支持这种方式。在本发明的优选实施例中,每 个子元素可以以整数类型的符号扩展或零扩展被提升到较大类型尺寸。同样可 行的是流引擎可以支持浮点提升,其分别将16位和32位浮点值提升到32位和 64位格式。
流引擎将流定义为数据元素的离散序列,中央处理单元核110消耗连续打 包成矢量的数据元素。矢量与流的相似之处在于它们包含多个同类元素和一些 隐式序列。因为流引擎读取流,但是中央处理单元核110消耗矢量,因此流引 擎必须以一致的方式将流映射到矢量上。
矢量由相同尺寸的通道(lane)组成,每个通道包含子元素。中央处理单元 核110将矢量的最右边的通道指示为通道0,而不管设备的当前端字节序 (endian)模式如何。通道编号从右到左递增。矢量内的通道的实际数量根据矢 量的长度和子元素的数据尺寸变化。
图20说明格式化器1903的格式化操作的序列。格式化器1903包括三个区 段:输入区段2010;格式化区段2020;和输出区段2030。输入区段2010接收 从由流地址生成器1901访问的系统存储器1910调用的数据。该数据可以通过 线性提取流2011或转置提取流2012来实现。
格式化区段2020包括各种格式化块。由格式化器1903通过这些块执行的 格式化将在下面进一步描述。复数互换块2021可选地将形成复数元素的两个子 元素互换。类型提升块2022可选地将每个数据元素提升到更大数据尺寸。提升 包括用于无符号整数的零扩展和用于有符号整数的符号扩展。抽取(decimation) 块2023可选地抽取数据元素。在优选实施例中,抽取可以是2:1即每隔另一个 数据元素保留一个,或者是4:1即每四个数据元素保留一个。元素重复块2024 可选地使个体数据元素重复。在优选实施例中,该数据元素重复是2的整数幂 (2N,其中N是整数),包括2倍、4倍、8倍、16倍、32倍和64倍。在优选 实施例中,数据重复可以在多个目的地矢量上扩展。矢量长度掩码/组重复块2025 具有两个主功能。独立指定的矢量长度VECLEN控制供应到每个输出数据矢量 的数据元素。当组重复关闭时,输出数据矢量中的过量通道被零填充并且这些 通道被标记为无效。当组重复开启时,指定的矢量长度的输入数据元素被重复 以填充输出数据矢量。
输出区段2030保持数据以用于输出到相应的功能单元。用于CPU 2031的 寄存器和缓冲器存储将被中央处理单元核110的功能单元用作操作数的格式化 数据矢量。
图21说明矢量中的通道分派的第一示例。矢量2100被划分成8个64位通 道(8×64位=512位的矢量长度)。通道0包括位0至位63;通道1包括位64 至位125;通道2包括位128至位191;通道3包括位192至位255;通道4包 括位256至位319;通道5包括位320至位383;通道6包括位384至位447; 通道7包括位448至位511。
图22说明矢量中的通道分派的第二示例。矢量2210被划分成16个32位 通道(16×32位=512位的矢量长度)。通道0包括位0至位31;通道1包括位 32至位63;通道2包括位64至位95;通道3包括位96至位127;通道4包括 位128至位159;通道5包括位160至位191;通道6包括位192至位223;通 道7包括位224至位255;通道8包括位256至位287;通道9包括位288至位 319;通道10包括位320至位351;通道11包括位352至位387;通道12包括 位388至位415;通道13包括位416至位447;通道14包括位448至位479; 并且通道15包括位480至位511。
流引擎将最里面的流维度直接映射到矢量通道。其将该维度内的靠前的元 素映射到较低的通道编号并且将靠后的元素映射到较高的通道编号。无论该特 定流以增加地址顺序提前还是以减小地址顺序提前,这都是正确的。无论流如 何定义顺序,流引擎以增加通道的顺序将元素存放到矢量中。对于非复合数据, 其将第一元素放置在中央处理单元核110提取的第一矢量的通道0中,将第二 元素放在通道1中,以此类推。对于复合数据,流引擎将第一元素放置在通道0 和通道1中,将第二元素放置在通道2和通道3中,以此类推。不管流方向如 何,元素内的子元素保持相同的相对顺序。对于非互换的复合元素,这将每对 中具有较低地址的子元素放置在偶数编号的通道中,并且将每对中具有较高地 址的子元素放置在奇数编号的通道中。互换的复合元素反转该映射。
流引擎用中央处理单元核110从最内部流维度所能提取的尽可能多的元素 填充CPU提取的每个矢量。如果最内部维度不是矢量长度的倍数,则流引擎通 过填充零将该维度拉长到多倍矢量长度。如在下面记载的,流引擎也将这些通 道标记为无效。因此对于较高维度的流,来自外部维度的每次迭代的第一元素 抵达矢量的通道0。流引擎总是将最内部维度映射到矢量中的连续通道。对于转 置的流,如果转置交换了维度1和维度0,则最内部维度由沿维度1而非维度0 的子元素的群组构成,因为转置交换了这两个维度。
二维流相比于一维流表现出更大的多样化。基础二维流从较大的矩形中提 取出较小的矩形。转置的二维流逐列而非逐行读取矩形。第二维度与第一维度 重叠的循环流执行有限冲击响应(FIR)滤波分接,其反复循环或对提供输入样 品的滑动窗口的样品进行FIR滤波。
图23说明基础二维流。由ELEM_BYTES、ICNT0、DIM1和ICNT1代表 的内部两个维度给出充分的灵活性以描述从具有维度2311和2312的较大矩形 2310去除具有维度2321和2322的较小矩形2320。在该示例中,矩形2320是 64位值的9×13的矩形并且矩形2310是较大的11×19的矩形。下面的流参数 定义该流:
ICNT0=9
ELEM_BYTES=8
ICNT1=13
DIM1=88(11乘以8)
因此,0维度2311中的迭代计数是9。1方向2322中的迭代计数是13。注意 ELEM_BYTES仅缩放最内部维度。第一维度具有ELEM_BYTES尺寸的ICNT0 元素。流地址生成器不缩放外部维度。因此,DIM1=88,其是11个元素,其 中每个元素被缩放8个字节。
图24说明该示例流内的元素的顺序。流引擎以图示为顺序2400的顺序提 取该流的元素。前9个元素来自矩阵2320的第一行,从左到右为跃程(hop)1 到跃程8。第10个元素至第24个元素来自第二行,等等。当流从第9个元素移 动到第10个元素时(图24中的跃程9),流引擎基于指针在内部循环的开始处 的位置,而不是指针在第一维度的末端处结束的地方,来计算新位置。这使得 DIM1独立于ELEM_BYTES和ICNT0。DIM1一直代表每个连续行的第一字节 之间的距离。
转置的流在沿维度0访问之前沿维度1访问。以下示例说明一对转置的流, 其具有变化的转置粒度。图25说明从具有维度2511和2512的较大矩形2510 (14×13)中提取出具有维度2521和2522的较小矩形2520(12×8)。在图25 中ELEM_BYTES等于2。
图26说明流引擎将如何提取本示例中具有4字节转置粒度的流。提取模式 2600从每个行提取元素对(因为值为4的粒度是值为2的ELEM_BYTES的两 倍),但是除此之外向下移动各列。一旦它到达一对列的底部,其用下一对列重 复该模式。
图27说明流引擎将如何提取本示例中具有8字节转置粒度的流。整体结构 保持相同。如提取模式2700所示,流引擎从每一行提取4个元素(因为值为8 的粒度是值为2的ELEM_BYTES的四倍),随后在列上移动到下一行。
迄今为止检查的流从存储器恰好读取每个元素一次。流可以从存储器读取 给定元素多次,实际上在一片存储器上循环。FIR滤波器表现出两个常见的循环 模式。FIR重新读取每个输出的相同的滤波分接。FIR还从滑动窗口读取输入样 品。两个连续的输出将需要来自两个重叠窗口的输入。
图28说明流引擎2800的细节。流引擎2800包含三个主区段:流0 2810; 流1 2820;以及共享的L2接口2830。流0 2810和流1 2820两者都包含并行操 作的相同硬件。流0 2810和流1 2820两者共享L2接口2830。每个流2810和 2820提供每周期具有高达512位/周期的中央处理单元核110。流引擎架构通过 其专用流路径和共享的成双L2接口来使能这一效果。
每个流引擎2800包括专用的6维流地址生成器2811/2821,其每一个可以 每周期产生一个新的非对准请求。地址生成器2811/2821输出与由流参数定义的 序列中的元素重叠的512位对准地址。这将在下面进一步描述。
每个地址生成器2811/2811连接到专用微工作台后援缓冲器(μTLB) 2812/2822。μTLB 2812/2822每个周期将单个48位虚拟地址转换为44位物理地 址。每个μTLB 2812/2822具有8个条目,其覆盖具有4KB页的最小32KB或具 有2MB页的最大16MB。每个地址生成器2811/2811每周期产生两个地址。μTLB 2812/2822每周期仅转化1个地址。为了保持吞吐量,流引擎2800利用大多数 流基准将在同一4kB页内这一事实。因此,地址转化不修改地址的位0至位11。 如果aout0和aout1排列在同一4KB页中(aout0[47:12]与aout1[47:12]相同),则 μTLB 2812/2822仅转化aout0并且重新使用两个地址中的较高位的转化。
转化的地址排列在命令队列2813/2823中。这些地址与来自相应的存储分派 和跟踪块2814/2824的信息对准。流引擎2800不明确管理μTLB 2812/2822。系 统存储器管理单元(MMU)根据需要在环境切换期间使μTLB无效。
存储分派和跟踪块2814/2824管理流的内部存储设备,探索数据的重新使用 并且跟踪每片数据的寿命。这将在下面进一步描述。
引用队列2815/2825存储由相应的地址生成器2811/2821产生的引用的序 列。该信息驱动数据格式化网络,使得其可以将数据以正确的顺序呈现给中央 处理单元核110。引用队列2815/2825中的每个词条包含用于从数据存储器读出 数据并将其对准用于中央处理单元核110的必要信息。引用队列2815/2825在每 个间隙中维持表6中列出的以下信息:
表6
当地址生成器2811/2821产生新地址时,存储分派和跟踪块2814/2824将引 用插入引用队列2815/2825中。当数据变得可用并且流头寄存器中存在空间时, 存储分派和跟踪块2814/2824从引用队列2815/2825中移除引用。当存储分派和 跟踪块2814/2824从引用队列2815/2825中移除间隙引用并且格式化数据时,其 检查这些引用是否代表对相应间隙的最近引用。存储分派和跟踪块2814/2824比 较去除指针的引用队列2815/2825与间隙的记录的Last Reference。如果它们匹 配,则存储分派和跟踪块2814/2824一旦处理完数据就将间隙标记为未激活。
流引擎2800具有用于任意数量元素的数据贮存器2816/2826。深度缓冲允 许流引擎领先于该流进行提取,从而隐藏存储器系统延迟。正确的缓冲量可能 在每个产品代际(product generation)之间发生变化。在当前优选实施例中,流 引擎2800为每个流贡献32个间隙。每个间隙持有64个字节的数据。
蝴蝶网络/蝶形网络(Butterfly network)2817/2827由7级蝴蝶网络构成。 蝴蝶网络2817/2827接收128字节的输入并且产生64字节的输出。该蝴蝶网络 的第一级实际是半级。其收集来自匹配未对准提取的两个间隙的字节并且将它 们合并为单个旋转的64字节阵列。剩余的6级形成标准的蝴蝶网络。蝴蝶网络 2817/2827执行以下操作:将下一个元素向下旋转到字节通道0;如果被请求, 则以2次幂提升数据类型;如果被请求,则将复数的实部和虚部互换;如果中 央处理单元核110目前处于大端字节序(endian)模式,将大端字节序转换为小 端字节序。用户指定元素尺寸、类型提升以及实/虚互换作为流的参数的一部分。
流引擎2800尝试在中央处理单元核110对数据有需求之前提取并格式化该 数据,使得其可以维持充足的吞吐量。流头寄存器2818/2828提供少量的缓冲, 使得该过程保留充足的流水线化。除了流引擎2800提供充足的吞吐量这一事实 以外,流头寄存器2818/2828在架构上不是直接可见的。每个流还具有流有效寄 存器2819/2829。有效寄存器2819/2829指示相应的流头寄存器2818/2828中的 哪个元素有效。
两个流2810/2820共享一对独立的L2接口2830:L2接口A(IFA)2833和 L2接口B(IFB)2834。对于1024位/周期的聚合带宽,每个L2接口直接向L2 控制器提供512位/周期的吞吐量。L2接口使用基于信用的多核总线架构(MBA) 协议。L2控制器为每个接口分配其自身的命令信用池(pool of command credits)。 当读取L2RAM、L2缓存器和多核共享存储器控制器(MSMC)存储器(在下 文描述)时,该池应该具有足够的信用以使得每个接口可以发送足够的请求来 获得充足的回读(read-return)带宽。
为了使性能最大化,两个流都可以使用这两个L2接口,从而允许单个流发 送2个请求/周期的峰值命令率。每个接口优选一个流在另一个流之上,但是该 偏好对于每个请求来说是动态变化的。IFA 2833和IFB 2834一直优选相反的流, 当IFA 2833优选流0时,IFB 2834优选流1,反之亦然。
在每个接口2833/2834之前的仲裁器2831/2832在其具有可用信用的每个周 期上应用以下基础协议。仲裁器2831/2832检查优选的流是否具有准备好发送的 命令。如果是,则仲裁器2831/2832选择该命令。仲裁器2831/2832接下来检查 替代的流是否具有准备好发送的至少两个请求或者一个命令并且没有信用。如 果是,则仲裁器2831/2832从该替代流中拉出命令。如果任一个接口发布命令, 则对于下一个请求,互换优选流和替代流的注释。使用这种简单的算法,两个 接口能够尽可能快地分派请求,同时在两个流之间保持公平。第一规则确保每 个流可以在具有可用信用的每个周期上发送请求。第二规则提供了当第二接口 空闲时第一流借用另一个流的接口的机制。第三规则为横跨两个接口的每个流扩展带宽需求,确保两个接口都不会自身变成瓶颈。
粗粒度旋转器2835/2836使得流引擎2800能够支持转置的矩阵寻址模式。 在该模式中,流引擎2800交换其多维循环的两个最内部维度。这对阵列进行逐 列访问而非逐行访问。除了启用该转置的访问模式之外,旋转器2835/2836在架 构上不是可见的。
流定义模板提供包含数据的流的完整结构。迭代计数和维度提供了大部分 的结构,而各种标识提供剩余的细节。对于所有包含数据的流,流引擎定义单 个流模板。其支持的所有流类型都适合该模板。流引擎定义用于对该流中的元 素进行寻址的六级循环嵌套。流模板中的大多数字段直接映射到该算法中的参 数。图29说明流模板寄存器2900。字段上的数字是256位矢量内的位数。表7 示出流模板的流字段定义。
表7
循环0是最里面的循环并且循环5是最外面的循环。在当前示例中,DIM0 一直等于物理定义连续数据的ELEM_BYTES。因此流模板寄存器2900没有定 义DIM0。流引擎2800将所有的迭代计数解释为无符号整数并且将所有的维度 解释为无缩放的有符号整数。在任一级处的迭代计数(ICNT0、ICNT1、ICNT2、 ICNT3、ICNT4或ICNT5)指示空流。每个迭代计数必须至少是1以定义有效 流。上述模板完全指定元素的类型、流的长度和维度。流指令分别指定起始地 址。这通常由存储该起始地址的标量寄存器文件211中的标量寄存器来规范。 这允许程序使用相同的模板(但是存储开始地址的寄存器不同)打开多个流。
图30说明标识字段2911的子字段定义。如图30中示出的,标识字段2911 是6字节或48位。图30示出字段的位数量。表8示出这些字段的定义。
表8
元素类型(ELTYPE)字段3001定义流中的元素的数据类型。ELTYPE字 段3001的四位的编码如表9所示来定义。
表9
实数/复数类型确定流引擎是否将每个元素视为实数或复数的两个部分(实 部/虚部或者量值/角度)。该字段还指定是否互换复数的两个部分。复数类型具 有两倍于其子元素尺寸的总元素尺寸。否则,子元素尺寸等于总元素尺寸。
子元素尺寸以类型提升和矢量通道宽度为目的确定类型。例如,当流请求 类型提升时,16位子元素被提升为32位子元素或64位子元素。由于中央处理 单元核110一直以小端字节序顺序列出矢量,因此当中央处理单元核110以大 端字节序模式操作时,矢量通道宽度是重要的。
总元素尺寸确定流的最小粒度。在流寻址模型中,其为最内部循环的每个 迭代确定流提取的字节数量。流一直读取完整的元素,或者以递增顺序或者以 递减顺序。因此,流的最内部维度跨过ICNT0×总元素尺寸的字节。
“转置(TRANSPOSE)”字段3002确定流引擎是否以转置的顺序访问流。 转置的顺序交换内部的两个寻址级。TRANSPOSE字段3002还指示其转置该流 的粒度。TRANSPOSE字段3002的三位的编码被定义为如表10所示以用于正 常2D操作。
转置 含义
000 转置禁用
001 在8位边界上转置
010 在16位边界上转置
011 在32位边界上转置
100 在64位边界上转置
101 在128位边界上转置
110 在256位边界上转置
111 保留
表10
流引擎2800实际可以以与元素尺寸不同的粒度对数据元素进行转置。这允许程序从每行提取多列元素。转置粒度必须不小于元素尺寸。TRANSPOSE字段3002 以在下文中进一步描述的方式与DIMFMT字段3009交互。
“提升(PROMOTE)”字段3003控制流引擎是否提升流中的子元素以及提 升的类型。当被启用时,流引擎2800以2的幂数的尺寸提升类型。PROMOTE 字段3003的三位的编码如表11所示来定义。
表11
当PROMOTE为000时,其对应于1倍提升,每个子元素不改变并且占用 宽度等于由ELTYPE指定的尺寸的矢量通道。当PROMOTE为001时,对应于 2倍提升和零扩展,每个子元素被视为无符号整数并且被零扩展到两倍于由 ELTYPE指定的宽度的矢量通道。2倍提升对于64位的初始子元素尺寸是无效 的。当PROMOTE为010时,对应于4倍提升和零扩展,每个子元素被视为无 符号整数并且被零扩展到四倍于由ELTYPE指定的宽度的矢量通道。4倍提升对于32位或64位的初始子元素尺寸是无效的。当PROMOTE为011时,对应于 8倍提升和零扩展,每个子元素被视为无符号整数并且被零扩展到八倍于由 ELTYPE指定的宽度的矢量通道。8倍提升对于16位、32位或64位的初始子元 素尺寸是无效的。当PROMOTE为101时,对应于2倍提升和符号扩展,每个 子元素被视为有符号整数并且被符号扩展到两倍于由ELTYPE指定的宽度的矢 量通道。2倍提升对于64位的初始子元素尺寸是无效的。当PROMOTE为110 时,对应于4倍提升和符号扩展,每个子元素被视为有符号整数并且被符号扩 展到四倍于由ELTYPE指定的宽度的矢量通道。4倍提升对于32位或64位的初 始子元素尺寸是无效的。当PROMOTE为111时,对应于对应于8倍提升和零 扩展,每个子元素被视为有符号整数并且被符号扩展到八倍于由ELTYPE指定 的宽度的矢量通道。8倍提升对于16位、32位或64位的初始子元素尺寸是无 效的。
VECLEN字段3004定义流的以字节为单位的流矢量长度。流引擎2800将 流分解成VECLEN个字节长的元素组。VECLEN字段3004的三位的编码被定 义为如表12所示。
表12
VECLEN必须大于或等于以字节为单位的元素尺寸与重复因子的乘积。如 表11所示,64位的最大VECLEN等于矢量数据路径侧B 116的优选矢量尺寸。 当VECLEN比中央处理单元核110的本机矢量宽度更短时,流引擎2800填补提 供给中央处理单元核110的矢量中的额外通道。GRDUP字段3006确定填补的 类型。VECLEN字段3004以下面描述的方式与ELDUP字段3005和GRDUP字 段3006交互。
ELDUP字段3005指定重复每个元素的次数。元素尺寸与元素重复量相乘 必须不超出64个字节。ELDUP字段3005的三位的编码被定义为如表13所示。
ELDUP 重复因子
000 不重复
001 2次
010 4次
011 8次
100 16次
101 32次
110 64次
111 保留
表13
ELDUP字段3005以下面描述的方式与VECLEN字段3004和GRDUP字段 3006交互。允许的元素尺寸、元素重复因子和目的地矢量长度之间的关系的特 性要求在完成重复之后溢出第一目的地寄存器的重复元素将填充整数个目的地 寄存器。这些附加目的地寄存器的数据最终供应相应的流头寄存器2818/2828。 在完成第一数据元素的重复之后,下一个数据元素向下旋转到源寄存器3100的 最低有效位,丢弃第一数据元素。然后对该新数据元素重复进行该过程。
GRDUP位3006确定是否启用组重复。如果GRDUP位3006为0,则组重 复被禁用。如果GRDUP位3006为1,则组重复被启用。当被GRDUP位3006 启用时,流引擎2800重复一组元素以填充矢量宽度。VECLEN字段3004定义 该组的长度以进行复制。当VECLEN字段3004小于中央处理单元核110的矢量 长度并且GRDUP位3006启用组重复时,流引擎2800用流矢量的附加副本来填 充额外的通道(参见图21和图22)。因为流矢量长度和中央处理单元核110的 矢量长度总是2的整数幂,因此组重复总是产生整数个重复副本。注意,GRDUP 和VECLEN不指定重复的数量。所执行的重复的数量优选地基于VECLEN与本 机矢量长度的比率,在优选实施例中为64字节/512位。
GRDUP字段3006指定流引擎2800如何填补VECLEN长度之后的位的流 矢量至中央处理单元核110的矢量长度。当GRDUP位3006为0时,流引擎2800 用零填充额外的通道并且将这些额外矢量标记为无效。当GRDUP位3006为1 时,流引擎2800用每个流矢量的元素组的副本填充额外的通道。当VECLEN 被设置为中央处理单元核110的本机矢量宽度时,将GRDUP位3006设置为1 不起作用。VECLEN必须至少与ELEM_BYTES和元素重复因子ELDUP的乘积 一样大。也就是说,元素或元素的重复因子数不能使用VECLEN分隔。
组重复仅对目标矢量尺寸进行操作。当元素尺寸ELEM_BYTES与元素重复 因子ELDUP的乘积等于或超过目的地矢量宽度时,组重复不改变所供应的数 据。在这些条件下,GRDUP位3006和VECLEN字段3004的状态不影响供应 的数据。
以下示例的设置说明VECLEN与GRDUP之间的交互。以下示例中的每一 个示出流引擎如何将流映射到横跨不同流矢量长度和矢量数据路径侧B 116的 矢量尺寸的矢量上。该示例的流由29个元素(E0到E28)组成,每个元素为 64位/8字节。该流可以是29个元素的线性流或者是29个元素的内部循环。这 些表图示说明诸如图21所示的8字节通道。每个图示说明的矢量进而被存储在 相应的流头寄存器2818/2828中。
表14图示说明当VECLEN为64字节时如何将示例流映射到64字节CPU 矢量内的位上。
表14
如表14所示,该流在4个矢量上扩展。如前所述,扩展超出该流的矢量4 内的通道被零填充。当VECLEN具有等于本机矢量长度的尺寸时,GRDUP是0 还是1无关紧要。在这种VECLEN的情况下,不能发生重复。
除了32字节的VECLEN之外,表15示出与表20中示出的相同的参数。 组重复被禁用(GRDUP=0)。
表15
流的29个元素分布到8个矢量中的通道0至3上。矢量1至7中的额外通 道4至7被零填充。在矢量8中,仅通道1具有流元素(E28),所有其他通道 都被零填充。
除了16字节的VECLEN之外,表16示出与表22示出的相同的参数。组 重复被禁用(GRDUP=0)。
表16
流的29个元素分布到15个矢量中的通道0至1上。矢量1至14中的额外 通道2至7被零填充。在矢量15中,仅通道1具有流元素(E28),所有其他通 道都被零填充。
除了8字节的VECLEN之外,表17示出与表14示出的相同的参数。组重 复被禁用(GRDUP=0)。
表17
流的29个元素全部出现在29个矢量中的通道0上。矢量1至29中的额外 通道1至7被零填充。
除了32位的VECLEN之外,表18示出与表15示出的相同的参数。组重 复被启用(GRDUP=1)。
表18
流的29个元素分布到8个矢量中的通道0至7上。每个矢量1至7包括四 个重复的元素。重复因子(2)这一结果是因为VECLEN(32字节)是64字节 的本机矢量长度的一半。在矢量8中,通道0具有流元素(E28)并且通道1至 3被零填充。矢量9的通道4至7重复该模式。
除了16字节的VECLEN之外,表19示出与表16示出的相同的参数。组 重复被启用(GRDUP=1)。
表19
流的29个元素分布到15个矢量中的通道0至7上。每个矢量1至7包括 两个重复四次的元素。重复因子(4)这一结果是因为VECLEN(16字节)是 64字节的本机矢量长度的四分之一。在矢量15中,通道0具有流元素(E28) 并且通道1被零填充。该模式在矢量15的通道2和3、通道4和5以及通道6 和7中被重复。
除了8字节的VECLEN之外,表20示出与表17示出的相同的参数。组重 复被启用(GRDUP=1)。
表20
流的29个元素全部出现29个矢量中的通道0至7上。每个矢量1至7包 括重复八次的一个元素。重复因子(8)这一结果是因为VECLEN(8字节)是 64字节的本机矢量长度的八分之一。因此在矢量1至29中每个通道是相同的。
图31说明矢量长度掩码/组重复块2025的示例性实施例。输入寄存器3100 接收来自元素重复块2024的矢量输入。输入寄存器3100包括布置成64个1字 节块(字节0至字节63)的64个字节。注意,字节0至字节63各自的长度等 于ELEM_BYTES的最小值。多个多路复用器3101至3163将来自源寄存器3100 的输入字节耦合到输出寄存器3170。每个多路复用器3101至3163将输入供应 到输出寄存器3170的相应的字节1至字节63。并非输入寄存器3100的所有字 节(字节0至字节63)都被耦合到每个多路复用器3101至3163。应注意,没 有多路复用器供应输出寄存器3170的字节0。输出寄存器3170的字节0一直由 输入寄存器3100的字节0供应。
多路复用器3101至3163由多路复用器控制编码器3180控制。多路复用器 控制编码器3180接收ELEM_BYTES、VECLEN和GRDUP输入信号并且生成 用于多路复用器3101至3163的相应的控制信号。ELEM_BYTES和ELDUP被 供应给多路复用器控制编码器3180以检查观察VECLEN至少与ELEM_BYTES 和ELDUP的乘积一样大。在操作中,多路复用器控制编码器3180控制多路复 用器3101至3163以将数值等于VECLEN的最低有效位从输入寄存器3100转 移到输出寄存器3170。如果GRDUP=0,表明组重复被禁用,则多路复用器控 制编码器3180控制剩余多路复用器3101至3163将零转移到输出寄存器3170 的剩余最高有效通道中的所有位。如果GRDUP=1,表明组重复被启用,则多 路复用器控制编码器3180控制剩余多路复用器3101至3163将输入寄存器3100 的VECLEN数量的最低有效位重复到输出寄存器3170的最高有效通道中。该 控制类似于上述元素重复控制。这用第一矢量填充输出寄存器3170。对于下一 个矢量,输入寄存器3100内的数据被向下旋转VECLEN,丢弃先前VECLEN 个最低有效位。通过中央处理单元核110经由如下所述的流读取提前指令消耗 数据的速率来设置格式化器1903中的数据移动的速率。只要流包括附加数据元 素,该组重复格式化就反复进行。
元素重复(ELDUP)和组重复(GRUDP)是独立的。应注意,这些特征包 括独立的规格和参数设定值。因此元素重复和组重复可以一起使用或分开使用。 因为这些是指定的,因此元素重复允许溢出到下一个矢量,而组重复不允许。
DECIM字段3007控制相应的流的数据元素抽取。流引擎2800从流头寄存 器2818/2828中的存储装置上的流中删除数据元素以用于向请求功能单元展示。 抽取总是移除整个数据元素,而不是子元素。DECIM字段3007被定义为如表 21所列出那样。
表21
如果DECIM字段3007等于00,则不发生抽取。数据元素在不改变的情况 下被传递到相应的流头寄存器2818/2828。如果DECIM字段3007等于01,则 发生2:1的抽取。在存储于流头寄存器2818/2828中之后,流引擎2800从数据 流中移除奇数元素。格式化网络的限制要求所采用的2:1的抽取具有至少2倍的 数据提升(PROMOTE不能为000)、ICNT0必须是2的倍数,并且总矢量长度 (VECLEN)必须足够大以保持单个提升重复的元素。对于被转置的流(TRANSPOSE≠0),转置粒度(granule)必须是提升之前的以字节为单位的元 素尺寸的至少两倍。如果DECIM字段3007等于10,则发生4:1的抽取。在数 据流被存储于流头寄存器2818/2828中之后,流引擎2800保持每一第四数据元 素,即从数据流中每四个数据元素移除三个元素。格式化网络的限制要求所采 用的4:1的抽取具有至少4倍的数据提升(PROMOTE不能为000、001或101)、 ICNT0必须是4的倍数,并且总矢量长度(VECLEN)必须足够大以保持单个 提升重复的元素。对于经转置的流(TRANSPOSE≠0),抽取一直移除列,并且 从不移除行。因此对于2:1的抽取,转置粒度必须是提升之前的以字节为单位的 元素尺寸的至少两倍(GRANULE≥2×ELEM_BYTES);并且对于4:1的抽取, 转置粒度必须是提升之前的以字节为单位的元素尺寸的至少四倍(GRANULE ≥4×ELEM_BYTES)。
“节流(THROTTLE)”字段3008控制流引擎如何领先于中央处理单元核 110激进地提取。该字段的两位的编码被定义为如表22所示。
THROTTLE 描述
00 最小的节流,最大的提前提取
01 较少的节流,较多的提前提取
10 较多的节流,较少的提前提取
11 最大的节流,最小的提前提取
表22
THROTTLE不改变流的含义,并且仅作为提示(hint)。流引擎可以忽略该 字段。程序不应该依赖于具体的节流行为来判断程序正确性,因为架构不指定 精确的节流行为。THROTTLE允许程序员向硬件提供关于程序的自身行为的提 示。通过默认,流引擎尝试尽可能远地领先于中央处理单元核110以隐藏尽可 能多的延迟(等效于THOTTLE=11),同时向中央处理单元核110提供充足的 流吞吐量。尽管几种关键应用需要这种水平的吞吐量,但其可能导致其他应用 的不良系统水平行为。例如,流引擎丢弃穿过环境切换的所有提取的数据。因 此,激进的提前提取可能导致具有大量环境切换的系统中的带宽浪费。如果中 央处理单元核110非常快地消耗数据,则激进的提前提取仅在这些系统中进行 感测。
DIMFMT字段3009定义流模板寄存器2900的循环计数字段ICNT0 2901、 ICNT12902、ICNT2 2903、ICNT3 2804、ICNT4 2905和ICNT5 2906中的哪一 个、循环维度字段DIM12911、DIM2 2912、DIM3 2913、DIM4 2914和DIM5 2915 中的哪一个以及寻址模式字段AM03013、AM1 3014、AM2 3015、AM3 3016、 AM4 3017和AM5 3018(FLAGS字段2921的一部分)中的哪一个对于该特定 流是有效的。表23列出DIMFMT字段3009的各个值的有效循环。
表23
每个有效循环计数必须至少是1。外部有效循环计数必须大于1。(为1的 外部有效循环计数与相应的具有一个较少循环的流没有区别)。
DIR位3010确定内部循环(循环0)的提取方向。如果DIR位3010为0, 则循环0在朝向增加地址的正向方向上提取。如果DIR位3010为1,则循环0 在朝向减小地址的反向方向上提取。其他循环的提取方向通过相应的循环维度 DIM1、DIM2、DIM3、DIM4和DIM5(其为有符号整数)的符号来确定。
CBK0字段3011和CBK1字段3012基于循环寻址的选择来控制循环块尺 寸。确定循环块尺寸的方式将在下文更详细地描述。
AM0字段3013、AM1字段3014、AM2字段3015、AM3字段3016、AM4 字段3017和AM5字段3018控制相应的循环的寻址模式。这允许为每个循环独 立地指定寻址模式。AM0字段3013、AM1字段3014、AM2字段3015、AM3 字段3016、AM4字段3017和AM5字段3018中的每一个是三位并且被解码为 如表24所列出的那样。
AMx字段 含义
00 线性寻址
01 由CBK0设置循环寻址块尺寸
10 由CBK0+CBK1+1设置循环寻址块尺寸
11 保留
表24
在线性寻址中,地址根据地址算法是正向还是反向而前进。在循环寻址中, 地址保留在定义的地址块内。在达到循环地址块的末端之后,地址卷绕到块的 其他极限。循环寻址块通常被限制到2N个地址,其中N是整数。循环地址算法 可以通过切断位之间的进位链并且不允许所选数量的最高有效位改变来进行操 作。因此超越循环块的末端的算法仅改变最低有效位。
块尺寸被设置为如表25所列出的那样。
表25
在优选实施例中,循环块尺寸通过由CBK0编码的数值(第一循环地址模 式01)来设置或者通过由CBK0+CBK1+1编码的数值(第二循环地址模式10) 来设置。例如,对于第一循环地址模式,循环地址块尺寸可以是从512字节到 16M字节。对于第二循环地址模式,循环地址块尺寸可以是从1K字节到64G 字节。因此编码的块尺寸是2(B+9)字节,其中B是编码块数,对于第一块尺寸(AMx 为01)其为CBK0并且对于第二块尺寸(AMx为10)其为CBK0+CBK1+1。
中央处理单元110通过少量的指令和专用寄存器来使流引擎被编程。 STROPEN指令开启流。STROPEN命令指定指示开启流0或流1的流编号。 STROPEN命令指定存储该流的开始地址的数据寄存器。STROPEN指定存储如 上所述的流模板的流模板寄存器。STROPEN指令的变元(argument)在表26 中列出。
变元 描述
流开始地址寄存器 存储流开始地址的标量寄存器
流编号 流0或流1
流模板寄存器 存储流模板数据的矢量寄存器
表26
优选地,流开始地址寄存器是通用标量寄存器文件211中的寄存器。 STROPEN指令经由scr1字段1305指定该流开始地址。STROPEN指令通过其 操作码指定流0或流1。优选地,流模板寄存器是通用矢量寄存器文件221中的 矢量寄存器。STROPEN指令可以经由scr2/cst字段1304指定该流模板寄存器。 如果指定的流是激活的,则STROPEN指令关闭先前的流并且用指定的流代替 该流。
STRSAVE指令捕获指定流的充足的状态信息以便将来重新开始该流。 STRRSTR指令恢复先前保存的流。STRSAVE指令不保存流的任何数据。STRSAVE指令仅保存元数据。该流响应于STRRSTR指令而重新提取流数据。
如上所述,存在流保持寄存器2818或2828内的一些数据无效时的情况。 如上所述,当流元素的数量小于流保持寄存器2818/2828尺寸时,这可以发生在 内部循环的末端处。当剩余流元素的数量小于由VECLEN定义的通道时,这也 可以发生在内部循环的末端处。对于不在内部循环的末端处的时刻,如果 VECLEN小于流保持寄存器2818/2828的宽度并且GRDUP被禁用,则流保持寄 存器2818/2828中超出VECLEN的通道是无效的。
在优选实施例中,流2800进一步包括有效寄存器2819和2829。有效寄存 器2819指示流头寄存器2818中的有效通道。有效寄存器2829指示流头寄存器 2828中的有效通道。有效寄存器2819/2829包括用于相应流头寄存器2818/2828 内的每个最小ELEM_BYTES通道的一个位。在优选实施例中,最小 ELEM_BYTES是1个字节。处理器100的优选数据路径宽度和流头寄存器 2818/2828的数据长度为64字节(512位)。有效寄存器2819/2829因此具有64位的数据宽度。有效寄存器2819/2829中的每个位指示流头寄存器2818/2828中 的相应字节是否有效。优选地,0指示流头寄存器内的相应字节是无效的,1指 示该数据是有效的。
根据本发明的实施例,对于读取流头寄存器2818/2828中的一个以及转移数 据到请求功能单元,相应的有效寄存器2819/2829中的无效/有效数据自动转移 到断言寄存器文件243内的相应的数据寄存器。该寄存器对应于特定流。在优 选实施例中,用于流0的有效数据被存储在断言寄存器P0中,并且用于流1的 有效数据被存储在断言寄存器P1中。
可以以各种方式使用存储在断言寄存器文件243中的这种有效数据。功能 单元可以使用有效数据指示作为掩码来将矢量流数据与另一组矢量组合并且然 后将组合的数据存储到存储器。如同用于所有通道都有效的情况,这使得相同 的过程被用于循环数据的末端。这可以用于避免存储无效数据。存储在断言寄 存器文件243中的有效指示可以在其他过程中用作掩码或操作数。P单元246 可以具有用于对断言寄存器中的1的数量进行计数的指令(BITCNT)。这可以 用于确定来自断言寄存器的有效数据元素的计数。
图32说明用于产生存储在有效寄存器2819中的有效/无效指示的示例硬件 3200。图32说明用于流0的硬件,流1包括相应的硬件。硬件3200优选地进 行操作以在每次数据在流头寄存器2800中被更新时生成一个有效字。第一输入 ELTYPE被供应到解码器3201。解码器3201基于元素尺寸ELEM_BYTES以及 元素是实数还是复数来产生对应于最小数据尺寸的输出“总元素尺寸(TOTAL ELEMENT SIZE)”。ELTYPE的各个编码的含义被示出于表8。表27针对各个 ELTYPE编码示出以字节为单位的解码器3201的示例性输出。应注意,表8列 出了位,并且表27列出了字节。
表27
如表27所示,如果元素是实数,则TOTAL ELEMENT SIZE是1、2、4或 8字节,并且如果元素是复数,则TOTAL ELEMENT SIZE是2、4、8或16字 节。
第二输入PROMOTE被供应到解码器3202。解码器3202产生对应于 PROMOTE输入的输出PROMOTE FACTOR。PROMOTE的各个编码的含义如 表10所示。表28针对各个PROMOTE编码示出以字节为单位的解码器3202的 示例性输出。
表28
扩展类型(零扩展或符号扩展)的差异与解码器3202无关。
解码器3201和3201的输出被供应到乘法器3203。由乘法器3202产生的乘 积是对应于TOTAL ELEMENT SIZE和PROMOTE因子的通道尺寸。因为 PROMOTE因子总是2的整数次幂(2N),所以该乘法可以通过TOTAL ELEMENT SIZE的相应移位来实现。当PROMOTE因子为1时,其不涉及移位;当PROMOTE 因子为2时,其偏移1位;当PROMOTE因子为4时,其偏移2位;当PROMOTE 因子为8时,其偏移3位。
“通道数(NUMBER OF LANES)”单元3204接收矢量长度VECLEN和通 道尺寸(LANESIZE)并且生成NUMBER OF LANES。表29示出针对以字节 为单位的通道尺寸和矢量长度VECLEN的多个通道的示例性解码。
表29
如前所述,VECLEN必须大于或等于元素尺寸与重复因子的乘积。如表29 所示,VECLEN也必须大于或等于元素尺寸与PROMOTE因子的乘积。这意味 着VECLEN被选择为足够大以使得元素不能与其通过类型提升块2022产生的 扩展分开。表29中的对角线下方的标记为“-”的单元指示不允许的参数组合。
单元3204的输出“通道数(NUMBER OF LANES)”充当“通道/剩余元素 控制字(LANE/REMAINING ELEMENTS CONTROL WORD)”单元3211的一 个输入。第二输入来自多路复用器3212。多路复用器接收输入和输入。 输入和输入代表相应循环的当前迭代中剩余元素的数量。
图33说明地址生成器2811的部分示意图。地址生成器2811形成地址以用 于提取相应流引擎的限定的流中的下一个元素。开始地址寄存器3301存储数据 流的开始地址。如前所述,开始地址寄存器3301优选地是全局标量寄存器文件 211中的由开启相应的流的STROPEN指令认定的标量寄存器。如本领域已知的, 该开始地址可以从指定的标量寄存器中被复制并且被本地存储在相应的地址生 成器2811/2821处。流的第一循环采用Loop0计数寄存器3311、加法器3312、 乘法器3313和比较器3314。Loop0计数寄存器3311存储第一循环(Loop0)的 迭代计数的工作副本。对于Loop0加法器3312的每次迭代,当由下一个地址信号触发时,对循环计数加1,循环计数被存回到Loop0计数寄存器3311中。乘 法器3313将当前循环计数与量值ELEM_BYTES相乘。ELEM_BYTES是Loop0 中的每个数据元素的以字节为单位的尺寸。Loop0以ELEM_BYTES的迭代步长 尺寸遍历存储器中物理连续的数据元素。
比较器3314将存储在Loop0计数寄存器3311中的计数(由加法器3313递 增之后)与来自相应流模板寄存器2900的ICNT0 2901的值进行比较。当加法 器3312的输出等于流模板寄存器2900的ICNT0 2901的值时,Loop0的迭代完 成。比较器3314生成有效Loop0结束信号。Loop0计数寄存器3311被重置为0 并且下一个更高循环(在此情况下为Loop1)的迭代被触发。
用于更高循环(Loop1、Loop2、Loop3、Loop4和Loop5)的电路类似于图 33中示出的电路。每个循环包括相应的工作循环计数寄存器、加法器、乘法器 和比较器。每个循环的加法器由前一个循环的循环结束信号触发。每个乘法器 的第二输入是来自相应流模板的相应维度DIM1、DIM2、DIM3、DIM4和DIM5。 每个循环的比较器将工作循环寄存器计数与相应流模板寄存器2900的相应迭代 值ICNT1、ICTN2、ICTN3、ICNT4和ICTN5进行比较。循环结束信号生成下 一个更高循环的迭代。来自Loop5的循环结束信号结束该流。
图33说明Loop0计数的生成。Loop0计数等于存储在相应工作计数寄存器 3311中的更新数据。Loop0计数在工作Loop0计数寄存器3311的每次变化时被 更新。类似地生成用于更高循环(Loop1、Loop2、Loop3、Loop4和Loop5)的 循环计数。
图33说明Loop0地址的生成。Loop0地址等于来自乘法器3313的数据输 出。Loop0地址在工作Loop0计数寄存器3311的每次变化时被更新。用于Loop1、 Loop2、Loop3、Loop4和Loop5的类似电路产生相应的循环地址。
本领域已知的是任何计数(如图33中所示)可以呈现为向下计数或向上计 数。图33说明向上计数的实施例。本领域技术人员将理解如何修改初始化和比 较以将本发明呈现为向下计数电路。另外,本领域技术人员将理解如何修改比 较以呈现所描述的寻址模式。本领域中还已知:
即循环向下计数是流模板寄存器中指定的初始迭代计数与如图33所示的产生的循环向上计数之间的差。
LANE/REMAINING ELEMENTS CONTROL WORD单元3211基于来自 NUMBER OF LANES单元3204的通道的数量和由多路复用器3212选择的循环 向下计数来生成控制字3213。多路复用器3212的控制输入是转置 (TRANSPOSE)信号。如果TRANSPOSE被禁用(“000”),则多路复用器3212 选择Loop0向下计数对于TRANSPOSE的所有其他合法值(“001”、“010”、“011”、“100”、“101”和“110”),多路复用器3212选择Loop1向下计数流引擎总是将最里面的维度映射到矢量中的连续通道。对于正常的流,这是 Loop0。对于转置的流,这是Loop1,因为转置交换了这两个维度。
LANE/REMAINING ELEMENTS CONTROL WORD单元3211生成如下所 示的控制字3213。控制字3213具有数量等于来自单元3204的通道的数量的位。 如果选定循环的元素的剩余计数大于或等于通道的数量,则所有通道都是有效 的。对于这种情况,控制字3213全部是1。这表明矢量长度VECLEN内的所有 通道都是有效的。如果选定循环的元素的剩余计数非零且小于通道的数量,则 一些通道是有效的并且一些通道是无效的。根据上面结合图21和图22所描述 的通道分配,从最低有效通道开始向流元素分配通道。在这些情况下,控制字 3213包括设置为1的多个最低有效位,其数量等于选定循环向下计数的数量。 控制字3213的所有其他位被设置为0。在图32中说明的示例中,通道的数量等 于8并且存在5个有效(1)最低有效位,随后是3个无效(0)最高有效位。 这对应于具有在最终迭代中剩余的五个元素的循环。
控制字扩展单元3214基于LANE SIZE的量值来扩展控制字3213。经扩展 的控制字将具有用于每个最小尺寸通道的一个位。在优选实施例中,最小流元 素尺寸是1字节(8位),并且因此最小通道尺寸是1字节(8位)。保持寄存器 2818/2828的优选尺寸等于64字节(512位)的矢量尺寸。因此,经扩展的控制 字具有64位,一个位用于流保持寄存器2818/2828的每个字节。这个经扩展的 控制字填充相应的有效寄存器2819和2829的最低有效位。
对于VECLEN等于矢量长度的情况,该描述是完备的。经扩展的控制字包 括用于相应有效寄存器2819/2829内的所有位置的位。存在VECLEN不等于矢 量长度的一些附加考虑。当VECLEN不等于矢量长度时,经扩展的控制字不具 有足够的位来填充相应的有效寄存器2819/2829。如图32所说明的,经扩展的 控制字填充相应的有效寄存器2819/2829的最低有效位。这为VECLEN宽度内 的通道提供了有效/无效位。超出VECLEN宽度直到流头寄存器2818的数据宽 度的通道需要另一种机制。
图32说明多路复用器3215和组重复单元3216,其提供这些需要的附加有 效/无效位。参见上文对VECLEN的描述,如果组重复没有被启用(GRDUP=0), 则这些过量通道是无效的。多路复用器3215的第一输入是INVALID 0信号。为 了容易实施,该INVALID 0信号包括数量等于VEDLEN的多个位。当GRDUP=0 时,多路复用器3215选择该输入。组重复单元3216将该输入重复到流头寄存 器2818的所有过量通道。因此有效寄存器2819的最高有效位被设置为0,这表 明流头寄存器2818的相应字节是无效的。这发生于表15中示出的示例的矢量1 至7、表16中示出矢量1至14以及表17中示出的矢量1至29。
如前所述,如果组重复被启用(GRDUP=1),则流头寄存器2818的过量通 道被填充最低有效位的副本。多路复用器3215的第二输入是来自控制字扩展单 元3214的经扩展的控制字。当GRDUP=1时,多路复用器3215选择该输入。 组重复单元3216将该输入重复到流头寄存器2818的所有过量通道。
存在两种可能的结果。第一,在大多数情况下,VECLEN内的所有通道是 有效的并且来自控制字扩展单元3214的位全部为1。这发生于表18中示出的组 重复示例的矢量1至7以及表19中示出的组重复示例的矢量1至14。在这些情 况下,来自控制字扩展单元3214的经扩展的控制字的所有位为1并且流头寄存 器2818的所有通道是有效的。因此组重复单元3216用1填充所有的过量通道。 第二,剩余流数据元素的数量可能小于VECLEN内的通道的数量。这发生于表 18中所示的组重复示例中示出的矢量8以及表19中示出的组重复示例中示出的 矢量15。在这些情况下,VECLEN内的一些通道是有效的并且一些是无效的。 组重复单元3216用具有与经扩展的控制字位相同的模式的位来填充过量通道。 在任一情况下,对应于经扩展的控制位的过量通道被填充。
图32说明最低有效位和最高有效位之间的边界3217。该边界的位置由 VECLEN的尺寸相对于流头寄存器2818的尺寸来设置。
图34说明用于产生有效/无效位的替代硬件的部分示意图。在优选实施例 中,图34的装置进行操作以便每次流头寄存器2818变化时产生一个有效输入。 输入寄存器3400包括从位0布置到位63的64个位。输入寄存器3400被初始 化为全部为0。输入寄存器3400接收来自控制字扩展单元3214(图32)的经扩 展的控制字。这指定了用于流头寄存器2818内的直到VECLEN长度的数据的 有效位。多个多路复用器3401至3463将来自源寄存器3400的输入位耦合到有 效寄存器2819。每个多路复用器3401至3463将输入供应到有效寄存器2819的 相应的位1至位63。并非输入寄存器3400的所有输入位(位1至位63)均被 耦合到每个多路复用器3401至3463。应注意,不存在供应有效寄存器2819的 位0的多路复用器。有效寄存器2819的位0总是由输入寄存器3400的位0供 应。
多路复用器3401至3463由多路复用器控制编码器3480控制。多路复用器 控制编码器3480接收ELEM_BYTES、VECLEN和GRDUP输入信号并且生成 用于多路复用器3401至3463的相应控制信号。ELEM_BYTES和ELDUP被供 应到多路复用器控制编码器3180以检查观察VECLEN至少与ELEM_BYTES 和ELDUP的乘积一样大。在操作中,多路复用器控制编码器3180控制多路复 用器3401至3463将数量等于VECLEN的最低有效位从输入寄存器3400转移 到输出寄存器3170。如果GRDUP=0,这表明组重复被禁用,则多路复用器控 制编码器3480控制剩余的多路复用器3401至3463将零转移到有效寄存器2819 的剩余最高有效通道中的所有位。如果GRDUP=1,这表明组重复被启用,则 多路复用器控制编码器3480控制多路复用器3401至3463以将输入寄存器3400 的VECLEN数量的最低有效位重复到输出寄存器3470的最高有效通道中。该 控制类似于结合图31描述的组重复控制。来自控制编码器3180的相同控制可 以用于控制多路复用器3401至3463。这用存储在流头寄存器2818中的矢量的 有效数据填充有效寄存器2819。
图35是说明上述流输入操作数编码的部分示意图3500。图35说明对功能 单元3520的相应src1输入端的一个指令的src1字段1305进行解码。这些相同 的电路可以被重复以用于指令控制功能单元3520的src2/cst字段1304。此外, 这些电路被重复以用于可以被同时分派的执行包内的能够采用流数据作为操作 数的每个指令。
指令解码器113接收包含指令的src1字段1305的位13至位17。操作码字 段(用于所有指令的位4至位14,以及额外用于无条件指令的位28至位31) 明确指定相应的功能单元3520和将被执行的功能。在该实施例中,功能单元3520 可以是L2单元241、S2单元242、M2单元243、N2单元244或C单元245。 图35中说明的指令解码器113的相关部分对src1位字段1305进行解码。子解 码器3511确定src1位字段1305是否处于从00000到01111的范围内。如果是 这种情况,则子解码器3511将相应的寄存器编号供应到全局矢量寄存器文件 231。在该示例中,该寄存器编号是src1位字段1305的四个最低有效位。全局 矢量寄存器文件231调用存储在对应于该寄存器编号的寄存器中的数据并且将 该数据供应到功能单元3520的src1输入端。该解码通常在本领域是已知的。
子解码器3512确定src1位字段1305是否处于从10000到10111的范围内。 如果是这种情况,则子解码器3512将相应的寄存器编号供应到相应的局部矢量 寄存器文件。如果指令指向L2单元241或S2单元242,则相应的局部矢量寄存 器文件是局部矢量寄存器文件232。如果指令指向M2单元243、N2单元244 或C单元245,则相应的局部矢量寄存器文件是局部矢量寄存器文件233。在该 示例中,该寄存器编号是src1位字段1305的三个最低有效位。相应的局部矢量 寄存器文件232/233调用存储在对应于该寄存器编号的寄存器中的数据并且将 该数据供应到功能单元3520的src1输入端。该解码通常在本领域是已知的。
子解码器3513确定src1位字段1305是否为11100。如果是这种情况,则子 解码器3513将流0读取信号供应到流引擎2800。然后,流引擎2800将存储在 保持寄存器2818中的流0数据供应到功能单元3520的src1输入端。
子解码器3514确定src1位字段1305是否为11101。如果是这种情况,则子 解码器3514将流0读取信号供应到流引擎2800。然后,流引擎2800将存储在 保持寄存器2818中的流0数据供应到功能单元3520的src1输入端。子解码器 3514还将提前信号供应到流0。如前所述,流引擎2800提前在保持寄存器2818 中存储流0的数据元素的下一个连续矢量。
通过子解码器3513或子解码器3514将流0读取信号供应到流引擎2800将 触发另一个数据移动。根据这种流0读取信号,流引擎2800将存储在有效寄存 器2819中的数据供应到用于存储的断言寄存器文件234。根据优选实施例,这 是断言寄存器文件234内的预定数据寄存器。在该示例中,数据寄存器P0对应 于流0。
子解码器3515确定src1位字段1305是否为11110。如果是这种情况,则子 解码器3515将流1读取信号供应到流引擎2800。然后,流引擎2800将存储在 保持寄存器2828中的流1数据供应到功能单元3520的src1输入端。
子解码器3516确定src1位字段1305是否为11111。如果是这种情况,则子 解码器3516将流1读取信号供应到流引擎2800。然后,流引擎2800将存储在 保持寄存器2828中的流1数据供应到功能单元3520的src1输入端。子解码器 3514还将提前信号供应到流1。如前所述,流引擎2800提前在保持寄存器2828 中存储流1的数据元素的下一个连续矢量。
通过子解码器3515或子解码器3516将流1读取信号供应到流引擎2800将 触发另一个数据移动。根据这种流1读取信号,流引擎2800将存储在有效寄存 器2829中的数据供应到用于存储的断言寄存器文件234。根据优选实施例,这 是断言寄存器文件234内的预定数据寄存器。在该示例中,数据寄存器P1对应 于流1。
类似的电路被用于响应于src2/cst字段1304的位编码而选择供应到功能单 元3502的scr2输入端的数据。可以用如上所述的方式向功能单元3520的scr2 输入端供应常量输入。如果指令解码113生成用于来自scr1字段1305或scr2/sct 字段1304的流0的读取信号,则流引擎2800将存储在有效寄存器2819中的数 据供应到用于存储的断言寄存器文件234的断言寄存器P0。如果指令解码113 生成用于来自scr1字段1305或scr2/sct字段1304的流1的读取信号,则流引擎 2800将存储在有效寄存器2829中的数据供应到用于存储的断言寄存器文件234 的断言寄存器P1。
致力于操作数规范的指令位的准确数量以及数据寄存器和流的数量是设计 选择。本领域技术人员将认识到不同于本申请中描述的其他数量的选择是可能 的。尤其是,单个全局矢量寄存器文件的规范以及局部矢量寄存器文件的省略 是可能的。本发明采用输入操作数选择字段的位编码来指示流读取并且采用另 一个位编码来指示流读取和提前该流。
图35中说明的过程在每次流数据被读取时将有效数据自动转移到断言寄存 器文件234中。然后该有效数据被P单元246用于元数据的进一步计算。通过 一个或多个矢量数据路径侧B 116功能单元包括L2单元241、S2单元242、M2 单元243、N2单元244和C单元245,该有效数据还被用作其他操作的掩码或 操作数。存在采用该流有效数据的大量可行的复合逻辑操作。
图36是说明本发明的替代实施例的部分示意图3600。在图36说明的实施 例中,流有效寄存器2819/2829不需要自动加载到断言寄存器文件234中的预定 寄存器。相反,至P单元246的明确指令可以用于移动该数据。
图36说明将P单元246的相应src1输入端的一个指令的src1字段1305进 行解码。这些相同的电路可以被重复用于控制P单元246的指令的src2/cst字段1304。指令解码器113接收位13至17,这些位包括指令的src1字段1305。操 作码字段(用于所有指令的位4至12以及额外用于无条件指令的位28至31) 明确指定P单元246和将被执行的功能。图36中说明的指令解码器113的相关 部分对src1位字段1305进行解码。子解码器3611确定src1位字段1305是否在 从00000至01111的范围内。如果是这种情况,则子解码器3511将相应的寄存器编号供应到全局矢量寄存器文件231。在该示例中,该寄存器编号是src1位字 段1305的四个最低有效位。全局矢量寄存器文件231调用存储在对应于该寄存 器编号的寄存器中的数据并且将该数据供应到P单元246的src1输入端。该解 码通常在本领域是已知的。
子解码器3612确定src1位字段1305是否在从10000至10111的范围内。 如果是这种情况,则子解码器3612将相应的寄存器编号供应到断言寄存器文件 234。在该示例中,该寄存器编号是src1位字段1305的三个最低有效位。相应 的局部矢量寄存器文件232/233调用存储在对应于该寄存器编号的寄存器中的 数据并且将该数据供应到功能单元3520的src1输入端。该解码通常在本领域是 已知的。
子解码器3613确定src1位字段1305是否是11100。如果是这种情况,则子 解码器3613将流0有效读取信号供应到流引擎2800。然后流引擎2800将存储 在有效寄存器2819中的有效数据供应到P单元246的src1输入端。
子解码器3614确定src1位字段1305是否是11101。如果是这种情况,则子 解码器3614将流1有效读取信号供应到流引擎2800。然后流引擎2800将存储 在有效寄存器2829中的流1有效数据供应到功能单元3520的src1输入端。
采用流有效寄存器2819/2829作为操作数的P单元246指令可以是前述任何 P单元指令,诸如:NEG;BITCNT;RMBD;DECIMATE;EXPAND;AND; NAND;OR;NOR和XOR。
上述特定指令可以被限制到P单元242。因此图35和图36中概述的操作可 以一起使用。如果由指令指定的功能单元是L2单元241、S2单元242、M2单 元243、N2单元244或C单元245,则src1字段1305被解释为如关于图35所 概述的那样。如果由指令指定的功能单元是P单元246,则src1字段1305被解 释为如关于图36所概述的那样。图35中说明的将流有效寄存器自动保存到预 定断言寄存器可以在本发明的一个实施例中被实施,并且不在另一个实施例中 实施。

Claims (42)

1.一种数字数据处理器,其包含:
数据寄存器文件,其包括多个数据寄存器,所述多个数据寄存器存储由寄存器编号访问的数据;
指令存储器,其存储指令,每个所述指令指定数据处理操作和至少一个数据操作数;
指令解码器,其连接到所述指令存储器,以便从所述指令存储器顺次地调用指令并且确定所述指定的数据处理操作和所述指定的至少一个操作数;
至少一个功能单元,其连接到所述数据寄存器文件和所述指令解码器,以便根据对应于由所述指令解码器解码的指令的至少一个操作数来执行数据处理操作并且将结果存储在指令指定数据寄存器中;
流引擎,其连接到所述指令解码器,所述流引擎可操作以响应于流开始指令而从存储器调用预定数量的数据元素的指令指定序列的流,每个数据元素具有预定尺寸,所述流引擎包括:
地址生成器,其用于产生对应于多个数据元素的所述指令指定序列的所述流的流存储器地址;
流头寄存器,其被划分为具有所述预定尺寸的通道,所述流头寄存器:
将所述多个数据元素的所述序列的下一个数据元素存储在下一个相继通道中,
在填充所述流头寄存器的所有通道之后,清除所述流头寄存器并将所述多个数据元素的所述序列的下一个数据元素存储在第一通道中,以及
如果存在比通道更少的剩余数据元素,则将全部0存储在过量通道中,以及
流有效寄存器,其具有对应于所述流头寄存器的每个通道的至少一个位位置,所述流引擎将第一数字状态的位存储在对应于存储所述数据流的元素的流头通道的位置中,并且将与所述第一数字状态相反的第二数字状态的位存储在对应于所述流头寄存器过量通道的位置中;以及
其中所述至少一个功能单元中的至少一个响应于流操作数指令而从所述流头寄存器接收至少一个操作数。
2.根据权利要求1所述的数字数据处理器,其中:
所述流有效寄存器的所述第一数字状态是1;并且
所述流有效寄存器的所述第二数字状态是0。
3.根据权利要求1所述的数字数据处理器,其中:
所述至少一个流操作数指令包括流操作数只读指令和流操作数读取递增指令;
所述指令解码器响应于流操作数只读指令和流操作数读取递增指令而促使将来自所述流头寄存器的数据作为操作数供应到所述至少一个功能单元;以及
所述指令解码器响应于流操作数读取递增指令而控制所述流引擎将下一个提取的数据元素存储在所述流头寄存器中。
4.根据权利要求3所述的数字数据处理器,其中:
所述指令解码器可操作以:
解码含有具有位编码的第一子集的数据操作数字段的指令,以将存储在相应的数据寄存器中的数据供应到相应的功能单元,
解码含有具有预定读取位编码的数据操作数字段的指令,以将存储在所述流头寄存器中的所述数据供应到所述相应的功能单元,以及
解码含有具有预定读取/提前位编码的数据操作数字段的指令,以将存储在所述流头寄存器中的所述数据供应到所述相应的功能单元,并且通过将所述流的下一个相继数据元素存储在所述流头寄存器中而提前所述流引擎。
5.根据权利要求3所述的数字数据处理器,其中:
所述流引擎进一步可操作以响应于每个流操作数只读指令和每个流操作数读取递增指令而将数据从所述流有效寄存器转移到所述数据寄存器文件中的预定数据寄存器中。
6.根据权利要求5所述的数字数据处理器,其中:
所述数据寄存器文件进一步包括:
通用数据寄存器文件,其包括多个通用数据寄存器,每个通用数据寄存器具有与所述流头寄存器的数据宽度相等的数据宽度,以及
断言数据寄存器文件,其包括多个断言数据寄存器,每个断言数据寄存器具有与所述流有效寄存器的数据宽度相等的数据宽度;以及
所述流引擎进一步可操作以根据每个流操作数只读指令并且根据每个流操作数读取递增指令来将数据从所述流有效寄存器转移到所述断言数据寄存器文件中的预定断言数据寄存器中。
7.根据权利要求1所述的数字数据处理器,其中:
所述指令包括流有效操作数指令;
所述至少一个功能单元中的至少一个可操作以响应于流有效操作数指令而接收来自所述流有效寄存器的一个操作数。
8.根据权利要求7所述的数字数据处理器,其中:
所述数据寄存器文件进一步包括:
通用数据寄存器文件,其包括多个通用数据寄存器,每个通用数据寄存器具有与所述流头寄存器的数据宽度相等的数据宽度,以及
断言数据寄存器文件,其包括多个断言数据寄存器,每个断言数据寄存器具有与所述流有效寄存器的数据宽度相等的数据宽度;
所述至少一个功能单元包括连接到所述断言数据寄存器文件的断言单元;以及
所述断言单元响应于流有效操作数指令而接收来自所述流有效寄存器的一个操作数。
9.根据权利要求8所述的数字数据处理器,其中:
所述指令解码器可操作以:
解码含有具有位编码的第一子集的数据操作数字段的指令,以将存储在相应的数据寄存器中的数据供应到相应的功能单元,
解码含有具有预定流有效读取位编码的数据操作数字段的指令,以将存储在所述流头寄存器中的所述数据作为操作数供应到所述断言单元。
10.根据权利要求1所述的数字数据处理器,其中:
所述流开始指令指定小于或等于所述流头寄存器的数据宽度的矢量长度;
所述流引擎进一步包括:
矢量长度掩码单元,其接收从存储器调用的数据元素,所述矢量长度掩码单元可操作以将从存储器接收的数据元素限制到所述流头寄存器的所述指令指定矢量长度内的最低有效位,如果所述矢量长度小于所述流头寄存器的所述数据宽度,则所述矢量长度掩码单元将全部0存储在超出所述矢量长度的所述流头寄存器的通道中,以及
所述流有效寄存器进一步可操作以将所述第二数字状态的位存储在对应于超出所述矢量长度的所述流头寄存器的通道的位置中。
11.根据权利要求1所述的数字信号处理器,其中:
所述流开始指令指定小于或等于所述流头寄存器的数据宽度的矢量长度以及组重复是被启用还是被禁用的指示;
所述流引擎进一步包括:
矢量长度掩码单元,其接收从存储器调用的数据元素,所述矢量长度掩码单元可操作以将从存储器接收的数据元素限制到所述流头寄存器的所述指令指定矢量长度内的最低有效通道,
如果所述矢量长度小于所述流头寄存器的所述数据宽度并且所述组重复被禁用,则所述矢量长度掩码单元将全部0存储在超出所述矢量长度的所述流头寄存器的通道中,并且所述流有效寄存器将所述第二数字状态的位存储在对应于超出所述矢量长度的所述流头寄存器的通道的位置中,以及
如果所述矢量长度小于所述流头寄存器的所述数据宽度并且所述组重复被启用,则所述矢量长度掩码单元将所述指令指定矢量长度内的所述最低有效位的重复副本存储在超出所述矢量长度的所述流头寄存器的所述流头寄存器通道的通道中,并且所述流有效寄存器将所述指令指定矢量长度内的所述最低有效位的重复副本存储在超出所述矢量长度的所述流头寄存器的通道中。
12.一种数字数据处理器,其包括:
通用数据寄存器文件,其包括存储由寄存器编号访问的数据的多个通用数据寄存器,每个通用数据寄存器具有预定矢量数据宽度;
断言数据寄存器文件,其包括存储由寄存器编号访问的数据的多个断言数据寄存器,每个断言数据寄存器具有小于所述矢量数据宽度的预定标量数据宽度;
指令存储器,其存储指令,每个所述指令指定数据处理操作和至少一个数据操作数;
指令解码器,其连接到所述指令存储器,以便从所述指令存储器顺次地调用指令并且确定所述指定的数据处理操作和所述指定的至少一个操作数;
至少一个功能单元,其连接到所述通用数据寄存器文件和所述指令解码器,以便在由所述指令解码器解码对应于指令的至少一个操作数之后执行数据处理操作并且将结果存储在指令指定通用数据寄存器中;
断言单元,其连接到所述断言数据寄存器文件和所述指令解码器,以便根据对应于由所述指令解码器解码的指令的、来自所述断言数据寄存器文件的指令指定断言数据寄存器的至少一个操作数来执行数据处理操作并且将结果存储在指令指定断言数据寄存器中;
流引擎,其连接到所述指令解码器,所述流引擎可操作以响应于流开始指令而从存储器调用预定数量的数据元素的指令指定序列的流,每个数据元素具有预定尺寸,所述流引擎包括:
地址生成器,其用于产生对应于多个数据元素的所述指令指定序列的所述流的流存储器地址;
流头寄存器,其具有所述矢量数据宽度,所述流头寄存器被划分为具有所述预定尺寸的通道,所述流头寄存器:
将所述多个数据元素的所述序列的下一个数据元素存储在下一个相继通道中,
在填充所述流头寄存器的所有通道之后,清除所述流头寄存器并将所述多个数据元素的所述序列的下一个数据元素存储在第一通道中,以及
如果存在比通道更少的剩余数据元素,则将全部0存储在过量通道中,以及
流有效寄存器,其具有所述标量数据宽度,所述流有效寄存器具有对应于所述流头寄存器的每个通道的至少一个位位置,所述流引擎将第一数字状态的位存储在对应于流头通道中存储所述数据流的元素的位置中,并且将与所述第一数字状态相反的第二数字状态的位存储在对应于所述流头寄存器过量通道的位置中;以及
其中所述至少一个功能单元中的至少一个响应于流操作数指令而从所述流头寄存器接收至少一个操作数。
13.根据权利要求12所述的数字数据处理器,其中:
所述流有效寄存器的所述第一数字状态是1;并且
所述流有效寄存器的所述第二数字状态是0。
14.根据权利要求12所述的数字数据处理器,其中:
所述至少一个流操作数指令包括流操作数只读指令和流操作数读取递增指令;
所述指令解码器响应于流操作数只读指令和流操作数读取递增指令而促使将来自所述流头寄存器的数据作为操作数供应到所述至少一个功能单元;以及
所述指令解码器响应于流操作数读取递增指令而控制所述流引擎将下一个提取的数据元素存储在所述流头寄存器中。
15.根据权利要求14所述的数字数据处理器,其中:
所述指令解码器可操作以:
解码含有具有位编码的第一子集的数据操作数字段的指令,以将存储在相应的数据寄存器中的数据供应到相应的功能单元,
解码含有具有预定读取位编码的数据操作数字段的指令,以将存储在所述流头寄存器中的所述数据供应到所述相应的功能单元,以及
解码含有具有预定读取/提前位编码的数据操作数字段的指令,以将存储在所述流头寄存器中的所述数据供应到所述相应的功能单元,并且通过将所述流的下一个相继数据元素存储在所述流头寄存器中而提前所述流引擎。
16.根据权利要求14所述的数字数据处理器,其中:
所述流引擎进一步可操作以响应于每个流操作数只读指令和每个流操作数读取递增指令而将数据从所述流有效寄存器转移到所述数据寄存器文件中的预定数据寄存器中。
17.根据权利要求16所述的数字数据处理器,其中:
所述流引擎进一步可操作以根据每个流操作数只读指令并且根据每个流操作数读取递增指令来将数据从所述流有效寄存器转移到所述断言数据寄存器文件中的预定断言数据寄存器中。
18.根据权利要求12所述的数字数据处理器,其中:
所述指令包括流有效操作数指令;
所述断言单元可操作以响应于流有效操作数指令而接收来自所述流有效寄存器的一个操作数。
19.根据权利要求18所述的数字数据处理器,其中:
所述指令解码器可操作以:
解码含有具有位编码的第一子集的数据操作数字段的指令,以将存储在相应的数据寄存器中的数据供应到相应的功能单元,
解码含有具有预定流有效读取位编码的数据操作数字段的指令,以将存储在所述流头寄存器中的所述数据作为操作数供应到所述断言单元。
20.根据权利要求12所述的数字数据处理器,其中:
所述流引擎进一步包括:
矢量长度掩码单元,其接收从存储器调用的数据元素,所述矢量长度掩码单元可操作以将从存储器接收的数据元素限制到所述流头寄存器的指令指定的矢量长度内的最低有效位,如果所述矢量长度小于所述流头寄存器的所述数据宽度,则所述矢量长度掩码单元将全部0存储在超出所述矢量长度的所述流头寄存器的通道中,以及
所述流有效寄存器进一步可操作以将所述第二数字状态的位存储在对应于超出所述矢量长度的所述流头寄存器的通道的位置中。
21.根据权利要求12所述的数字信号处理器,其中:
所述流开始指令指定小于或等于所述流头寄存器的数据宽度的矢量长度以及组重复是被启用还是被禁用的指示;
所述流引擎进一步包括:
矢量长度掩码单元,其接收从存储器调用的数据元素,所述矢量长度掩码单元可操作以将从存储器接收的数据元素限制到所述流头寄存器的所述指令指定矢量长度内的最低有效通道,
如果所述矢量长度小于所述流头寄存器的所述数据宽度并且组重复被禁用,则所述矢量长度掩码单元将全部0存储在超出所述矢量长度的所述流头寄存器的通道中,并且所述流有效寄存器将所述第二数字状态的位存储在对应于超出所述矢量长度的所述流头寄存器的通道的位置中,以及
如果所述矢量长度小于所述流头寄存器的所述数据宽度并且组重复被启用,则所述矢量长度掩码单元将所述指令指定的矢量长度内的所述最低有效位的重复副本存储在超出所述矢量长度的所述流头寄存器的所述流头寄存器通道的通道中,并且所述流有效寄存器将所述指令指定矢量长度内的所述最低有效位的重复副本存储在超出所述矢量长度的所述流头寄存器的通道中。
22.根据权利要求12所述的数字数据处理器,其中:
所述指令指定数据处理操作包括至少一个所述断言单元操作,所述断言单元操作包括在单个指令指定断言寄存器的各个位上的一元操作。
23.根据权利要求22所述的数字数据处理器,其中:
所述一元操作包括所述单个断言数据寄存器的每个位的否定。
24.根据权利要求22所述的数字数据处理器,其中:
所述一元操作包括确定具有指令指定的第一数字状态的所述单个断言数据寄存器内的位的数量的计数。
25.根据权利要求22所述的数字数据处理器,其中:
所述一元操作包括确定具有指令指定的第一数字状态的所述单个断言数据寄存器内的最低有效位的位位置。
26.根据权利要求22所述的数字数据处理器,其中:
所述一元操作包括输出每一个由指令指定的第N位。
27.根据权利要求22所述的数字数据处理器,其中:
所述一元操作包括将每个位复制由指令指定的N次。
28.根据权利要求12所述的数字数据处理器,其中:
所述指令指定数据处理操作包括断言单元操作,所述断言单元操作包括在第一指令指定断言数据寄存器和第二指令断言数据寄存器的相应的各个位上的二元操作。
29.根据权利要求28所述的数字数据处理器,其中:
所述二元操作包括对所述第一断言数据寄存器和所述单个断言数据寄存器的相应位进行逻辑与。
30.根据权利要求28所述的数字数据处理器,其中:
所述二元操作包括对所述第一断言数据寄存器和所述单个断言数据寄存器的相应位进行逻辑与,然后对每个位进行否定。
31.根据权利要求28所述的数字数据处理器,其中:
所述二元操作包括对所述第一断言数据寄存器和所述单个断言数据寄存器的相应位进行逻辑或的否定。
32.根据权利要求28所述的数字数据处理器,其中:
所述二元操作包括对所述第一断言数据寄存器和所述单个断言数据寄存器的相应位进行逻辑或的否定,然后对每个位进行否定。
33.根据权利要求28所述的数字数据处理器,其中:
所述二元操作包括对所述第一断言数据寄存器和所述单个断言数据寄存器的相应位进行逻辑异或。
34.根据权利要求22所述的数字数据处理器,其中:
所述断言单元进一步可操作以将数据从所述通用数据寄存器文件的指令指定通用数据寄存器转移到所述断言寄存器文件的指令指定断言数据寄存器。
35.根据权利要求22所述的数字数据处理器,其中:
所述断言单元进一步可操作以将数据从所述断言寄存器文件的指令指定断言数据寄存器转移到所述通用数据寄存器文件的指令指定通用数据寄存器。
36.根据权利要求12所述的数字数据处理器,其中:
所述指令包括至少一个单指令多数据比较指令即SIMD比较指令,所述SIMD比较指令指定比较类型、数据尺寸、第一通用数据寄存器和第二通用数据寄存器作为操作数并且指定一个断言数据寄存器作为目的地;
所述至少一个功能单元响应于所述至少一个SIMD比较指令而比较所述指定数据尺寸的所述第一通用数据寄存器和所述第二通用数据寄存器的区段,如果比较为真,则将全部1存储在所述指定断言数据寄存器的相应位中,并且如果比较为假,则将全部0存储在所述指定断言数据寄存器的相应位中。
37.根据权利要求36所述的数字数据处理器,其中:
所述SIMD比较指令的所述指定比较类型是小于比较。
38.根据权利要求36所述的数字数据处理器,其中:
所述SIMD比较指令的所述指定比较类型是大于比较。
39.根据权利要求36所述的数字数据处理器,其中:
所述SIMD比较指令的所述指定比较类型是等于比较。
40.根据权利要求12所述的数字数据处理器,其中:
所述指令包括至少一个单指令多数据条件指令即SIMD条件指令,所述SIMD条件指令指定比较类型、数据尺寸、至少一个通用数据寄存器和一个断言数据寄存器作为操作数和目的地;
所述至少一个功能单元响应于所述至少一个SIMD条件指令而进行以下操作:如果所述指定断言数据寄存器的相应位全部为1,则在所述指定数据尺寸的所述至少一个通用数据寄存器的数据尺寸部分上执行指令指定的第一数据处理操作,并且如果所述指定断言数据寄存器的相应位全部为0,则在所述指定数据尺寸的所述至少一个通用数据寄存器的数据尺寸部分上执行指令指定的第二数据处理操作。
41.根据权利要求40所述的数字数据处理器,其中:
所述至少一个单指令多数据条件选择指令即SIMD条件选择指令指定数据尺寸、第一通用数据寄存器和第二通用数据寄存器以及断言数据寄存器作为操作数,并且指定第三通用数据寄存器作为目的地;
所述至少一个功能单元响应于所述至少一个SIMD条件选择指令而进行以下操作:如果所述指定断言数据寄存器的相应位全部为1,则将来自所述第一通用数据寄存器的数据元素供应到所述第三通用数据寄存器中的相应位置,并且如果所述指定断言数据寄存器的相应位全部为0,则将来自所述第二通用数据寄存器的数据元素供应到所述第三通用数据寄存器中的相应位置。
42.根据权利要求40所述的数字数据处理器,其中:
所述至少一个单指令多数据条件写入指令即SIMD条件写入指令指定数据尺寸、通用数据寄存器和断言数据寄存器作为操作数,并且指定存储器地址作为目的地;
所述至少一个功能单元响应于所述至少一个SIMD条件写入指令而进行以下操作:如果所述指定断言数据寄存器的相应位全部为1,则将来自所述通用数据寄存器的数据元素在对应于所述指令指定存储器地址和所述数据元素位置的地址处存储到存储器,并且如果所述指定断言数据寄存器的相应位全部为0,则不将来自所述通用数据寄存器的数据元素在对应于所述指令指定存储器地址和所述数据元素位置的地址处存储到存储器。
CN201810674190.3A 2017-06-28 2018-06-27 将有效位通道作为矢量断言暴露于cpu Active CN109144568B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311622432.1A CN117632257A (zh) 2017-06-28 2018-06-27 将有效位通道作为矢量断言暴露于cpu

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/635,449 US11269638B2 (en) 2017-06-28 2017-06-28 Exposing valid byte lanes as vector predicates to CPU
US15/635,449 2017-06-28

Related Child Applications (1)

Application Number Title Priority Date Filing Date
CN202311622432.1A Division CN117632257A (zh) 2017-06-28 2018-06-27 将有效位通道作为矢量断言暴露于cpu

Publications (2)

Publication Number Publication Date
CN109144568A true CN109144568A (zh) 2019-01-04
CN109144568B CN109144568B (zh) 2023-12-15

Family

ID=64738969

Family Applications (2)

Application Number Title Priority Date Filing Date
CN202311622432.1A Pending CN117632257A (zh) 2017-06-28 2018-06-27 将有效位通道作为矢量断言暴露于cpu
CN201810674190.3A Active CN109144568B (zh) 2017-06-28 2018-06-27 将有效位通道作为矢量断言暴露于cpu

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN202311622432.1A Pending CN117632257A (zh) 2017-06-28 2018-06-27 将有效位通道作为矢量断言暴露于cpu

Country Status (2)

Country Link
US (4) US11269638B2 (zh)
CN (2) CN117632257A (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111709126A (zh) * 2020-05-29 2020-09-25 中国科学院长春光学精密机械与物理研究所 通信协议测试驱动数据自动生成建模方法及系统
CN111984316A (zh) * 2019-05-24 2020-11-24 德州仪器公司 用于在处理器中比较源数据的方法和设备
CN111984314A (zh) * 2019-05-24 2020-11-24 德克萨斯仪器股份有限公司 使用位反转顺序的矢量存储
TWI775151B (zh) * 2020-07-06 2022-08-21 中國商格蘭菲智能科技有限公司 圖形處理器及其矩陣運算的加速方法
CN116700790A (zh) * 2023-05-09 2023-09-05 上海壁仞智能科技有限公司 数据处理装置、寄存器的管理方法和机器可读存储介质

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11113062B2 (en) 2013-07-15 2021-09-07 Texas Instruments Incorporated Inserting predefined pad values into a stream of vectors
US9606803B2 (en) 2013-07-15 2017-03-28 Texas Instruments Incorporated Highly integrated scalable, flexible DSP megamodule architecture
US11231929B2 (en) 2013-07-15 2022-01-25 Texas Instruments Incorporated One-dimensional zero padding in a stream of matrix elements
US11249759B2 (en) 2013-07-15 2022-02-15 Texas Instruments Incorporated Two-dimensional zero padding in a stream of matrix elements
US11256508B2 (en) * 2013-07-15 2022-02-22 Texas Instruments Incorporated Inserting null vectors into a stream of vectors
US11269638B2 (en) 2017-06-28 2022-03-08 Texas Instruments Incorporated Exposing valid byte lanes as vector predicates to CPU
KR102447816B1 (ko) * 2018-03-31 2022-09-27 마이크론 테크놀로지, 인크. 멀티 스레드, 자체 스케줄링 재구성 가능한 컴퓨팅 패브릭에 대한 다수의 유형의 스레드 식별자
US11340904B2 (en) 2019-05-20 2022-05-24 Micron Technology, Inc. Vector index registers
US11507374B2 (en) 2019-05-20 2022-11-22 Micron Technology, Inc. True/false vector index registers and methods of populating thereof
US11403256B2 (en) 2019-05-20 2022-08-02 Micron Technology, Inc. Conditional operations in a vector processor having true and false vector index registers
US11327862B2 (en) * 2019-05-20 2022-05-10 Micron Technology, Inc. Multi-lane solutions for addressing vector elements using vector index registers
US12067399B2 (en) 2022-02-01 2024-08-20 Apple Inc. Conditional instructions prediction
US12321747B2 (en) * 2022-02-04 2025-06-03 Texas Instruments Incorporated Circuit, system, and method for matrix decimation
US11940939B2 (en) * 2022-03-07 2024-03-26 Qualcomm Incorporated Encoding byte information on a data bus with separate code
US12169466B2 (en) * 2022-11-03 2024-12-17 Marvell Asia Pte Ltd Distributed arbitration for shared data path
US12450068B2 (en) 2023-07-25 2025-10-21 Apple Inc. Biased conditional instruction prediction
WO2025052153A1 (en) * 2023-09-07 2025-03-13 Think Silicon Research and Technology Single Member S.A. Techniques for pipelining single thread instructions to improve execution time
WO2025096901A1 (en) * 2023-11-03 2025-05-08 Microsemi SoC Corporation Self-learning data linearizer

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5809272A (en) * 1995-11-29 1998-09-15 Exponential Technology Inc. Early instruction-length pre-decode of variable-length instructions in a superscalar processor
CN1894659A (zh) * 2003-12-09 2007-01-10 Arm有限公司 在寄存器和存储器之间移动数据的数据处理设备和方法
US20140189296A1 (en) * 2011-12-14 2014-07-03 Elmoustapha Ould-Ahmed-Vall System, apparatus and method for loop remainder mask instruction
CN104011670A (zh) * 2011-12-22 2014-08-27 英特尔公司 用于基于向量写掩码的内容而在通用寄存器中存储两个标量常数之一的指令
US20150019840A1 (en) * 2013-07-15 2015-01-15 Texas Instruments Incorporated Highly Integrated Scalable, Flexible DSP Megamodule Architecture
US20150154024A1 (en) * 2013-07-09 2015-06-04 Texas Instruments Incorporated Vector SIMD VLIW Data Path Architecture
US20170139710A1 (en) * 2013-07-15 2017-05-18 Texas Instruments Incorporated Streaming engine with cache-like stream data storage and lifetime tracking

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11269638B2 (en) * 2017-06-28 2022-03-08 Texas Instruments Incorporated Exposing valid byte lanes as vector predicates to CPU

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5809272A (en) * 1995-11-29 1998-09-15 Exponential Technology Inc. Early instruction-length pre-decode of variable-length instructions in a superscalar processor
CN1894659A (zh) * 2003-12-09 2007-01-10 Arm有限公司 在寄存器和存储器之间移动数据的数据处理设备和方法
US20140189296A1 (en) * 2011-12-14 2014-07-03 Elmoustapha Ould-Ahmed-Vall System, apparatus and method for loop remainder mask instruction
CN104011670A (zh) * 2011-12-22 2014-08-27 英特尔公司 用于基于向量写掩码的内容而在通用寄存器中存储两个标量常数之一的指令
US20150154024A1 (en) * 2013-07-09 2015-06-04 Texas Instruments Incorporated Vector SIMD VLIW Data Path Architecture
US20150019840A1 (en) * 2013-07-15 2015-01-15 Texas Instruments Incorporated Highly Integrated Scalable, Flexible DSP Megamodule Architecture
US20170139710A1 (en) * 2013-07-15 2017-05-18 Texas Instruments Incorporated Streaming engine with cache-like stream data storage and lifetime tracking

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
翟召岳;: "基于32位超标量处理器的保留站设计" *

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111984316A (zh) * 2019-05-24 2020-11-24 德州仪器公司 用于在处理器中比较源数据的方法和设备
CN111984314A (zh) * 2019-05-24 2020-11-24 德克萨斯仪器股份有限公司 使用位反转顺序的矢量存储
CN111709126A (zh) * 2020-05-29 2020-09-25 中国科学院长春光学精密机械与物理研究所 通信协议测试驱动数据自动生成建模方法及系统
TWI775151B (zh) * 2020-07-06 2022-08-21 中國商格蘭菲智能科技有限公司 圖形處理器及其矩陣運算的加速方法
CN116700790A (zh) * 2023-05-09 2023-09-05 上海壁仞智能科技有限公司 数据处理装置、寄存器的管理方法和机器可读存储介质

Also Published As

Publication number Publication date
US20240231827A1 (en) 2024-07-11
US20220197637A1 (en) 2022-06-23
US12379925B2 (en) 2025-08-05
US11941399B2 (en) 2024-03-26
CN109144568B (zh) 2023-12-15
US20190004797A1 (en) 2019-01-03
US11269638B2 (en) 2022-03-08
US20250362913A1 (en) 2025-11-27
CN117632257A (zh) 2024-03-01

Similar Documents

Publication Publication Date Title
CN109144568A (zh) 将有效位通道作为矢量断言暴露于cpu
US20240419606A1 (en) Method and apparatus for vector permutation
US20250328349A1 (en) Data processing apparatus having streaming engine with read and read/advance operand coding
CN107589957A (zh) 具有双矢量和成双的单矢量操作模式的流参考寄存器
US12204905B2 (en) Inserting predefined pad values into a stream of vectors
US20240134800A1 (en) Streaming engine with separately selectable element and group duplication
US20240378058A1 (en) Two-dimensional zero padding in a stream of matrix elements
US12530196B2 (en) Inserting null vectors into a stream of vectors
US20250036411A1 (en) Padding in a stream of matrix elements
CN109791488A (zh) 用于执行用于复数的融合乘-加指令的系统和方法
CN109213525A (zh) 具有快捷起始指令的流式传输引擎
US20190187985A1 (en) Storage Organization for Transposing a Matrix Using a Streaming Engine
CN109213524A (zh) 用于难预测分支的预测器
CN108241504A (zh) 经改进的提取指令的装置和方法
CN116880903A (zh) 具有提取提前滞后的流引擎
US20200050573A1 (en) Superimposing butterfly network controls for pattern combinations
CN109992303A (zh) 用于将片寄存器对存储到存储器的系统和方法
US20200091943A1 (en) Butterfly network on load data return
WO2020237231A1 (en) Inserting predefined pad values into a stream of vectors

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