CN109416634B - 数据处理设备和用于制造该设备的方法 - Google Patents

数据处理设备和用于制造该设备的方法 Download PDF

Info

Publication number
CN109416634B
CN109416634B CN201780041261.XA CN201780041261A CN109416634B CN 109416634 B CN109416634 B CN 109416634B CN 201780041261 A CN201780041261 A CN 201780041261A CN 109416634 B CN109416634 B CN 109416634B
Authority
CN
China
Prior art keywords
access
vector
register
column
registers
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201780041261.XA
Other languages
English (en)
Other versions
CN109416634A (zh
Inventor
托马斯·克里斯多夫·格鲁卡特
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.)
ARM Ltd
Original Assignee
ARM Ltd
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 ARM Ltd filed Critical ARM Ltd
Publication of CN109416634A publication Critical patent/CN109416634A/zh
Application granted granted Critical
Publication of CN109416634B publication Critical patent/CN109416634B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • 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/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30109Register structure having multiple operands in a single register
    • 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/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; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • 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/3012Organisation of register space, e.g. banked or distributed register file
    • 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/30141Implementation provisions of register files, e.g. ports
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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/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; 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/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
    • G06F9/3455Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results using stride
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8053Vector processors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization

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)
  • Complex Calculations (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

提供了一种设备,包括一组向量寄存器,每个向量寄存器被布置为存储包括多个部分的向量。该组向量寄存器在逻辑上被划分为多列,每列被布置为存储每个向量的相同部分。该设备还包括包含多个存取块的寄存器存取电路。每个存取块被布置为当存取向量寄存器之一时而不是存取向量寄存器的至少另一个时存取不同列中的部分。寄存器存取电路被布置为同时存取向量寄存器和列中的任何一个中的部分。

Description

数据处理设备和用于制造该设备的方法
技术领域
本技术涉及数据处理领域,并且更具体地,涉及对向量寄存器的存取。
背景技术
向量寄存器文件包含多个向量寄存器,每个向量寄存器可以存储一个或多个向量,每个向量包括多个部分。例如,向量可以通过提供红色值、绿色值、蓝色值和α值来表示像素颜色,每个值是8位。以这种方式,可以提供多种不同的像素颜色,以便例如表示图像中每个像素的颜色。以前提出了一次对一个向量寄存器执行处理。但是,通常希望提供不同的存取模式。例如,一些指令可能希望一次存取单个向量的所有分量(例如,单个像素的表示),而其他指令可能希望一次存取多个(例如,4个)向量的单个分量(例如,α值)。
发明内容
从第一示例配置来看,提供了一种设备,包括:一组向量寄存器,每个向量寄存器被布置为存储包括多个部分的向量,该组向量寄存器在逻辑上被划分为多列,每列被配置为存储每个向量的相同部分;包括多个存取块的寄存器存取电路,其中每个存取块被布置为当存取向量寄存器之一时而不是存取向量寄存器中的至少另一个时存取不同列中的部分;以及寄存器存取电路,其被配置为同时存取向量寄存器和列中的任何一个中的部分。
从第二示例配置来看,提供了一种制造设备的方法,该方法包括:提供一组向量寄存器,每个向量寄存器被配置为存储包括多个部分的向量,该组向量寄存器在逻辑上被划分为多个列,每列被布置为存储每个向量的相同部分;以及提供包括多个存取块的寄存器存取电路,其中每个存取块被布置为在存取向量寄存器之一时而不是存取向量寄存器中的至少另一个时存取不同列中的部分;并且寄存器存取电路被布置为同时存取向量寄存器和列中的任何一个中的部分。
从第三示例配置看,提供了一种设备,包括:一组向量寄存器单元,各自用于存储包括多个部分的向量,该组向量寄存器单元在逻辑上被划分为多个列,每列被布置为存储每个向量的相同部分;寄存器存取单元,用于同时存取向量寄存器单元和列中的任何一个中的部分:寄存器存取单元包括多个存取块单元,用于在存取向量寄存器单元之一时而不是存取向量寄存器单元中的至少另一个时存取不同列中的部分。
附图说明
仅通过示例的方式,将参考在附图中示出的实施例进一步描述本技术,其中:
图1示意地例示了支持向量指令的处理的数据处理设备的示例;
图2示出了重叠执行向量指令的示例;
图3示出了三个实例,它们缩放在不同处理器实现之间的连续向量指令之间的重叠量或在运行时间在执行这些指令的不同实例之间的重叠量;
图4示出了其中标量指令的执行破坏在两个向量指令之间的重叠的示例;
图5是示意地例示该组向量寄存器可如何在多个区段中逻辑上排列的图;
图6是示意地例示在一个实施例中一组加载指令可如何排列以在从内存加载到向量寄存器的数据上共同地执行去交织操作的图;
图7A至图7G例示了可与在用于不同大小数据元素的一组重新排列指令内的个别指令相关的不同数据元素存取模式;
图8是例示根据一个实施例模式ID及节拍ID信息可如何用以产生地址词组偏移以当执行具有跨距4的向量加载指令之一(VLD4n指令)时识别在内存中的待存取的地址的图;
图9例示了根据一个实施例在执行VLD4n指令期间可用于决定要存取的向量寄存器的适当部分的电路;
图10是例示根据一个实施例可如何重叠向量加载及乘法累加指令的时序图;
图11A至图11D例示了根据一个实施例编码可提供的加载及存储指令的各种示例;
图12是例示根据一个实施例当处置一组重新排列指令时操作图1的指令解码器的流程图;
图13例示了根据一个实施例可执行的数据加宽操作;
图14A及图14B例示了根据一个实施例述语信息可如何用以影响在执行一组重新排列指令期间执行的操作;
图15示意地示出了根据一个实施例的具有写入存取电路的向量寄存器文件的一部分;
图16示意地示出了根据一个实施例的具有读取存取电路的向量寄存器文件的一部分;
图17示意地示出了根据一个实施例的具有写入存取电路的向量寄存器文件;
图18示意地示出了根据一个实施例的具有读取存取电路的向量寄存器文件;
图19A例示了在向量寄存器文件中单扭转的示例,其中以示出的这些词组的文本格式说明该向量寄存器文件;
图19B例示了在向量寄存器文件中单扭转的示例,其中以示出的字节的文本格式说明该向量寄存器文件;
图20例示了在向量寄存器文件中双重扭转的示例,其中以字节格式说明该向量寄存器文件;
图21根据一个实施例示意地示出了向量寄存器文件的一个区段,其中该电路执行双重扭转;
图22是根据一个实施例例示了可如何一般化执行扭转的过程以执行嵌套扭转任意次数的图;
图23根据一个实施例示意地示出了作为寄存器存取电路的示例的读取存取电路;
图24根据一个实施例示意地示出了作为寄存器存取电路的示例的写入存取电路;
图25是根据一个实施例例示了制造方法的流程图;以及
图26示出了可使用的虚拟机实施方式。
具体实施方式
在参考附图讨论实施例之前,提供实施例和相关有点的以下描述。
在一个示例配置中,提供一种设备,一组向量寄存器,每个向量寄存器被布置为存储包括多个部分的向量,该组向量寄存器在逻辑上被划分为多列,每列被配置为存储每个向量的相同部分;包括多个存取块的寄存器存取电路,其中每个存取块被布置为当存取向量寄存器之一时而不是存取向量寄存器中的至少另一个时存取不同列中的部分;以及寄存器存取电路,其被配置为同时存取向量寄存器和列中的任何一个中的部分。
该组向量寄存器可以被认为是逻辑上(而不是物理上必须)被划分为多列,每列存储每个向量的相同部分。例如,对于一组向量,每个向量被存储在其自己的128位向量寄存器中,第一列可能存储这些向量中的每个向量的前32位(0-31),第二列可能存储这些向量中的每个向量的第二个32位(32-63)等。尽管有时向量寄存器是通过提供多个标量寄存器来实现的,但是列可以具有与标量寄存器的宽度不同的宽度。使用术语“在逻辑上被划分”是为了强调寄存器本身不需要以任何特定方式被物理布置,尽管使用诸如“列”的术语可能另外暗示物理布置。寄存器存取电路提供对向量寄存器的部分的存取,寄存器存取电路具有多个存取块,每个存取块存取向量寄存器的不同部分。每个存取块被连接以存取一个向量寄存器中的一列和另一个向量寄存器中的不同列,从而形成“扭转”。以这种方式,寄存器存取电路可以存取行的至少一部分并且还可以存取列的至少一部分。此外,无论使用这两种存取形式中的哪一种,这些部分都可以同时或基本上同时存取,因为在寄存器存取电路的多个端口上提供了来自所提到的两组之一的不同部分。因此,该电路能够提供许多不同的存取模式。
在一些实施例中,该组向量寄存器包括至少一个区段,其中每个区段包括不同的列;并且该设备包括用于每个区段的寄存器存取电路,每个寄存器存取电路被布置为存取与该寄存器存取电路相关的区段中的部分。向量寄存器也可以在逻辑上被划分成多个区段,每个区段由多个不同的列组成。为每个这样的区段提供寄存器存取电路。以这种方式,可以分割向量寄存器。如果每个向量的大小小于每个向量寄存器的容量,则可以使用这种布置。具有多个区段的布置也可用于同时存取一个寄存器的下半部分和另一个向量寄存器的上半部分。在存取寄存器文件的指令的执行被重叠使得第一指令的第二部分与第二指令的第一部分同时执行的情况下,这可能是有用的。这种重叠执行可以被扩展,使得同时执行更多数量的指令的较小部分。
在一些实施例中,每个存取块被布置为在存取向量寄存器之一时,而不是在存取数量等于每个区段中包含的列数减去一的多个其他向量寄存器时,存取不同列中的部分。在这些实施例中,由于列的数量增加,区段的数量也增加。然而,仍然期望能够同时存取列的部分或行的部分。因此,更复杂的“扭转”模式导致对于一组M列,每列在一组M个连续向量寄存器中仅被存取一次。例如,如果区段中有四列(或部分),则该区段中的每个存取块将仅在向量寄存器0-3之间存取每列。
在一些实施例中,第一存取块被布置为存取第一向量寄存器的第一列并存取第二向量寄存器的第二列;第二存取块用于存取第一向量寄存器的第二列并存取第二向量寄存器的第一列。在这些实施例中,与存取块之一相关联的扭转与由同一区段内的另一个存取块执行的扭转相反。
在一些实施例中,每个区段在逻辑上被划分为N列;N列在逻辑上被布置为具有log2(N)等级的嵌套结构,其中N大于或等于4且是2的整数次幂;在第一等级,在第一等级的第一组的至少一列与第一等级的第二组的至少一列之间;针对每个向量寄存器配置每个存取块以访问一列,该一列通过以下约束被唯一地标识:针对每个等级,在针对预定数量的向量寄存器的一半访问第二组的至少一列之前,针对预定数量的向量寄存器的一半访问第一组的至少一列;并且预定数量等于2X,其中X在每个等级上不同并且在1到log2(N)的范围内。在这样的实施例中,单个扭转不足以提供对给定列或给定行内所需的部分数量的存取。例如,在必须同时存取给定行或列内的4个部分的情况下,可能需要将一个区段划分成四列并提供嵌套在第二扭转内的第一扭转,即提供必要的存取模式阵列。实际上,这通常可以扩展到许多嵌套扭转,从而提供嵌套结构。在包括N列的嵌套结构内(其中N大于或等于4并且也是2的整数次幂),N列可以在逻辑上被布置地在log2(N)等级。在第一等级,所有列在第一组和第二组之间被相等地分成两半。在每个子等级,例如在第一等级之后的每个等级,来自父等级的每组的至少一列被相等地分为针对对应子等级的第一组的至少一列和针对该对应子等级的第二组的至少一列。通过这种方式,生成嵌套结构,每个子等级的列的组数是其父等级的列的组数的两倍。因此,除了第一等级和最后等级(最高等级)之外的所有等级都是分别直接在其之上和在其之下的子等级和父等级。以另一种方式来看,在从最高等级到第一等级的每个较低等级,来自前一等级的列的组被配对在一起,因此在每个较低等级,组的数量减半,直到所有列被分成两半,每个都有N/2列。考虑到此,然后可以定义存取模式。具体地,针对每个向量寄存器配置每个存取块以访问一列。该一列通过以下约束被唯一地标识:对于每个等级,在针对预定数量的向量寄存器的一半访问第二组的至少一列之前针对预定数量的向量寄存器的一半访问第一组的至少一列。因此,访问M个不同的列需要访问至少M个不同的向量寄存器。
预定数量等于2X,其中X在每个等级上不同并且在1到log2(N)的范围内。因此,例如,在具有3个等级的实施例中,在第二等级,存在两个第一组的两列和两个第二组的两列。在针对相似数量的向量寄存器访问两个第二组的至少一列之前,针对1、2或4个向量寄存器访问两个第一组的至少一列。
在一些实施例中,该组向量寄存器包括2个区段;并且N的值为4。在两个区段的每个区段中,存取模式为每4个寄存器重复一次,从而产生2个等级的扭转嵌套。
在一些实施例中,寄存器存取电路包括用于输出存储在向量寄存器中的数据元素的读取存取电路;寄存器存取电路包括用于将数据元素输入到向量寄存器的写入存取电路。在这些实施例的一些中,读取电路和写入电路彼此分离,并且在存取向量寄存器时各自使用彼此不同的连接。
在一些实施例中,读取存取电路包括用于多列中的每列的一个存取块。列的数量通常表示期望同时存取的部分的数量。每个同时存取都需要单独的存取块。因此,在一些实施例中,为每列提供一个存取块,用于从向量寄存器进行读取。
在一些实施例中,读取存取电路包括用于多列中的每列的至多一个存取块。如前所述,存取块的数量表示期望在给定部分内一次进行的行或列的同时存取的数量。在一些实施例中,同时存取的最大数量是每个扭转模式一次。因此,在这些实施例中,不需要提供比这更多的存取块。
在一些实施例中,读取存取电路中的存取块包括多路器。每个多路器的输入对应于该多路器所连接的部分。因此,多路器基于选择信号在它所连接的部分之间切换,以指示选择了哪个输入。每个存取块被布置为连接到不同时需要的部分。以这种方式,可以将期望的组合(例如,列中的部分或行中的部分)连接到不同的存取块,从而使得可以同时存取这些部分。
在一些实施例中,该组向量寄存器包括至少一个区段,其中每个区段包括不同的列;该设备包括用于各区段的寄存器存取电路,每个寄存器存取电路被布置为存取与该寄存器存取电路相关的区段中的部分;并且对于每个区段,读取存取电路包括重新排列电路,以重新排列来自读取存取电路中的每个存取块的输出。在一些实施例中,通过以所描述的方式连接存取块,一些部分被输入的顺序可能是不正确的。通常,顺序将使得一些部分对被交换。为了对此校正,可以提供重新排列电路以对存取块重新排序。
对于可以提供的重新排列电路,有许多不同的选项。然而,在一些实施例中,重新排列电路是交叉多路器。通常,这种多路器可以被提供用于处理加载指令上的字节序交换,也可以用于需要交换在向量寄存器中交织的真实/虚拟组件的复杂ADD/MUL指令。因此,使用这种多路器可能不会增加整个电路尺寸。
在一些实施例中,写入存取电路包括用于多列中的每列的一个存取块。与读取存取电路一样,存取块的数量通常表示期望在给定部分内同时存取的行或列的数量。每个同时存取都需要单独的存取块。因此,在一些实施例中,为每列提供一个存取块,用于写入向量寄存器。
在一些实施例中,写入存取电路包括用于多列中的每列的至多一个存取块。存取块的数量控制可以同时存取向量寄存器的部分的程度。在一些实施例中,同时存取的最大数量是每个部分(列)一次。因此,在这样的实施例中,可能不需要提供每列一个的更多存取块。
在一些实施例中,该组向量寄存器包括至少一个区段,其中每个区段包括不同列;该设备包括用于每个区段的寄存器存取电路,每个寄存器存取电路被布置为存取与该寄存器存取电路相关的区段中的部分;并且对于每个区段,写入存取电路包括重新排列电路,以重新排列写入存取电路中的每个存取块的输入。如前所述,以与读取存取电路相同的方式,一些部分的输出可能被反转,寄存器的输入也可能必须被反转。因此,与其要求用户以特定顺序提供输入,还不如可以按预期的顺序提供输入,并且重新排列电路可以重新排序这些部分,使得数据被存储在向量寄存器的正确部分中。
对于可以提供的重新排列电路,有许多不同的选项。然而,在一些实施例中,重新排列电路是交叉多路器。通常,这种多路器可以被提供用于处理存储指令上的字节序交换,还可以用于需要交换在向量寄存器中交织的真实/虚拟组件的复杂ADD/MUL指令。因此,使用这种多路器可能不会增加整个电路尺寸。
向量寄存器有许多不同的配置。然而,在一些实施例中,向量寄存器是128位寄存器。
类似地,有许多不同的方式可以实现向量寄存器。然而,在一些实施例中,每个向量寄存器包括多个32位寄存器。
现将参考附图描述特定实施例。
图1示意地说明支持向量指令处理的数据处理设备2的示例。应了解这是为了便于解释的简化图,并且实际上该设备可具有为简明起见未在图1中示出的许多组件。设备2包含处理电路4,其用于响应于由指令解码器6解码的指令进行数据处理。程序指令从内存系统8检索并且由指令解码器解码以产生控制信号,这些控制信号控制处理电路4以由架构定义的方式处理这些指令。例如,解码器6可解译解码指令的作业码及这些指令的任何额外控制字段以产生控制信号,这些控制信号导致处理电路4激活适当硬件单元以执行操作诸如算术操作、加载/存储操作或逻辑操作。
该设备具有一组寄存器10,其用于存储由处理电路4处理的数据值及用于配置处理电路的操作的控制信息。响应于算术或逻辑指令,处理电路4从寄存器10读取操作数并将指令结果写回寄存器10。响应于加载/存储指令,数据值经由处理电路在寄存器10与内存系统8之间转移。内存系统8可包括一级或更多级的高速缓存以及主存储器。
寄存器10包括标量寄存器文件12,其包含用于存储标量值的数个标量寄存器,该标量值包含单个数据元素。由指令解码器6及处理电路4支持的一些指令是标量指令,其处理从标量寄存器12读取的标量操作数以产生写回标量寄存器的标量结果。
寄存器10也包括向量寄存器文件14,其包含数个向量寄存器,各个用于存储包含多个数据元素的向量(本文也称为向量值)。响应于向量指令,指令解码器6控制处理电路4执行在从向量寄存器14之一读取的向量操作数的各自元素上处理数个向量通道以产生写入标量寄存器12的标量结果或写入向量寄存器14的进一步向量结果。一些向量指令可由一个或更多个标量操作数产生向量结果或可在标量寄存器文件中的标量操作数上以及在从向量寄存器文件14读取的向量操作数上处理的向量通道执行额外标量操作。因此,一些指令可是混合的标量向量指令,对该指令的一个或更多个源寄存器及目的地寄存器的至少一个是向量寄存器14及一个或更多个源寄存器及目的地寄存器的另一个是标量寄存器12。
向量指令也可包括向量加载/存储指令,其导致数据值在向量寄存器14与内存系统8中的位置之间转移。加载/存储指令可包括连续向量加载/存储指令(对此在内存中的位置对应于地址的连续范围)或规定数个离散地址及控制处理电路4将数据从各个这些地址加载向量寄存器的各自元素或将数据从向量寄存器的各自元素存储至离散地址的标量/集中类型向量加载/存储指令。
处理电路4可支持具有一定范围不同数据元素大小的向量处理。例如,128位向量寄存器14可例如被分割为十六个8位数据元素、八个16位数据元素、四个32位数据元素或两个64位数据元素。在寄存器组10中的控制寄存器可规定正使用的当前数据元素大小,或替代地这是待执行的给定向量指令的参数。
寄存器10也包括用于控制处理电路4的处理的数个控制寄存器。例如,这些可包括用于存储程序计数地址的程序计数寄存器16(该程序计数地址指示对应于正处理的当前执行点的指令地址)、用于存储在处置函数调用之后引导处理的返回地址的链接寄存器18、及指示在堆栈数据结构的内存系统8内的位置的堆栈指针寄存器20。应了解这些仅是可存储的一些类型控制信息,并且实际上架构的给定指令组可存储由架构定义的许多其他控制参数。例如,控制寄存器可规定向量寄存器的全部宽度、或用于向量处理的给定示例的当前数据元素大小。
处理电路4可包括用于处理不同种类指令的数个不同硬件块。例如,如图1所示,与内存系统8相互作用的加载/存储指令可由专用加载/存储单元(load/store unit;LSU)25处理,而算术或逻辑指令可由一个或更多个其他单元30处理。这些其他单元可包括算术逻辑单元(arithmetic logic unit;ALU),并且ALU本身可被进一步分割为用于执行涉及乘法的操作的乘法累加单元(multiply-accumulate unit;MAC)及用于处理其他种类ALU操作的进一步单元。也可提供浮点单元用于处置浮点指令。不涉及任何向量处理的纯的标量指令也可与向量指令相比由独立硬件块处置或重新使用相同硬件块。
在一些应用诸如数字信号处理(digital signal processing;DSP)中,可存在大致相等数量的ALU及加载/存储指令并且由此在大量时间中一些大区块诸如MAC可是闲置的。此低效率可在向量架构上加剧,因为利用向量通道的数量放大执行资源以获得较高性能。在较小处理器(例如,单一发布,依序核心)上,完全缩放的向量管线的区域额外负担可被限制。一种最小化面积影响同时较佳使用可获得执行资源的途径是重叠指令执行,如图2所示。在此示例中,三个向量指令包括加载指令VLDR、乘法指令VMUL、及移位指令VSHR,并且全部这些指令可同时执行,尽管其间存在数据依赖性。这是因为VMUL的元素1仅取决于Q1的元素1,而不是全部Q1寄存器,因此执行VMUL可在完成执行VLDR之前开始。通过允许指令重叠,昂贵区块(如乘法器)可在大部分时间保持激活。
因此,可期望使得微架构实施方式重叠向量指令的执行。然而,若该架构假设存在固定量的指令重叠,则尽管若微架构实施方式实际上匹配由架构假设之指令重叠量,这可提供高效率,若缩放至使用不同重叠或根本不重叠的不同微架构,其可导致问题。
相反地,架构可支持一定范围不同重叠,如图3的示例所示。向量指令的执行被分为称为“节拍”的部分,各个节拍对应于处理预定大小的向量的一部分。节拍是全部执行或根本不执行的向量指令的原子部分,并且不可部分执行。在一个节拍中处理的该部分向量的大小可由架构定义并且可是该向量的任意部分。在图3的示例中,节拍被定义为对应于四分之一向量宽度的处理,使得每个向量指令存在四个节拍。很清楚,此仅为一个示例并且其他架构可使用不同数量的节拍,例如,两个或八个。对应于一个节拍的该部分向量可是相同大小、大于或小于所处理的向量的数据元素大小。因此,即使实施方式之间或在不同指令之间的运行时间的元素大小改变,节拍是向量处理的某个固定宽度。若在一个节拍中所处理的该部分向量包括多个数据元素,进位信号可在各自元素之间的边界处去能以确保独立处理各个元素。若在一个节拍中所处理的该部分向量对应于仅部分元素及该硬件不足以并行计算若干节拍,在处理的一个节拍期间产生的进位输出可作为进位输入而输入处理的后续节拍以使得两个节拍的结果一起形成数据元素。
如图3所示,处理电路4的不同微架构实施方式可在抽象架构时钟的一次“滴答”中执行不同数量的节拍。此处,“滴答”对应于架构状态进展单位(例如,在简单架构上,各滴答可对应于更新与执行指令相关的全部架构状态的示例,包括更新程序计数器以指向下一指令)。本领域一般技术人员应了解已知微架构技术诸如管线式处理意味单次滴答可需要多个时钟周期以于硬件级别执行,并且实际上于硬件级别的单个时钟周期可处理多个指令的多个部分。然而,这些微架构技术对软件是不可见的,因为滴答于架构级别是原子的。为了简明起见,在进一步描述本揭示期间忽视此微架构。
如图3的下部示例所示,一些实施方式可通过提供用于在一个滴答内并行处理全部节拍的充分硬件资源来安排在相同滴答中向量指令的全部四个节拍。这可适合较高性能实施方式。在此情形中,在架构级别在指令之间不需要任何重叠,因为完整指令可在一次滴答中完成。
另一方面,更为面积有效的实施方式可提供较窄处理单元,该单元每次滴答仅可处理两个节拍,并且如图3的中间示例所示,指令执行可与第二向量指令的第一及第二节拍(与第一指令的第三或第四拍节拍并行进行)重叠,其中这些指令在处理电路内不同执行单元上执行(例如,在图3中,第一指令是使用加载/存储单元25执行的加载指令并且第二指令是使用形成其他单元30之一的MAC单元执行的乘法累加指令)。
又一更具能量/面积有效的实施方式可提供硬件单元,该单元较窄并且一次仅可处理单个节拍,并且在此情形中每次滴答可处理一个节拍,其中指令执行重叠并由一个节拍触发,如图3的顶部示例所示(其与上文图2所示的示例相同)。
应了解图3所示的重叠仅是一些示例,并且其他实施方式也是可能的。例如,处理电路4的一些实施方式可支持在相同滴答中多个指令并行双重发布,使得存在较大指令通量。在此情形中,在一个周期中一起开始的二个或更多个向量指令可具有与在下一周期中开始的二个或更多个向量指令重叠的一些节拍。
除了改变实施方式间的重叠量以缩放不同性能点,在向量指令之间的重叠量也可在程序内执行向量指令的不同示例之间在运行时间改变。因此,处理电路4可具有如图1所示用于控制时序的节拍控制电路30,在该时序相对于先前指令执行给定指令。这赋予微架构自由度以选择不重叠在更难以实施或取决于指令可获得的资源的某些拐角情形中的指令。例如,若存在给定类型的背对背指令(例如,乘法累加),该指令需要相同资源并且全部可获得的MAC或ALU资源由另一指令容易地使用,则不存在充分自由资源以开始执行下一指令,并且因此不重叠,而是发布第二指令可等待直至已完成第一指令。
如图4所示,若存在插入的标量指令,则也可防止在两个向量指令之间的重叠。这是因为标量指令可取决于向量指令的最后节拍的结果并且第二向量指令可取决于在全部其节拍中标量结果,因此避免重叠向量指令与标量指令可更安全。
当如上文所论述允许重叠时,则可存在同时执行的多个指令。程序计数器16可追踪最旧未完成指令的地址,该地址具有至少一个仍待完成的节拍。当向量指令完成其最后节拍时,可增加程序计数器。
除执行标准向量加载/存储操作及标量/集中类型向量载入/存储操作之外,LSU25可被布置以也随着规定向量的数据元素在内存系统8与该组向量寄存器14之间移动而执行重新排列操作,其可有助于确保向量的数据元素在向量寄存器中以促进在其上有效执行进一步向量操作的方式排列。可认为这些数据元素形成数据结构。例如,考虑音频数据,数据结构可包含关于不同音频信道的数个数据元素。例如,考虑简单立体音频,各个数据结构可包含用于左信道的数据元素及用于右信道的数据元素。类似地,当考虑影像数据时,数据结构可包含多个分量诸如红色、绿色及α(;RGBA)数据元素分量。通常情形为:数据元素以特定方式在内存系统内组织,但期望在这些向量寄存器内以不同方式组织这些数据元素。例如,各个数据结构的数据元素可在内存中连续地排列,而在向量寄存器内可期望重新排列独立数据元素使得来自多个数据结构的对应数据元素在各个向量寄存器内连续地排列。因此,考虑先前描述的影像数据示例,可期望排列关于连续地置于一个向量寄存器内的数个数据结构的R分量的一系列数据元素、关于在另一向量寄存器内连续排列的G分量的一系列数据元素等。在此示例中,在向量加载操作期间存取的数个数据结构内的数据元素可随着其从内存移动至向量寄存器中而去交织,并且可随后随着其在向量存储操作期间从向量寄存器存储回内存而交织。
通过在LSU 25内支持这些重新排列操作,这可显著改进性能,因为其避免需要执行额外指令以在已将这些指令存储在向量寄存器内以由随后处理所需的方式排列这些数据元素之后在数据元素上执行数个额外操纵。然而,此向量加载或存储指令所需的计算量相当大,并且在某些实施方式中可意味该指令将停滞若干周期。这可导致性能问题,该问题可在允许重叠执行内存及算术操作的系统中进一步加剧。
根据后文所述的实施例,不使用一个单块加载或存储指令,该重新排列操作跨过多个指令被有效分割,使得因为执行多个重新排列指令形成一组重新排列指令,而执行重新排列操作。该组中各个重新排列指令定义数据元素存取模式,该模式不同于由该组中各个其他重新排列指令定义的数据元素存取模式。该重新排列存取模式用以识别在内存中待存取的数据元素的地址及待存取的向量寄存器的特定部分。
图5根据一个实施例说明该组向量寄存器14。在此实施例中,提供8个向量寄存器Q0至Q7,并且在图5所示的实施例中,各个向量寄存器是由多个标量寄存器形成。因此,向量寄存器Q0 50是由四个标量寄存器55、60、65、70形成。这些标量寄存器可独立存取,并且实际上若需要在标量寄存器内的单独部分可存取。尽管在图5的实施例中,各个向量寄存器是由多个标量寄存器构建,这并非必需,然而构建向量寄存器,该向量寄存器组被布置使得在向量寄存器中单独部分可独立于其他部分而更新。
在各个向量寄存器内存储的数据元素的数量将取决于数据元素的大小,并且在一个实施例中支持多个不同大小的数据元素。例如,在一个实施例中,这些向量寄存器是128位长度并且由该系统处理的数据元素可是64位数据元素、32位数据元素、16位数据元素或8位数据元素。应了解这仅是说明性示例,并且在其他实施例中,向量寄存器的大小及所支持的数据元素的大小可是不同的。当考虑图5的特定示例时,标量寄存器55、60、65、70中的各个是32位寄存器并且因此当数据元素大小是32位或更小时,各个标量寄存器将存储一个或更多个数据元素。
如将在后文更详细论述,该组向量寄存器14可在逻辑上被认为由多个区段组成,例如图5所示的第一区段75及第二区段80。尽管在图5中示出的向量寄存器被逻辑上分为两个区段,若需要这些向量寄存器可被分为两个以上区段。如后文将更详细论述,通过针对该组中独立重新排列指令适当选择存取模式,其可被布置在执行该组中各个重新排列指令期间,对该内存中的连续词组执行独立存取,并且这些独立存取可被布置以发生在这些向量寄存器内的不同区段75、80上。这促进重叠这些内存存取指令与算术指令。例如,尽管一个该重新排列指令存取该第二区段80,可执行存取第一区段75的算术指令。
图6是根据一个实施例说明一组重新排列指令可被如何排列以进行去交织操作的图。具体地,两个向量加载(VLD)指令形成一组指令,当执行时这些指令共同地进行去交织操作。这些VLD指令是VLD2n指令,“2”指示跨距2,也即,在各个数据结构中存在两个数据元素。在“VLD20”指令中“0”识别该向量加载指令是该组中的第一指令,并且因此有效识别特定存取模式识别符。类似地,“VLD21”指令是该组中的第二指令,“1”有效提供不同存取模式识别符。
也可从图6看到,两种指令均识别其在32位数据元素上操作,并且识别相同的两个向量寄存器(在此示例中Q0及Q1)。基址也由标量寄存器Rn的内容规定。在第二指令的末端处“!”识别执行该指令也将导致更新在寄存器Rn中的基址。
根据图6所说明的实施例,假设与两个向量加载指令相关的存取模式导致执行64位连续内存存取。因此,假设内存词组大小是32位,第一存取将存取两个连续32位内存词组,并且随后第二存取将存取进一步两个连续32位内存词组。由于数据元素大小也是32位,这意味各个存取将存取两个连续32位数据元素。
根据图6所说明的特定存取模式,执行第一VLD2n指令导致在LSU 25的存取/重新排列操作130处理第一存取第一指令期间存取数据结构105,并且随后在第二存取第一指令期间存取数据结构120。该存取模式也将导致第一数据结构105的两个数据元素(在此示例中假设数据结构表示由左侧及右侧音频组件形成的音频数据)加载在两个向量寄存器Q0及Q1内的第一通道,由图6中寄存器内容140所指示(其中“x”指示不对这些组件进行更新并且保留先前值)。在以下描述中,在向量寄存器内各个数据元素位置将被称为信道,因为当在向量寄存器上进行算术操作时,操作可在各个信道中的数据元素内并行执行。
如由寄存器内容145所示,一旦已经进行第一指令的第二存取,则数据结构120的数据元素被置于向量寄存器的最后信道内。将从先前提及的图5显而易见,第一向量加载指令的第一存取存取了向量寄存器14的第一区段75,而第二存取存取了第二区段80。
相似地,如图6所示,当由于执行第二向量加载指令进行加载/存储单元130的存取/重新排列操作时,第一存取存取了数据结构110并且如寄存器内容150所示将两个数据元素存储在第二信道内,并且第二存取随后存取数据结构115并且如向量寄存器内容155所指示将数据元素存储在第三信道中。此外,可以看到第一存取存取了向量寄存器的第一区段75而第二存取存取第二区段80。
当采用先前参考图3所论述的每一滴答四个节拍的途径时,并且假设内存系统为至少四边形联组内存系统,此存取模式将允许各个指令的第一及第二存取同时发生,因为与各个节拍相关的地址将存取不同内存组。若替代地也如先前参考图3所论述使用每滴答两个节拍的配置,则针对各个指令的第一及第二存取可一个接一个发生。在内存包含至少两个内存组时,图6所示的模式的使用将允许在各个存取期间存取两个内存组,因此改进性能。
与共同地形成一组重新排列指令的各个重新排列指令相关的存取模式可采用各种形式。如先前提及,一组中各个重新排列指令将定义数据元素存取模式,该模式不同于由该组中各个其他重新排列指令定义的数据元素存取模式,并且在一个实施例中这确保在执行该组中各个重新排列指令期间在内存与多个向量寄存器之间移动不同数据元素。此外,定义存取模式使得在执行各个重新排列指令期间存取一个以上向量寄存器。在一个实施例中,该存取模式是使得执行各个重新排列指令导致在重新排列操作中所涉及的多个向量寄存器中的各个中存取至少一个数据元素。已发现此途径可使存取模式更易于实施。
图7A至图7G说明可针对各种不同数据元素大小的与一组中各个不同重新排列指令相关的存取模式的各个不同示例。这些仅仅是说明性,并且应了解也可使用众多不同存取模式。这些图示出这些模式如何规定在执行一组中各个重新排列指令期间存取哪部分向量寄存器,并且指示存取哪些内存地址。图7A示出在32位数据元素上操作的当执行一组中两个向量加载指令时采用的向量寄存器存取模式以及存取向量寄存器Q0及Q1,这些模式对应于在图6中示意地示出的模式。具体地,存取模式200由四个部分205、210、215、220组成。当执行第一向量加载指令时,第一存取存取相对于基址于内存偏移0及4的地址,并且将内容存储在标量寄存器SO及S4中,如由块205指示。第一指令的第二存取随后在偏移24及28存取内存,并且将内容存储在标量寄存器S3及S7中,如由块210所示。应了解尽管在图7A存取S0至S7(构成向量寄存器Q0及Q1),所存取的标量寄存器是取决于由重新排列指令所规定的向量寄存器。在另一示例中,重新排列指令可例如将Q1及Q2规定为目的地向量寄存器,在该情形下应存取标量寄存器S4至S11。
从先前论述的图6显而易见,执行第一指令不导致更新基底寄存器内容,并且由此当执行第二指令时,偏移仍相对于相同基址计算。第二指令的第一存取因此应相对于基址在内存偏移8及12处存取地址,其中将检索的数据元素存储在标量寄存器S1及S5中,如由块215所示。类似地,第二存取将导致在偏移16及20存取内存,其中将内容存储在标量寄存器S2及S6中,如由块220所示。将从图5的先前论述显而易见,尽管为了便于说明参考标量寄存器数量,应了解这些标量寄存器有效形成两个向量寄存器Q0及Q1,并且因此标量寄存器数量仅仅识别向量寄存器的不同部分。
图7B说明当存取向量寄存器Q0至Q3的一组四个向量加载指令用以实施具有跨距4的向量加载时(也即,其中各个数据结构包含四个数据元素,此为例如在先前描述的RGBA示例的情形)可使用的另一系列向量寄存器存取模式225。此外,假设数据元素大小是32位。当执行第一指令时,其进行由框230、235所说明的两个存取,检索相对于基址具有偏移0及4的两个数据元素并且将其存储在标量寄存器位置S0及S4中,并且随后在第二存取中相对于基址在内存偏移40及44存取两个数据元素,并且将其存储在标量寄存器S10及S14中。当执行第二指令时,其随后执行由两个块240及245所示的存取。类似地,当执行第三指令时,其执行由块250及255所说明的两个存取。最后,当执行第四指令时,其执行由块260及265所说明的两个存取。
应了解,若共同地使用全部存取模式,哪些存取模式是与该组中哪些指令相关是不重要的。此言论同样应用至图7A至图7G的全部示例。
使用如针对VLD2n指令先前参考图6所论述的相同表示法,在图7B中示意地示出的用以执行存取模式的四个向量加载指令可采取以下形式:
VLD40.32{Q0-Q3},[Rn]
VLD41.32{Q0-Q3},[Rn]
VLD42.32{Q0-Q3},[Rn]
VLD43.32{Q0-Q3},[Rn]!
从图7B显而易见,随着执行VLD4n指令中的各个,根据图7B所示的模式,其写入四个向量寄存器的四分之一。将从图7A及图7B的综述显而易见,针对指令的VLD2n及VLD4n组二者,各个指令执行两个64位的连续内存存取。此外,对由单个指令执行的每个词组的存取地址位[3:2]是不同的,这当该内存子系统采取多个内存组时更有效存取内存子系统。此外,内存及寄存器存取模式均被设计使得其可利用逐位逻辑容易地计算。这将通过示例的方式参考该组VLD4n指令在后文图8及图9中论述。
也看到当执行时,各个指令将64位存储至向量寄存器文件的每一半中。这意味在双节拍架构上,不存在跨过寄存器文件的中心线的存取,并且由此这些指令与先前描述的重叠执行内存及算术操作兼容,而不需要额外依赖检查或停滞。这些因素使得指令易于实施,并且允许有效使用该内存子系统。
图7C及图7D说明等效存取模式300、310,当数据元素大小是16位而非32位时这些模式可用于指令的VLD2n及VLD4n组。考虑图7C,存取模式300由通过第一VLD指令的两个存取来存取的块302、304及通过第二VLD指令的两个存取来存取的块306、308组成。
类似地,考虑图7D,存取模式310由与第一指令的两个存取相关的块312、314,与下一指令的两个存取相关的块316、318,与第三指令的两个存取相关的块320、322以及与第四指令的两个存取相关的块324、326组成。
从图7C及图7D与图7A及图7B的比较显而易见,在图7C及图7D的各个块中基址偏移增加了二,而在图7A及图7B的各个块内增加了四,因为针对图7C及图7D的示例数据元素大小是16位,而图7A及图7B的示例是32位。
尽管在前述示例中,各个指令执行两个存取,若需要可针对各个指令执行两个以上存取。例如,图7E说明一系列交替存取模式330,其中四个存取(各个是32位连续存取)是与指令中的各个相关。此外,这些存取可在多个内存组之间分割。
图7F及图7G说明当数据元素大小是8位时针对VLD2n及VLD4n指令可采用的示例存取模式400、410。因此,考虑图7F,第一VLD2n指令导致在第一存取期间存取块402及在第二存取期间存取块404,而第二VLD2n指令导致在第一存取期间存取块406及在第二存取期间存取块408。
图7G说明用于一组四个VLD4n指令的一系列存取模式410。第一VLD4n指令导致在第一存取期间存取块412及在第二存取期间存取块414,尽管第二VLD4n指令导致在第一存取期间存取块416并且在第二存取期间存取块418。相似地,第三VLD4n指令导致在第一存取期间存取块420及在第二存取期间存取块422,尽管最后VLD4n指令导致在第一存取期间存取块424及在第二存取期间存取块426。如先前提及,若需要可改变哪些存取模式是与该组中哪些指令相关。
尽管图7A至图7G示出与向量加载指令组相关使用的存取模式,相同存取模式也可用于对应组向量存储指令,唯一差别是数据从向量寄存器移动回内存,而不是从内存移动至向量寄存器。
图8是说明地址词组偏移至内存可如何使用由特定指令规定的模式识别符及识别当前正在处理该指令的哪一节拍的节拍识别符位产生并且因此说明该处理已经到达该模式多远的图。所说明的逻辑是用于该组VLD4n指令,这些指令用以产生图7B所示的内存存取模式。提供两个位模式ID值505连同节拍ID的位1以输入加法器510。位0节拍ID在路径520上输出,同时节拍ID的节拍1在路径500上输出。加法器在路径515上产生输出。输出500、515、520共同地形成图8所示的地址词组偏移,并且因此产生四位地址词组偏移。该值随后乘以四以获得字节地址,随后将其添加至在寄存器Rn中的基址以识别存取的实际内存地址。
考虑以示例方式由图7B的块230及235所示的特定模式的第一存取及第二存取,将看到针对第一32位节拍,所产生的地址词组偏移是0000(假设针对此模式的模式ID是00)。针对下一节拍,偏移随后是0001,因为节拍ID位0从0变为1。针对下一节拍,节拍ID位0返回至0,但节拍ID位1变为值1。这导致地址词组偏移是1010,当乘以四时其给出字节地址偏移40,如针对在图7B的块235中的第一词组存取所示。随后,针对最后节拍,节拍ID位0变为1,给出地址词组偏移1011,识别与在块235中最后词组存取相关的字节地址偏移44。
尽管在其上操作32位数据元素的图8的地址产生逻辑的上文描述参考第7B图的示例,该相同地址产生逻辑可用于当使用图7D或图7G的存取模式时在不同大小的数据元素(例如16位或8位数据元素)上操作的VLD4n指令。然而,若使用了图7E的交替存取模式,则需要由此修改地址产生逻辑。
图9是说明当执行一组VLD4n指令时可用以在待存取的向量寄存器内识别特定部分的逻辑的框图。除先前论述的节拍识别符位及模式识别符位之外,也提供元素识别符位,尽管仅当数据元素大小是小于32位时使用这些位。使用图9所示的栅极535、540、545逻辑结合各种节拍ID及模式ID位。x寄存器识别符识别了从图5的右手侧开始将存取在向量寄存器内四个标量寄存器的哪一个。因此,x寄存器识别符00将识别向量寄存器的右手侧最高标量寄存器,并且x寄存器识别符01将识别左侧的下一标量寄存器等。y寄存器偏移位识别相对于由指令识别的第一Q寄存器的偏移。尽管一些指令可将Q0规定为第一寄存器,这并非必需,并且因此仅以说明的方式,第一向量寄存器可是Q4,y寄存器偏移随后相对于Q4在图5所示的垂直方向中规定。X元素偏移位是用以识别在数据元素大小是16或8位的情况下存取所识别的标量寄存器的哪些部分。可从图9看到,将大小信息作为控制输入提供至多路器550、560、570、580的各个,并且当数据元素大小是32位时,从多路器570和580二者的输出是逻辑0值,并且因此x元素偏移不具有影响。针对16位数据元素,x元素偏移位0是由多路器580的输出控制,并且x元素偏移位1通过从多路器570输出固定于0。然而,针对8位数据元素,多路器570、580二者将取决于其较低最高输入产生输出,并且因此使用x元素偏移值的位两者。
从先前论述显而易见,模式ID值由特定指令的作业码有效规定。节拍ID及元素ID信息可以各种方式维持,并且例如当执行各个重新排列指令时可由LSU 25在提及的本地计数器中维持。
图9的逻辑当分别使用图7B、图7D或图7G的存取模式时可用于在不同大小数据元素上操作的VLD4n指令,例如32位、16位或8位数据元素。然而,若使用了图7E的交替存取模式,由此需要修改图9的逻辑。
图10说明去交织来自内存的数据(例如左及右音频信道)并且在数据上执行乘法累加操作的一些示例代码。可看到,VLD2n指令被布置为一组两个指令,在图10所示的代码区段中执行该组两次。如该图的右手部分所示,这些新的重新排列指令组允许内存接口及乘法累加硬件均100%时间保持占用而无任何停滞。在示出的使用每一滴答两个节拍的排列的示例中,并且因此各个VLD指令可与合适的乘法累加指令重叠,其中这两个指令存取向量寄存器的不同区段。
图11A至图11D说明针对跨距二(其中两个向量指令被布置以形成一组)及跨距四(其中四个向量指令被布置以形成一组)的可在一个实施例中提供的向量加载及向量存储指令的特定编码。首先考虑图11A的VLD2n指令,当执行时,各个VLD2n指令导致从内存加载数据的两个64位连续块并写入两个目的地寄存器的部分。写入的目的地寄存器的部分及从基址寄存器的偏移是由“pat”参数决定。若执行具有相同基址及目的地寄存器但具有不同“pat”值的指令两次,则效应是用以从内存加载数据并用以将其去交织至具有跨距二的规定寄存器。基址寄存器可在执行该组中第二指令时视情况增加32,用以指示已处理数据的32字节并且用以更新准备好用于随后VLD2n指令组的基底寄存器中的指针。
考虑图11B的VLD4n指令,每次执行此指令时其也从内存加载两个数据的64位连续块,但在此情形中将该数据写入四个目的地寄存器的部分。写入的目的地寄存器的部分及从基址寄存器的偏移是由“pat”参数决定。若执行具有相同基址及目的地寄存器但具有不同“pat”值的指令四次,效应是用以从内存加载数据并用以将其去交织至具有跨距四的规定寄存器。在执行该组中最后指令时基址寄存器可视情况增加64,以识别已经处理数据的64字节。
考虑图11C的向量存储指令(VST2),每次执行此指令时其将数据的两个64位连续块保存至由两个源寄存器的多个部分构成的内存。从基址寄存器读取的源寄存器的部分及从基址寄存器偏移是由“pat”参数决定。若执行使用相同基址及源寄存器但具有不同“pat”值的指令两次,效应是交织具有跨距二的来自规定寄存器的数据并且将所得数据保存至内存。基址寄存器可视情况增加32。
当考虑图11D的VST4指令时,这在每次执行时将数据的两个64位连续块再次保存至内存,并且在此示例中该连续块是由来自四个源寄存器的多个部分的数据构成。从基址寄存器读取的源寄存器的部分及从基址寄存器的偏移是由“pat”参数决定。若执行具有相同基址及源寄存器但具有不同“pat”值的指令四次,效应是交织具有跨距4的来自规定寄存器的数据元素并用以将所得数据保存至内存。基址寄存器可视情况增加64。
图12是说明当解码包括先前提及的一组重新排列指令的程序指令序列时操作解码器6的流程图。在步骤650,分析当前指令,其后于步骤655决定该指令是否是一组重新排列指令。若不是,则在步骤660关于该指令执行标准解码操作以产生用于相关执行单元的控制信号,其后在步骤665,解码器移动至下一指令并随后返回至步骤650。
若在步骤655,决定所分析的当前指令是一组重新排列指令,则在步骤670识别该指令是该组的哪个成员,这是通过参考先前提及的“pat”值达成。其后,在步骤675,取决于该指令是该组的哪个成员产生数据元素存取模式指示并且在步骤680执行剩余解码操作以产生用于加载包括数据元素存取模式指示符的存储单元的控制信号。
在一个实施例中,如从图8及图9的先前论述了解,在步骤675产生的数据元素存取模式指示符可仅仅由从指令作业码提取的“pat”位有效形成,其中LSU随后与节拍识别符(并且视情况元素识别符信息)结合使用此信息以产生适当内存存取及寄存器存取模式。
在步骤680之后,该过程随后经由步骤665返回至步骤650。
如先前提及,该组中一个或更多个指令可被布置以在规定的基址寄存器中更新基址。在一个特定实施例中,该组中最后指令是用以执行基址寄存器更新,并且该基址值更新的量考虑由该组中重新排列指令执行的全部存取。
若需要,当执行这些加载或存储指令时执行的操作也可经扩展以包括数据加宽或数据变窄功能。这在将数据以与在向量寄存器中存储的格式不同的格式存储在内存中时是有用的。例如,与其在向量寄存器内相比其可以更截短形式存储在内存中。图13说明随着将数据从内存加载向量寄存器中当试图执行数据加宽时可执行的一系列步骤。具体地,在当执行该组中各个重新排列指令时执行的各个存取至内存期间,可执行图13的过程。在步骤700,相关数据元素获取自内存位置,其中各个数据元素具有第一大小。随后,在步骤705,数据加宽操作在这些数据元素上执行(例如通过零扩展或正负号扩展从内存检索的值)以产生第二大小的数据元素。
随后,在步骤710,写入的向量寄存器部分由数据元素存取模式信息(及节拍信息等,如先前参考图9论述)决定并随后在步骤715将加宽的数据元素写入向量寄存器的识别部分。
应了解,若需要可执行等效数据变窄功能,其中不执行零或正负号扩展检索的数据,执行检索的数据元素的截短。在一个实施例中,随着将该数据从内存检索至向量寄存器中并随后当将其从向量寄存器存储回内存时变窄,该数据可加宽,尽管在替代实施例中,随着从内存检索数据变窄并随后随着将其存储回内存加宽。
若需要,该组重新排列指令可通过述语信息量化以导致从处理中排除在存取的地址范围内的一个或更多个数据结构。从先前在图7A至图7G中说明的存取模式显而易见,当试图从处理排除一个或更多个数据结构时,决定针对该组中任何独立指令这是否对执行的处理具有任何影响将取决于存取模式。例如,若考虑存取模式可采取图7B中说明的形式的VLD4n指令组,并且决定从处理中排除置于第二信道中的数据结构,可以看到这将影响VLD4n指令的第一存取,其执行与块250相关的存取及与块260相关的VLD4n指令的第一存取。然而,可正常地排除其他VLD4n指令。
在一个实施例中,诸如图14A所示出的述语寄存器750可用以规定述语值。在一个实施例中,这可是16位寄存器,并且使用术语寄存器的哪些位将取决于数据元素的大小。例如,当向量寄存器是128位宽并且数据元素是32位大小时,每个向量寄存器存在4个数据元素,并且LSU可被布置以当存取述语信息时仅指述语寄存器750的每个第四位,类似地,针对16位数据元素,其可被布置以查询每个其他位,而针对8位数据元素,其可被布置以查询述语寄存器的全部位。这仅仅是实施由LSU参考所需的述语信息的一个示例方式,并且应了解可使用表达该述语信息的任何其他方式。
图14B是示意地说明在执行该组中各个重新排列指令期间如何使用述语信息的流程图。在步骤760,决定是否预测当前指令。在一个实施例中,独立指令用以设定述语寄存器750,并且在一个实施例中该指令也识别将要预测随后“M”指令。因此,作为一示例,此指令可在一组VLD4n指令之前执行,识别将要预测四个VLD4n指令的这些组。
若决定不预测当前指令,则该过程进行至步骤775,此处LSU对内存执行一个或更多个存取以存取所需数据元素,进而执行所需加载或存储操作及相关重新排列。
然而,若在步骤760决定预测当前指令,则周四步骤765决定使用述语寄存器的哪些位取决于由指令正在处理的数据元素大小。其后,在步骤770,分析相关述语位连同与当前指令相关的存取模式信息以决定述语位对执行该指令所需的存取的影响(若有)。采取参考图7B论述的上文提及的示例,这将意指当进行了执行存取至块250的VLD4n指令时,将决定不需要其第一存取,并且类似地当执行存取至块260的VLD4n指令执行时,将决定不需要其第一存取,假设述语信息正试图从处理排除与第二信道相关的数据结构。
在步骤770分析之后,则在步骤775对内存执行一个或更多个存取以存取所需数据元素。当然应了解述语信息可原理上意指针对一个或更多个重新排列指令,不需要执行存取,并且由此在这些情况中,在步骤775将不执行存取。
从上文所述的实施例,应了解当试图使用向量加载及存储指令执行重新排列操作(诸如交织及去交织操作)时,该处理可通过使用排列在一组中的多个独立指令改进以实施所需重新排列操作。具体地,此途径可显著降低当执行加载或存储指令时引入的停滞周期的可能性。此外,通过适当排列与各个指令相关的存取模式,可能使这些指令与架构兼容,该架构允许重叠执行内存及算术指令,因此进一步改进性能。通过采用先前论述的途径,这些指令可容易实施并且允许有效使用内存子系统。
以下实施例描述用于存取该组向量寄存器的新颖排列。此途径可在各种情况下有用。作为一个示例,其可促进使用先前所述的各种数据元素存取模式。
图15根据一个实施例示意地示出具有写入存取电路的向量寄存器文件800的部分。向量寄存器文件800是由数个向量寄存器构成,各个向量寄存器由数个标量寄存器构成。在图15所示的实施例中,该向量寄存器文件800的部分示出在图15中表示为行的四个向量寄存器805、810、815、820的部分。各个向量寄存器805、810、815、820通过使用数个标量寄存器存储向量。例如,第一向量寄存器805是部分由两个标量寄存器s0及s1构成,而第二向量寄存器810是部分由两个其他标量寄存器s4及s5构成。除向量寄存器文件800之外,提供写入存取电路830(其是寄存器存取电路的示例)。写入存取电路包括第一存取块835及第二存取块840并且将参考图24更详细论述。各个存取块一次能够存取向量的一部分。由此,可同时存取(例如,写入)的数据量受限。具体地,仅能同时将数据写入向量寄存器文件800,其同时在第一存取块835及第二存取块840提供。在此示例中,为了方便起见,假设一部分与标量寄存器大小相同。在图15的实施例中,寄存器文件800的部分包含两列845、850。各列存储各个向量的相同部分。在此示例中,由于该部分大小是与标量寄存器大小相同,这些列与标量寄存器s0、s1、s4、s5、s8、s9、s12、s13对准。
如图15所示,标量寄存器经接线至两个端口835、840之一。在图15的示例中,标量寄存器s0、s5、s8、及s13被接线至第一存取块835而标量寄存器s1、s4、s9、及s12被接线至第二存取块840。应从示意性透视图了解,参考图15所示的接线含有数个扭转。换言之,通过不仅仅将在彼此之上或之下的全部寄存器接线至相同端口,产生接线的逻辑扭转。以此方式,针对写入存取电路可能同时写入在列中的标量寄存器(也即,相同向量寄存器的部分)诸如至标量寄存器s0及s1。相同写入存取电路也可同时写入在相同列中的标量寄存器诸如标量寄存器s0及s4。这是因为标量寄存器对s0及s4以及标量寄存器对s0及s1被接线至不同端口835、840。注意到尽管此处提及接线扭转,不需要实际上实体扭转接线。应了解标量寄存器本身可经实体重新排序(同时重命名其逻辑识别/地址)使得接线是直的,同时产生相同效应。
相似概念应用至读取存取电路855,其是寄存器存取电路的另一示例,如图16所示。在此示例中,读取存取电路855也具有第一存取块860及第二存取块865。一些标量寄存器s0、s5、s8、及s13连接至第一存取块860而其他标量寄存器s1、s4、s9、及s12连接至第二存取块865。由此,两个标量寄存器可被同时存取(例如,读取)并且由于扭转接线,可能读取来自向量寄存器805、810、815、820之一(诸如寄存器s4及s5)的两个寄存器或在相同列中的两个寄存器(诸如寄存器s4及s8)。这是因为在相同列中的寄存器交替其连接的存取块并且也因为在各列中的寄存器也交替其连接的存取块。注意到在图15及图16所示的实施例中,尽管以相似方式设置接线,关于图15的写入存取电路830及图16的读取存取电路855使用不同实体接线。然而,这是不重要的,并且其他实施例可准确使用用于写入存取电路830及读取存取电路855的相同接线。
图17根据一个实施例示意地示出具有写入存取电路的向量寄存器文件800。向量寄存器文件800是由具有第一写入存取电路880的第一区段870及具有第二写入存取电路885的第二区段分875构成。各个写入电路880、885仅存取列中的部分,其是其相关区段中的一部分。例如,第一写入存取电路880仅存取在第一区段870中的列的部分,而第二写入存取电路885仅存取在第二区段875中的列的部分。由此,应了解,扭转不跨过区段的边界扩展。
图18示意地示出具有第一读取存取电路890及第二读取存取电路895的向量寄存器文件800。如在图17所示的实施例的情形中,第一读取存取电路890存取在第一区段870内列的部分并且第二读取存取电路895存取在第二区段875内列的部分。
图19A说明在向量寄存器文件中单扭转的示例,其中以示出这些词组的文本格式说明该向量寄存器文件。在图19A的示例中,各个向量包含跨过四列分布的四个部分。与之前相同,各列存储各个向量的相同部分。然而,已提供标记A、B、C、及D以说明经由相同端口存取的部分。由此,可以看到当从Q0至Q7向上经过向量寄存器时加圆圈部分标记的A如何在第三列与第四列之间交替。向量寄存器文件应具有单扭转,因为各个部分的模式跨过21,也即,2列分布。
图19B说明在向量寄存器文件中单扭转的示例,其中以示出字节的文本格式说明向量寄存器文件。图19B对应于图19A,除了图19B说明字节格式的向量寄存器文件。具体地,示出了各个词组是由四个字节构成(也即,各个词组是32位)。构成各个词组的四个字节是通过将数字下标添加至各个标记末端来说明。例如,标记A的词组是由标记A0、A1、A2、及A3的字节构成。此外,单扭转模式是通过对构成A词组的全部字节加圆圈来说明。此外,可以看到该模式跨过2列分布。
在一些情形中,可能需要提供用于向量寄存器文件的较宽范围的存取模式。例如,若向量包含8个数据元素,各个数据元素16位,则各个向量将是128位。由此,针对两个区段,各个区段将是64位。因此各个向量的各个存取部分需要为16位,并且因此将必须在各个区段中提供64/16=4列。为了能够同时存取来自相同列的部分并且针对相同电路能够同时存取来自相同商数寄存器的部分,需要提供一个以上单扭转。具体地,需要提供嵌套在第二32位扭转模式中的第一16位扭转模式。
图20说明一个这样的模式,其除了与在图19B示出的共4列(每区段2列)不同使用共8列(每区段4个列)之外,为了方便起见使用与图19B相同的标记。图20的示例说明具有椭圆形的第一32位扭转模式,其覆盖全部A元素并在列1+2与列3+4之间交替。16位扭转模式(由三角形示出)是更复杂的并且表示可连接至读取或写入存取电路的端口之一。具体地,针对在各个椭圆内的两对列,该存取电路在每2个向量寄存器连接左对与右对之间交替。例如,在向量寄存器Q0,连接右侧椭圆的右侧对。在2个更多向量寄存器之后(也即,在向量寄存器Q2),这与右侧椭圆的左侧对交替。在又2个寄存器之后(也即,在向量寄存器Q4),再次存取右侧椭圆的右侧对。相似模式相对于左侧椭圆出现。具体地,在向量寄存器Q1,连接左侧椭圆的右侧对,并且这在又2个寄存器之后(也即,在向量寄存器Q3)交替使得连接左侧椭圆的左侧对。再一次,在又2个向量寄存器之后(也即,在向量寄存器Q5),这交替回左侧椭圆的右侧对。交替地看到,通过存取电路的端口之一跨过向量寄存器Q0至Q3存取列1、3、2、及4(从右至左计数列)。换言之,存取块存取在跨过各个向量寄存器Q0至Q3的区段部分内的不同列。在向量寄存器Q3之后,该模式重复。
应了解针对在区段内的各个列,在接线模式重复之前必须“经过”的向量寄存器的数量等于列的数量。
注意到在图20中,也清楚“扭转大小”,也即,经历扭转的部分大小,可不同于数据元素大小。这是因为,已经产生具有特定接线排列的向量寄存器文件,可发生的扭转度(及列数量)变为固定的。在该点,该向量寄存器文件的数据元素大小变为不可知。具体地,若该部分大小是16位,即在图20中的情形,相同寄存器文件可用以存储16位数据元素或32位数据元素,再次为在图20中的情形。
图21根据一个实施例示意地示出向量寄存器文件900的一个区段,其中电路执行双重扭转。例如,图21的示意图可与在图20中说明的双重扭转模式对应。在图21所示的实施例中,向量寄存器是由多个标量寄存器s0、s1、s4、s5、s8、s9、s12、s13构成,各个是32位。然而,各个部分的大小是16位。因此,各个标量寄存器存储两个部分并且在图21中示出的区段包含四列。图21所示的实施例说明四个不同风格线905、910、915、920。线905、910、915、920各自表示接线或连接至存取电路的相同存取块的部分。应注意,线905之一与相对于图20示出的连接部分对应。该特定线分别连接至在向量寄存器Q0、Q1、Q2、及Q3(从底部至顶部)中的列1、3、2、及4(从右至左)。如上文所示,图21的顶部所示的向量寄存器(Q3),在四个向量寄存器之后,各线的存取模式本身重复。
已经示出可如何实施单扭转模式及双重扭转模式,以接线不必同时存取至寄存器存取电路的相同存取块的向量寄存器的这些部分,由此能够在行或列中同时存取部分。然而,嵌套扭转模式的概念可无限延伸。例如,通过添加第三等级的嵌套扭转导致双倍数量部分/列,可能在任一列或行中的单个区段内同时存取23=8个8位部分。
图22是根据一个实施例说明执行扭转的过程可如何一般化以执行嵌套扭转任意次数的图。图22说明寄存器文件925的一部分。示出了包含标量寄存器s0、s1、s2、及s3的单个向量寄存器930。寄存器文件包含两个区段935、940,各个包含8列。然而,相同原理可应用至单个区段。可认为这些列在嵌套结构中逻辑上分组在一起。嵌套结构具有log2(N)等级,其中N是在区段内列的数量。由此,在此情形中,嵌套结构具有log2(8)=3等级945、950、955。等级数量也与嵌套深度对应。在此特定示例中,由此,该嵌套可是3等级深。在第一等级945,在第一组的至少一列980与第二组的至少一列985之间相等地分割N=8列。总之,这些在第一等级945形成结合组980、985。在各个父等级(例如,在第二等级950)这些组各自被相等地分割为针对对应子等级(例如,在第三等级955)的第一组的至少一列及第二组的至少一列。例如,在图22中,在父等级950,这些组的至少一列970之一被分割为在子等级955中的第一组的至少一列960及第二组的至少一列965。在给定等级L的结合组的数量是等于2L。在父等级中其他组的相同分割过程由此是真实的。
应了解等级945、950、及955是完全概念的并且在逐渐增大(或逐渐减小)组中仅仅用于分组这些列。
在此结构处于适当位置后,可能描述在存取电路的存取块(于下图描述)与向量寄存器的不同部分之间的接线。针对各个向量寄存器,各个存取块被配置以访问一列。访问存取块/向量寄存器组合的一列可由在各个等级的需要或限制唯一识别,在针对相同数量的向量寄存器访问第二组的至少一列之前,第一组的至少一列被访问预定数量的向量寄存器的一半。预定数量等于2X并且其中X于各个等级不同并且是在范围1至log2(N)中。预定数量由此在范围2至8中。由此,在访问在第二组985中的相同数量列之前,各个存取块访问例如在第一组980中的1-4列。针对在第二等级950中的两个第一组及两个第二组以及针对在第三等级955中的四个第三组及四个第二组,适用相同原理。
在图22中示出的结合组970、975是由第一组列970及第二组列975构成并且于第二等级嵌套结构发生。由此,在一个示例中,跨过四个向量寄存器,一个存取块可存取列960,接着是列965,接着是在结合组975中的两列。在第二示例中,一个存取块可存取列960,接着是在结合组975中的一列,接着是列965,接着是在结合组975中的其他列。针对单个向量寄存器各列仅由单个存取块访问,由此在第一示例中,另一存取块可存取在结合组975中的两个不同列,接着是列960,接着是列965。
在一个接线示例中,在区段中的各个存取块访问来自第一组及在另一2M-1向量寄存器内的列,访问来自对应第二组的列,其中M是给定等级。例如,当第一存取块访问来自第一等级945的第一组980的列时,在21-1=1向量寄存器内,将访问在第一等级945的第二组985中的列。换言之,跨过各个向量寄存器,存取块将在第一组980与第二组985中的列之间交替。类似地,在第二等级950,在访问在第一组970中的列之后,在21-1=2向量寄存器内,将访问在对应第二组975中的列。
由此,可以看到针对任意深度嵌套可如何产生接线模式。
图23根据一个实施例示意地示出作为寄存器存取电路的示例的读取存取电路或读取端口。在图23所示的实施例中,读取存取电路包含在第一区段中的四个存取块990、995、1000、1005及在第二区段中的交替存取块990’、995’、1000’、1005’。各个存取块作为多路器实施。每区段存在四个存取块指示在区段中存在四列时可使用此电路。换言之,在发生双重嵌套,诸如图21所示出的寄存器文件900时可使用此电路。在区段中各个存取块如先前所述跨过在该区段中向量寄存器连接至多个部分。应了解在发生扭转时,输出这些部分的顺序可反转。例如,参考图18,当存取向量寄存器Q0时,这些部分将按顺序s3、s2、s1、s0(也即,递降次序)出现。然而,当存取向量寄存器Q1时,这些部分将按顺序s6、s7、s4、s5(非递降次序)出现。为了调整此现象,交叉多路器1010(其是重新排列电路的示例)被提供在各个区段中,其能够重新排序该区段的存取块990、995、1000、1005的输出。来自交叉多路器1010的输出随后提供至另一多路器1015,这使得能够提供标量值。输出也结合在一起并于组读取端口提供,这使得能够读取全部四个选择值(也即,从列或行)。
图24根据一个实施例示意地示出作为寄存器存取电路的示例的写入存取电路。与图23所示的读取电路一样,图24所示的写入电路具有关于重新排序部分的相似问题。具体地,这些部分可按照一种顺序提供至向量寄存器文件900,但是可由于先前描述的接线必须重新排序。为了补偿此缺陷,提供交叉多路器1020(重新排列电路的示例)以在写入向量寄存器文件900之前重新排列输入。
图25是根据一个实施例说明制造方法的流程图1025。在第一步骤1030中,提供一组向量寄存器。各个向量寄存器被布置以存储包含多个部分的向量。在第二步骤1035中,提供用于向量寄存器的各个区段的寄存器存取电路。在第三步骤1040中,各个存取块被布置以当存取向量寄存器之一时而非当存取其他向量寄存器中的至少一个时在不同列中存取向量寄存器的部分。由此,该寄存器存取电路被布置以在向量寄存器或列中同时存取向量寄存器的部分。
图26例示了可使用的虚拟机实施方式。尽管先前描述的实施例根据用于操作支持相关技术的具体处理硬件的设备及方法来实施本发明,但也有可能提供硬件设备的所谓虚拟机实施方式。这些虚拟机实施方式在主处理机1500上执行,该主处理机执行支持虚拟机程序1300的主机操作系统统1400。通常,需要大型高效处理器以提供按合理速度执行的虚拟机实施方式,但此方法在某些环境中可为合理的,诸如当需要运行另一处理器本地的代码以获得兼容性时,或出于再使用的原因。虚拟机程序1300将与可由真实硬件提供的硬件接口相同的虚拟硬件接口提供至访客程序1200,该真实硬件是由虚拟机程序1300模型化的组件。因此,程序指令(包括上述重新排列指令)可通过使用虚拟机程序1300而在访客程序1200内执行以模型化指令与虚拟机硬件的互动。访客程序1200可是裸机程序,或者替代地其可是以与主机OS 1400运行虚拟机应用1300的方式相似的方式运行应用的访客操作系统。应了解存在不同类型虚拟机,并且在一些类型中虚拟机在主机硬件1500上直接运行而不需要主机OS 1400。
在本申请中,术语“被配置为”用于意指装置的组件具有能够进行定义的操作的配置。在该上下文中,“配置”意指硬件或软件的互连的布置或方式。例如,装置可具有提供定义的操作的专用硬件,或处理器或其他处理装置可被程序化以执行该功能。“被配置为”不暗示该装置组件需要以任何方式改变以提供定义的操作。
尽管已在本文中参考附图详细描述了本发明的说明性实施例,应理解,本发明不限于这些精确实施例,且本领域技术人员可在本发明中实现各种改变、添加及修改,而不偏离由所附权利要求定义的本发明的范围及精神。例如,从属权利要求的特征可与独立权利要求的特征进行各种组合而不脱离本发明的范围。

Claims (19)

1.一种数据处理设备,其包含:
一组向量寄存器,每个向量寄存器被布置为存储包括多个部分的向量,所述一组向量寄存器在逻辑上被划分为多列以使得每个向量跨过所述多列中不止一列分布,其中每列被布置为存储各向量的一部分,所述一部分在各向量中的位置是相同的;以及
寄存器存取电路,用于存取所述各向量的一部分中的每一者,所述寄存器存取电路包括多个存取块,每个存取块能够存取所述各向量的一部分的子集,其中
能够由每个存取块存取的所述各向量的一部分的子集包括在不同列和不同向量寄存器中的部分;并且
所述寄存器存取电路被布置为同时存取以下任一项中的多个被存取部分:所述向量寄存器之一和所述列之一。
2.根据权利要求1所述的设备,其中,所述一组向量寄存器包括至少一个区段,其中,每个区段包括不同的列;以及
该设备包括用于每个区段的寄存器存取电路,每个寄存器存取电路被布置为存取与该寄存器存取电路相关联的区段中的部分。
3.根据权利要求2所述的设备,其中,每个存取块被布置为当存取所述向量寄存器之一时而不是当存取数量等于每个区段中包括的列数减一的多个其他向量寄存器时,存取不同列中的部分。
4.根据权利要求1至3中任一项所述的设备,其中,第一存取块被布置为存取第一向量寄存器的第一列并存取第二向量寄存器的第二列;并且第二存取块被布置为存取所述第一向量寄存器的第二列并存取所述第二向量寄存器的第一列。
5.根据权利要求2至3中任一项所述的设备,其中,每个区段在逻辑上被划分为N列;
所述N列在逻辑上被布置为具有log2(N)等级的嵌套结构,其中N大于或等于4并且是2的整数次幂;
在第一等级,所述N列在第一等级的第一组的至少一列与第一等级的第二组的至少一列之间被相等地分割;
每个父等级中的每组的至少一列被相等地再次分割为针对对应子等级的第一组的至少一列和针对该对应子等级的第二组的至少一列;
针对每个向量寄存器配置每个存取块以访问一列,该一列通过以下约束被唯一地标识:针对每个等级,在针对预定数量的向量寄存器的一半访问第二组的至少一列之前,针对预定数量的向量寄存器的一半访问第一组的至少一列;以及
预定数量等于2X,其中X在每个等级上不同并且在1到log2(N)的范围内。
6.根据权利要求5所述的设备,其中,所述一组向量寄存器包括2个区段;并且
N的值为4。
7.根据权利要求1至3中任一项所述的设备,其中,所述寄存器存取电路包括用于输出存储在所述向量寄存器中的数据元素的读取存取电路;以及
所述寄存器存取电路包括用于将数据元素输入到所述向量寄存器的写入存取电路。
8.根据权利要求7所述的设备,其中,所述读取存取电路包括用于所述多列中的每列的一个存取块。
9.根据权利要求7所述的设备,其中,所述读取存取电路包括用于所述多列中的每列的至多一个存取块。
10.根据权利要求7所述的设备,其中,所述读取存取电路中的所述存取块包括多路器。
11.根据权利要求7所述的设备,其中,所述一组向量寄存器包括至少一个区段,其中每个区段包括不同的列;
该设备包括用于每个区段的寄存器存取电路,每个寄存器存取电路被布置为存取与该寄存器存取电路相关的区段中的部分;以及
对于每个区段,所述读取存取电路包括用于重新排列来自所述读取存取电路中的每个存取块的输出的重新排列电路。
12.根据权利要求11所述的设备,其中,所述重新排列电路是交叉多路器。
13.根据权利要求7所述的设备,其中,所述写入存取电路包括用于所述多列中的每列的一个存取块。
14.根据权利要求12至13中任一项所述的设备,其中,所述写入存取电路包括用于所述多列中的每列的至多一个存取块。
15.根据权利要求13所述的设备,其中,所述一组向量寄存器包括至少一个区段,其中每个区段包括不同的列;
该设备包括用于每个区段的寄存器存取电路,每个寄存器存取电路被布置为存取与该寄存器存取电路相关的区段中的部分;以及
对于每个区段,所述写入存取电路包括用于重新排列所述写入存取电路中的每个存取块的输入的重新排列电路。
16.根据权利要求15所述的设备,其中,所述重新排列电路是交叉多路器。
17.根据权利要求1至3中任一项所述的设备,其中,所述向量寄存器是128位寄存器。
18.根据权利要求1至3中任一项所述的设备,其中所述向量寄存器中的每个包括多个32位寄存器。
19.一种制造设备的方法,该方法包括:
提供一组向量寄存器,每个向量寄存器被布置为存储包括多个部分的向量,所述一组向量寄存器在逻辑上被划分为多列以使得每个向量跨过所述多列中不止一列分布,其中每列被布置为存储各向量的一部分,所述一部分在各向量中的位置是相同的;以及
提供寄存器存取电路以存取所述各向量的一部分中的每一者,所述寄存器存取电路包括多个存取块,每个存取块能够存取所述各向量的一部分的子集,其中
能够由每个存取块存取的所述各向量的一部分的子集包括在不同列和不同向量寄存器中的部分;并且
所述寄存器存取电路被布置为同时存取以下任一项中的多个被存取部分:所述向量寄存器之一和所述列之一。
CN201780041261.XA 2016-07-08 2017-06-15 数据处理设备和用于制造该设备的方法 Active CN109416634B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1611946.3A GB2552154B (en) 2016-07-08 2016-07-08 Vector register access
GB1611946.3 2016-07-08
PCT/GB2017/051752 WO2018007784A1 (en) 2016-07-08 2017-06-15 Vector register access

Publications (2)

Publication Number Publication Date
CN109416634A CN109416634A (zh) 2019-03-01
CN109416634B true CN109416634B (zh) 2023-07-18

Family

ID=56890758

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201780041261.XA Active CN109416634B (zh) 2016-07-08 2017-06-15 数据处理设备和用于制造该设备的方法

Country Status (7)

Country Link
US (1) US10963251B2 (zh)
EP (1) EP3482289A1 (zh)
JP (2) JP7213095B2 (zh)
KR (1) KR102379885B1 (zh)
CN (1) CN109416634B (zh)
GB (1) GB2552154B (zh)
WO (1) WO2018007784A1 (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113808000B (zh) * 2021-11-19 2022-04-26 北京壁仞科技开发有限公司 数据管理装置及数据管理方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1713137A (zh) * 2004-06-24 2005-12-28 国际商业机器公司 含有多级寄存器文件的数字数据处理设备
CN103279327A (zh) * 2013-04-28 2013-09-04 中国人民解放军信息工程大学 面向异构simd扩展部件的自动向量化方法
CN104487941A (zh) * 2012-07-11 2015-04-01 Arm有限公司 在向量处理过程中控制处理数据元素的顺序
EP2889759A2 (en) * 2013-12-27 2015-07-01 Intel IP Corporation Processor with architecturally-visible programmable on-die storage to store data that is accessible by instruction

Family Cites Families (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS58134357A (ja) * 1982-02-03 1983-08-10 Hitachi Ltd ベクトルプロセッサ
US5019968A (en) * 1988-03-29 1991-05-28 Yulan Wang Three-dimensional vector processor
US5887183A (en) 1995-01-04 1999-03-23 International Business Machines Corporation Method and system in a data processing system for loading and storing vectors in a plurality of modes
US6237083B1 (en) * 1998-02-13 2001-05-22 Advanced Micro Devices, Inc. Microprocessor including multiple register files mapped to the same logical storage and inhibiting sychronization between the register files responsive to inclusion of an instruction in an instruction sequence
US6901422B1 (en) * 2001-03-21 2005-05-31 Apple Computer, Inc. Matrix multiplication in a vector processing system
US6898691B2 (en) 2001-06-06 2005-05-24 Intrinsity, Inc. Rearranging data between vector and matrix forms in a SIMD matrix processor
GB2383145B (en) 2001-10-31 2005-09-07 Alphamosaic Ltd Data access in a processor
US6573846B1 (en) * 2001-12-31 2003-06-03 Apple Computer, Inc. Method and apparatus for variable length decoding and encoding of video streams
US20110087859A1 (en) 2002-02-04 2011-04-14 Mimar Tibet System cycle loading and storing of misaligned vector elements in a simd processor
US7386703B2 (en) * 2003-11-18 2008-06-10 International Business Machines Corporation Two dimensional addressing of a matrix-vector register array
GB2409059B (en) * 2003-12-09 2006-09-27 Advanced Risc Mach Ltd A data processing apparatus and method for moving data between registers and memory
JP3985797B2 (ja) * 2004-04-16 2007-10-03 ソニー株式会社 プロセッサ
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
US7299342B2 (en) * 2005-05-24 2007-11-20 Coresonic Ab Complex vector executing clustered SIMD micro-architecture DSP with accelerator coupled complex ALU paths each further including short multiplier/accumulator using two's complement
US20070011442A1 (en) * 2005-07-06 2007-01-11 Via Technologies, Inc. Systems and methods of providing indexed load and store operations in a dual-mode computer processing environment
US8898212B2 (en) 2008-10-24 2014-11-25 Freescale Semiconductor, Inc Methods and apparatus for reordering data
GB2470780B (en) * 2009-06-05 2014-03-26 Advanced Risc Mach Ltd A data processing apparatus and method for performing a predetermined rearrangement operation
US20110072236A1 (en) * 2009-09-20 2011-03-24 Mimar Tibet Method for efficient and parallel color space conversion in a programmable processor
GB2476800A (en) * 2010-01-07 2011-07-13 Linear Algebra Technologies Ltd Sparse matrix vector multiplier using a bit map of non-zero elements to control scheduling of arithmetic operations
CN102012803B (zh) * 2010-11-25 2014-09-10 中国人民解放军国防科学技术大学 支持多宽度simd和多粒度simt的可配置矩阵寄存器单元
US9268571B2 (en) * 2012-10-18 2016-02-23 Qualcomm Incorporated Selective coupling of an address line to an element bank of a vector register file
US9348601B2 (en) 2012-12-26 2016-05-24 Intel Corporation Coalescing adjacent gather/scatter operations
WO2014108749A1 (en) 2013-01-10 2014-07-17 Freescale Semiconductor, Inc. Data processor and method for data processing
CN103389967B (zh) * 2013-08-21 2016-06-01 中国人民解放军国防科学技术大学 一种基于sram的矩阵转置的装置及方法
JP6253514B2 (ja) 2014-05-27 2017-12-27 ルネサスエレクトロニクス株式会社 プロセッサ
US9996347B2 (en) * 2014-12-24 2018-06-12 Intel Corporation Hardware apparatuses and methods relating to elemental register accesses
US9952831B1 (en) * 2017-02-16 2018-04-24 Google Llc Transposing in a matrix-vector processor

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1713137A (zh) * 2004-06-24 2005-12-28 国际商业机器公司 含有多级寄存器文件的数字数据处理设备
CN104487941A (zh) * 2012-07-11 2015-04-01 Arm有限公司 在向量处理过程中控制处理数据元素的顺序
CN103279327A (zh) * 2013-04-28 2013-09-04 中国人民解放军信息工程大学 面向异构simd扩展部件的自动向量化方法
EP2889759A2 (en) * 2013-12-27 2015-07-01 Intel IP Corporation Processor with architecturally-visible programmable on-die storage to store data that is accessible by instruction

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Optimizing Sparse Matrix Computations for Register Reuse in SPARSITY;Eun-Jin Im等;《Computational Science — ICCS 2001》;127–136 *

Also Published As

Publication number Publication date
KR102379885B1 (ko) 2022-03-30
US10963251B2 (en) 2021-03-30
CN109416634A (zh) 2019-03-01
GB2552154A (en) 2018-01-17
GB2552154B (en) 2019-03-06
WO2018007784A1 (en) 2018-01-11
GB201611946D0 (en) 2016-08-24
EP3482289A1 (en) 2019-05-15
US20190250914A1 (en) 2019-08-15
JP2019519864A (ja) 2019-07-11
JP7213095B2 (ja) 2023-01-26
KR20190026830A (ko) 2019-03-13
JP2022062067A (ja) 2022-04-19

Similar Documents

Publication Publication Date Title
CN109416633B (zh) 用于执行重新排列操作的设备及方法
US9557994B2 (en) Data processing apparatus and method for performing N-way interleaving and de-interleaving operations where N is an odd plural number
US7761693B2 (en) Data processing apparatus and method for performing arithmetic operations in SIMD data processing
US7219214B2 (en) Data processing apparatus and method for moving data elements between a chosen lane of parallel processing in registers and a structure within memory
US20050198473A1 (en) Multiplexing operations in SIMD processing
US20050172106A1 (en) Aliasing data processing registers
US20050132165A1 (en) Data processing apparatus and method for performing in parallel a data processing operation on data elements
US20050125637A1 (en) Constant generation in SIMD processing
JP5834997B2 (ja) ベクトルプロセッサ、ベクトルプロセッサの処理方法
US9965275B2 (en) Element size increasing instruction
US20050125631A1 (en) Data element size control within parallel lanes of processing
US20050125624A1 (en) Data processing apparatus and method for moving data between registers and memory
JP4686435B2 (ja) 演算装置
CN109416634B (zh) 数据处理设备和用于制造该设备的方法
CN110914801A (zh) 在数据处理设备中的向量交叉

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