CN114365083A - 压缩辅助指令 - Google Patents

压缩辅助指令 Download PDF

Info

Publication number
CN114365083A
CN114365083A CN202080062917.8A CN202080062917A CN114365083A CN 114365083 A CN114365083 A CN 114365083A CN 202080062917 A CN202080062917 A CN 202080062917A CN 114365083 A CN114365083 A CN 114365083A
Authority
CN
China
Prior art keywords
vector
operand
register
bit
instruction
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
CN202080062917.8A
Other languages
English (en)
Inventor
E·班维尔
A·萨泽加里
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.)
Apple Inc
Original Assignee
Apple 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 Apple Inc filed Critical Apple Inc
Publication of CN114365083A publication Critical patent/CN114365083A/zh
Pending legal-status Critical Current

Links

Images

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/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/30098Register arrangements
    • 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
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3059Digital compression and data reduction techniques where the original information is represented by a subset or similar information, e.g. lossy compression
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3082Vector coding
    • 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/30018Bit or string instructions
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

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

Abstract

在一个实施方案中,处理器支持一个或多个压缩辅助指令,可以在压缩软件中采用该一个或多个压缩辅助指令,以提高该处理器在执行压缩/解压缩时的性能。即,当采用压缩辅助指令时,相比于未采用时的情况,可以更快速地执行压缩/解压缩任务并且消耗较少的功率。在一些情况下,可以将更有效、更复杂的压缩算法的成本降低到不太有效、不太复杂的压缩算法的成本。

Description

