CN107851014A - 用于转换存储器与多个向量寄存器之间的多个数据结构的设备及方法 - Google Patents

用于转换存储器与多个向量寄存器之间的多个数据结构的设备及方法 Download PDF

Info

Publication number
CN107851014A
CN107851014A CN201680043226.7A CN201680043226A CN107851014A CN 107851014 A CN107851014 A CN 107851014A CN 201680043226 A CN201680043226 A CN 201680043226A CN 107851014 A CN107851014 A CN 107851014A
Authority
CN
China
Prior art keywords
vector
data
data structure
vector registor
memory
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
CN201680043226.7A
Other languages
English (en)
Other versions
CN107851014B (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
Apple Inc
Original Assignee
Advanced Risc Machines Ltd
Apple Computer 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 Advanced Risc Machines Ltd, Apple Computer Inc filed Critical Advanced Risc Machines Ltd
Publication of CN107851014A publication Critical patent/CN107851014A/zh
Application granted granted Critical
Publication of CN107851014B publication Critical patent/CN107851014B/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/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
    • 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
    • G06F15/8076Details on data register access
    • 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/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/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; 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/30101Special purpose 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/30181Instruction operation extension or modification
    • G06F9/30192Instruction operation extension or modification according to data descriptor, e.g. dynamic data typing
    • 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
    • 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/355Indexed addressing
    • 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]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Physics (AREA)
  • Computing Systems (AREA)
  • Complex Calculations (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

本案提供一种设备及方法,用于在存储器与多个向量寄存器之间转换多个数据结构,每个向量寄存器经排列以储存包括多个数据元素的向量操作数。访问电路用于执行访问操作,以在存储器中的数据结构与规定的向量寄存器之间移动向量操作数数据元素,每个数据结构包括储存在存储器中连续地址处的多个数据元素。解码电路可响应于标识多个向量寄存器及相对于彼此在存储器中不连续定位的多个数据结构的单一访问指令,以产生控制信号以控制访问电路来执行访问操作序列,在存储器与多个向量寄存器之间移动该多个数据结构,以使得每个向量寄存器中的向量操作数保存来自多个数据结构中的每个的对应数据元素。这提供极高效的机制以用于执行复杂访问操作,从而提高执行速度,以及有可能降低功耗。

Description

用于转换存储器与多个向量寄存器之间的多个数据结构的设 备及方法
技术领域
本技术涉及用于转换存储器与多个向量寄存器之间的多个数据结构的设备及方法。
背景技术
用于改善数据处理设备性能的一种已知技术是提供电路以支持向量操作的执行。对至少一个向量操作数执行向量操作,在此情况下,每个向量操作数包括多个数据元素。随后,向量操作执行涉及对向(一个或多个)量操作数内多个数据元素反复应用操作。
向量处理电路(往往称为单指令多数据(Single Instruction Multiple Data;SIMD)处理电路)可用于提供多个平行处理路线,从而对向量操作数内多个数据元素同时执行操作。
尽管使用这样的向量操作可导向显著性能优势,但出现了问题,即如何在存储器与用于储存向量操作数的向量寄存器之间移动向量操作所需的数据元素。特别地,所需的单独数据元素可储存在存储器内的一系列数据结构内,在该存储器中,每个数据结构可包括多个相关数据元素,例如X、Y及Z坐标值、红色、绿色及蓝色像素值、复数实部与虚部等等。然而,为使能向量操作的高效利用,如果向量寄存器储存来自多个该数据结构的由一系列对应数据元素组成的向量操作数,则是十分有用的。因此,通过使用X、Y及Z坐标值的上述示例,可需要一个向量寄存器储存多个X坐标值,另一向量寄存器储存多个Y坐标值,以及又一向量寄存器储存多个Z坐标值。
将需要提供一种技术,该技术用于高效转换存储器与多个向量寄存器之间的多个数据结构。
发明内容
在第一示例性配置中,提供一种设备,该设备包括:一组向量寄存器,每个向量寄存器经排列以储存包括多个数据元素的向量操作数;访问电路,用于执行访问操作以在存储器中数据结构与所述向量寄存器组之间移动向量操作数的数据元素,每个数据结构包括储存在所述存储器中连续地址处的多个数据元素;解码电路,可响应于从所述组识别多个向量寄存器及所述存储器中相对于彼此而不连续定位的多个数据结构的单一访问指令,以产生控制信号以控制访问电路以执行所述访问操作序列,以在所述存储器与所述多个向量寄存器之间移动所述多个数据结构,以使得所述多个向量寄存器中每个向量寄存器中的向量操作数保存来自每个所述多个数据结构的对应数据元素。
在另一示例性配置中,提供一种方法,该方法是操作一设备以执行访问操作以在存储器中数据结构与该设备的向量寄存器组之间移动向量操作数的数据元素,每个向量寄存器经排列以储存包括多个数据元素的向量操作数,以及每个数据结构包括多个储存在所述存储器中的连续地址处的数据元素,该方法包括:解码单一访问指令,该指令从所述组识别多个向量寄存器及所述存储器中相对于彼此而不连续定位的多个数据结构,以产生控制信号以控制访问电路以执行所述访问操作序列,从而在所述存储器与所述多个向量寄存器之间移动所述多个数据结构;以及在所述访问操作序列执行期间移动每个数据结构的多个数据元素,以使得所述多个向量寄存器中每个向量寄存器中的向量操作数保存来自每个所述多个数据结构的对应数据元素。
在又一示例性配置中,提供一种设备,该设备包括:一组向量寄存器手段,每个向量寄存器手段用于储存包括多个数据元素的向量操作数;访问手段,用于执行访问操作以在存储器中数据结构与所述向量寄存器手段组之间移动向量操作数的数据元素,每个数据结构包括储存在所述存储器中连续地址处的多个数据元素;解码手段,用于响应于从所述组识别多个向量寄存器手段及所述存储器中相对于彼此而不连续定位的多个数据结构的单一访问指令,而产生控制信号以控制访问手段以执行所述访问操作序列,以在所述存储器与所述多个向量寄存器手段之间移动所述多个数据结构,以使得所述多个向量寄存器手段中每个向量寄存器手段中的向量操作数保存来自每个所述多个数据结构的对应数据元素。
在替代性配置中,提供储存在非暂态计算机可读取储存介质中的计算机程序,该计算机程序在被数据处理设备执行时提供虚拟机,该虚拟机提供对应于上文提及的第一示例性配置的设备的指令执行环境。
附图说明
本技术将仅以举例方式,参考本案实施例进行进一步描述,如附图中所图示,在这样的附图中:
图1是依据一个实施例的数据处理设备的框图;
图2是意地图示依据一个实施例在存储器与多个向量寄存器之间转换这些数据元素时可如何重排单独数据元素的图示;
图3示意地图示单一访问指令的格式,该单一访问指令可用于一个实施例中以使得访问电路执行访问操作序列从而实施图2示意图示的移动/重排程序;
图4图示指令中提供的信息如何可用于标识存储器中的一系列地址,这样的地址与待访问的所需不连续数据结构关联;
图5是图示依据一个实施例在执行规定多个非连续数据结构的单一访问指令时实施的步骤的流程图;
图6示意地图示通过单一访问指令标识的谓词信息如何可用于一个实施例;
图7图示依据一个实施例,在从存储器将数据结构载入多个向量寄存器时,可如何使用单一访问指令所规定的谓词信息来执行压缩;
图8及图9是图示依据两个替代性实施例的数据处理设备的框图;
图10是图示图8或图9的设备可如何用于一个实施例中以执行访问操作序列,从而实施参考图2举例说明的移动/重排程序的流程图;
图11图示依据一个实施例,额外偏移标识符字段可如何添加至指令编码;
图12图示依据一个实施例,图11的额外偏移标识符字段可如何用于两个连续载入指令;以及
图13图示可用于一个实施例中的虚拟机实现方式。
具体实施方式
在参考附图论述实施例之前,提供下列实施例描述。
依据一个实施例,设备具有向量寄存器组,该组中每个向量寄存器经排列以储存包括多个数据元素的向量操作数,以及具有访问电路以执行访问操作从而在存储器中的数据结构与该组向量寄存器之间移动向量操作数的数据元素。每个数据结构包括多个储存在存储器中连续地址处的数据元素。访问电路可因此执行载入操作,从而从存储器将数据结构的数据元素移至向量寄存器,或可执行储存操作从而在多个向量寄存器中读取向量操作数,随后将这些向量操作数中包含的数据元素储存至存储器,以作为一系列数据结构。
依据一个实施例,提供解码电路,该解码电路可响应于标识多个向量寄存器及相对于彼此而不连续地(本案中也被称作非连续地)定位于存储器中的多个数据结构的单一访问指令,以产生控制信号以控制访问电路以执行特定访问操作序列。特定而言,访问电路可响应于这些控制信号以在存储器与该指令标识的多个向量寄存器之间移动该指令标识的多个数据结构,以使得每个向量寄存器中的向量操作数保存来自该多个数据结构中每个数据结构的对应数据元素。在一个实施例中,向量寄存器中保存的对应数据元素来自多个数据结构中每个数据结构内的同一相对位置。
在一个实施例中,当多个数据结构中一个或多个的多个数据元素在存储器与多个向量寄存器之间移动时,访问电路重排这样的数据元素。
如本文中所使用,在将数据结构描述为相对于彼此而不连续地定位时,这意味着在一个数据结构的最后一数据元素与下一数据结构的第一数据元素之间的存储器地址空间中提供有一个或多个数据元素位置。这样的数据结构在本案中也将被称为不连续(或非连续)数据结构。
通过使用上文介绍的单一访问指令,此为访问存储器中多个不连续数据结构提供了极高效机制,以及特定而言,是在数据结构与多个向量寄存器之间向任一方向移动这些多个数据结构的数据元素的极高效机制。在一个实施例中,访问电路在载入指令的情况下,并非仅可响应于单一访问指令以执行所需的从存储器检索多个数据结构的步骤,或在储存操作情况下将多个数据结构储存至存储器,而是也执行所需重排操作,从而确保在向量寄存器内,每个向量寄存器储存向量操作数,该向量操作数包括来自多个数据结构中每个数据结构的一系列对应数据元素。
由此,考虑每个数据结构都包括X、Y、Z坐标值的先前示例,单一访问指令规定的向量寄存器中的一者可储存一系列X坐标值,而另一向量寄存器可储存一系列Y坐标值,以及又一向量寄存器可储存一系列Z坐标值。
使用这样的单一访问指令可通过减少为执行对存储器中多个不连续数据结构的访问而需要执行的指令数量,来显著提高执行速度。通过使用这样的指令,有可能减少需要经过管线式处理单元的撷取、解码及其它初始阶段的指令的数量,此举常常可使得整体功耗显著降低。
也已发现,由于这样的单一访问指令提高抽象水平及使复杂访问的易错性降低,因此使用这样的单一访问指令有助于更准确的程序化。
单一访问指令可为载入指令,在此情况下,访问电路可响应于控制信号以执行访问操作序列,从而从存储器获得标识的每个数据结构的数据元素,以及将向量操作数写入每个标识的向量寄存器,该向量操作数包括来自多个数据结构中每个数据结构的对应数据元素。
可以众多方式实施访问操作序列,从而执行所需载入指令,但在一个实施例中,访问操作序列包括聚集操作序列,每个聚集操作获得来自多个数据结构中每个数据结构的对应数据元素,以及将所获得的数据元素写入与聚集操作关联的向量寄存器。每个聚集操作又可分解成一系列微操作(如果需要的话)。
在一个实施例中,单一访问指令可具有储存指令的形式,在此情况下,访问电路可响应于控制信号以执行所述访问操作序列,从而从每个标识的向量寄存器读取向量操作数,该向量操作数包括来自所述多个数据结构中的每个的对应数据元素,以及在这样的数据元素被写入所述存储器时重排这样的数据元素,从而将每个数据结构储存在存储器中对应于该数据结构的不连续位置的地址,同时确保每个单个数据结构的数据元素储存在存储器中的连续地址。
可以众多方式构建访问操作序列,从而执行储存指令,但在一个实施例中,该序列包括分散操作序列,每个分散操作从与该分散操作关联的向量寄存器获得向量操作数,该向量操作数包括来自所述多个数据结构中每个数据结构的对应数据元素,以及将该向量操作数的数据元素写入存储器中的地址,这样的地址由多个数据结构的地址确定。与聚集操作一样,分散操作可分解成一系列微操作(如果需要的话)。
单一访问指令可以多种方式规定。在一个实施例中,单一访问指令包括数据结构标识符字段,该字段提供用于确定多个数据结构的地址的信息。数据结构标识符字段可采用多种形式。在一个实施例中,设备还包括一组标量寄存器以储存标量数据值,以及数据结构标识符字段包括标量寄存器标识符字段,该字段标识标量寄存器,该标量寄存器中所储存的标量数据值用于确定存储器中的基本地址。在一个实施例中,基本地址形成所有数据结构地址的共同参考点。此外,数据结构标识符字段包括步长标识符字段,该字段包含用于利用基本地址推导多个数据结构的地址的步长信息。这提供极灵活的机制,用于规定不连续数据结构的多个地址。例如,通过更新多个单一访问指令示例之间的基本地址,将有可能在存储器中通过使用同一步长信息访问大量数据结构。这对于步长信息标识恒定步长值的情况尤为有用。
步长信息用于标识单一访问指令所识别的多个不连续数据结构中相邻数据结构中的对应数据元素间的分隔距离(就存储器地址空间而言)。步长信息可以数个方式规定,但在一个实施例中,步长信息规定为字节数量。或者,步长信息可规定由每个数据元素中的字节数量量定的数量。在一个这样的实施例中,数据元素大小可形成参数,该参数可嵌入额外字段中的指令内。
在由步长信息规定恒定步长值的实施例中,步长标识符字段可包括规定恒定步长值的立即值,或可规定标量寄存器,该标量寄存器的内容标识恒定步长值。
然而,并非必须使用恒定步长值,以及特定而言,并非待访问的每个不连续数据结构都必须在存储器中间隔达正规间距。相反,在一个实施例中,步长信息可标识一系列步长值,在此情况下,每个步长值与多个数据结构中至少一个数据结构相关联。因此,此使能通过执行单一访问指令而访问的多个数据结构定位于存储器内任意地址。
在步长信息标识一系列步长值的实施例中,步长标识符字段可以众多方式标识该系列步长值。在一个实施例中,步长标识符字段标识向量寄存器,以及向量寄存器中的每个数据元素标识步长值,该步长值用于根据基本地址确定数据结构中的关联一者的地址。
在替代性实施例中,数据结构标识符字段不规定基本地址,但却标识向量寄存器,在此情况下,该向量寄存器中的每个数据元素提供指针数据,该指针数据用于确定数据结构中的一个关联数据结构的地址。此外,此允许待访问的多个数据结构定位在存储器中任意位置,以及这些所需数据结构之间无需恒定步长。
在一个实施例中,单一访问指令还包括向量寄存器标识符字段,该字段提供信息,该信息用于确定待访问的多个向量寄存器。在一个实施例中,指令可直接独立地标识每个向量寄存器。然而,指令的可用编码空间往往相当受限,因此空间可能不足,无法允许独立标识每个向量寄存器。相反,在一个实施例中,向量寄存器标识符字段可包括向量寄存器标识符,该标识符用于标识所述组中的向量寄存器,以及包括整数值,该整数值用于标识待访问的所述多个向量寄存器中的一个向量寄存器数量。随后,解码电路经排列以应用预定规则,从而利用标识出的向量寄存器及该整数来确定所述多个向量寄存器中的每个向量寄存器。
由此,在这样的实施例中,仅需标识单个向量寄存器,以及其它向量寄存器可通过使用该指令中也规定的整数值,通过应用预定规则而推断。在一个特定实施例中,在要访问多个向量寄存器时,解码电路经排列以确定连续的多个向量寄存器,这样的向量寄存器包括所标识的一个向量寄存器。由此,在该实施例中,在执行单一访问指令时使用该组向量寄存器中的一系列相邻向量寄存器。
在又一实施例中,在指令编码空间尤其受约束的情况下,可排列以使向量寄存器得以预定,以及因此在单一访问指令编码内无需显式引用。例如,可预定这样的单一访问指令始终通过使用预定系列的连续向量寄存器而操作,例如向量寄存器0、1,以及2。
在一个实施例中,访问电路在多个路线上操作,每个路线包含来自多个向量寄存器中每个向量寄存器的对应数据元素位置。尽管在一个实施例中,单一访问指令的执行可使得访问操作相对于每个路线而执行,但在替代性实施例中,单一访问指令可包括谓词标识符字段,该字段提供谓词信息,该谓词信息用于确定多个路线中哪些路线是访问操作序列的有效路线。随后,针对有效路线执行访问操作,以及无需针对无效路线进行进一步处理。特定而言,在要移动多个数据结构时,访问电路经排列以确定与有效路线关联的这些数据结构。此举向如何使用单一访问指令及如何规定待访问数据结构提供了显著增强的灵活性。仅举例而言,此举可意味着可规定正规步长值,即使无需访问原本由正规步长标识的数据结构中一个或更多者时也如此。对于这些数据结构,对应路线可由谓词信息标记为无效。
谓词信息也可用于其它目的。例如,当单一访问指令是载入指令时,访问电路可经排列以通过使用谓词信息而执行压缩操作,该谓词信息用于标识待载入的多个数据结构,以及访问电路经排列以在多个向量寄存器内的一系列连续路线内储存这些数据结构。此可通过避免对执行后续指令从而执行重排操作以移除任何无用数据元素的需求,而提供提高的效率。
在一个实施例中,单一访问指令也可包括偏移标识符字段,该字段提供偏移数据,当确定多个数据结构的地址时,该偏移数据将结合数据结构标识符字段中的信息而被应用。此在执行程序代码码循环展开从而更高效地使用向量操作的时尤为实用。特定而言,在循环的同一迭代内,有可能使用对单一访问指令的多个调用,每个调用仅使用不同的偏移值。由此,此举使能向量数量增大,数量相当于可在展开循环的同一迭代中访问的数据。
访问电路可采用多种形式,但在一个实施例中,访问电路包括载入/储存单元及关联的缓冲储存设备,以允许在访问操作序列执行期间暂时缓冲数据元素。
在替代性实施例中,访问电路可包括载入/储存单元及向量排列单元,这样的单元组合操作以执行访问操作序列。
在一个实施例中,载入/储存单元及向量排列单元经排列以经由所述组内的一个或多个向量寄存器交换数据元素,这样的向量寄存器用于储存数据元素的中间向量。这样的方法将由此使能载入/储存单元执行标准载入或储存操作,从而在寄存器与存储器之间移动一系列数据元素,在此情况下,每个访问中的数据元素占据存储器中的连续地址,向量排列单元随后执行所需的数据元素重新定序。对于载入指令而言,向量排列单元将因此在载入/储存单元已载入所需数据元素之后执行该重新定序,而对于储存操作而言,向量排列单元将在载入/储存单元执行所需储存操作之前执行所需重新定序。
现将通过参考附图描述特定实施例。
图1是系统框图,在该系统中可使用所述实施例的技术。在图1图示示例中,系统采用管线式处理器形式。指令由撷取电路10撷取自指令高速缓存15,指令从指令高速缓存15穿过解码电路20,该解码电路解码每个指令从而产生适当的控制信号,以用于控制管线式处理器内的下游执行资源,以执行指令所需操作。形成解码指令的控制信号被传递至发送阶段电路25以用于发送至管线式处理器内的一个或多个执行管线30、35、40。
发送阶段电路25可访问寄存器45,在该寄存器中可储存形成源操作数以用于进行多种操作的数据值。这样的源操作数可经由路径47经路由至发送阶段电路内,从而这些源操作数可随同标识待执行的操作的控制信号而被调度至适当的执行单元,以实施每个解码指令。算术操作例如可连同所需源操作数被发送至算术逻辑单元(arithmetic logicunit;ALU)30,从而使能针对这些源操作数的待执行算术逻辑操作,结果值通常输出作为目的操作数以用于在寄存器45中的规定寄存器储存。
除ALU 30的外,可提供其它执行单元35,例如用于响应于解码浮点指令而执行浮点操作的浮点单元(floating point unit;FPU)。此外,载入/储存单元(load/store unit;LSU)40用于执行载入操作,从而从存储器55经由数据高速缓存50的一个或多个级别将数据值载入规定的寄存器45中的一者,以及用于执行储存操作从而从规定寄存器将数据值储存回存储器55。
图1所示系统可为依序处理系统,在该系统中依照程序化次序执行指令序列,或者可为无序系统,从而允许多个指令的执行序列得以重新定序,从而设法改良性能。如熟习该项技术者将理解,在无序系统中,将提供额外结构(图1中未明确图示),例如寄存器重命名电路,以将指令所规定的架构寄存器映像至来自寄存器组45内实体寄存器池中的实体寄存器(该实体寄存器池通常大于架构寄存器数量),由此使某些危害能够被移除,从而有利于无序处理的更多使用。另外,通常将提供重新定序缓冲器以记录无序执行,以及允许多个指令的执行结果被依序提交。
在所述实施例中,图1的处理电路经排列以对储存在寄存器45中的向量操作数执行向量操作,在该寄存器中,向量操作数包括多个数据元素。当对这样的向量操作数执行向量操作时,对向量操作数内的多个数据元素反复应用所需操作。在一个实施例中,寄存器45包括一组向量寄存器70,在该组中,每个向量寄存器可储存包括多个数据元素的向量操作数。
寄存器组也可包括其它的寄存器,例如一组标量寄存器80以用于储存标量数据值,以及一个或多个谓词寄存器75以用于储存谓词信息。谓词信息为向量操作数内的每个数据元素位置提供谓词数据。谓词寄存器内的谓词数据由此规定布尔向量(即真/假)条件,关联向量操作数内的每个数据元素与这些布尔条件中的一者相关联。尽管在一个实施例中,谓词数据内的谓词条件项数量与由彼谓词数据控制的关联向量操作数中数据元素数量之间可能存在1:1关系,但此并非必需,以及在替代性实施例中,单项谓词数据可提供应用于多个数据元素的条件。此外,尽管在一个实施例中,谓词数据内的每个谓词项采用单个位形式,但不要求每个谓词项都仅由单个位来规定。
依据一个实施例,定义特定类型的访问指令,该指令从向量寄存器组70中标识多个向量寄存器,以及也在存储器中标识多个不连续数据结构,以及解码电路20可响应于解码此指令以产生控制信号,这样的控制信号经由发送阶段电路25被传递至载入/储存单元40,从而使得载入/储存单元在存储器与规定的多个向量寄存器之间移动经标识的多个数据结构。另外,作为由载入/储存单元执行从而实施访问指令的执行的操作序列的部分,载入/储存单元经排列以在每个数据结构的多个数据元素移动时重排这样的数据元素,以使得每个向量寄存器中的向量操作数保存来自多个数据结构中每个数据结构的对应数据元素。为协助此流程,载入/储存单元40可访问本地缓冲储存设备60,在该缓冲储存设备中,载入/储存单元40可在此流程期间缓冲某些数据元素。
图2中示意地图示由载入/储存单元40执行的移动与重排。在此,不连续数据结构105、110、115的序列经显示定位于存储器地址空间100内的对应地址107、112、117。前文提及的新访问指令将提供充足信息以为待确定的所需数据结构105、110、115中的每个使能多个地址107、112、117,以及也将标识一系列向量寄存器120、125、130。标识的向量寄存器数量本质上与每个数据结构中的数据元素数量相关。在此示例中,假定每个数据结构中有三个数据元素,以及在图2的特定示例中,这些数据元素假定呈现红色、绿色及蓝色像素值。如果访问指令是载入指令,则载入/储存单元40执行的操作将导致访问多个数据结构105、110、115,以及使得数据元素得以重新定序从而向量寄存器120、125、130中的每个收到由数据元素序列组成的向量操作数,该序列是来自多个数据结构的对应数据元素。由此,举例而言,向量寄存器120可接收包含一系列红色像素值的向量操作数,向量寄存器125可接收包括一系列绿色像素值的向量操作数,以及向量寄存器130可接收包括一系列蓝色像素值的向量操作数。
或者,访问指令可为存储指令,在此情况下,规定向量寄存器的内容被读取,随后,执行重排从而数据元素被写出至其在多个数据结构105、110、115内位于地址107、112、117的各自位置。
每个向量操作数内包含的数据元素数量将取决于向量寄存器大小及数据元素大小。仅举例而言,在一个实施例中,每个向量寄存器可具有32位长度,以及每个数据元素可为一字节,由此,每个向量寄存器将储存四个数据元素。然而在其它实施例中,可使用不同大小的向量寄存器,以及实际上数据元素可具有不同大小。
图3是图示上述提及的单一访问指令内提供的多个字段的图示。载入/储存标识符字段155用于标识访问指令是载入指令还是储存指令。寄存器标识符字段160随后用于标识多个寄存器,这样的寄存器将用作载入指令的目的寄存器,或用作储存指令的源寄存器。有数个方式在字段160内规定这样的多个寄存器。例如,假定有充足的编码空间,每个寄存器可在该字段内被单独规定。然而,指令编码空间往往相当有限,因此可能空间不充足,无法单独标识每个逐个寄存器。
因此,在一个实施例中,如图3中所示,可连同标识寄存器数量的整数值N 175而提供单个寄存器标识符180。如前文提及,寄存器数量本质上与每个数据结构中的数据元素数量相关。由此,设想图2的先前示例,情况可为N设定等于3,以及单个寄存器在字段180中得以标识。随后,解码电路20可经排列以应用预定规则以确定将使用哪些寄存器。例如,可确定使用连续寄存器序列,该序列自该字段180中标识的寄存器开始。因此,仅举例而言,如果字段180标识向量寄存器Z0,以及N设定等于3,则解码电路可确定将使用向量寄存器Z0、Z1及Z2。
在一个实施例中,字段180中规定的寄存器标识符经排列以将架构向量寄存器的数量递增模数。由此,例如,如果在可用向量寄存器组0至31中,寄存器说明符180标识向量寄存器30,以及N再次等于3,则解码电路可确定将使用的向量寄存器为向量寄存器30、31及0。
如下文将更详细地论述,指令可视情况而包括谓词标识符字段165从而标识规定寄存器内的有效路线,以及由此标识待移动的多个数据结构。此将在下文中通过参考图6及图7而更详细地论述。
指令编码150也将包括数据结构标识符字段170,该字段提供充足信息以确定需要访问的多个数据结构的地址。此字段中的信息可采用多种形式,以及图3中图示四个示例。
依据图3示例A,字段170内提供向量寄存器标识符190,该标识符标识包含一系列任意指针的向量寄存器,这样的指针指向所需数据结构中的每个。指针可指向这些数据结构的起始或结尾。由此,在一个实施例中,这样的向量寄存器中的每个数据元素将提供用于确定关联数据结构的地址的指针,以及因此可见,数据结构中的每个相对于其它数据结构的位置可为完全任意的。
依据图3的示例B,标量寄存器标识符200用于标识标量寄存器80中的一个标量寄存器,该标量寄存器中所储存的数据值标识基本地址。随后,向量寄存器标识符205用于标识向量寄存器,该向量寄存器中所储存的数据元素为所需数据结构中每个数据结构提供相对于基本地址的偏移。由此,每个数据结构的地址可通过向基本地址加上相关偏移值而被发现。此外,可见,此有效地允许经由单一指令访问来自任意位置的数据结构。
示例C再次使用标量寄存器标识符200,但除此的外也提供在指令内编码的立即值215,该立即值规定恒定步长值。由此,在该排列中,尽管数据结构中的每个相对于彼此而在存储器中不连续地定位,但多个数据结构在存储器地址空间内通过正规距离而彼此分隔。由此,在一个实施例中,第一数据结构地址可源自于基本地址,而下一数据结构将具有通过向基本地址加上立即值而计算得出的地址。随后,下一数据结构将具有通过向基本地址加上两次立即值而计算得出的地址,以此类推。
示例D图示另一替代方式,其中没有立即值215,而是标识标量寄存器标识符225,该标识符内容规定恒定步长值。由此,依据示例D的每个数据结构地址的计算与上文针对示例C的论述相同。
在一个实施例中,向量长度(即每个向量中的数据元素数量)及数据元素大小可为隐式的。然而,在替代性实施例中,这样的信息可编码在指令内。例如,指令编码可包括标识数据元素大小(例如8、16、32或64位)的信息,随后利用指令中引用的向量寄存器大小及规定的数据元素大小确定向量长度。规定的数据元素大小也可用于执行指令中规定的其它信息的度量,如步长信息。
图4是图示依据一个实施例的相关不连续数据结构的多个地址的计算的图示。在此示例中,假定指令编码如图3的示例D中所示,以及特定而言,载入指令被规定为将数据元素的向量载入三个向量寄存器Z0、Z1及Z2。指令也包括可选谓词字段Pg,但在此示例中,假定谓词(若规定)标识全部路线为有效。此外,标量寄存器标识基本地址,此标量寄存器在图4中被称为Xb。此外,另一标量寄存器Rs用于标识恒定步长值。在此特定示例中,假定在64位标量寄存器中规定基址寄存器,该基址寄存器在本案中被称作X寄存器。使用与标识步长的寄存器关联的术语「R」更为普遍,以及能映像至32位标量寄存器或64位标量寄存器,具体视实施例而定。
如图可见,特定数据结构“i”的地址通过用步长寄存器中规定的步长乘以i,随后将所得值与基址寄存器中得到的基本地址相加而得出。在此实施例中,假定步长值直接规定相邻结构中的对应数据元素之间的字节数量。然而将理解,标量寄存器Rs中的步长数据可以数个方式得以规定,以及例如可在数据结构大小单元中而非字节大小单元中得以规定(如要求),或利用通过每个数据元素的字节数量度量的值而规定。或者,可将其规定为位计数,而非字节数量。
作为又一替代性示例,所需步长信息也可通过将从标量寄存器所得的值与有关数据元素大小及每个数据结构内数据元素数量的信息组合而确定。
图5是图示图1的设备在遇到上述类型的访问指令之后执行的操作的流程图,该访问指令规定多个非连续数据结构。在步骤300中,由解码电路20检测到这样的指令,在步骤305中,解码电路20经排列以为该访问指令标识的每个向量寄存器产生单独的聚集操作或分散操作。特定而言,对于载入指令而言,解码器将产生控制信号以用于一系列聚集操作,而对于储存指令而言,解码器将产生控制信号以用于一系列分散操作。由此,仅举例而言,如果指令是载入指令及数据结构具有红、绿、蓝数据元素组件,则解码电路将产生控制信号以定义三个聚集操作,第一聚集操作用于将来自标识的数据结构的红色像素值载入一个目的寄存器,单独的聚集操作用于将来自标识的数据结构的绿色像素值载入另一向量寄存器,以及最终聚集操作用于将来自标识的数据结构的蓝色像素值载入第三向量寄存器。
在适当情况下,标识这些聚集/分散操作的所需控制信号将被发送至载入/储存单元40,以在步骤310中使得这些操作被执行。在一个实施例中,载入/储存单元可经排列,以通过使用本地缓冲器60,按需将每个聚集或分散操作作为一系列载入或储存微操作而执行。由此,仅举例而言,如果执行聚集操作以将来自标识的数据结构的红色像素值载入向量寄存器Z0,则可执行载入微操作以从存储器获得红色像素数据元素R0,以及将该数据元素R0储存在缓冲器60中,而随后使用单独的载入微操作以载入来自存储器的剩余红色像素数据元素,这样的数据元素也储存在缓冲器60中。一旦已获得全部所需红色像素值,则可进行单次写入向量寄存器70,从而将红色像素值的该向量操作数储存至向量寄存器Z0内。
或者,如果载入/储存单元40无法访问本地缓冲储存设备,则该单元可改为在载入微操作实施期间执行到向量寄存器Z0的多个访问,从而在从存储器获取每个单个数据元素时将其储存至向量寄存器内。
图6示意地图示依据一个实施例如何可使用谓词信息,在该实施例中,这样的谓词信息在指令编码150的谓词标识符字段165内被规定。特定而言,在一个实施例中,谓词标识符字段165可用于标识通用谓词寄存器Pg,该寄存器针对图6中图示的向量寄存器320、325、330内每个路线而将单个谓词位作为谓词信息储存。特定而言,可见每个路线包括一对应数据元素位置,该位置来自访问指令所规定的多个向量寄存器中的每个向量寄存器。
如果谓词位设定为第一值,则用于指示对应路线是有效的,而如果设定为第二值,则用于指出对应路线是无效的。在图6图示示例中,假定逻辑1值指示有效路线及逻辑0值指示无效路线,但将理解如需要,则这些位的含义可反转。
举载入操作为示例而考虑,以及假定图4中图示的四个数据结构由指令的数据结构标识符字段170所标识,逻辑0值在路线1中的存在将导致载入/储存单元确定无需从存储器撷取数据结构270。因此,即使指令已规定恒定步长(例如通过使用图3的示例C或示例D而规定),以及因此在计算一系列地址时将自然标识出指针S[1],无效路线1的存在仍导致该访问被禁止。相反,仅访问数据结构260、280及290,这样的数据结构的多个数据元素储存在向量寄存器320、325、330的路线0、2及3内。在一个实施例中,在向量寄存器320、325、330内,当向量被写入这些寄存器中的每个时,位于与路线1关联的数据元素位置的数据值设定为逻辑0值。然而,在替代性实施例中,新数据内容可与现有内容合并,从而在寄存器已更新之后,路线1内容受该路线内现有数据元素值的支配。
当执行储存操作时,可以类似方式使用谓词信息。特定而言,在载入/储存单元读取多个寄存器320、325、330的内容时,将确定无需将R1、G1及B1数据元素向外储存至其关联数据结构270,由此将禁止针对该数据结构执行向存储器的有关储存操作。
当执行载入操作时,谓词信息也可视情况而用于执行压缩(如果需要的话),如图7中示意地图示。在此示例中,谓词信息350标识路线0及2为有效,但路线1及3为无效。由此,通过参考图4示例,此将标识需要访问数据结构260、280,但无需访问数据结构270、290。因此,仅访问数据结构260及280。然而,并非将数据结构280内容写入路线2,而是将其写入路线1。由此,凭借压缩,针对每个有效路线所获的数据元素被写入向量寄存器355、360、365,从而占用这些寄存器内的连续路线。剩余路线的内容归零,或保留“原样(as is)”,也即这样的内容维持储存在多个寄存器355、360、365内这些数据元素位置的前述值。如果要求,则又一载入指令可用于用来自不连续数据结构的所需数据充填剩余路线。
这可通过在寄存器内容已充满来自从存储器的不连续数据结构内容之后,尽可能避免对这样的寄存器内容执行任何后续重排操作的需求而提供进一步优化。
图8图示图1的数据处理设备的替代形式,在该数据处理设备中,载入/储存单元40结合专用排列单元400而操作,从而执行所需的重排操作。由此,在此实施例中,当解码前述访问指令时,解码电路20产生的多个控制信号将为载入储存单元提供控制信息及为专用排列单元400提供控制信息。以载入指令为例而考虑,发送阶段电路将发送一系列控制信号至LSU40,以使得LSU用从存储器获得的数据元素充满寄存器45内的数个向量寄存器。在此情况下,每个向量寄存器内,LSU储存在该向量寄存器中的内容将为从存储器的连续地址处获取的数据元素。由此,此时,每个数据结构的单个数据元素尚未被分隔出而进入不同的向量寄存器。然而,一旦LSU 40已执行了所需载入操作之后,则其经由「完成」信号通知专用排列单元400,此时专用排列单元使用发送阶段电路提供的控制信息从有关寄存器撷取值,按需对这样的值重新定序,随后将这样的值写入原始访问指令规定的目的寄存器。
对于储存指令,可采取类似步骤,但在此情况下,专用排列单元400通常将首先执行所需排列,随后才向载入/储存单元发出完成信号,以使得载入/储存单元随后以这样的数据元素在单个数据结构内的所需次序将数据元素写出至存储器。
由此,以图4图示的数据结构序列为例而考虑,以及再次假定目的寄存器是Z0、Z1及Z2,以及正在执行载入指令,则载入/储存单元可经排列以执行四个载入操作从而将数据结构260(及有可能的来自该数据结构之后的连续地址的一些额外数据值)载入第一向量寄存器,以及同样将第二数据结构270储存至一不同的向量寄存器,将第三数据结构280储存至另一不同的向量寄存器,以及将第四数据结构290储存至又一向量寄存器(而且,在这样的向量寄存器中的每个中,也可能存在来自有关数据结构之后的连续地址的一些额外数据值)。这样的向量寄存器被有效用作中间向量寄存器,以及无需为原始载入指令所规定的寄存器Z0、Z1及Z2中的任一个。随后,专用排列单元400将访问这些多个中间向量寄存器的内容,执行所需排列,随后将所需向量操作数储存回目的向量寄存器Z0、Z1及Z2。由此,在执行图4的示例性载入时,专用排列单元400将组织全部红色像素值构成单个向量,全部绿色像素值构成另一向量,以及全部蓝色像素值构成又一向量。
图9图示又一示例性排列,在该排列中,不使用专用排列单元400,以及改为使用现有向量排列单元410,该单元410形成数据处理管线内执行单元中的一者。向量排列单元410将有效执行与专用排列单元400的这些功能类似的功能,但将经由发送阶段电路25及路径47而从寄存器45获得用于进行该向量排列单元410的排列操作的源操作数。发送阶段电路25将由此向向量排列单元410发送适当的控制信号,以标识需要对所提供的源操作数值执行的所需排列,以及也将标识排列数据随后需要储存于其中的目的寄存器。
图10是图示在采用图8或图9的方法时的操作序列的流程图。在图10的流程图中,假定正在执行载入操作。因此,载入/储存单元将用来自一个或多个访问的数据元素充填中间寄存器。单独访问可针对不连续的存储器地址,但在每个访问期间获得的全部数据元素将来自连续地址。由此,此时按照需求,中间向量寄存器的内容将不会被分隔出而进入数据结构的组件数据元素。
尽管如此,在步骤425中,排列单元将因此对LSU已撷取的数据执行所需排列。该排列单元也将需要解决任何可能存在的任何对齐问题。在图4中所标识的四个数据结构的每个都由LSU储存在单独的向量寄存器中,以及在所有情况下撷取的第一数据元素都是红色像素值的先前示例中,不存在对齐问题,但将理解,在其它实施例中,可能出现此情况:一系列中间寄存器内包含的数据以该方式预对齐,以及某个对齐可能为必需,从而正确标识每个数据结构的对应数据元素。如图10所示,此步骤可通过使用图8中与寄存器文件45交互的专用排列单元400而执行,或可通过使数据在路径47上再循环穿过图9的现有排列单元410及使用发送阶段电路26发送的单独微操作而执行。
当执行储存指令而非载入指令时,步骤420及425有效地反转操作。
将理解,在上述实施例中,多个步骤的执行次序在不同的实施例中可改变。例如,当考虑图3中的编码时,将理解,访问电路可以反转次序对数据结构进行操作。
在另一示例性配置中,可配置在采用图3中示例性编码B、C或D中的任一个时,访问指令也可经排列以在所需载入/商店操作的完成时而自动地更新基址寄存器(本文称作后指数更新)。此举将由此使能另一情况,即载入/储存指令通过使用相同基址寄存器说明符而得以规定,但对又一数据结构序列而操作,无需单独指令来更新该基址寄存器。
作为又一替代性示例,可在一些变体中采用存储器推测,在该情况下,在载入指令执行期间,推测性地载入每个向量中的数据元素中的一个或更多者。特定而言,当对码进行向量化以利用可用向量操作时,载入向量寄存器的一些数据结构对于处理而言实际上可能或可能不是必需的。在这样的情况下,设备可在载入操作期间将待执行的访问中的一个或多个访问标记为推测访问。如果在正规访问期间发生故障,则通常将必需处理该故障,例如通过产生异常。然而,在一个实施例中,如果在对来自存储器的数据结构中的一个或多个进行推测撷取期间检测到故障,则不采取这样的措施。相反,在这样的排列中,仅有在故障出现于第一有效路线中的情况下才产生存储器故障(此情况将为非推测性的)。
图11图示访问指令的替代性编码形式,其中提供额外的偏移标识符字段450。四个编码选项A、B、C及D中的每个都增补了规定偏移的立即值455。作为立即值的替代者,可标识单独的标量寄存器,该标量寄存器中的值规定所需偏移。使用偏移的方式随后在图12中示意地图示。特定而言,该方式将允许规定多个指令示例,这样的指令使用同一数据结构标识符信息(在图12示例中,此数据结构标识符信息采用基址寄存器及步长寄存器形式),但在每个示例中偏移值发生变更。由此,此方式使得指令循环能够以更高效的方式展开,以更好地利用向量处理资源。特定而言,在展开循环中,第一载入指令将规定零偏移,以及因此将载入向量寄存器Z0、Z1及Z2,以及通过使用地址460、470、480、490而去交错为四个数据结构465、475、485、495,这样的地址通过使用图12中图示的计算而产生。下一载入指令能随后使用恰好同一基址及步长信息,但规定偏移为1,以及将所撷取的数据元素载入至又三个向量寄存器,在此情况下即寄存器Z3、Z4及Z5。因而,此指令将载入及去交错四个数据结构505、515、525、535,这样的数据结构由地址500、510、520、530而标识,以及这样的地址又通过使用图12中所示计算标识。值“VL”是向量长度,也即向量寄存器中的数据元素数量。
通过这样的方法,有可能减少在展开循环中执行地址计算的指令数量,以及也将避免对前文提及的后指数更新形式的需求,该形式原本将基址指针作为指令副效应而进行调整。
从上述实施例可见,将理解,本案所述的新访问指令形式在复杂访问操作执行期间使能显著的效率增益。在执行速度方面而获得显著优势。执行的指令数量可显著减少,除提高执行速度以外,此举也可降低设备内功耗。当使用上述指令时,这提升抽象水平及使复杂访问的易错性降低,由此简化需要进行这样的复杂访问操作的写入程序的过程。
有众多利用包括多个数据元素的数据结构的应用。例如,类似于以下示例,利用数据结构的应用可受益于对上述指令的利用:
复杂数 {Re,lm}
像素数据 {红,绿,蓝,ALPHA}
图形遍历节点对象 {连接ID,权重}
几何数据 {宽度,高度,角度}
薪资束 {id,薪水,税}
电磁域值 {B向量,H向量,D向量,E向量}
空间坐标 {X,Y,Z}
动作数据 {位置,速度,加速度,质量}
图13图示可使用的虚拟机实施方式。尽管前文描述的实施例在操作支持相关技术的特定处理硬件的设备及方法方面而实施本发明,但也有可能提供硬件装置的所谓虚拟机实施方式。这样的虚拟机实施方式在主机处理器630上执行,该主机处理器执行主机操作系统620,该主机操作系统支持虚拟机程序610。通常,需要大型高性能处理器以提供以合理速度执行的虚拟机实施方式,但这样的方法在某些环境中合理,如在需要执行另一处理器的本端代码以获得兼容性的情况下,或出于再使用原因。虚拟机程序610向应用程序600提供应用程序编程接口,该接口与将由实际硬件提供的应用程序编程接口相同,实际硬件是通过虚拟机程序610模型化的装置。由此,程序指令(包括上述规定多个非连续数据结构的访问指令)可通过使用虚拟机程序610而在应用程序600内执行,以模型化指令与虚拟机硬件的交互。
在本申请案中,词语“被配置为”用于意味着设备组件具有能够执行所定义的操作的配置。
在此上下文中,“配置”意味着硬件或软件的排列或互连方式。例如,设备可具有专用硬件,该硬件提供定义的操作,或处理器或其它处理装置可经程序化以执行该功能。“被配置为”并非暗示该设备组件为了提供所定义的操作而需要以任何方式变更。
尽管本文已引用附图详细描述本发明的说明性实施例,但将理解,本发明并非限定于这些精确实施例,以及本领域技术人员在不背离本发明范畴及精神的前提下可对本发明进行多种变更、添加及修改,如所附专利申请范围所定义。例如,在不背离本发明范畴的前提下,可利用独立权利要求特征产生从属权利要求的多种特征组合。

Claims (25)

1.一种装置,包括:
一组向量寄存器,每个向量寄存器经排列以储存包括多个数据元素的向量操作数;
访问电路,用于执行访问操作,以在存储器中的数据结构与所述向量寄存器组之间移动向量操作数的数据元素,每个数据结构包括储存在所述存储器中连续地址处的多个数据元素;
解码电路,可响应于标识来自所述向量寄存器组的多个向量寄存器及相对于彼此在所述存储器中不连续定位的多个数据结构的单一访问指令,来产生控制信号以控制所述访问电路以执行所述访问操作的序列,以在所述存储器与所述多个向量寄存器之间移动所述多个数据结构,从而使得所述多个向量寄存器中每个向量寄存器中的所述向量操作数保存来自所述多个数据结构中的每个的对应数据元素。
2.如权利要求1所述的装置,其中所述多个数据结构中一个或多个的所述多个数据元素在所述存储器与所述多个向量寄存器之间移动时经重排。
3.如权利要求1或2所述的装置,其中所述单一访问指令是载入指令,以及所述访问电路可响应于所述控制信号以执行所述访问操作序列,从而从所述存储器获得标识的每个数据结构的所述数据元素,以及将向量操作数写入每个标识的向量寄存器,所述向量操作数包括来自所述多个数据结构中每个数据结构的对应数据元素。
4.如权利要求3所述的装置,其中所述访问操作序列包括聚集操作序列,每个聚集操作获得来自所述多个数据结构中每个数据结构的对应数据元素,以及将获得的所述数据元素写入与所述聚集操作关联的向量寄存器。
5.如权利要求1或2所述的装置,其中所述单一访问指令是储存指令,以及所述访问电路可响应于所述控制信号以执行所述访问操作序列,从而从每个标识的向量寄存器读取向量操作数,所述向量操作数包括来自所述多个数据结构中的每个的对应数据元素,以及在所述数据元素被写入所述存储器时重排所述数据元素,从而将每个数据结构储存在所述存储器中对应于所述数据结构的不连续位置的地址,同时确保每个单个数据结构的所述数据元素储存在所述存储器中的连续地址。
6.如权利要求5所述的装置,其中所述访问操作序列包括分散操作序列,每个分散操作从与所述分散操作关联的向量寄存器处获得向量操作数,所述向量操作数包括来自所述多个数据结构中每个数据结构的对应数据元素,以及将所述向量操作数的所述数据元素写入所述存储器的地址,所述地址利用所述多个数据结构的所述地址所确定。
7.如任意前述权利要求所述的装置,其中所述单一访问指令包括提供用于确定所述多个数据结构的所述地址的信息的数据结构标识符字段。
8.如权利要求7所述的装置,还包括:
一组标量寄存器,用于储存标量数据值;
其中所述数据结构标识符字段包括标量寄存器标识符字段及步长标识符字段,所述标量寄存器标识符字段标识来自所述组的标量寄存器,所述标量寄存器中储存的标量的数据值用于确定所述存储器中的基本地址,以及所述步长标识符字段包含步长信息,所述步长信息用于推导来自所述基本地址的所述多个数据结构的所述地址。
9.如权利要求8所述的装置,其中所述步长信息标识恒定步长值。
10.如权利要求9所述的装置,其中所述步长标识符字段包括立即值及标量寄存器标识符中的一个,从而标识所述恒定步长值。
11.如权利要求8所述的装置,其中所述步长信息标识一系列步长值,每个步长值与所述多个数据结构中的至少一个相关联。
12.如权利要求11所述的装置,其中所述步长标识符字段标识所述组内的向量寄存器,以及所述向量寄存器中的每个数据元素标识步长值,所述步长值用于根据所述基本地址确定所述数据结构中的关联一者的所述地址。
13.如权利要求7所述的装置,其中所述数据结构标识符字段标识所述组内的向量寄存器,以及所述向量寄存器中的每个数据元素提供指针数据,所述指针数据用于确定所述数据结构中的相关联一个的所述地址。
14.如任意前述权利要求所述的装置,其中所述单一访问指令包括向量寄存器标识符字段,所述字段提供信息,所述信息用于确定待访问的所述多个向量寄存器。
15.如权利要求14所述的装置,其中所述向量寄存器标识符字段包括向量寄存器标识符,所述标识符用于标识所述组中的一个向量寄存器及整数值,所述整数值用于标识待访问的所述多个向量寄存器中的所述向量寄存器数量,所述解码电路经排列以应用预定规则从而利用所述标识的一个向量寄存器及所述整数来确定所述多个向量寄存器中的每个向量寄存器。
16.如权利要求15所述的装置,其中,在所述多个向量寄存器待访问时,所述解码电路经排列以确定连续多个向量寄存器,所述向量寄存器包括所述已标识的向量寄存器。
17.如任意前述权利要求所述的装置,其中:
所述访问电路在多个路线上操作,每个路线包含来自所述多个向量寄存器中每个向量寄存器的对应数据元素位置;
所述单一访问指令包括谓词标识符字段,所述谓词标识符字段提供谓词信息,所述谓词信息用于确定所述多个路线中的所述访问操作序列的有效路线;以及
在所述多个数据结构待移动时,所述访问电路经排列以确定与所述有效路线关联的这些数据结构。
18.如权利要求17所述的装置,其中所述单一访问指令是一载入指令时,以及所述访问电路经排列以通过使用所述谓词信息而执行压缩操作,所述谓词信息用于标识待载入的所述多个数据结构,以及所述访问电路经排列以在所述多个向量寄存器内的系列连续路线内储存这些数据结构。
19.如引用权利要求7时的任意前述权利要求所述的装置,其中所述单一访问指令包括提供偏移数据的偏移标识符字段,当确定所述多个数据结构的所述地址时,所述偏移数据将结合所述数据结构标识符字段中的所述信息而被应用。
20.如任意前述权利要求所述的装置,其中所述访问电路包括载入/储存单元及关联的缓冲储存设备,以允许在所述访问操作序列执行期间暂时缓冲数据元素。
21.如权利要求1-19中的任一项所述的装置,其中所述访问电路包括载入/储存单元及向量排列单元,所述单元组合操作以执行所述访问操作序列。
22.如权利要求21所述的装置,其中所述载入/储存单元及所述向量排列单元经排列以经由所述组内的一个或多个向量寄存器交换数据元素,所述向量寄存器用于储存数据元素的中间向量。
23.一种方法,所述方法操作设备以执行访问操作,以在存储器中的数据结构与所述设备的组向量寄存器之间移动向量操作数的数据元素,每个向量寄存器经排列以储存向量操作数,所述向量操作数包括多个数据元素,以及每个数据结构包括储存在所述存储器中连续地址的多个数据元素,所述方法包括以下步骤:
解码单一访问指令,所述单一访问指令标识来自所述向量寄存器组的多个向量寄存器及相对于彼此在所述存储器中不连续定位的多个数据结构,以产生控制信号以控制访问电路以执行所述访问操作的序列,以在所述存储器与所述多个向量寄存器之间移动所述多个数据结构;以及
在所述访问操作序列执行期间移动每个数据结构的所述多个数据元素,以使得所述多个向量寄存器中每个向量寄存器中的所述向量操作数保存来自所述多个数据结构中的每个的对应数据元素。
24.一种设备,包括:
一组向量寄存器装置,每个向量寄存器装置用于储存向量操作数,所述向量操作数包括多个数据元素;
访问装置,用于执行访问操作,以在存储器中的数据结构与所述向量寄存器装置组之间移动向量操作数的数据元素,每个数据结构包括储存在所述存储器中连续地址处的多个数据元素;
解码装置,响应于单一访问指令以用于产生控制信号,所述单一访问指令标识来自所述向量寄存器组的多个向量寄存器装置及相对于彼此在所述存储器中不连续定位的多个数据结构,所述控制信号用于控制所述访问装置以执行所述访问操作的序列,以在所述存储器与所述多个向量寄存器装置之间移动所述多个数据结构,以使得所述多个向量寄存器装置中每个向量寄存器装置中的所述向量操作数保存来自所述多个数据结构中的每个的对应数据元素。
25.一种储存在非暂态计算机可读取储存介质中的计算机程序,所述计算机程序在被数据处理设备执行时提供虚拟机,所述虚拟机提供对应于权利要求1-22中任一项所述的装置的指令执行环境。
CN201680043226.7A 2015-07-31 2016-06-20 用于转换存储器与多个向量寄存器之间的多个数据结构的设备及方法 Active CN107851014B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/814,590 US9875214B2 (en) 2015-07-31 2015-07-31 Apparatus and method for transferring a plurality of data structures between memory and a plurality of vector registers
US14/814,590 2015-07-31
PCT/GB2016/051841 WO2017021678A1 (en) 2015-07-31 2016-06-20 An apparatus and method for transferring a plurality of data structures between memory and a plurality of vector registers

Publications (2)

Publication Number Publication Date
CN107851014A true CN107851014A (zh) 2018-03-27
CN107851014B CN107851014B (zh) 2022-08-09

Family

ID=56235851

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201680043226.7A Active CN107851014B (zh) 2015-07-31 2016-06-20 用于转换存储器与多个向量寄存器之间的多个数据结构的设备及方法

Country Status (8)

Country Link
US (1) US9875214B2 (zh)
EP (1) EP3329362B1 (zh)
JP (1) JP6843113B2 (zh)
KR (1) KR20180039645A (zh)
CN (1) CN107851014B (zh)
IL (1) IL256163B (zh)
TW (1) TWI709863B (zh)
WO (1) WO2017021678A1 (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111381880A (zh) * 2018-12-31 2020-07-07 图核有限公司 加载-存储指令
WO2021223644A1 (zh) * 2020-05-08 2021-11-11 安徽寒武纪信息科技有限公司 数据处理方法及装置以及相关产品
WO2023077769A1 (zh) * 2021-11-03 2023-05-11 海光信息技术股份有限公司 数据处理方法、装置以及设备和计算机可读存储介质

Families Citing this family (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6503945B2 (ja) * 2015-07-13 2019-04-24 富士通株式会社 情報処理装置、並列計算機システム、ファイルサーバ通信プログラム及びファイルサーバ通信方法
US20170177350A1 (en) * 2015-12-18 2017-06-22 Intel Corporation Instructions and Logic for Set-Multiple-Vector-Elements Operations
US10338920B2 (en) * 2015-12-18 2019-07-02 Intel Corporation Instructions and logic for get-multiple-vector-elements operations
US10152321B2 (en) * 2015-12-18 2018-12-11 Intel Corporation Instructions and logic for blend and permute operation sequences
US20170177352A1 (en) * 2015-12-18 2017-06-22 Intel Corporation Instructions and Logic for Lane-Based Strided Store Operations
US20170177359A1 (en) * 2015-12-21 2017-06-22 Intel Corporation Instructions and Logic for Lane-Based Strided Scatter Operations
US20170177543A1 (en) * 2015-12-22 2017-06-22 Intel Corporation Aggregate scatter instructions
US10901940B2 (en) 2016-04-02 2021-01-26 Intel Corporation Processors, methods, systems, and instructions to atomically store to memory data wider than a natively supported data width
US10216515B2 (en) * 2016-10-18 2019-02-26 Oracle International Corporation Processor load using a bit vector to calculate effective address
EP3340037B1 (en) * 2016-12-22 2019-08-28 ARM Limited A data processing apparatus and method for controlling vector memory accesses
US11182200B2 (en) * 2017-06-29 2021-11-23 Texas Instruments Incorporated Streaming engine with short cut start instructions
US20190272175A1 (en) * 2018-03-01 2019-09-05 Qualcomm Incorporated Single pack & unpack network and method for variable bit width data formats for computational machines
US11175915B2 (en) * 2018-10-10 2021-11-16 Micron Technology, Inc. Vector registers implemented in memory
US10970072B2 (en) * 2018-12-21 2021-04-06 Intel Corporation Systems and methods to transpose vectors on-the-fly while loading from memory
GB2580664B (en) * 2019-01-22 2021-01-13 Graphcore Ltd Double load instruction
CN111813446A (zh) * 2019-04-12 2020-10-23 杭州中天微系统有限公司 一种数据加载和存储指令的处理方法和处理装置
US11327862B2 (en) * 2019-05-20 2022-05-10 Micron Technology, Inc. Multi-lane solutions for addressing vector elements using vector index registers
WO2020250419A1 (ja) * 2019-06-14 2020-12-17 日本電気株式会社 制御装置、制御方法、及び制御プログラムが格納された非一時的なコンピュータ可読媒体
US11204889B1 (en) 2021-03-29 2021-12-21 SambaNova Systems, Inc. Tensor partitioning and partition access order
US11366783B1 (en) 2021-03-29 2022-06-21 SambaNova Systems, Inc. Multi-headed multi-buffer for buffering data for processing
US11748101B2 (en) * 2021-07-13 2023-09-05 Arm Limited Handling of single-copy-atomic load/store instruction with a memory access request shared by micro-operations
US11709611B2 (en) 2021-10-26 2023-07-25 SambaNova Systems, Inc. Determining and using memory unit partitioning solutions for reconfigurable dataflow computing systems

Citations (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5812147A (en) * 1996-09-20 1998-09-22 Silicon Graphics, Inc. Instruction methods for performing data formatting while moving data between memory and a vector register file
US20020144061A1 (en) * 1998-12-31 2002-10-03 Cray Inc. Vector and scalar data cache for a vector multiprocessor
US20030154361A1 (en) * 2001-10-31 2003-08-14 Alphamosaic Limited Instruction execution in a processor
JP2005038185A (ja) * 2003-07-15 2005-02-10 Nec Computertechno Ltd ベクトル処理装置
US20050125641A1 (en) * 2003-12-09 2005-06-09 Arm Limited Data processing apparatus and method for moving data between registers and memory
CN1802630A (zh) * 2003-06-12 2006-07-12 Arm有限公司 用于在奇存器堆和存储器之间传送数据值的数据处理设备和方法
CN1894659A (zh) * 2003-12-09 2007-01-10 Arm有限公司 在寄存器和存储器之间移动数据的数据处理设备和方法
US20070283127A1 (en) * 2003-08-18 2007-12-06 Cray Inc. Method and apparatus for indirectly addressed vector load-add-store across multi-processors
US20100106944A1 (en) * 2004-07-13 2010-04-29 Arm Limited Data processing apparatus and method for performing rearrangement operations
US20140108769A1 (en) * 2011-12-23 2014-04-17 Ashish Jha Multi-register scatter instruction
CN103827813A (zh) * 2011-09-26 2014-05-28 英特尔公司 用于提供向量分散操作和聚集操作功能的指令和逻辑
US20140181464A1 (en) * 2012-12-26 2014-06-26 Andrew T. Forsyth Coalescing adjacent gather/scatter operations
CN104011670A (zh) * 2011-12-22 2014-08-27 英特尔公司 用于基于向量写掩码的内容而在通用寄存器中存储两个标量常数之一的指令

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5689653A (en) 1995-02-06 1997-11-18 Hewlett-Packard Company Vector memory operations
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
US7921263B2 (en) 2006-12-22 2011-04-05 Broadcom Corporation System and method for performing masked store operations in a processor
US20120060016A1 (en) * 2010-09-07 2012-03-08 International Business Machines Corporation Vector Loads from Scattered Memory Locations
US8635431B2 (en) * 2010-12-08 2014-01-21 International Business Machines Corporation Vector gather buffer for multiple address vector loads
US20120254591A1 (en) * 2011-04-01 2012-10-04 Hughes Christopher J Systems, apparatuses, and methods for stride pattern gathering of data elements and stride pattern scattering of data elements
US9348592B2 (en) * 2011-12-22 2016-05-24 Intel Corporation Apparatus and method for sliding window data access
US9626333B2 (en) 2012-06-02 2017-04-18 Intel Corporation Scatter using index array and finite state machine
US8972697B2 (en) 2012-06-02 2015-03-03 Intel Corporation Gather using index array and finite state machine
JP6253514B2 (ja) * 2014-05-27 2017-12-27 ルネサスエレクトロニクス株式会社 プロセッサ

Patent Citations (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5812147A (en) * 1996-09-20 1998-09-22 Silicon Graphics, Inc. Instruction methods for performing data formatting while moving data between memory and a vector register file
US20020144061A1 (en) * 1998-12-31 2002-10-03 Cray Inc. Vector and scalar data cache for a vector multiprocessor
US20030154361A1 (en) * 2001-10-31 2003-08-14 Alphamosaic Limited Instruction execution in a processor
CN1802630A (zh) * 2003-06-12 2006-07-12 Arm有限公司 用于在奇存器堆和存储器之间传送数据值的数据处理设备和方法
JP2005038185A (ja) * 2003-07-15 2005-02-10 Nec Computertechno Ltd ベクトル処理装置
US20070283127A1 (en) * 2003-08-18 2007-12-06 Cray Inc. Method and apparatus for indirectly addressed vector load-add-store across multi-processors
CN1890630A (zh) * 2003-12-09 2007-01-03 Arm有限公司 在寄存器和存储器之间移动数据的数据处理设备和方法
CN1894659A (zh) * 2003-12-09 2007-01-10 Arm有限公司 在寄存器和存储器之间移动数据的数据处理设备和方法
US20050125641A1 (en) * 2003-12-09 2005-06-09 Arm Limited Data processing apparatus and method for moving data between registers and memory
US20100106944A1 (en) * 2004-07-13 2010-04-29 Arm Limited Data processing apparatus and method for performing rearrangement operations
CN103827813A (zh) * 2011-09-26 2014-05-28 英特尔公司 用于提供向量分散操作和聚集操作功能的指令和逻辑
CN104011670A (zh) * 2011-12-22 2014-08-27 英特尔公司 用于基于向量写掩码的内容而在通用寄存器中存储两个标量常数之一的指令
US20140108769A1 (en) * 2011-12-23 2014-04-17 Ashish Jha Multi-register scatter instruction
US20140181464A1 (en) * 2012-12-26 2014-06-26 Andrew T. Forsyth Coalescing adjacent gather/scatter operations

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111381880A (zh) * 2018-12-31 2020-07-07 图核有限公司 加载-存储指令
CN111381880B (zh) * 2018-12-31 2023-07-07 图核有限公司 一种处理器、介质和处理器的操作方法
WO2021223644A1 (zh) * 2020-05-08 2021-11-11 安徽寒武纪信息科技有限公司 数据处理方法及装置以及相关产品
WO2023077769A1 (zh) * 2021-11-03 2023-05-11 海光信息技术股份有限公司 数据处理方法、装置以及设备和计算机可读存储介质

Also Published As

Publication number Publication date
EP3329362B1 (en) 2022-03-30
JP2018523238A (ja) 2018-08-16
US20170031865A1 (en) 2017-02-02
IL256163B (en) 2020-02-27
KR20180039645A (ko) 2018-04-18
US9875214B2 (en) 2018-01-23
TWI709863B (zh) 2020-11-11
EP3329362A1 (en) 2018-06-06
IL256163A (en) 2018-02-28
CN107851014B (zh) 2022-08-09
JP6843113B2 (ja) 2021-03-17
TW201717053A (zh) 2017-05-16
WO2017021678A1 (en) 2017-02-09

Similar Documents

Publication Publication Date Title
CN107851014A (zh) 用于转换存储器与多个向量寄存器之间的多个数据结构的设备及方法
US11907691B2 (en) Method and system of command buffer between a CPU and GPU
CN105159761B (zh) 用于在多处理器上进行数据并行计算的应用编程接口
Man et al. Implementations of a parallel algorithm for computing Euclidean distance map in multicore processors and GPUs
CN109154886B (zh) 用于处理数据的方法和设备
US7398376B2 (en) Instructions for ordering execution in pipelined processes
CN102099789A (zh) 多处理器的多维线程分组
CN105453045A (zh) 使用动态宽度计算的壁垒同步
WO2017124649A1 (zh) 用于向量运算的数据读写调度器及保留站
CN106716346B (zh) 对端口减少的通用寄存器的操作数冲突解决的方法和装置
EP3857384B1 (en) Processing sequential inputs using neural network accelerators
CN109074625A (zh) 用于图形处理的每个着色器的前置码
KR102014670B1 (ko) 서브그룹 간 데이터 공유
KR20220036950A (ko) 순수 함수 신경망 가속기 시스템 및 아키텍처
US11734059B2 (en) Hardware assisted fine-grained data movement
CN108352051A (zh) 促进对计算装置处的捆绑状态的高效图形命令处理
US11822541B2 (en) Techniques for storing sub-alignment data when accelerating Smith-Waterman sequence alignments
US20230101085A1 (en) Techniques for accelerating smith-waterman sequence alignments
US11550584B1 (en) Implementing specialized instructions for accelerating Smith-Waterman sequence alignments
CN103927150B (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