CN111984313A - 矢量位转置 - Google Patents

矢量位转置 Download PDF

Info

Publication number
CN111984313A
CN111984313A CN202010410199.0A CN202010410199A CN111984313A CN 111984313 A CN111984313 A CN 111984313A CN 202010410199 A CN202010410199 A CN 202010410199A CN 111984313 A CN111984313 A CN 111984313A
Authority
CN
China
Prior art keywords
bit
data
instruction
vector
unit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202010410199.0A
Other languages
English (en)
Inventor
J·茨维西亚克
D·B·萨姆德尔拉
D·布伊
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 CN111984313A publication Critical patent/CN111984313A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/76Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data
    • G06F7/78Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data for changing the order of data flow, e.g. matrix transposition or LIFO buffers; Overflow or underflow handling therefor
    • 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/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • 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/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; 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/30098Register arrangements
    • G06F9/30105Register structure
    • 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/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30112Register structure comprising data of variable length
    • 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/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; 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/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • G06F9/3869Implementation aspects, e.g. pipeline latches; pipeline synchronisation and clocking
    • 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/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining

Landscapes

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

Abstract

本申请公开矢量位转置。一种响应于矢量位转置指令而在处理器中转置源数据的方法(1600)包括在矢量位转置指令的相应字段中指定包含源数据的源寄存器和用于存储转置的数据的目的地寄存器(1602)。该方法还包括通过以下方式执行矢量位转置指令:将源数据的N×N位解释为具有N行和N列的二维阵列(1604),通过针对每个位反转行索引和列索引来转置位而创建转置的源数据(1606),以及将转置的源数据存储在目的地寄存器中(1608)。

Description