压缩辅助指令
背景技术
技术领域
本文描述的实施方案涉及处理器,并且更具体地,涉及处理器中的压缩辅助指令以提高压缩/解压缩性能和功率效率。
相关技术描述
在计算设备中,出于多种原因使用压缩。例如,软件下载可以被压缩以通过网络进行传送,并且可以在目标计算设备上被解压缩以进行安装。在一些情况下,例如便携式计算设备(例如,智能电话、便携式数字助理、平板计算机等),软件可以被解压缩、安装,然后被重新压缩以存储在设备上。以压缩形式存储各种软件可以节省相比于较大计算设备,诸如膝上型电脑、台式机、服务器等中的存储空间可能更受限的设备上的存储空间。
压缩/解压缩主要在软件中实施,并且因此性能成本(和功率消耗,在具有有限电力供应诸如电池的便携式设备上)可能非常重要。压缩算法的有效性一般用未压缩原件大小与压缩结果大小之比(简称压缩比)来衡量。遗憾的是,给定压缩算法的有效性通常与其复杂性相关,并且因此有效性的成本是性能(例如,等待时间)和功率。
发明内容
在一个实施方案中,处理器支持一个或多个压缩辅助指令,可以在压缩软件中采用该一个或多个压缩辅助指令,以提高该处理器在执行压缩/解压缩时的性能。即,当采用压缩辅助指令时,相比于未采用时的情况,压缩/解压缩任务可以更快速地执行并且消耗较少的功率。在一些情况下,可以将更有效、更复杂的压缩算法的成本降低到不太有效、不太复杂的压缩算法的成本。
附图说明
下面的详细描述参照附图,现在对这些附图进行简要说明。
图1是基于有限状态熵(FSE)压缩算法的解压缩的一个实施方案的框图。
图2是基于FSE算法的优化解压缩的一个实施方案的框图,其中多个交织的FSE符号流共享相同的解码器和位流。
图3是基于FSE算法的优化解压缩的另一个实施方案的框图,其中多个交织的FSE符号和值流共享相同的解码器表。
图4是示出位栈读取操作的一个实施方案的框图。
图5是示出位栈写入操作的一个实施方案的框图。
图6是示出用于顶部解压缩辅助指令的一个实施方案的寄存器输入和输出的框图。
图7是示出用于顶部解压缩辅助指令的一个实施方案的寄存器输入和输出的框图。
图8是示出用于创建压缩辅助指令的一个实施方案的寄存器输入和输出的框图。
图9是示出用于连接压缩辅助指令的一个实施方案的寄存器输入和输出的框图。
图10是包括处理器的系统的一个实施方案的框图。
图11是图10所示的向量执行单元的一个实施方案的框图。
图12是示出处理器的一个实施方案执行顶部指令的操作的流程图。
图13是示出处理器的一个实施方案执行弹出指令的操作的流程图。
图14是示出处理器的一个实施方案执行创建指令的操作的流程图。
图15是示出处理器的一个实施方案执行连接指令的操作的流程图。
尽管本公开中所述的实施方案可受各种修改形式和另选形式的影响,但其具体实施方案在附图中以举例的方式示出并将在本文中详细描述。然而,应当理解,附图和对其的具体实施方式不旨在将实施方案限制为所公开的特定形式,而相反,本发明旨在涵盖落入所附权利要求书的实质和范围内的所有修改、等同物和另选方案。本文所使用的标题仅用于组织目的,并不旨在用于限制说明书的范围。如在整个本申请中所使用的那样,以允许的意义(即,意味着具有可能性)而非强制的意义(即,意味着必须)使用“可能”一词。类似地,字词“包括”、“包含”意味着“包括但不限于”。如本文所用,术语“第一”、“第二”等充当其之后的名词的标签,并且不暗指任何类型的排序(例如,空间的、时间的、逻辑的等),除非有明确指出。
在本公开内,不同实体(其可被不同地称为“单元”、“电路”、其他部件等)可被描述或声称为“被配置为”执行一个或多个任务或操作。此表达方式—被配置为[执行一个或多个任务]的[实体]—在本文中用于指代结构(即,物理的事物,诸如电子电路)。更具体地,此表达方式用于指示此结构被布置成在操作期间执行一个或多个任务。结构可被说成“被配置为”执行某个任务,即使该结构当前并非正被操作。“被配置为生成输出时钟信号的时钟电路”旨在涵盖例如在操作期间执行该功能的电路,即使所涉及的电路当前并非正被使用(例如该电路并未连接到电源)。因此,被描述或表述为“被配置为”执行某个任务的实体指代用于实施该任务的物理的事物,诸如设备、电路、存储有可执行程序指令的存储器等。此短语在本文中不被用于指代无形的事物。通常,形成与“被配置为”对应的结构的电路可包括硬件电路。硬件电路可包括以下项的任意组合:组合式逻辑电路、时钟存储设备(诸如触发器、寄存器、锁存器等)、有限状态机、存储器(诸如静态随机存取存储器或嵌入式动态随机存取存储器)、定制设计电路、模拟电路、可编程逻辑阵列等。类似地,为了描述方便,可将各种单元/电路/部件描述为执行一个或多个任务。此类描述应当被解释为包括短语“被配置为”。
术语“被配置为”并不旨在意指“可配置为”。例如,未经编程的FPGA不会被认为是“被配置为”执行某个特定功能,虽然其可能“可被配置为”执行该功能。在适当编程之后,FPGA然后可认为“被配置为”执行该功能。
在一个实施方案中,可通过以硬件描述语言(HDL)诸如Verilog或VHDL对电路的描述进行编码来实现根据本公开的硬件电路。可针对为给定集成电路制造技术设计的单元库来合成HDL描述,并可出于定时、功率和其他原因而被修改,以获得可被传输到工厂以生成掩码并最终产生集成电路的最终的设计数据库。一些硬件电路或其部分也可在示意图编辑器中被定制设计并与合成电路一起被捕获到集成电路设计中。该集成电路可包括晶体管并还可包括其他电路元件(例如,无源元件,诸如电容器、电阻器、电感器等),以及晶体管和电路元件之间的互连件。一些实施方案可实现耦接在一起的多个集成电路,以实现硬件电路,和/或可在一些实施方案中使用离散元件。另选地,HDL设计可被合成为可编程逻辑阵列诸如现场可编程门阵列(FPGA)并且可在FPGA中实现。
如本文所用,术语“基于”或“取决于”用于描述影响确定的一个或多个因素。此术语不排除可能有附加因素可影响确定。也就是说,确定可仅基于指定的因素或基于所指定的因素及其他未指定的因素。考虑短语“基于B确定A”。此短语指定B是用于确定A的因素或者B影响A的确定。此短语并不排除A的确定也可基于某个其他因素诸如C。此短语也旨在覆盖A仅基于B来确定的实施方案。如本文所用,短语“基于”与短语“至少部分地基于”是同义的。
本说明书包括对各种实施方案的参考,以指示本公开并非旨在提及一个特定具体实施,而是提及落入包括所附权利要求书的本公开的实质内的一系列实施方案。特定特征、结构或特性可以与本公开一致的任何合适的方式被组合。
本说明书可使用字词“一个”或“一种”来指代元件,或使用词语“该”来指代元件。这些字词并非旨在意味着仅存在元件的一个实例。在各种实施方案中可存在多于一个。因此,除非明确地描述为仅一个,否则“一个”、“一种”和“所述”应解释为意味着“一个或多个”。
本说明书可将各种部件、单元、电路等描述为耦接的。在一些实施方案中,如果部件、单元、电路等电耦接(例如,直接连接或通过一个或多个其他电路间接连接)和/或通信耦接,则这些部件、单元、电路等可耦接。
具体实施方式
如上所述,公开了实施压缩辅助指令的各种实施方案的处理器。一般来讲,压缩辅助指令可以是被设计成在执行压缩和/或解压缩时提高处理器性能的指令。因此,在一些情况下,压缩辅助指令可以是预期仅在解压缩中使用的指令。在其他情况下,可以预期压缩辅助指令仅用于压缩,或用于压缩和解压缩两者。
为了示出压缩辅助指令及其应用,示出了有限状态熵(FSE)压缩算法的若干具体实施。虽然使用FSE作为示例,但采用一个或多个位流或位栈作为压缩的一部分的机制可受益于下文所述的压缩辅助指令。
图1是FSE压缩数据解压缩的一个实施方案的框图。如图1所示,数据包括表10和位流12。即,当数据以FSE压缩算法为单位进行压缩时,生成表10和位流12。初始状态可用于查找表中的初始条目。即,状态(在附图标记16处示出)可以为表10的索引。每个条目可以包括类似于附图标号14所示的数据。特别地,条目可以包括基数、符号和位数(n)。符号是输出数据的一部分,并且可以被提供为与先前读取的符号组合以产生作为原始数据的输出数据流。即,符号是原始数据的一部分,并且可以连接到数据流的端部(或者在初始状态的情况下,可以初始化数据流)。位数(n)可以指定要从位流12消耗的位数,以提供待相加到基数以生成下一状态的增量值。下一个状态替换初始状态并且查找表条目,从中可以生成下一符号和下一状态。连续重复下一个状态生成、查找和符号输出可产生符号流,即,未压缩的原始数据。在某些时候,表中的条目可以指示已到达数据的端部。另选地,未压缩数据可具有固定大小,并且因此下一个状态生成、查找和符号输出可以发生固定次数(假设是固定大小的符号)。
图1的实施方案是相当连续的过程,并且因此可能相对较慢。各种实施方案可以执行更为平行的操作。例如,在图2中,可以并行地查找4个状态。四个状态24可以对应于共享相同的解码器表26的四个交织的FSE符号流。即,符号流可以彼此独立,但在位栈20中交织。其他实施方案可以根据需要实施更多或更少的并行状态/符号流。每个状态24可以从表26中读取表条目22。每个表条目22可以类似于图1中所示的表条目14。并行读取的4个表条目22中的每一个表条目可以提供符号,该符号可以与对应的输出符号流连接(或用于初始化对应的输出符号流,用于初始状态24)。每个条目从位栈20中消耗其指定数量的位(n)(其中图2中顶部处的条目读取位栈20顶部处的位,下一个条目向下读取位栈20中的下一个位等)。因此,如上所述,位栈20可具有符号流的交织的位字段。将结果增量加到来自相应条目22的基数以生成下一个状态24。
图3示出了FSE算法的并行化形式的另一个实施方案。在图3的实施方案中,代替将符号直接存储在表30中,符号可以根据从表30读取的基数值(值基数,或V基数)生成,并且从另一个位栈32(值位栈,或V位栈32)读取的增量可用于生成符号。即,每个符号可以对应于从V基数开始的值的范围,并且在解码过程中的给定点处的特定值通过从V位栈32读取增量并且将其加到V基数来确定。因此,表条目34可包括V基数和从V位栈32消耗的位数(nv),以用作增量(V增量)以加到V基数以从条目生成输出符号。另外,每个条目34可包括状态基数(S基数)和位数(ns)以从状态位栈36(S位栈36)读取,以形成增量(S增量)以加到来自每个条目的S基数以生成下一个状态38。在一个实施方案中,V位栈32和S位栈36可被实施为单个位栈,其中V位和S位在栈中交织。在又一些实施方案中,可以使用栈中V位和S位的交织和实施多个栈的组合。例如,一组16个符号流可以表示为4组4个交织的符号流(例如,4个位栈)。
在包括向量指令的处理器中执行图2或图3所示的解压缩的一种方法是使用向量运算。例如,如果处理器支持具有4个向量元素的向量,则图2和图3的实施方案可以针对表查找、下一状态生成和符号值生成中涉及的每个操作使用一个向量指令来执行表查找、下一状态生成和符号值生成。然而,位栈读取操作可能更难以使用标准向量指令进行向量化。
一般来讲,向量运算对一个或多个向量操作数中的多个向量元素并行执行且独立地对每个向量元素执行指定运算。例如,向量加法运算可以在向量操作数内的对应位置添加向量元素,从而产生总和作为向量结果操作数的向量元素。四元素向量将具有向量元素VE0、VE1、VE2和VE3,以所列顺序排列在向量内的相邻向量元素位置。向量加法将添加源操作数的VE0元素以产生结果操作数的VE0元素;添加源操作数的VE1元素以产生结果操作数的VE1元素;等等。虽然使用四元素向量作为示例,但其他实施方案可以采用每个向量不同数量的向量元素以及/或者可以支持每个向量多个数量的向量元素。例如,128位向量寄存器组可以支持2个64位向量元素、4个32位向量元素、8个16位向量元素和16个8位向量元素。可以定义各种向量指令以将向量寄存器用作不同大小的向量元素。
因此,向量运算/指令对相同大小的向量元素执行良好,并且可以并行执行许多运算以提高可向量化算法的性能。然而,位栈读取操作(以及压缩期间对应的位栈写入操作)可以是可变大小操作。读取的每个位栈可以为任何数量的位,从1位(甚至可能是0位)到算法支持的最大数量的位。例如,在图3中的算法的一个实施方案中,可以支持从1位到32位的位栈读取。将位栈实施为固定大小的元素(例如,示例中为32位)将显著降低算法可实现的压缩比,并且因此会适得其反。
为了增强向量运算的使用,对类似于图1至图3所示的压缩算法执行压缩和解压缩,已定义压缩辅助指令来执行位栈读取和写入操作,将数据从位栈传输到向量元素(位栈读取)以及从向量元素传输到打包位栈数据(位栈写入)。
图4至图5示出了一个实施方案的对向量寄存器的位栈读取操作和位栈写入操作。压缩辅助指令已被定义为使处理器(当执行压缩辅助指令时)将存储指令操作数的一个或多个向量寄存器中的数据解释为位栈数据而不是向量元素。因此,位栈的一部分可以被加载到向量寄存器中并且使用本文所定义的压缩辅助指令进行处理。任何向量寄存器都可以被指定为此类操作数;正是将向量寄存器编码为压缩辅助指令的特定操作数,导致处理器将寄存器数据解释为位栈数据而不是向量元素。
图4示出了位栈读取操作。包括位栈顶部的位栈40的一部分在图4中示出。位栈的顶部可以在图4中的左侧,并且可以包括增量x3(栈的顶部)、x2(栈顶部旁边)、x1和x0,以及低于这些的附加值。图4中x3、x2、x1和x0的宽度变化以示出每个值是一个或多个位,并且可以变化。第一向量寄存器42具有四个向量元素,存储栈上的前四个增量的大小(b3对应于x3,b2对应于x2等)。寄存器42可以基于一组下一个状态从图2中的字段“n”加载给定表读取,或者从图3中的字段“nv”或“ns”加载给定表读取。对于图3的实施方案,可以使用两个向量寄存器,一个用于“nv”,一个用于“ns”。一般来讲,一个或多个向量加载指令可以执行表读取,并且可以存在附加的向量指令来隔离寄存器42中的大小值以执行位栈读取。
基于寄存器42中的大小,可以将位字段x3、x2、x1和x0从位栈的顶部提取到结果向量寄存器44中,并且可以更新位栈以移除提取的位字段。因此,图4中的更新的栈46包括栈顶部处的其余附加值。栈40和栈46可以示出存储器中的值,使得栈的顶部在存储器中移动。当栈的顶部被加载到寄存器中时,如下所述,位栈读取可以包括将栈的新顶部向左移动到寄存器中(例如,使得寄存器的最高有效位或MSB具有位于栈顶部处的位)。
位栈读取操作可以为解压缩过程的一部分。创建位栈可包括位栈写入操作,因为压缩算法确定符号并且生成表条目和位栈。图5示出了位栈写入操作。
图5中的初始位栈48包括栈顶部处的附加值,类似于图4中的更新的位栈46。在图4中的位栈48的顶部左侧示出了空间,以示出将更多位字段推入位栈作为位栈写入的一部分。向量寄存器50可以用对应于每个位字段的大小的向量元素(b3对应于x3,b2对应于x2等)来编码。另一个向量寄存器52可以将位字段作为向量元素(x3、x2等)。向量寄存器50和向量寄存器52可以根据压缩算法使用其他向量指令来计算。位栈写入操作将位字段x3、x2、x1和x0连接起来,使它们在位栈中相邻,并且将位字段写入位栈的顶部,从而产生图5所示的更新的位栈54。
为了实施图4所示的位栈读取操作,本文所述的处理器可以包括一对压缩辅助指令。这些指令在本文中称为“顶部”和“弹出”。顶部指令在被执行时可以使处理器从位栈的顶部(可以被存储在向量寄存器中,如下所述)提取多个位字段到结果向量寄存器的向量元素中。弹出指令在被执行时可以使处理器从栈顶部移除位字段,将栈顶部向下移动到尚未使用顶部指令提取的下一组位字段。
图6是一个实施方案的顶部指令的源操作数和结果操作数的框图。在图6的顶部处,顶部指令的助记符显示为带有结果向量寄存器(RV)、源栈寄存器(SSR)和源大小向量寄存器(SSV)。源栈寄存器内容在附图标号60处示出,源大小向量寄存器内容在附图标号62处示出,并且执行顶部指令后的结果向量寄存器内容在附图标号64处示出。
如前所述,栈寄存器可以为向量寄存器,但处理器可以通过将寄存器指定为压缩辅助指令中的一个压缩辅助指令的栈操作数来不同地解释内容。当向量寄存器存储位栈数据时,该寄存器可以包括位栈字段66和位计数字段68。位栈字段可以为多个位,其中在该实施方案中,多个位的MSB在寄存器的MSB中。多个位的MSB可以为位栈的最高位。位计数字段68可以是当前在栈寄存器中的位数(例如,位栈字段66中的多个位的数量)。在一个实施方案中,向量寄存器可以为128位并且位计数字段可以为8位。因此,在该实施方案中,位栈字段66可以高达120位。其他实施方案可以实施不同大小的向量寄存器并且支持更大或更小的位栈字段和位计数字段。
在位栈字段66内,在图6中标识位字段x3、x2、x1和x0。位字段由源大小向量寄存器62中的大小定义。更具体地,源大小向量寄存器62可以为具有多个大小的向量。即,大小可以是对应位字段中的位数的计数。例如,大小可以是整数。在所示实施方案中,源大小向量62中存在四个向量元素:向量元素3(VE3)、VE2、VE1和VE0。每个向量元素指定对应位字段的大小。因此,位字段x3可以为位栈字段66的最高有效b3位。位字段x2可以与位字段x3相邻(例如,位字段x2的MSB可以与位字段x3的最低有效位或LSB相邻)并且大小可以为b2位。位字段x1可以与位字段x2相邻,大小可为b1位,并且位字段x0可与位字段x1相邻,大小可为b0位。位栈字段66中的其余位在图6中标记为“p”。p的MSB可以为位栈中下一个位字段的MSB,它可以由从表26或表30中读取的下一个表定义。虽然寄存器62中的大小字段被示出为占据图6中向量元素的一部分,但这些字段可以占据多达整个向量元素。此外,结果向量寄存器64中的提取的位字段可以高达向量元素的全大小,但是每个单独字段的大小由来自大小向量的对应向量元素控制。
基于源大小向量寄存器62中的大小字段,执行顶部指令的处理器可以被配置为将位字段提取到结果向量寄存器64的对应的向量元素中。因此,x3是结果向量寄存器64的元素VE3,基于源大小向量寄存器62的VE3中的大小b3提取;x2是结果向量寄存器64的元素VE2,基于源大小向量寄存器62的VE2中的大小b2提取并且还受到b3的影响,因为x3是从位栈字段66的MSB中并行提取的;x1是结果向量寄存器64的元素VE1,基于源大小向量寄存器62的VE1中的大小b1提取并且还受到b3和b2的影响;并且x0是结果向量寄存器64的元素VE0,基于源大小向量寄存器62的VE0中的大小b0提取,还受到b3、b2和b1的影响。
图7是一个实施方案的弹出指令的源操作数和结果操作数的框图。在图7的顶部处,示出了弹出指令的助记符,其中包含结果栈寄存器(RSR)、源栈寄存器(SSR)和源大小向量寄存器(SSV)。源栈寄存器内容在附图标号60处示出,源大小向量寄存器内容在附图标号62处示出,并且执行弹出指令后的结果栈寄存器内容在附图标号70处示出。弹出指令可旨在与顶部指令配对,以调整位栈的内容以反映位字段x3、x2、x1和x0的提取和消耗。因此,示出了相同的源寄存器60和62。然而,弹出指令通常可以用任何源寄存器进行编码。
如前所述,执行弹出指令的处理器移除与顶部指令消耗的位字段相对应的位。因此,弹出指令可以使用来自源大小向量寄存器62的大小向量元素b3、b2、b1和b0的总和来标识待移除的位数,从寄存器的MSB开始。其余的位(p)可以被移位,使得p的MSB是结果栈寄存器70的MSB。另外,可以通过从源栈寄存器60中的位计数字段n中减去大小向量元素的总和来计算位计数字段(n’),如附图标号72所示。
需注意,结果栈寄存器70可以被编码为与弹出指令中的源栈寄存器60相同的寄存器,从而使用顶部指令来更新源栈寄存器60,以用于下一次栈读取操作以提取下一组位字段。当栈寄存器中的位栈字段耗尽时,可以通过加载指令从存储器中剩余的位栈将其重新填充。可以使用向量加载指令,因为向量加载指令可以仅将数据加载到寄存器中。正是将寄存器用作栈寄存器操作数,导致处理器将内容解释为位栈而不是向量元素。
顶部指令和弹出指令可以是可用于解压缩的压缩辅助指令。在一些实施方案中,还可以针对压缩定义一个或多个压缩辅助指令。特别地,可针对图5所示的位栈写入操作定义压缩辅助指令。在一个实施方案中,定义两个压缩辅助指令:“创建”和“连接”。
图8是一个实施方案的创建指令的源操作数和结果操作数的框图。在图8的顶部处,示出了创建指令的助记符,其中包含结果栈寄存器(RSR)、源向量寄存器(SV)和源大小向量寄存器(SSV)。可以执行各种向量指令以生成具有位字段和对应大小的向量,当准备好执行位栈写入操作时,该向量可以在源向量寄存器80和源大小向量寄存器82中。寄存器80和寄存器82在图8中示出,并且包括存储位字段的向量元素(寄存器80)和存储大小的对应向量元素(寄存器82)。因此,寄存器80的VE3是大小为b3的位字段x3(寄存器82的VE3),寄存器80的VE2是大小为b2的位字段x2(寄存器82的VE2字段),等等。当处理器执行创建指令时,处理器可以将来自源向量寄存器80的位字段打包到结果栈寄存器84的MSB中,在结果栈寄存器84的MSB中形成多个位,包括在多个位内的相邻位位置中的位字段x3、x2、x1和x0(例如,x3的LSB与x2的MSB相邻,x2的LSB与x1的MSB相邻,等等)。位计数字段“n”可以计算为来自寄存器82的大小向量元素的总和,如附图标号86所示。
创建指令从位字段的向量创建多个位。连接指令可以用于将创建指令的结果插入到位栈的先前版本中(例如,将多个位推到位栈上)。连接指令也可以在位栈读取操作中使用,以从存储器重新填充耗尽的位栈寄存器。例如,位栈的下一部分可以从存储器被加载到向量寄存器中,并且可以连接到用于位栈读取的位栈寄存器中。
图9是一个实施方案的连接指令的源操作数和结果操作数的框图。在图9的顶部处,示出了连接指令的助记符,其中包含结果栈寄存器(RSR)、源栈寄存器1(SSR1)和源栈寄存器2(SSR2)。源栈寄存器1和源栈寄存器2分别以附图标号88和附图标号90示出。每个源栈寄存器可包括多个位(寄存器88中的p1,寄存器90中的p2),并且位计数字段指示多个位的数量(寄存器88中的n1,寄存器90中的n2)。执行连接指令的处理器可以将p2位连接到p1位,从而创建更大的多个位,如结果栈寄存器92中所示。结果栈寄存器中的位计数字段可以如附图标号94所示被计算为位计数字段n1和位计数字段n2的总和。
虽然图6至图9的实施方案示出了具有4个向量元素的向量,但其他实施方案可以支持具有更多或更少向量元素(例如,2、8、16等)的向量。另外,如前所述,一些实施方案可以支持向量指令的多个版本,包括压缩辅助指令,以使用具有不同数量的向量元素的向量(或者操作数诸如立即字段可以选择该指令的向量中有多少向量元素)。
图10是计算机系统100的一个实施方案的框图。计算机系统100包括处理器102、二级(L2)高速缓存106、存储器108和大容量存储设备110。如图所示,处理器102包括一级(L1)高速缓存104和耦合到L1高速缓存104和寄存器文件112的执行核心120。如图所示,执行核心120可以包括一个或多个执行单元,诸如整数执行单元114、浮点(FP)执行单元116和向量执行单元118。在各种实施方案中,执行单元114、116和118可以耦合到寄存器文件112,并且/或者可以存在用于不同操作数类型的多个寄存器文件112。需注意,尽管在计算机系统100中示出和描述了特定部件,但在另选的实施方案中,计算机系统100中可存在不同的部件和不同数量的部件。例如,计算机系统100可以不包括存储器层级结构(例如,L2高速缓存104、存储器108和/或大容量存储设备110)中的一些。可以包括类似于处理器102的多个处理器。可以包括给定类型的多个执行单元(例如,整数、浮点、向量、加载/存储等),并且给定类型的执行单元的数量可以与另一种类型的执行单元的数量不同。另外,尽管L2高速缓存106被示出为在处理器102的外部,但可以设想在其他实施方案中,L2高速缓存106可以在处理器102的内部。还需注意,在此类实施方案中,可以使用三级(L3)高速缓存(未示出)。此外,计算机系统100可以包括图形处理器、视频卡、视频捕获设备、用户界面设备、网卡、光驱动器,以及/或者使用总线、网络或另一合适的通信信道(为简单起见均未示出)耦合到处理器102的其他外围设备。
在各种实施方案中,处理器102可以表示执行计算操作的通用处理器。例如,处理器102可以为中央处理单元(CPU),诸如微处理器、微控制器、专用集成电路(ASIC)或现场可编程门阵列(FPGA)。处理器102可以为独立部件,或者可以与其他部件(例如,其他处理器或片上系统(SOC)中的其他部件等)一起集成到集成电路上。处理器102可以为具有其他部件的多芯片模块(MCM)中的部件。
更具体地,如图1所示,处理器102可包括执行核心120。执行核心120可以被配置为执行在由处理器102实施的指令集架构中定义的指令。根据需要,执行核心120可以具有任何微架构特征和具体实施特征。例如,执行核心120可包括超标量或标量具体实施。执行核心120可包括有序或无序具体实施,以及推测性或非推测性具体实施。执行核心120可包括上述特征的任何组合。在一些实施方案中,具体实施可包括微码。执行核心120可包括多种执行单元,每个执行单元被配置为执行各种类型的操作(例如,整数执行单元114、浮点执行单元116、向量执行单元118、加载/存储执行单元(未示出)等)。执行核心120可包括不同数量的流水线阶段和各种其他性能增强特征,诸如分支预测。执行核心120可包括指令解码单元、调度器或保留站、重排序缓冲器、存储器管理单元、I/O接口等中的一者或多者。
寄存器文件112可包括可用于存储各种指令的操作数的一组寄存器。寄存器文件112可包括各种数据类型的寄存器,基于操作数的类型,执行核心120被配置为存储在寄存器中(例如,整数、浮点、向量等)。寄存器文件112可包括架构寄存器(即,在由处理器102实施的指令集架构中指定的那些寄存器)。另选地或除此之外,寄存器文件112可包括物理寄存器(例如,如果在执行核心120中实施了寄存器重命名)。
L1高速缓存104可以示出任何高速缓存结构。例如,L1高速缓存104可以实施为哈佛架构(用于指令获取的独立指令高速缓存和用于存储器引用操作的执行单元读取/写入数据的数据高速缓存)、共享指令和数据高速缓存等。在一些实施方案中,可以提供加载/存储执行单元来执行存储器引用操作。
指令可以是在由处理器102实施的指令集架构中定义的可执行实体。存在多种指令集架构(例如,由Intel最初开发的x86架构、来自ARM Holdings的ARM、来自IBM/Motorola的Power和PowerPC等)。每个指令在指令集架构中定义,包括指令在存储器中的编码、指令的操作以及指令对寄存器、存储器位置和/或其他处理器状态的影响。指令集架构的给定具体实施可直接执行每个指令,但其形式可通过处理器硬件中的解码和其他操纵来改变。另一个具体实施可将至少一些指令解码成多个指令操作以供处理器102中的执行单元执行。在一些实施方案中,一些指令可以是微编码的。因此,术语“指令操作”在本文中可用于指处理器102/执行核心120中的执行单元被配置为作为单个实体来执行的操作。指令可以与指令操作具有一一对应的关系,并且在一些情况下,指令操作可以是指令(可能以处理器102/执行核心120内部的形式修改)。指令还可以与指令操作具有一对多(一对多)的对应关系。指令操作在本文中可以更简单地称为“操作”。
大容量存储设备110、存储器108、L2高速缓存10和L1高速缓存104是共同形成为处理器102存储数据和指令的存储器层级结构的存储设备。更具体地,大容量存储设备110可以是大容量非易失性存储器,诸如磁盘驱动器或具有长存取时间的大闪存存储器单元,而L1高速缓存104、L2高速缓存106和存储器108可能更小,访问时间更短。这些更快的半导体存储器存储常用数据的副本。存储器108可以表示存储器设备的动态随机存取存储器(DRAM)系列中的存储器设备。存储器108的大小通常大于L1高速缓存104和L2高速缓存106,而L1高速缓存104和L2高速缓存106通常使用静态随机存取存储器(SRAM)系列设备中的较小设备来实施。在一些实施方案中,L2高速缓存106、存储器108和大容量存储设备110在计算机系统100中的一个或多个处理器之间共享。
在一些实施方案中,存储器层级结构中的设备(即,L1高速缓存104等)可以在每个周期访问(即,读取和/或写入)多个高速缓存行。这些实施方案可以更有效地处理基于指向非连续存储器地址的指针向量或数组索引而发生的存储器访问。
需注意,以下描述的数据结构和程序指令(即,代码)可以存储在非暂时性计算机可读存储设备上,该非暂时性计算机可读存储设备可以为可以存储代码和/或数据以供计算机系统(例如,计算机系统100)使用的任何设备或存储介质。一般来讲,非暂时性计算机可读存储设备包括但不限于易失性存储器、非易失性存储器、磁性和光学存储设备,诸如磁盘驱动器、磁带、光盘(CD)、数字多功能光盘或数字视频光盘(DVD),或能够存储现在已知或以后开发的计算机可读介质的其他介质。因此,大容量存储设备110、存储器108、L2高速缓存10和L1高速缓存104是非暂时性计算机可读存储介质的所有示例。
如上所述,执行核心120可以被配置为执行向量指令(例如,在向量执行单元118中)。向量指令可以定义为经典意义上的单指令多数据流(SIMD)指令,因为它们可以定义将对多个数据元素并行执行的相同操作。由指令的实例操作的数据元素可以称为向量。形成向量的数据元素可以称为向量元素。向量元素本身可以具有任何数据类型(例如,整数、浮点等),并且针对向量元素可以支持一种以上的数据类型。
在一个实施方案中,寄存器文件112可以包括可以保存操作数向量和结果向量的向量寄存器。在一些实施方案中,向量寄存器文件中可存在32个向量寄存器。然而,在另选的实施方案中,每个寄存器可存在不同数量的向量寄存器和/或不同数量的位。此外,实施寄存器重命名的实施方案可包括可以分配给架构向量寄存器的任何数量的物理寄存器。架构寄存器可以是可指定为向量指令中的操作数的寄存器。
更具体地,除了各种向量运算,诸如算术运算、逻辑、运算、移位之外,向量执行单元118可以被配置为执行本文所述的压缩辅助指令(或从压缩辅助指令解码的操作)。
图11是向量执行单元118的至少一部分的一个实施方案的框图,包括被配置为执行各种压缩辅助指令的电路。图11中所示的电路可包括与其他类型的向量运算共享的电路和/或专用于压缩辅助指令的电路,或它们的任何组合。向量执行单元118耦合到待执行的操作的输入,以及源操作数V1和V2。结果操作可以被指定为操作的一部分并且可以与结果一起转发到寄存器文件112。
控制电路130可以接收操作并且可以相应地控制向量执行单元118中的其他电路系统。因此,控制电路130可以耦合到图11中所示的其他电路,但在图11中未明确示出连接以避免使附图复杂化。可以提供加法器电路132,该加法器电路可以耦合到第二源操作数V2。加法器电路132可以被配置为将向量V2的各种元素相加。例如,当源操作数V2为大小向量时,可以在执行操作期间使用大小的总和。当结果操作数为栈寄存器时,所有向量元素的总和可用于位计数字段(n)的更新。另外,也可以使用向量元素的部分总和。
例如,可以通过基于部分总和与向量元素的大小来右移栈的MSB来实施顶部指令。在四个向量元素的情况下,如果向量元素的大小为32位,则将32MSB右移32-b3可以将x3与结果向量中的VE3元素对准(例如,右移向量元素大小(Vs)-b3)。类似地,将64MSB右移64-(b3+b2)可以将x2与结果向量中的VE2元素对准(例如,2Vs-(b3+b2));将96MSB右移96-(b3+b2+b1)可以将x2与结果向量中的VE1元素对准(例如,3Vs-(b3+b2+b1));以及将128MSB右移128-(b3+b2+b1+b0)可以将x0与结果向量中的VE0元素对准(例如,4Vs-(b3+b2+b1+b0))。可以类似地实施其他元素大小和元素数量。因此,移位电路134A至134N可以耦合到V1操作数和来自加法器电路132的相应总和,以执行顶部指令。对应的掩码电路136A至136N可以耦合到移位电路134A至134N的输出以掩蔽不是向量元素的一部分的位(例如,由于x3和x2在源栈寄存器中相邻,因此x3的某些位可以在移位后位于VE2元素的MSB中并且可被掩蔽)。虽然在图11中示出了单独的移位电路134A至134N和掩码电路136A至136N,但其他实施方案可以用来自控制电路130的控制输入来实施共享移位电路,以基于给定向量的大小来控制每个向量元素位置的移位。即,共享移位电路可以被定义为基于给定操作数的向量元素的大小来执行2个64位移位、4个32位移位、8个16位移位或16个8位移位。控制输入可以基于针对给定操作选择的大小来选择待执行的正确移位。移位电路134A至134N和掩码电路136A至136N因此可以是从源栈寄存器中的多个位提取位字段到结果向量寄存器的向量元素的一种具体实施。
可以为弹出指令/操作提供移位电路140。移位电路140可以将栈寄存器操作数左移大小向量寄存器中的大小之和(由加法器电路132提供)。因此,移位电路140可以耦合到加法器132和V1源操作数。另选地,移位器电路134A至134N可以被配置为还对弹出操作执行移位并且可以不需要移位电路136。可以提供计算n电路138来计算弹出指令/操作以及创建和连接指令/操作的更新的n。计算n电路138可以耦合到加法器电路132并且可以接收向量元素(例如,b3+b2+b1+b0)的大小的总和以计算弹出的n并且创建指令/操作。
在一个实施方案中,还可以使用移位电路134A至134N来执行创建指令/操作,以将源向量元素左移到结果的MSB。例如,x3元素可以左移向量元素大小(Vs)减去x3元素(b3)的大小(例如,Vs-b3)。x2元素可以左移向量元素大小减去x3和x2元素的大小(例如,2Vs-(b3+b2))的两倍。类似地,x1元素可以左移3Vs-(b3+b2+b1),并且x0元素可以左移4Vs-(b3+b2+b1+b0)。所得的移位值可以被掩蔽并且一起进行逻辑或运算以产生用于结果栈寄存器的输出多个位。因此,由加法器电路132生成的总和可以由移位电路134A至134N使用。加法器电路132可以被配置为生成包括向量元素大小的全移位量,或者移位电路134A至134N可以显式或隐式地考虑向量元素大小。
可以使用移位电路136(将p2位右移n1)和计算n电路138来执行连接指令/操作以将n1和n2相加以产生输出n。例如,移位后的p2可以与p1位进行逻辑或运算,以产生结果栈寄存器的输出位。
图11所示的输出选择电路142可以耦合到掩码电路136A至136N、计算n电路138和移位电路140,并且可以被配置为基于正在执行的操作在输出中进行选择以向寄存器文件112提供输出。例如,可以选择连接在一起的掩码电路136A至136N的输出用于顶部指令,并且可以选择移位电路140和计算n电路138的输出用于弹出、创建和连接指令。
需注意,图11的电路仅仅是向量执行单元118的一部分的具体实施的一个示例。可以使用任何其他期望的电路。例如,移位电路可以为旋转电路。可以使用所示电路系统的任何等同物,包括布尔等同物。
图12至图15是示出处理器102/执行核心120/向量执行单元118的一个实施方案的操作以执行本文所述的各种压缩辅助指令的流程图。然而,为了便于理解,框图以特定顺序示出,也可使用其他顺序。框可以在处理器102/执行核心120/向量执行单元118中的组合逻辑电路中并行执行。框、框的组合和/或流程图作为一个整体可在多个时钟周期内为流水线式的。
图12是一个实施方案的示出执行顶部指令的操作的流程图。处理器102/执行核心120/向量执行单元118可以基于源大小向量从源栈寄存器的MSB中提取位字段(框150)。例如,MSB的b3可以被提取为x3,下一个连续的(相邻的)b2 MSB可以被提取为x2等。处理器102/执行核心120/向量执行单元118可以将位字段与结果向量寄存器的向量元素对准(框152)。如上所述,可以通过移位来执行提取和对准。其他实施方案可以其他方式提取位字段。处理器102/执行核心120/向量执行单元118可以将所得向量写入结果向量寄存器(由结果操作数标识的向量寄存器)(框154)。
图13是一个实施方案的示出执行弹出指令的操作的流程图。处理器102/执行核心120/向量执行单元118可以基于源大小向量来确定栈的其余量(框156)。例如,处理器102/执行核心120/向量执行单元118可以添加源大小向量的向量元素,并且确定其余的栈是在已经移除等于源大小向量的向量元素之和的多个MSB之后的栈。处理器102/执行核心120/向量执行单元118可移位源栈操作数的位栈部分以将其余的栈置于结果栈寄存器的MSB中(框158)。例如,处理器102/执行核心120/向量执行单元118可以将源栈左移源大小向量的向量元素之和。处理器102/执行核心120/向量执行单元118可以将n’计算为从源栈寄存器减去大小向量的向量元素之和的n(框160),并且可以将移位的栈和n’写入结果栈寄存器(框162)。
图14是一个实施方案的示出执行创建指令的操作的流程图。处理器102/执行核心120/向量执行单元118可以基于源大小向量元素从源向量元素中提取位字段(框170)。处理器102/执行核心120/向量执行单元118可以将位字段与结果寄存器的MSB对准(框172)。如前所述,可以通过移位来执行提取和对准。其他实施方案可以其他方式执行提取和对准。一旦位字段对准,这些位字段就可以在结果寄存器中相邻(例如,x3的LSB可以与x2的MSB相邻,x2的LSB可以与x1的MSB相邻,等等)。处理器102/执行核心120/向量执行单元118可以将n计算为大小向量元素之和(框174)并且可以将结果栈(MSB)和n(LSB)写入结果栈寄存器(框176)。
图15是一个实施方案的示出执行连接指令的操作的流程图。处理器102/执行核心120/向量执行单元118可以将栈源操作数2的栈部分左移n1(统计源操作数1的栈部分中的位数)(框178)。处理器102/执行核心120/向量执行单元118可以将源栈1的栈部分与移位的源栈2字段合并(框180)。处理器102/执行核心120/向量执行单元118可以分别从源栈寄存器1和源栈寄存器2计算等于n1和n2之和的n(框182)。处理器102/执行核心120/向量执行单元118可以将合并的栈和n写入结果栈寄存器(框184)。
一旦充分了解了上面的公开,许多变型和修改对于本领域的技术人员而言将变得显而易见。本公开旨在使以下权利要求书被阐释为包含所有此类变型和修改。

Claims (15)

1.一种处理器,包括:
寄存器文件,所述寄存器文件包括多个向量寄存器;以及
执行核心,所述执行核心耦合到所述寄存器文件,其中所述执行核心被配置为执行指定第一向量操作数、第二操作数和结果向量操作数的第一指令,其中所述第一向量操作数在所述多个向量寄存器的第一向量寄存器中,所述第二操作数在第二寄存器中,并且所述结果向量操作数将被写到所述多个向量寄存器的第三向量寄存器,其中所述执行核心被配置为响应于所述第一向量操作数中的多个向量元素从所述第二操作数提取多个位字段,并且被配置为响应于执行所述第一指令,将提取的所述多个位字段作为对应的向量元素写入所述结果向量操作数中。
2.根据权利要求1所述的处理器,其中所述第二寄存器为所述多个向量寄存器中的一个向量寄存器,并且其中所述执行核心被配置为响应于执行所述第一指令而将所述第二寄存器中的值的部分解释为多个连续位而不是所述多个向量元素。
3.根据权利要求2所述的处理器,其中所述值的第二部分是指示所述多个连续位的数量的位计数。
4.根据权利要求3所述的处理器,其中所述执行核心被配置为执行指定所述第一向量操作数、所述第二操作数和第二结果操作数的第二指令,其中所述第二结果操作数将被写到第四寄存器,并且其中所述执行核心被配置为从所述第二操作数的部分中移除等于由所述第一向量操作数的所述向量元素指定的位数之和的位数,并且响应于执行所述第二指令,将所述第二操作数的所述部分的其余部分作为所述第二结果操作数写入所述第四寄存器。
5.根据权利要求4所述的处理器,其中所移除的位是所述第二操作数的最高有效位,并且其中所述执行核心被配置为响应于执行所述第二指令而将所述第二操作数的所述部分的其余部分写到所述第四寄存器的最高有效位。
6.根据权利要求5所述的处理器,其中所述执行核心被配置为从所述位计数中减去由所述第一向量操作数的所述向量元素指定的所述位数的所述和以生成第二位计数,并且被配置为响应于执行所述第二指令将所述第二位计数写到所述第四寄存器的第三部分。
7.根据权利要求1至6中任一项所述的处理器,其中所述多个位字段的第一位字段包括所述第二操作数的多个最高有效位,其中所述多个最高有效位的数量由所述第一向量操作数中的所述多个向量元素的第一向量元素指定。
8.根据权利要求7所述的处理器,其中所述多个位字段的第二位字段与所述第二操作数中的所述第一位字段相邻,并且其中所述第二位字段中的位数由所述第一向量操作数中的所述多个向量元素中的第二向量元素指定,其中所述第二向量元素与所述第一向量操作数中的所述第一向量元素相邻。
9.根据权利要求1至8中任一项所述的处理器,其中所述执行核心被配置为执行第三指令,所述第三指令指定所述多个向量寄存器的第二向量寄存器中的第二向量操作数、所述多个向量寄存器的第三向量寄存器中的第三向量操作数,以及第三结果操作数,并且其中所述执行核心被配置为响应于所述第三向量操作数的相应向量元素中的值从所述第二向量操作数的相应向量元素中提取多个位字段,并且被配置为响应于执行所述第三指令将所述多个位字段写到所述第三结果操作数。
10.根据权利要求9所述的处理器,其中所述执行核心被配置为响应于执行所述第三指令将所述多个位字段写到所述第三结果操作数的第一部分中的相邻位。
11.根据权利要求10所述的处理器,其中所述执行核心被配置为对所述第三向量操作数的所述相应向量元素的所述值进行求和,并且响应于执行所述第三指令将所述和写到所述第三结果操作数的第二部分。
12.根据权利要求1至11中任一项所述的处理器,其中所述执行核心被配置为执行第四指令,所述第四指令具有第五寄存器中的第五操作数、第六寄存器中的第六操作数和第四结果操作数,并且其中所述第五操作数包括具有第一多个位的第一部分和具有指示所述第一多个位的数量的第二位计数的第二部分,并且其中所述第六操作数包括具有第二多个位的第一部分和具有指示所述第二多个位的数量的第三位计数的第二部分,并且其中所述执行核心被配置为响应于执行所述第四指令在所述第四结果操作数的第一部分中连接所述第一多个位和所述第二多个位。
13.根据权利要求12所述的处理器,其中所述执行核心被配置为对所述第二位计数和所述第三位计数进行求和,并且响应于执行所述第四指令而将所述和写到所述第四结果操作数的第二部分。
14.根据权利要求12所述的处理器,其中所述第五寄存器、所述第六寄存器和存储所述第四结果操作数的第四结果寄存器被包括在所述多个向量寄存器中,并且所述执行核心被配置为响应于执行所述第四指令将所述第五寄存器、所述第六寄存器和所述第四结果寄存器中的值解释为所述第一部分和所述第二部分而不是向量元素。
15.一种方法,包括:
在具有包括多个向量寄存器的寄存器文件的处理器中执行第一指令,其中所述第一指令指定第一向量操作数、第二操作数和结果向量操作数,并且其中所述第一向量操作数在所述多个向量寄存器的第一向量寄存器中,所述第二操作数在第二寄存器中,并且所述结果向量操作数将被写到所述多个向量寄存器的第三向量寄存器;在所述执行期间,响应于所述第一向量操作数中的多个向量元素,从所述第二操作数提取多个位字段;以及
在所述执行期间,将提取的所述多个位字段作为对应的向量元素写入所述结果向量操作数。
CN202080062917.8A 2019-09-10 2020-09-08 压缩辅助指令 Pending CN114365083A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/566,344 2019-09-10
US16/566,344 US11086625B2 (en) 2019-09-10 2019-09-10 Compression assist instructions
PCT/US2020/049707 WO2021050423A1 (en) 2019-09-10 2020-09-08 Compression assist instructions