矢量位转置
背景技术
现代数字信号处理器(DSP)面临多重挑战。DSP可能频繁地执行需要执行转置功能的软件,诸如在需要重新排列位的操作期间(诸如以不同寻常的位边界重新打包数据的置乱(shuffle)指令(例如打包和解包10位或12位图像数据))。通过将字节重新打包为位通道,或将密集位图解包为每个元素字节位图(byte-per-element bitmap),并且然后对其重新打包,转置功能也可以用于将某些算法转换为位片实现。转置功能可能需要多个指令来转置位图案。
发明内容
根据本公开的至少一个示例,一种响应于矢量位转置指令而在处理器中转置源数据的方法包括在矢量位转置指令的相应字段中指定包含源数据的源寄存器和用于存储转置的数据的目的地寄存器。该方法还包括通过以下方式执行矢量位转置指令:将源数据的N×N位解释为具有N行和N列的二维阵列,通过针对每个位反转行索引和列索引来转置位而创建转置的源数据,以及将转置的源数据存储在目的地寄存器中。
根据本公开的另一示例,一种数据处理器包括:源寄存器,其被配置为包含源数据;以及目的地寄存器。响应于单个矢量位转置指令的执行,数据处理器被配置为:将源数据的N×N位解释为具有N行和N列的二维阵列;通过针对每个位反转行索引和列索引来转置位而创建转置的源数据;以及将转置的源数据存储在目的地寄存器中。
附图说明
对于各种示例的详细描述,现在将参考附图,其中:
图1示出了根据各种示例的成双的标量/矢量数据路径处理器;
图2示出了图1所示并且根据各种示例的成双的标量/矢量数据路径处理器中的寄存器和功能单元;
图3示出了示例性全局标量寄存器文件;
图4示出了由算术功能单元共享的示例性局部标量寄存器文件;
图5示出了由多个功能单元共享的示例性局部标量寄存器文件;
图6示出了由加载/存储单元共享的示例性局部标量寄存器文件;
图7示出了示例性全局矢量寄存器文件;
图8示出了示例性断言寄存器文件;
图9示出了由算术功能单元共享的示例性局部矢量寄存器文件;
图10示出了由乘法和相关功能单元共享的示例性局部矢量寄存器文件;
图11示出了根据各种示例的中央处理单元的流水线阶段;
图12示出了根据各种示例的单个提取包的十六个指令;
图13A-图13D示出了根据各种示例的进行指令执行的示例;
图14示出了根据各种示例的示例矢量寄存器;
图15示出了根据各种示例的指令的指令编码;并且
图16示出了根据各种示例的执行指令的方法的流程图。
具体实施方式
如上所述,DSP经常执行需要执行转置功能的软件。在处理器级处实现转置功能(例如,使用汇编或编译器级指令)可能需要多个指令来转置位图案。由于需要由DSP执行的转置功能的操作通常是频繁且重复的,因此不希望增加指令和计算开销。
为了至少通过减少执行那些转置功能所需的指令开销来改善执行转置功能的DSP的性能,本公开的示例针对将源数据的位解释为二维阵列(例如,具有N行和N列)的矢量位转置指令。在该示例中,源数据包括具有至少N×N位的矢量。然后,矢量转置指令通过针对每个位反转“行索引”和“列索引”来转置N×N位而创建转置的源数据,并且将转置的源数据存储在目的地寄存器中。
在一个示例中,将本质上通常为一维的矢量的N×N位解释为二维阵列包括将N×N位的第一N个位解释为具有第一行索引(例如,行索引等于0),将N×N位中的第二N个位解释为具有第二行索引(例如,行索引等于1),依此类推,包括将N×N位中的最后N个位解释为具有最后行索引(例如,行索引等于N-1)。继续该示例,二维阵列的每个解释的“行”中的位也被解释为具有列索引。例如,第一行中的位具有范围从0到N-1的对应的列索引。对于二维阵列的第二到第N个解释的行也是如此。
然后,通过针对每个位反转行索引和列索引,对N×N位进行转置,从而创建转置的源数据。例如,列索引等于N-1并且行索引等于0的位(记为有序对(N-1,0))在转置后的列索引等于0并且行索引等于N-1(例如(0,N-1))。然后,转置的源数据存储在目的地寄存器中。
在一些示例中,矢量位转置指令是单指令多数据(SIMD)指令,其对被划分为N×N位的多个组的源数据进行操作。例如,源寄存器是512位矢量寄存器,并且N=8,使得存在64位(例如,双字)的八个组,这64位被解释为二维阵列,并且响应于单个矢量位转置指令的执行而转置。其他示例类似地在本公开的范围内,诸如,其中N=4,并且因此512位源数据包括16位(例如,半字)的32个组,这16位被解释为二维阵列并切响应于单个矢量位转置指令的执行而转置。在又一个示例中,N=16,并且因此512位源数据包括256位的两组,这256位被解释为二维阵列,并响应于单个矢量位转置指令的执行而转置。
通过实现减少了执行位转置操作所需的指令和计算开销的单个矢量位转置指令,当执行需要执行转置功能的软件时,DSP的性能得以改善。
图1说明根据本公开的各种示例的成双的标量/矢量数据路径处理器。处理器100包括分开的一级指令缓存器(L1I)121和一级数据缓存器(L1D)123。处理器100包括二级组合式指令/数据缓存器(L2)130,其保持指令和数据两者。图1说明一级指令缓存器121和二级组合式指令/数据缓存器130之间的连接(总线142)。图1说明一级数据缓存器123和二级组合式指令/数据缓存器130之间的连接(总线145)。在一个示例中,处理器100二级组合式指令/数据缓存器130存储这两个指令以备份一级指令缓存器121并且存储数据以备份一级数据缓存器123。在该示例中,二级组合式指令/数据缓存器130进一步以本领域已知的但图1中未说明的方式连接到更高级的缓存器和/或主存储器。在该示例中,中央处理单元核心110、一级指令缓存器121、一级数据缓存器123以及二级组合式指令/数据缓存器130被形成在单个集成电路上。该信号集成电路可选择地包括其他电路。
中央处理单元核心110在指令提取单元111控制下从一级指令缓存器121提取指令。指令提取单元111确定将被执行的下一个指令并且调用提取包尺寸的一组此类指令。提取包的性质和尺寸在下面进一步详述。如本领域已知的,在缓存命中之后(如果这些指令被存储在一级指令缓存器121中),指令被直接从一级指令缓存器121中提取。在缓存错失之后(指定的指令提取包没有被存储在一级指令缓存器121中),在二级组合式缓存器130中寻找这些指令。在该示例中,一级指令缓存器121中的缓存线的尺寸等于提取包的尺寸。这些指令的存储器位置在二级组合式缓存器130中或命中或错失。命中是由二级组合式缓存器130服务。错失是由更高级缓存器(未图示说明)或由主存储器(未图示说明)服务。如本领域已知的,所请求的指令可以被同时供应到一级指令缓存器121和中央处理单元核心110两者以加速使用。
在一个示例中,中央处理单元核心110包括复数个功能单元以执行指令指定的数据处理任务。指令分派单元112确定每个提取的指令的目标功能单元。在该示例中,中央处理单元110作为超长指令字(VLIW)处理器进行操作,其能够同时处理相应的功能单元中的复数个指令。优选地,编译器组织执行包中一起被执行的指令。指令分派单元112将每个指令引导到其目标功能单元。分配给指令的功能单元完全由编译器产生的指令来指定。中央处理单元核心110的硬件不参与该功能单元分配。在该示例中,指令分派单元12可以并行操作复数个指令。这种并行指令的数量由执行包的尺寸设定。这将在下面进一步详述。
指令分派单元112的分派任务的一部分是确定指令在标量数据路径侧A 115中的功能单元上执行还是在矢量数据路径侧B 116中的功能单元上执行。每个指令中被称为s位的指令位确定该指令控制哪个数据路径。这将在下面进一步详述。
指令解码单元113对当前执行包中的每个指令解码。解码包括识别执行该指令的功能单元、从可能的寄存器文件(RF)中识别用于为相应的数据处理操作供应数据的寄存器以及识别相应的数据处理操作的结果的寄存器目的地。如下面进一步解释的,指令可以包括代替一个寄存器编号操作数字段的常量字段。该解码的结果是信号,这些信号用于控制目标功能单元以便对指定数据执行由相应的指令所指定的数据处理操作。
中央处理单元核心110包括控制寄存器114。控制寄存器114存储用于控制标量数据路径侧A 115和矢量数据路径侧B 116中的功能单元的信息。该信息可以是模式信息等。
来自指令解码器113的已解码的指令和存储在控制寄存器114中的信息被供应到标量数据路径侧A 115和矢量数据路径侧B 116。结果,标量数据路径侧A 115和矢量数据路径侧B 116中的功能单元根据指令指定的数据执行指令指定的数据处理操作并且将结果存储在一个或多个指令指定的数据寄存器中。标量数据路径侧A 115和矢量数据路径侧B 116中的每一个包括优选并行操作的复数个功能单元。这些将结合图2进一步详述。标量数据路径侧A 115和矢量数据路径侧B 116之间存在允许数据交换的数据路径117。
中央处理单元核心110进一步包括非基于指令的模块。仿真单元118允许响应于指令来确定中央处理单元核心110的机器状态。这种能力通常将被用于算法开发。中断/异常单元119使得中央处理单元核心110能够响应外部异步事件(中断)并且回应执行不适当操作的尝试(异常)。
中央处理单元核心110包括流引擎125。该说明的实施例的流引擎125将两个数据流从通常缓存在二级组合式缓存器130中的预定地址供应到矢量数据路径侧B 116的寄存器文件。这提供从存储器(如缓存在二级组合式缓存器130中的)直接到功能单元操作数输入端的受控数据移动。这将在下面进一步详述。
图1说明各个部分之间的总线的示例性数据宽度。一级指令缓存器121将指令经由总线141供应到指令提取单元111。优选地,总线141是512位总线。总线141从一级指令缓存器121单向通到中央处理单元10。二级组合式缓存器130将指令经由总线142供应到一级指令缓存器121。优选地,总线142是512位总线。总线142从二级组合式缓存器130单向通到一级指令缓存器121。
一级数据缓存器123与标量数据路径侧A 115中的寄存器文件经由总线143交换数据。优选地,总线143是64位总线。一级数据缓存器123与矢量数据路径侧B 116中的寄存器文件经由总线144交换数据。优选地,总线144是512位总线。总线143和144被图示说明为双向支持中央处理单元110数据读取和数据写入两者。一级数据缓存器123与二级组合式缓存器130经由总线145交换数据。优选地,总线145是512位总线。总线145被图示说明为双向支持中央处理单元110数据读取和数据写入两者的缓存服务。
如本领域已知的,在缓存命中之后(如果请求的数据存储在一级数据缓存器123中),CPU数据请求直接从一级数据缓存器123提取。在缓存错失之后(指定的数据没有存储在一级数据缓存器123中),在二级组合式缓存器130中寻找该数据。该请求数据的存储器位置在二级组合式缓存器130中或命中或错失。命中是由二级组合式缓存器130服务。错失是由另一级缓存器(未图示说明)或由主存储器(未图示说明)服务。如本领域已知的,所请求的指令可以同时供应到一级数据缓存器123和中央处理单元核心110两者以加速使用。
二级组合式缓存器130将第一数据流的数据经由总线146供应到流引擎125。优选地,总线146是512位总线。流引擎125将该第一数据流的数据经由总线147供应到矢量数据路径侧B 116的功能单元。优选地,总线147是512位总线。二级组合式缓存器130将第二数据流的数据经由总线148供应到流引擎125。优选地,总线148是512位总线。流引擎125将该第二数据流的数据经由总线149供应到矢量数据路径侧B 116的功能单元。优选地,总线149是512位总线。根据本公开的各种示例,总线146、147、148和149被图示说明为从二级组合式缓存器130单向通到流引擎125并且通到矢量数据路径侧B 116。
在缓存命中之后(如果请求的数据存储在二级组合式缓存器130中),流引擎125数据请求直接从二级组合式缓存器130提取。在缓存错失之后(指定的数据没有存储在二级组合式缓存器130中),从另一级缓存器(未图示说明)或从主存储器(未图示说明)寻找该数据。在一些示例中,一级数据缓存器123缓存未存储在二级组合式缓存器130中的数据在技术上是可行的。如果支持该操作,则根据在二级组合式缓存器130中错失的流引擎125数据请求,二级组合式缓存器130应该对于流引擎125请求的数据监听一级数据缓存器123。如果一级数据缓存器123存储该数据,则其监听响应将包括随后被供应以服务流引擎125请求的数据。如果一级数据缓存器123没有存储该数据,则其监听响应将指示此结果并且二级组合式缓存器130必须服务来自另一级缓存器(未图示说明)或来自主存储器(未图示说明)的这一流引擎125请求。
在一个示例中,根据题为“UNIFIED MEMORY SYSTEM ARCHITECTURE INCLUDINGCACHE AND DIRECTLY ADDRESSABLE STATIC RANDOM ACCESS MEMORY”的美国专利No.6,606,686,一级数据缓存器123和二级组合式缓存器130两者都可以被配置为选定数量的缓存器或直接可寻址的存储器。
图2进一步说明标量数据路径侧A 115和矢量数据路径侧B 116中的功能单元和寄存器文件的细节。标量数据路径侧A 115包括全局标量寄存器文件(RF)211、L1/S1局部寄存器文件212、M1/N1局部寄存器文件213和D1/D2局部寄存器文件214。标量数据路径侧A 115包括L1单元221、S1单元222、M1单元223、N1单元224、D1单元225和D2单元226。矢量数据路径侧B 116包括全局矢量寄存器文件231、L2/S2局部寄存器文件232、M2/N2/C局部寄存器文件233和断言寄存器文件214。矢量数据路径侧B 116包括L2单元241、S2单元242、M2单元243、N2单元244、C单元245和P单元246。在功能单元可以从哪个寄存器文件读取或者可以写入哪个寄存器文件上存在限制。这些将在下面详述。
标量数据路径侧A 115包括L1单元221。L1单元221通常接受两个64位操作数并且产生一个64位结果。这两个操作数都是从全局标量寄存器文件211或L1/S1局部寄存器文件212中的指令指定的寄存器调用的。L1单元221优选执行以下指令选择的操作:64位加/减操作;32位最小/最大操作;8位单指令多数据(SIMD)指令(诸如绝对值求和、最小值和最大值确定);循环最小/最大操作以及寄存器文件之间的各种移动操作。结果可以被写入全局标量寄存器文件211、L1/S1局部寄存器文件212、M1/N1局部寄存器文件213或D1/D2局部寄存器文件214的指令指定的寄存器中。
标量数据路径侧A 115包括S1单元222。S1单元222通常接受两个64位操作数并且产生一个64位结果。这两个操作数都是从全局标量寄存器文件211或L1/S1局部寄存器文件212中的指令指定的寄存器调用的。S1单元222优选执行与L1单元211相同类型的操作。由L1单元211和S1单元222支持的数据处理操作之间可以选择性地存在轻微变化。结果可以被写入全局标量寄存器文件211、L1/S1局部寄存器文件212、M1/N1局部寄存器文件213或D1/D2局部寄存器文件214的指令指定的寄存器中。
标量数据路径侧A 115包括M1单元223。M1单元223通常接受两个64位操作数并且产生一个64位结果。这两个操作数都是从全局标量寄存器文件211或M1/N1局部寄存器文件213中的指令指定的寄存器调用的。M1单元223优选执行以下指令选择的操作:8位乘法操作;复杂的点积操作;32位计数操作;复杂的共轭乘法操作以及按位逻辑操作、移位、加和减。结果可以被写入全局标量寄存器文件211、L1/S1局部寄存器文件212、M1/N1局部寄存器文件213或D1/D2局部寄存器文件214的指令指定的寄存器中。
标量数据路径侧A 115包括N1单元224。N1单元224通常接受两个64位操作数并且产生一个64位结果。这两个操作数都是从全局标量寄存器文件211或M1/N1局部寄存器文件213中的指令指定的寄存器调用的。N1单元224优选执行与M1单元223相同类型的操作。可以存在同时采用M1单元223和N1单元224两者的某些双重操作(称为成双发布的指令)。结果可以被写入全局标量寄存器文件211、L1/S1局部寄存器文件212、M1/N1局部寄存器文件213或D1/D2局部寄存器文件214的指令指定的寄存器中。
标量数据路径侧A 115包括D1单元225和D2单元226。D1单元225和D2单元226通常均接受两个64位操作数并且均产生一个64位结果。D1单元225和D2单元226通常执行地址计算以及相应的加载和存储操作。D1单元225用于64位的标量加载和存储。D2单元226用于512位的矢量加载和存储。优选地,D1单元225和D2单元226也执行:对加载和存储数据进行调换、打包以及拆包;64位SIMD算法操作以及64位按位逻辑操作。D1/D2局部寄存器文件214将通常存储用于对相应的加载和存储进行地址计算的基础地址和偏移地址。这两个操作数都是从全局标量寄存器文件211或D1/D2局部寄存器文件214中的指令指定的寄存器调用的。计算的结果可以被写入全局标量寄存器文件211、L1/S1局部寄存器文件212、M1/N1局部寄存器文件213或D1/D2局部寄存器文件214的指令指定的寄存器中。
矢量数据路径侧B 116包括L2单元241。L2单元241通常接受两个512位操作数并且产生一个512位结果。这两个操作数都是从全局矢量寄存器文件231、L2/S2局部寄存器文件232或断言寄存器文件234中的指令指定的寄存器调用的。除了更宽的512位数据之外,L2单元241优选执行与L1单元221类似的指令。结果可以被写入全局矢量寄存器文件231、L2/S2局部寄存器文件232、M2/N2/C局部寄存器文件233或断言寄存器文件214的指令指定的寄存器中。
矢量数据路径侧B 116包括S2单元242。S2单元242通常接受两个512位操作数并且产生一个512位结果。这两个操作数都是从全局矢量寄存器文件231、L2/S2局部寄存器文件232或断言寄存器文件234中的指令指定的寄存器调用的。S2单元242优选与S1单元222类似地执行指令。结果可以被写入全局矢量寄存器文件231、L2/S2局部寄存器文件232、M2/N2/C局部寄存器文件233或断言寄存器文件214的指令指定的寄存器中。
矢量数据路径侧B 116包括M2单元243。M2单元243通常接受两个512位操作数并且产生一个512位结果。这两个操作数都是从全局矢量寄存器文件231或M2/N2/C局部寄存器文件233中的指令指定的寄存器调用的。除了更宽的512位数据之外,M2单元243优选执行与M1单元223类似的指令。结果可以被写入全局矢量寄存器文件231、L2/S2局部寄存器文件232或M2/N2/C局部寄存器文件233的指令指定的寄存器中。
矢量数据路径侧B 116包括N2单元244。N2单元244通常接受两个512位操作数并且产生一个512位结果。这两个操作数都是从全局矢量寄存器文件231或M2/N2/C局部寄存器文件233中的指令指定的寄存器调用的。N2单元244优选执行与M2单元243相同类型的操作。可以存在同时采用M2单元243和N2单元244两者的某些双重操作(称为成双发布的指令)。结果可以被写入全局矢量寄存器文件231、L2/S2局部寄存器文件232或M2/N2/C局部寄存器文件233的指令指定的寄存器中。
矢量数据路径侧B 116包括C单元245。C单元245通常接受两个512位操作数并且产生一个512位结果。这两个操作数都是从全局矢量寄存器文件231或M2/N2/C局部寄存器文件233中的指令指定的寄存器调用的。C单元245优选执行:“搜查”和“搜索”指令;每个时钟周期高达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优选用于存储伽罗瓦(Galois)域乘法操作(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。优选的指令编码(见图15)允许L1/S1局部寄存器文件212包括高达16个寄存器。图5的示例仅实施8个寄存器以降低电路尺寸和复杂性。L1/S1局部寄存器文件212的每个寄存器可以被读取或写入作为64位的标量数据。所有的标量数据路径侧A115功能单元(L1单元221、S1单元222、M1单元223、N1单元224、D1单元225和D2单元226)可以对L1/S1局部寄存器文件212写入。仅L1单元221和S1单元222可以从L1/S1局部寄存器文件212读取。
图6说明M1/N1局部寄存器文件213。图6中说明的示例具有8个独立的64位宽的标量寄存器,其被标记为AM0-AM7。优选的指令编码(见图15)允许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的每个寄存器可以被读取或写入作为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-P7。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位宽的矢量寄存器。优选的指令编码(见图15)允许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位宽的矢量寄存器。优选的指令编码(见图15)允许M2/N2/C局部矢量寄存器文件233包括高达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单元243、N2单元244和C单元245可以从M2/N2/C局部矢量寄存器文件233读取。
对由一侧的所有功能区可访问的全局寄存器文件和仅由一侧的一些功能单元可访问的局部寄存器文件的规定是设计选择。本公开的一些示例仅采用对应于所公开的全局寄存器文件的一类寄存器文件。
返回参考图2,交叉路径117允许标量数据路径侧A 115和矢量数据路径侧B 116之间的有限数据交换。在每个操作周期期间,一个64位数据字可以被从全局标量寄存器文件A211调用以用作矢量数据路径侧B 116的一个或多个功能单元的操作数,并且一个64位数据字可以被从全局矢量寄存器文件231调用以用作标量数据路径侧A 115的一个或多个功能单元的操作数。任何标量数据路径侧A 115功能单元(L1单元221、S1单元222、M1单元223、N1单元224、D1单元225和D2单元226)都可以从全局矢量寄存器文件231读取64位操作数。该64位操作数是全局矢量寄存器文件231的访问的寄存器中的512位数据的最低有效位。复数个标量数据路径侧A 115功能单元可以采用与相同操作周期期间的操作数相同的64位交叉路径数据。然而,在任何单个操作周期中,仅一个64位操作数被从矢量数据路径侧B 116转移到标量数据路径侧A 115。任何矢量数据路径侧B 116(L2单元241、S2单元242、M2单元243、N2单元244、C单元245和P单元246)都可以从全局标量寄存器文件211读取64位操作数。如果相应的指令是标量指令,则交叉路径操作数数据被视为任意其他64位操作数。如果相应的指令是矢量指令,则操作数的高448位由零填充。复数个矢量数据路径侧B 116功能单元可以采用与相同操作周期期间的操作数相同的64位交叉路径数据。在任何单个操作周期中,仅一个64位操作数被从标量数据路径侧A 115转移到矢量数据路径侧B 116。
流引擎125在某些受限的情况下传输数据。流引擎125控制两个数据流。一个流由特定类型的元素序列构成。对这些流进行操作的程序顺序读取数据,进而在每个元素上操作。每个流具有下列基本属性。流数据具有良好定义的开始时间和结束时间。在整个流中,流数据具有固定的元素尺寸和类型。流数据具有固定的元素序列。因此程序不能在流中随机寻找。流数据仅在激活时被读取。当程序从流读取时不能同时对该流写入。一旦流被打开,则流引擎125:计算地址;从二级统一缓存器(其可能需要来自更高级的存储器的缓存服务)提取所定义的数据类型;执行数据类型操纵,诸如零扩展、符号扩展、数据元素整理/调换(诸如矩阵转置);以及将数据直接传送到CPU 110中的程序化数据寄存器文件。因此,流引擎125有益于对表现良好的数据的实时数字滤波操作。流引擎125从相应的CPU释放这些存储器提取任务以使能其他处理功能。
流引擎125提供以下益处。流引擎125允许多维存储器访问。流引擎125增加功能单元的可用带宽。由于流缓冲器旁通一级数据缓存器123,流引擎125使缓存错失拖延(stalls)的数量最小化。流引擎125降低维持循环所需要的标量操作的数量。流引擎125管理地址指针。流引擎125处理自动释放用于其他计算的地址生成指令间隙(slot)以及D1单元225和D2单元226的地址生成。
CPU 110对指令流水线进行操作。指令在下面进一步描述的固定长度的指令包中提取。所有指令需要相同数量的流水线阶段来用于提取和解码,但是需要不同数量的执行阶段。
图11说明下列流水线阶段:程序提取阶段1110、分派和解码阶段1120以及执行阶段1130。对于所有指令,程序提取阶段1110包括三级。对于所有指令,分派和解码阶段1120包括三级。执行阶段1130根据指令包括一到四级。
提取阶段1110包括程序地址生成级1111(PG)、程序访问级1112(PA)和程序接收级1113(PR)。在程序地址生成级1111(PG)期间,在CPU中产生程序地址并且将读取请求发送到一级指令缓存器L1I的存储器控制器。在程序访问级1112(PA)期间,一级指令缓存器L1I处理该请求、访问其存储器中的数据并且将提取包发送到CPU边界。在程序接收级1113(PR)期间,CPU寄存该提取包。
指令总是被一次提取十六个32位宽的间隙,构成提取包。图12说明单个提取包的16个指令1201-1216。提取包在512位(16字)边界上对准。一个示例采用固定的32位指令长度。固定长度的指令是有利的,其原因有以下几个。固定长度的指令使得解码器容易对准。恰当对准的指令提取可以将复数个指令加载到并行指令解码器中。当预定指令对准存储在与固定指令包提取耦连的存储器(提取包在512位边界上对准)中时,预定指令对准可以获得这种恰当对准的指令提取。对准的指令提取允许并行解码器在指令尺寸的提取位上的操作。可变长度的指令需要在每个指令可以被解码之前定位每个指令边界的初始步骤。固定长度指令集通常允许更规则的指令字段的布局。这简化每个解码器的结构,有益于宽发布(wide issue)VLIW中央处理器。
个体指令的执行由每个指令中的p位部分地控制。优选地,该p位是32位宽的间隙的位0。p位确定指令是否与下一个指令并行执行。从较低地址到较高地址扫描指令。如果指令的p位是1,则下一个跟随的指令(较高存储器地址)与该指令并行执行(与该指令在同一个周期内)。如果指令的p位是0,则下一个跟随的指令在该指令之后的周期内被执行。
CPU 110和一级指令缓存器L1I 121流水线相互解耦。从一级指令缓存器L1I返回的提取包可以采用不同数量的时钟周期,这取决于外部情况,诸如是否在一级指令缓存器121中命中或在二级组合式缓存器130中命中。因此程序访问级1112(PA)可以采用几个时钟周期来代替如在其他级中的1个时钟周期。
并行执行的指令组成执行包。在一个示例中,执行包可以包括高达十六个指令。执行包中任何两个指令都不可以使用相同的功能单元。间隙是以下五个类型之一:1)在CPU110的功能单元(L1单元221、S1单元222、M1单元223、N1单元224、D1单元225、D2单元226、L2单元241、S2单元242、M2单元243、N2单元244、C单元245和P单元246)的一个上执行的自持式指令;2)无单位指令,诸如NOP(无操作)指令或多重NOP指令;3)分支指令;4)常量字段扩展;以及5)条件码扩展。这些间隙类型中的一些将在下面进一步解释。
分派和解码阶段1120包括指令分派到适当执行单元级1121(DS);指令预解码级1122(DC1);以及指令解码及操作数读取级1123(DC2)。在指令分派到适当执行单元级1121(DS)期间,提取包被划分成执行包中并且分配给合适的功能单元。在指令预解码级1122(DC1)期间,源寄存器、目的地寄存器和相关联的路径被解码用于执行功能单元中的指令。在指令解码及操作数读取级1123(DC2)期间,完成更加详细的单元解码,并且从寄存器文件读取操作数。
执行阶段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的输入来图示说明。
在某些情况下,可以调用处理器100(例如,DSP)来执行需要执行转置功能的软件。如上所述,在处理器级(例如,使用汇编或编译器级的指令)实现转置功能需要多个指令并增加计算开销。由于DSP执行的转置功能通常是频繁且重复的,尤其是在需要重新排列位(例如,以不寻常的位边界对数据进行置乱和重新打包,将算法转换为位片实现或将密集位图解包为每个元素字节位图,并且然后重新打包)的操作中,因此不希望增加指令开销和/或计算时间。
图13A-图13D说明了根据本公开的示例的由矢量位转置指令执行的位的转置。图13A示出了包括16位的矢量1300(或矢量的一部分)。具有16位的矢量1300是示例性的,并且在这种情况下,为了简化说明转置操作而被选择。应当理解,本公开的其他示例可以在具有大于或小于16位的组上应用转置操作。例如,矢量1300可以包括512位,并且将转置操作应用于64位的八组中的每组。
矢量1300的16位被连续地从0到15进行数字标记。位的编号标识特定位,并且不涉及其值。出于本示例的目的,位的实际值被视为任意值。
如上所述,可以将一组N×N位解释为具有N行和N列的二维阵列。因此,在图13A的示例中,矢量1300具有16位,并且因此N=4。
图13B示出了说明性的二维阵列1310,其是对位矢量1300的解释,在这种情况下被解释为4×4二维阵列1310。二维阵列1310包括矢量1300的第一N个位(例如,元素0-3)作为第一行。二维阵列1310包括矢量1300的第二N个位(例如,元素4-7)作为其第二行。二维阵列1310包括矢量1300的第三N个位(例如,元素8-11)作为其第三行,以及矢量1300的第四N个位(例如,元素12-15)作为其第四行。
当将16位的矢量1300解释为4×4二维阵列1310时,可以通过包括行索引值和列索引值的有序对来描述二维阵列1310中的每个位的位置。在一个示例中,位0的位置被描述为(0,0);位3的位置被描述为(3,0);而位8的位置被描述为(0,2)。以此方式,一维矢量1300被解释为二维阵列1310,并且因此矢量1300内的位可以由行索引值和列索引值来标识。
图13C示出了根据矢量位转置指令已经发生位的转置之后的另一个二维阵列1320。具体地,将二维阵列1310中的每个位的行索引值和列索引值反转以到达转置的二维阵列1320。
例如,各自具有与列索引值相同的行索引值的位0、5、10、15在二维阵列1310和转置的二维阵列1320中都保留在相同位置。具有初始行索引值0和列索引值3(例如,位置(3,0))的位3转置后导致行索引值3和列索引值0(例如,位置(0,3))。因此,在转置的二维阵列1320中,位3出现在第一列第四行中。将类似的转置应用于二维阵列1310的所有位,以生成转置的二维阵列1320。
应当理解,图13B和图13C旨在说明位的转置。实际上,可能永远不会实际创建位的二维阵列(例如,在存储器中);相反,来自源寄存器的一维矢量形式的源数据被转置,就好像它是二维阵列一样,并且转置的源数据被存储在目的地寄存器中。
图13D将来自图13C的转置的二维阵列1320示出为一维矢量1330,其包括如上所述的转置的源数据。转置的矢量1330的第一N个位来自转置的二维阵列1320的第一行(例如,位0、4、8、12)。转置的矢量1330的第二N个位来自转置的二维阵列1320的第二行(例如,位1、5、9、13)。转置的矢量1330的第三N个位来自转置的二维阵列1320的第三行(例如,位2、6、10、14)。最后,转置的矢量1330的第四N个位来自转置的二维阵列1320的第四行(例如,位3、7、11、15)。
图13A至图13D中给出的特定数字示例(例如,16元素矢量)无意于限制本公开的范围。在另一个示例中,矢量1300包括512位矢量,并且N=8,使得存在64位(例如,双字)的八组,这64位被解释为二维阵列1310并且响应于单个矢量位转置指令的执行被转置为二维阵列1320。如上所述,在其他示例中,N=4,并且因此存在32个组被转置;或N=16,并且因此存在两个组响应于单个矢量位转置指令的执行而被转置。
图14示出了用于执行矢量位转置指令的寄存器1400的示例。寄存器1400可以是源寄存器或目的地寄存器。在该示例中,无论是源寄存器还是目的地寄存器,寄存器1400都是512位矢量寄存器,诸如上面解释的全局矢量寄存器文件231中所包含的那些。在其他示例中,寄存器1400可以具有不同的尺寸;本公开的范围不限于特定寄存器尺寸或寄存器组尺寸。
如上所述,矢量位转置指令是对被划分为多组N×N位的源数据进行操作的SIMD指令。在该示例中,512位矢量寄存器1400被划分为八个相等尺寸的组,每个组64位。每个组都可以解释为8×8二维阵列,并且因此这些组被标记为阵列1至阵列8。
矢量位转置指令包含指定源寄存器和目的地寄存器(例如,在全局矢量寄存器文件231中)的字段。在一些示例中,矢量位转置指令还包含指定组尺寸(例如,对于4×4二维阵列为16位,对于8×8二维阵列为64位,或者对于16×16二维阵列为256位)的字段。响应于执行矢量位转置指令,DSP 100根据以上参照图13A至图13D解释的转置操作,将每组64位转置,就好像该组是8×8二维阵列一样。一旦对阵列1至阵列8中的每一个的位进行了转置,DSP 100就将转置的源数据存储在目的地寄存器中。
图15说明本公开的示例使用的功能单元指令的指令编码1500的示例。本领域技术人员将认识到其他执行编码是可行的并且在本公开的范围内。每个指令由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)中的一个的操作。位字段被定义如下。
dst字段1502(位26至位31)将对应的矢量寄存器文件231中的目的地寄存器指定为由于执行矢量位转置指令而产生的转置的源数据的目的地。
在示例性指令编码1500中,位20至位25包含用作占位符的常数值。
src1字段1504(位14至位19)指定来自全局矢量寄存器文件231的源寄存器。
操作码字段1506(位5至位13)指定指令并指明适当的指令选项(例如,将被解释为N×N二维阵列的每个组的尺寸)。单元字段1508(位2至位4)提供了所使用的功能单元和所执行的操作的明确指明。除了下面详述的指令选项之外,操作码的详细解释通常超出了本公开的范围。
s位1510(位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位1512(位0)标记执行包。p位确定该指令是否与随后的指令并行执行。从较低地址到较高地址扫描p位。如果对于当前指令p=1,则下一个指令与当前指令并行执行。如果对于当前指令p=0,则下一个指令在当前指令之后的周期中执行。并行执行的所有指令组成执行包。执行包可以包含高达十二个指令。执行包中的每个指令必须使用不同的功能单元。
图16示出了根据本公开的示例的方法1600的流程图。方法1600在框1602中开始,其中指定包含源数据的源寄存器和用于存储转置的数据的目的地寄存器。在矢量位转置指令的字段(诸如分别为上面关于图15所描述的src1字段1504和dst字段1502)中指定了源寄存器和目的寄存器。方法1600在框1604中继续,其中执行矢量位转置指令,特别是通过将源数据的N×N位解释为具有N行和N列的二维阵列。在一个示例中,源数据包括512位矢量,并且N=8,使得存在64位(例如,双字)的八组,这64位被解释为二维阵列,如以上关于图13A-图13D所解释的。
方法1600在框1606中继续,其中通过针对每个位反转行索引和列索引来转置位而创建转置的源数据。该特定步骤在图13B和图13C之间的转置中详细描述,如上所述。应当理解,实际上,可能永远不会实际创建位的二维阵列(例如,在存储器中);相反,将来自源寄存器的一维矢量形式的源数据转置,就它好像是二维阵列一样,并且将转置的源数据存储在目的地寄存器中。方法1600在框1608中继续,其中将转置的源数据存储在目的地寄存器中,例如以上关于图13D所示。
如上所述,特定的数值示例并不旨在限制本公开的范围。例如,尽管被描述为其中N=8的512位矢量,但是在其他示例中N=4,并且因此存在32个组被转置;或N=16,因此存在两个组响应于单个矢量位转置指令的执行而被转置。
在前述讨论和权利要求中,术语“包括”和“包含”以开放式方式使用,因此应解释为表示“包括但不限于……”。而且,术语“耦合”或“耦接”旨在表示间接或直接连接。因此,如果第一设备耦合到第二设备,则该连接可以是通过直接连接或通过经由其他设备和连接的间接连接。类似地,耦合在第一组件或位置与第二组件或位置之间的设备可以通过直接连接或通过经由其他设备和连接的间接连接。“被配置为”执行任务或功能的元件或特征可以由制造商在制造时进行配置(例如,编程或结构设计)以执行功能和/或可以是由用户在制造后可配置的(或可重新配置的)以执行功能和/或其他附加或替代功能。可以通过设备的固件和/或软件编程、通过设备的硬件组件和互连的构造和/或布局或其组合来进行配置。另外,在前面的讨论中,短语“接地”或类似术语的使用旨在包括机箱接地、大地接地、浮置接地、虚拟接地、数字接地、公共接地和/或适用于或适合于本公开的教导的任何其他形式的接地连接。除非另有说明,否则在值之前的“大约”、“近似”或“基本上”是指所述值的+/-10%。
以上讨论意在说明本公开的原理和各种实施例。一旦完全理解上述公开,则许多变化和修改对于本领域技术人员将变得明显。意图将随附权利要求解释为包含所有这样的变化和修改。

Claims (12)

1.一种响应于矢量位转置指令而在处理器中转置源数据的方法,所述方法包括:
在所述矢量位转置指令的相应字段中,指定包含所述源数据的源寄存器和用于存储转置的数据的目的地寄存器;以及
执行所述矢量位转置指令,其中执行所述矢量位转置指令还包括:
将所述源数据的N×N位解释为具有N行和N列的二维阵列;
通过针对每个位反转行索引和列索引来转置所述位而创建转置的源数据;以及
将所述转置的源数据存储在所述目的地寄存器中。
2.根据权利要求1所述的方法,其中所述源数据包括M位矢量,其中M是N×N的倍数,并且其中执行所述矢量位转置指令还包括:
通过针对N×N位的组中的每个位反转所述行索引和所述列索引来转置每个连续的N×N位的组而创建转置的源数据;以及
将所述转置的源数据存储在所述目的地寄存器中。
3.根据权利要求2所述的方法,其中M=512。
4.根据权利要求3所述的方法,其中N=8。
5.根据权利要求3所述的方法,其中N=4。
6.根据权利要求3所述的方法,其中N=16。
7.一种数据处理器,包括:
源寄存器,其被配置为包含源数据;以及
目的地寄存器;
其中,响应于单个矢量位转置指令的执行,所述数据处理器被配置为:
将所述源数据的N×N位解释为具有N行和N列的二维阵列;
通过针对每个位反转行索引和列索引来转置所述位而创建转置的源数据;以及
将所述转置的源数据存储在所述目的地寄存器中。
8.根据权利要求7所述的数据处理器,其中所述源数据包括M位矢量,其中M是N×N的倍数,并且其中响应于所述矢量位转置指令的执行,所述数据处理器还被配置为:
通过针对N×N位的组中的每个位反转所述行索引和所述列索引来转置每个连续的N×N位的组而创建转置的源数据;以及
将所述转置的源数据存储在所述目的地寄存器中。
9.根据权利要求8所述的数据处理器,其中M=512。
10.根据权利要求9所述的数据处理器,其中N=8。
11.根据权利要求9所述的数据处理器,其中N=4。
12.根据权利要求9所述的数据处理器,其中N=16。
CN202010410199.0A 2019-05-24 2020-05-15 矢量位转置 Pending CN111984313A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/422,719 US11042372B2 (en) 2019-05-24 2019-05-24 Vector bit transpose
US16/422,719 2019-05-24

Publications (1)

Publication Number Publication Date
CN111984313A true CN111984313A (zh) 2020-11-24

Family

ID=73441965

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010410199.0A Pending CN111984313A (zh) 2019-05-24 2020-05-15 矢量位转置

Country Status (2)

Country Link
US (3) US11042372B2 (zh)
CN (1) CN111984313A (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20240103879A1 (en) * 2022-09-25 2024-03-28 Advanced Micro Devices, Inc. Block Data Load with Transpose into Memory

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5129092A (en) * 1987-06-01 1992-07-07 Applied Intelligent Systems,Inc. Linear chain of parallel processors and method of using same
US6816593B1 (en) * 1999-12-23 2004-11-09 Ati International Srl Method and apparatus for transposing bits
US20020032710A1 (en) * 2000-03-08 2002-03-14 Ashley Saulsbury Processing architecture having a matrix-transpose capability
US6898691B2 (en) * 2001-06-06 2005-05-24 Intrinsity, Inc. Rearranging data between vector and matrix forms in a SIMD matrix processor
US7596678B2 (en) * 2003-04-23 2009-09-29 Micron Technology, Inc. Method of shifting data along diagonals in a group of processing elements to transpose the data
US9557994B2 (en) * 2004-07-13 2017-01-31 Arm Limited Data processing apparatus and method for performing N-way interleaving and de-interleaving operations where N is an odd plural number
US7730116B2 (en) * 2004-12-14 2010-06-01 Stmicroelectronics, Inc. Method and system for fast implementation of an approximation of a discrete cosine transform
US9268746B2 (en) * 2008-03-07 2016-02-23 St Ericsson Sa Architecture for vector memory array transposition using a block transposition accelerator
GB2470780B (en) * 2009-06-05 2014-03-26 Advanced Risc Mach Ltd A data processing apparatus and method for performing a predetermined rearrangement operation
US9606803B2 (en) * 2013-07-15 2017-03-28 Texas Instruments Incorporated Highly integrated scalable, flexible DSP megamodule architecture
US10949206B2 (en) * 2013-07-15 2021-03-16 Texas Instruments Incorporated Transposing a matrix using a streaming engine
US9785437B2 (en) * 2014-12-23 2017-10-10 Intel Corporation Method and apparatus for performing a vector bit reversal and crossing
US10013253B2 (en) * 2014-12-23 2018-07-03 Intel Corporation Method and apparatus for performing a vector bit reversal
US10346507B2 (en) * 2016-11-01 2019-07-09 Nvidia Corporation Symmetric block sparse matrix-vector multiplication
EP4137941A1 (en) * 2017-03-20 2023-02-22 Intel Corporation Systems, methods, and apparatuses for matrix add, subtract, and multiply
US10649772B2 (en) * 2018-03-30 2020-05-12 Intel Corporation Method and apparatus for efficient matrix transpose
US10866786B2 (en) * 2018-09-27 2020-12-15 Intel Corporation Systems and methods for performing instructions to transpose rectangular tiles

Also Published As

Publication number Publication date
US11604648B2 (en) 2023-03-14
US20230221955A1 (en) 2023-07-13
US20200371795A1 (en) 2020-11-26
US11042372B2 (en) 2021-06-22
US20210311736A1 (en) 2021-10-07

Similar Documents

Publication Publication Date Title
CN109144568B (zh) 将有效位通道作为矢量断言暴露于cpu
US10963247B2 (en) Vector floating-point classification
US11397583B2 (en) Conditional execution specification of instructions using conditional extension slots in the same execute packet in a VLIW processor
CN111406286A (zh) 具有数据元素提升的查找表
CN113924550A (zh) 直方图运算
US11614940B2 (en) Vector maximum and minimum with indexing
US11573802B2 (en) User mode event handling
US20230221955A1 (en) Vector bit transpose
US20230359385A1 (en) Quick clearing of registers
CN106610817B (zh) 用于采取vliw处理器中的相同执行数据包中的常数扩展槽指定或扩展常数位数的方法
CN111984314A (zh) 使用位反转顺序的矢量存储
US11900112B2 (en) Vector reverse
US12032961B2 (en) Vector maximum and minimum with indexing
US20200371784A1 (en) Vector floating-point scale

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