Publications (1)

Publication Number Publication Date
CN114365083A true CN114365083A (zh) 2022-04-15

Family

ID=72644897

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202080062917.8A Pending CN114365083A (zh) 2019-09-10 2020-09-08 压缩辅助指令

Country Status (7)

Country Link
US (3) US11086625B2 (zh)
JP (1) JP7385009B2 (zh)
KR (1) KR20220045012A (zh)
CN (1) CN114365083A (zh)
DE (1) DE112020004266T5 (zh)
GB (1) GB2601668B (zh)
WO (1) WO2021050423A1 (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11086625B2 (en) 2019-09-10 2021-08-10 Apple Inc. Compression assist instructions
US20220197643A1 (en) * 2020-12-23 2022-06-23 Intel Corporation Speculative decompression within processor core caches

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS57209570A (en) * 1981-06-19 1982-12-22 Fujitsu Ltd Vector processing device
DE69429061T2 (de) * 1993-10-29 2002-07-18 Advanced Micro Devices Inc Superskalarmikroprozessoren
EP1046100A1 (en) * 1998-08-06 2000-10-25 Trimedia Technologies, Inc. Data processor and method of processing data
US6781529B1 (en) 2002-10-24 2004-08-24 Apple Computer, Inc. Methods and apparatuses for variable length encoding
GB2409061B (en) 2003-12-09 2006-09-13 Advanced Risc Mach Ltd Table lookup operation within a data processing system
JP2012033032A (ja) * 2010-07-30 2012-02-16 Sony Corp 情報処理装置および情報処理方法
US9280342B2 (en) * 2011-07-20 2016-03-08 Oracle International Corporation Vector operations for compressing selected vector elements
US8972697B2 (en) 2012-06-02 2015-03-03 Intel Corporation Gather using index array and finite state machine
US9904548B2 (en) 2014-12-22 2018-02-27 Intel Corporation Instruction and logic to perform a centrifuge operation
GB2540939B (en) * 2015-07-31 2019-01-23 Advanced Risc Mach Ltd An apparatus and method for performing a splice operation
US10338920B2 (en) 2015-12-18 2019-07-02 Intel Corporation Instructions and logic for get-multiple-vector-elements operations
US10908898B2 (en) * 2017-02-17 2021-02-02 Intel Corporation Vector instruction for accumulating and compressing values based on input mask
US20190065202A1 (en) * 2017-08-31 2019-02-28 MIPS Tech, LLC Pointer-size controlled instruction processing
US11086625B2 (en) * 2019-09-10 2021-08-10 Apple Inc. Compression assist instructions

Also Published As

Publication number Publication date
KR20220045012A (ko) 2022-04-12
US20210072994A1 (en) 2021-03-11
DE112020004266T5 (de) 2022-06-23
US11086625B2 (en) 2021-08-10
GB2601668B (en) 2023-04-26
GB202202417D0 (en) 2022-04-06
JP2022546615A (ja) 2022-11-04
JP7385009B2 (ja) 2023-11-21
US11537399B2 (en) 2022-12-27
US11822921B2 (en) 2023-11-21
US20210342154A1 (en) 2021-11-04
US20230121984A1 (en) 2023-04-20
GB2601668A (en) 2022-06-08
WO2021050423A1 (en) 2021-03-18

Similar Documents

Publication Publication Date Title
US10719318B2 (en) Processor
US20210026634A1 (en) Apparatus with reduced hardware register set using register-emulating memory location to emulate architectural register
TWI541718B (zh) 用於記憶體之除法運算
CN107408037B (zh) 配置成对可变长度向量进行操作的单片向量处理器
US11822921B2 (en) Compression assist instructions
US9639369B2 (en) Split register file for operands of different sizes
TWI423127B (zh) 指令處理方法以及其所適用之超純量管線微處理器
US6334176B1 (en) Method and apparatus for generating an alignment control vector
US5996057A (en) Data processing system and method of permutation with replication within a vector register file
TWI567751B (zh) 多暫存器記憶體存取指令、處理器、方法及系統
US9361242B2 (en) Return stack buffer having multiple address slots per stack entry
US7473293B2 (en) Processor for executing instructions containing either single operation or packed plurality of operations dependent upon instruction status indicator
TWI761367B (zh) 用於融合乘加運算的系統、裝置及方法
US20130151822A1 (en) Efficient Enqueuing of Values in SIMD Engines with Permute Unit
CN105993000B (zh) 用于浮点寄存器混叠的处理器和方法
US20180121199A1 (en) Fused Multiply-Add that Accepts Sources at a First Precision and Generates Results at a Second Precision
TWI502498B (zh) 微處理器、積體電路、計算機程式產品與提供微碼指令儲存空間的方法
US20120144174A1 (en) Multiflow method and apparatus for operation fusion
US11748098B2 (en) Adler assist instructions
KR20230137240A (ko) 연산 제거

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