CN108089882B - 编码和解码可变长度指令 - Google Patents

编码和解码可变长度指令 Download PDF

Info

Publication number
CN108089882B
CN108089882B CN201711143525.0A CN201711143525A CN108089882B CN 108089882 B CN108089882 B CN 108089882B CN 201711143525 A CN201711143525 A CN 201711143525A CN 108089882 B CN108089882 B CN 108089882B
Authority
CN
China
Prior art keywords
instruction
word
words
bits
instruction words
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
CN201711143525.0A
Other languages
English (en)
Other versions
CN108089882A (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.)
Imagination Technologies Ltd
Original Assignee
Imagination Technologies 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 Imagination Technologies Ltd filed Critical Imagination Technologies Ltd
Priority to CN202311057973.4A priority Critical patent/CN117112028A/zh
Publication of CN108089882A publication Critical patent/CN108089882A/zh
Application granted granted Critical
Publication of CN108089882B publication Critical patent/CN108089882B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • 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
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • 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
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • 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/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3856Reordering of instructions, e.g. using queues or age tags
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2117/00Details relating to the type or aim of the circuit design
    • G06F2117/08HW-SW co-design, e.g. HW-SW partitioning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/32Circuit design at the digital level
    • G06F30/323Translation or migration, e.g. logic to logic, hardware description language [HDL] translation or netlist translation
    • 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
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
    • G06F9/30152Determining start or end of instruction; determining instruction length
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30156Special purpose encoding of instructions, e.g. Gray 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30163Decoding the operand specifier, e.g. specifier format with implied specifier, e.g. top of stack
    • 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/3017Runtime instruction translation, e.g. macros
    • G06F9/30178Runtime instruction translation, e.g. macros of compressed or encrypted instructions
    • 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/3802Instruction prefetching
    • 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/3818Decoding for concurrent execution
    • G06F9/382Pipelined decoding, e.g. using predecoding
    • 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/70Type of the data to be coded, other than image and sound
    • H03M7/702Software

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Devices For Executing Special Programs (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

本公开涉及编码和解码可变长度指令。描述了编码和解码的方法,其使用可变数目的指令字来编码指令集中的指令,使得可以使用不同数目的指令字对指令集内的不同指令进行编码。为了对指令进行编码,基于使用经验或仿真数据确定的它们的差异,而将指令内的位重新排序并形成指令字。将指令字中的位与相应的预测值进行比较,并从编码指令中省略与预测值相匹配的部分或全部的指令字。

Description

编码和解码可变长度指令
背景
由处理器执行的指令的集合被称为指令集,并且这些指令通常被映射到指令字,作为向软件呈现硬件控制的一种方式。将指令映射到指令字和返回的处理可以分别称为编码和解码。代码密度可以用于比较不同的编码方案,其中代码密度与存储用于执行特定任务(例如,特定程序中的所有编码指令)的所有编码指令(即,指令字)所需的存储器成反比。为了增加代码密度,可以使用短指令字,并且这例如可以通过限制指令集的功能来实现。可选地,可以使用可变长度指令字,其中较短的指令字用于更常用的指令,并且较长的指令字用于较不常用的指令。
下面所述的实施方式仅作为例子被提供且不是解决编码和解码指令集中的指令的已知方法的任何或所有缺点的实现的限制。
概述
本概述被提供来以简化的形式介绍概念的选择,这些概念在下面在详细描述中被进一步描述。本概述并非旨在确定要求保护的主题的关键特征或必要特征,亦非旨在用于限定要求保护的主题的范围。
描述了编码和解码的方法,其使用可变数量的指令字来编码指令集中的指令,使得可以使用不同数量的指令字对指令集内的不同指令进行编码。为了对指令进行编码,使用经验或仿真数据确定的它们的差异(variance),将指令内的位重新排序并形成指令字。指令字中的位与相应的预测值进行比较,并从编码指令中省略与预测值相匹配的部分或全部的指令字。
第一方面提供了一种对指令集中的指令进行编码的方法,该方法包括:接收指令集中的指令;根据编码类型将接收到的指令中的位重新排序和分组成多个指令字,以生成指令字的有序序列;将有序序列中的指令字的一个或更多个中的位值与其对应的预测值进行比较,并且基于该比较通过省略有序序列中的指令字的一个或更多个来生成指令的压缩版本,其中预测值使用经验和/或仿真数据生成;以及输出该指令的压缩版本。
第二方面提供了一种用于对指令集中的指令进行编码的设备,该设备包括:处理器;以及存储器,其被布置为存储设备可执行指令,该设备可执行指令在被处理器执行时被配置为使处理器响应于接收到指令集中的指令而根据编码类型将所接收的指令中的位重新排序并分组为多个指令字以生成指令字的有序序列;将有序序列中的指令字的一个或更多个中的位值与其对应的预测值进行比较,其中预测值使用经验和/或仿真数据生成;基于有序序列中的指令字的一个或更多个中的位值与其对应的预测值之间的比较,通过省略有序序列中的指令字的一个或更多个来生成指令的压缩版本;以及输出指令的压缩版本。
第三方面提供了一种解码指令的方法,包括:在处理器的解码级中接收一个或更多个提取的指令字;根据提取的指令字中的一个或更多个提取的指令字确定编码类型;通过为指令字的有序序列中的指令字中的每一个选择取出的指令字或预测指令字来生成该指令字的有序序列,其中预测指令字使用经验和/或仿真数据生成;连接有序序列中的指令字以形成编码指令,并根据编码类型重新排序编码指令中的位以生成解码指令;以及输出解码指令。
第四方面提供了一种解码硬件,包括:输入端,其被布置为接收一个或更多个提取的指令字;硬件逻辑,其被配置为根据提取的指令字中的一个或更多个指令字来确定编码类型;字选择逻辑,其被配置为通过为指令字的有序序列中的指令字中的每个选择取出的指令字或预测指令字来生成该指令字的有序序列,其中预测指令字使用经验和/或仿真数据生成,并且连接有序序列中的指令字以形成编码指令;重新排序硬件逻辑,其被配置为根据编码类型重新排序编码指令中的位以生成解码指令;以及输出端,其被布置成输出解码指令。
第五方面提供一种用于解码指令集中的指令的设备,该设备包括:处理器;以及存储器,其被布置为存储设备可执行指令,该设备可执行指令被配置为当由处理器执行时响应于接收到一个或更多个提取的指令字而使处理器执行以下操作:根据提取的指令中的一个或更多个确定编码类型;通过为指令字的有序序列中的指令字中的每个选择提取的指令字或预测指令字来生成该指令字的有序序列,其中预测指令字使用经验和/或仿真数据生成;连接有序序列中的指令字以形成编码指令,并根据编码类型重新排序编码指令中的位以生成解码指令;以及输出解码指令。
第六方面提供了一种方法,包括:在输入端处接收对于指令集的映射数据和描述指令集中的范式(in canonical form)指令的指令数据;使用语法库解析映射数据和指令数据;在代码和数据生成引擎中,基于解析的映射数据和指令数据生成编码软件和解码器的硬件描述;以及输出编码软件和解码器的硬件描述。
第七方面提供了一种设备,包括:处理器;以及存储器,其被布置为存储设备可执行指令,该设备可执行指令被配置为在由处理器执行时使处理器响应于接收到对于指令集的映射数据和描述指令集中的范式指令的指令数据而执行以下操作:使用语法库解析映射数据和指令数据;基于解析的映射数据和指令数据生成编码软件和解码器的硬件描述;以及输出编码软件和解码器的硬件描述。
可以在集成电路上的硬件中体现本文描述的解码和/或编码装置。可提供在集成电路制造系统处制造解码和/或编码装置的方法。可提供集成电路定义数据集,其在集成电路制造系统中进行处理时将该系统配置为制造解码和/或编码装置。可提供非暂时性计算机可读存储介质,其具有存储在其上的集成电路的计算机可读描述,该计算机可读描述当被处理时使布局处理系统生成在集成电路制造系统中使用的电路布局描述,以制造编码和/或解码装置。
可提供一种集成电路制造系统,包括:非暂时性计算机可读存储介质,其上存储有描述解码和/或编码装置的计算机可读集成电路描述;布局处理系统,其被配置为处理集成电路描述,以便生成体现解码和/或编码装置的集成电路的电路布局描述;以及集成电路生成系统,其被配置为根据电路布局描述来制造解码和/或编码装置。
可以提供用于执行如本文所述的方法的计算机程序代码。可提供非暂时性计算机可读存储介质,其具有存储在其上的计算机可读指令,当在计算机系统处被执行时,该计算机可读指令使计算机系统实施如本文描述的方法。
以上特征可在适当时被组合,如对技术人员将明显的,并可与本文所述的示例的方面中的任一个组合。
附图说明
现在将参照附图对示例进行详细描述,在附图中:
图1是示出示例编码方法的示意图;
图2是示出图1的编码方法的流程图;
图3是图1和图2中所示的编码方法的图形说明;
图4是图1和图2中所示的编码方法的另一图形说明;
图5是示出示例解码方法的示意图;
图6是示出图5的解码方法的流程图;
图7是图5和图6中所示的解码方法的图形说明;
图8是可被实现为任何形式的计算和/或电子设备的示例性基于计算的设备的示意图,且其中图1和图2的编码方法的实施方式可被实现;
图9是实现图5和图6的解码方法的示例解码硬件的示意图;
图10是被布置为自动生成硬件和软件以实现本文所述的编码和解码方法的软件工具的示意图;
图11示出了其中可以实现本文描述的编码和/或解码方法的计算机系统;以及
图12示出用于生成体现本文所述的解码和/或编码装置的集成电路的集成电路制造系统。
附图示出了不同的示例。技术人员将认识到,附图中示出的元素边界(例如,框、框的组或其他形状)表示边界的一个示例。在一些示例中,可能的是,一个元素可被设计为多个元素,或者多个元素可被设计为一个元素。在整个附图中,在适当情况下,共同的参考数字用于指示类似的特征。
详细描述
以下的描述通过示例的方式来呈现,以使本领域的技术人员能够制造和使用本发明。本发明不限于本文描述的实施方式,并且对所公开的实施方式的各种修改对于本领域技术人员将是明显的。
实施方式将仅通过示例的方式来描述。
如上所述,指令通常被映射到指令字。通过使用较短的指令字,减少了代码密度(以及因此的用于加载指令的存储器带宽和存储指令的存储器大小);然而,这可能限制指令集的可能功能,且因此编码软件和解码硬件可能需要能够在两种模式之间切换:使用标准长度指令字的第一模式和使用减小长度指令字的第二模式,并且需要特殊指令来触发模式之间的切换。可选地,可以使用可变长度指令字,其中更频繁地使用的指令被映射到较短指令字,而较不频繁地使用的指令被映射到较长指令字。然而,在这样的示例中,解码硬件必须被设计为与具有所使用的指令字的可变长度的指令一起工作,并且这增加了硬件的复杂度(例如,以与上述模式之间的切换类似的方式)。附加地,将新指令添加到使用可变长度指令字的指令集通常是复杂的,并且该过程容易出错。新指令可以通过将新字段添加到现有指令字格式的末尾来实现;然而,这意味着新的指令字将很长(从而降低包含新指令的程序的总代码密度,从而降低程序的效率),并且需要对编码和解码软件和硬件的更改(这是复杂的、昂贵的和易于出错的)。添加新指令还可能导致分支指令编码,其中硬件中的特定功能在所有编码中都不可用。
本文描述了使用可变长度指令编码的编码和解码方法。与上述方法不同,本文描述的方法不使用其中指令集中的每个指令被映射到可变长度的不同的单个指令字(使得该集内的不同指令被映射到具有不同长度的不同指令字)的编码。相反,本文描述的方法将指令集中的指令映射到可变数目的指令字(例如,在1和N个指令字之间,其中N是整数),并且其中指令字的长度可以是固定的或可以是固定长度的倍数(例如,使得指令字包括aL位,其中L是固定的,a是整数并且可以在指令字之间变化),其中指令集内的不同的指令使用不同数目的指令字进行编码。所使用的指令字的长度(例如,其中长度是固定的或长度是值L的所有字的长度,其可以被称为“单位长度”)可以根据特定的存储器系统(或子系统)的特性来进行设置。本文描述的方法还可以适应多种不同的映射(例如,对于不同类型的ALU、不同着色器、不同处理器或处理器的变型等)。
如下面更详细地描述的,为了对指令集中的指令进行编码,根据编码(或映射)类型,(范式的)指令内的位被重新布置(或混洗)并形成多个(a plurality of)指令字(例如,N个指令字,其中值N对于所有的指令集可以是相同的或对于不同的指令集可以是不同的或对于在相同指令集内的不同的指令可以是不同的),其中这些指令字可以具有固定长度或可以具有作为固定单位长度的倍数的长度。该多个指令字包括指令字的有序序列,并且在各种示例中,每个指令(或特定指令类型的每个指令)可以被划分为相同数目的指令字。指令字的该有序序列然后通过去除仅包括其值与对于其的预测值(可替代地称为期望值或默认值)匹配的位的一个或更多个指令字来减小长度,并且包括M个指令字(其中M是整数,1≤M≤N)的缩短的序列被输出。可以基于经验数据和/或仿真数据(如下文更详细地描述)生成映射和预测值。
在各种示例中,指令字的序列的缩短可以通过截断序列以去除在序列结尾处的一个或更多个(例如,任何)指令字(其仅包括具有与预测值相匹配的值的位)来执行。在执行截断时,将指令中的位与对于该位的预测值进行比较。因此,指令的编码形式可以包括并非仅包括与预测值相同的位的前M个指令字。只要在相同指令字中存在至少一个随后位或在序列中存在与该预测值不同的后续指令字,则前M个字中任何一个可以包括与预测值相同的一些位。
在其他示例中,可以使用掩码来执行指令字序列的缩短,以在整个指令字的有序序列中丢弃一个或更多个指令字(即,不一定是如在使用截断的情况下从序列的末尾)。在各种示例中,可以使用N位掩码(即,对于指令字序列中的指令字的每一个指令字一位),其中掩码中的每个位描述序列中的相应指令字是应被编码还是具有预测值(且因此从序列中去除),例如,如果N=4且掩码为0101(其中LSB为右),则指令字序列的缩短将保留第一指令字和第三指令字(如由掩码中的“1”所指示的)并且去除第二指令字和第四指令字(如由掩码中的“0”所指示的)。掩码可以作为编码过程的一部分而被生成,例如通过将指令中的位与对于该位的预测值进行比较。
编码方法可以用于编码编译的指令,例如,在编译过程结束时(其可以称为延迟编码)或更晚。如果在编译之后执行编码,则当执行编码时,通过使用不同的编码类型,可以将相同的程序二进制用于不同的处理器硬件(例如,不同类型的处理器或相同处理器的不同变体)。例如,这可以通过在运行时(即,当将应用(或其他程序)从主机存储器加载到处理器(如,GPU)存储器中时(即,在GPU或其他处理器首次使用程序之前))转换为每个变体的本地编码(native encoding)而能够在多个处理器变体上执行相同的已编译的二进制文件。这减少了对于多平台应用的传送二进制的总体大小。
如下面更详细地描述的,为了解码指令,提取多个指令字(例如,F个指令字),然后基于可以根据提取的指令字确定的编码(或映射)类型,通过对有序序列中的每一个字来选择提取的指令字或预测指令字来生成至少N个指令字的有序序列(其中N可以是固定的或对于不同的指令集可以是不同的或对于在相同指令集内的不同的指令可以是不同的)。当生成该序列时,已经被提取的后续指令字中的至少一些可以被丢弃并且被预测指令字代替,因为如上所述,指令被编码为M个指令字(其中1≤M≤N),并且在M<F的示例中被提取的F个指令字中的一些将涉及接下来的指令字。在其中多个指令字从较高级别的缓存(例如,主存储器或L3缓存)提取的示例中,可以提取多于N个指令字和/或多于M个指令字(使得F>N和/或F>M),其中F被选择使得提取操作是在缓存层级内的有效操作。在其中多个指令字反而从较低级别的缓存(即,更接近处理器的缓存的级别,例如L1或L2缓存)的示例中,仅可以提取所需要的确切数目的字(使得F=M),其中该字的数目(F)是基于存储的指令字内的位(例如结束(END)位)确定的(如下面更详细描述的)。然后根据编码(或映射)类型(即,以在执行编码时执行的过程的逆向)来重新布置(或去混洗(de-shuffled))指令字的序列内的位,以生成解码的指令。
解码方法可以在处理器的解码级内实现,并且可以在硬件和/或软件(例如,微代码)中实现。解码方法也可以在反汇编程序内实现(其可以在软件中实现)。
本文还描述了一种自动生成用于实现本文描述的解码方法的解码器的硬件描述(例如,用VHDL、Verilog或其他硬件描述语言)、用于在实现本文描述的编码方法时使用的软件和/或用于在实现本文所述的解码方法时使用的软件的工具。该软件工具还可以自动生成详细描述用于重新布置关于特定编码(或映射)类型的位的映射的人类可读文档。通过使用该工具自动生成这些(特别是一起自动生成编码软件和解码硬件/软件)的工具,降低了在硬件、软件或人类可读文档中引入错误的可能性,从而改进编码和解码操作的可靠性。还描述了生成和优化所使用的映射的方法(其提高了编码方案的效率),并且该功能也可以在该工具内实现。
可以参照图1-4来描述编码的方法。图1是示出可以以(例如,在诸如处理器的硬件上运行的)软件实现的编码方法的示意图,而图2是示出编码方法的流程图。在其中编译过程结束时执行编码的示例中,编码方法可以在编译器或汇编器中实现。在其中编码在运行时执行的示例中(如上所述),编码方法可以在运行操作系统的处理器(例如,其将应用或其他程序从主机存储器加载到处理器存储器中)或另一处理器(例如,GPU内的处理器,其将应用或其他程序从主机存储器加载到GPU存储器中)上实现。如图1和图2中所示,接收编译指令102和编码(或映射)类型标识符104(块202)。编码类型标识符104确定编译指令102中的位的位置与输出(或传输)指令106之间的映射,并且该映射可以存储在查找表中或以任何其它方式存储。编码类型标识符104还确定对于所有的位的预测值,并且这些预测值可以存储在查找表中或以任何其他方式存储。在各种示例中,编码类型标识符104用于执行查找函数以访问映射(在块204中使用)和预测值(在块206中被访问并在块208中使用)。在其他示例中,映射和预测值可以直接(在块202中)代替编码类型标识符104或附加于编码类型标识符104而被提供。
在许多不同的情况下,可以使用不同的映射(和可选地不同的预测值)和因此不同的编码类型标识符104。例如,不同的映射可以用于由不同类型的ALU和/或由被不同使用的相同类型的ALU(例如,在GPU内的不同着色器中的相同类型的ALU)执行的指令和/或使用不同硬件或相同硬件的不同版本来执行的指令。如下面更详细地描述的,可以基于使用分析来确定映射。
在接收到编译指令102(在块202中)后,接收到的指令102中的位被混洗(shuffled)成其传输顺序并被分组成指令字序列(块204)。所执行的位的重新排序基于对于特定编码类型(如由编码类型标识符104识别)的映射,并且如上所述,该映射可以存储在查找表中并使用接收的编码类型标识符104进行访问。可以参照图3进一步描述位的这种混洗和指令字的形成(在块204中)。
图3示出了包括四个源字段(SRC1-4,每个包括8位,标记为0-7)和三个目的字段(DEST1-3,每个包括8个位,标记为0-7)的所接收到的示例指令的净负荷(即,相关的数据)302和在该位被混洗并被分组为两个指令字304A、304B后的相同的指令净负荷(在块202中)。在混洗操作(在块202中),接收到的指令内的位被重新排序,且如图3所示,这不一定包括重新排序完整字段,但是一些字段可以被重新定位,其中所有位保持连续(例如,在所示示例中的字段SRC1、SRC2、SRC4、DEST2和DEST3)。当执行位的混洗(在块202中)时,字段中的位可以以任何方式被分开并重新排序,并且在各个示例中,字段中的位可以被分开使得它们不再连续。
如上所述,用于执行混洗操作的映射(在块202中)为指令中的每个位指定两个位置:第一位置是接收到的指令102、302中的位的位置,且第二位置是放置该位的指令字(例如,字304A或304B)以及可选地在该字内的位置。因此,映射固有地指定对于特定指令的N的值(即,作为映射内指定的指令的数目的结果)和任何特定指令字的长度(即,作为多少个字段/位被分配给特定指令字的结果)。所使用的映射基于编码类型标识符104(在各种示例中其可以被实现为指令的操作码)来选择。
除了使用编码类型标识符104来确定所使用的映射以及由此如何将这些位进行混洗和分组到指令字中(在块204中)之外,编码类型标识符104也可以用于访问预测字,即对于指令中的一些或全部的位的预测值(块206)。然而,在各种示例中,对于指令中的所有位的预测值对于指令集(或跨所有指令集)中的所有指令和所有编码类型标识符可以是相同的(例如,预测值可以是全部一或全部零或一和零的任何预定义的模式),在这种情况下,不需要访问预测值(并且块206可以在软件的合成期间被省略或优化)。在其中不同(例如,非零)位的数目被限制的其他示例中,在软件的合成期间可以部分地优化块206。
用于混洗指令102中的位的顺序并将其形成指令字的映射(在块204中)可以以多种方式生成。可以通过将典型内容馈送到能够生成目标指令集编译器和/或汇编器并分析输出来生成经验数据。可选地,可以对尝试预测指令集的哪些特征将会是最常用的典型内容执行仿真。在这两种情况下,结果将是按照其使用频率排序的所有指令位的表,其中首先列出了最频繁更改的位。这然后提供对于指令中的位的初始排序。例如,可能存在对于相同ALU但对于不同使用的不同的映射,例如相同类型的ALU根据ALU是像素着色器、顶点着色器还是计算着色器的一部分,和/或基于指令类型可具有不同的映射。具有较高差异的那些位(例如,具有在指令的所有实例上的平均值接近于0.5的那些位)放置在(或朝向)指令字的有序序列的开始处(例如,在第一个字304A中),而具有较低差异的那些位(例如,具有在指令的所有实例上的平均值接近一或者零的那些位)或根本不变化的那些位(例如,具有在指令的所有实例上的平均值等于一或者零的那些位)被放置为朝向指令字的有序序列的末尾(例如,在第二个字304B中)。
为了实现压缩(即,减少所传输的指令字的数目),映射可以控制任何特定位被混洗并分组到哪个字,其中位然后被放置在字内的任何位置。然而,在一些示例中,映射还可以控制位在指令字内的放置,例如通过减少指令之间的差别来将逻辑保存在解码硬件中。
参考图3所示的示例,使用分析可以识别SRC3字段的位0-3比SRC3字段的随后的四个位(位4-7)更频繁地切换(toggle),并且因此SRC3字段的位0-3被放置为朝向指令字的有序序列的开始处(例如,在第一个指令字304A中),而SRC3字段的位4-7被较靠后地放置在指令字的有序序列中(例如,在第二个指令字304B中)。对于DEST1也可以这样做(例如,使得字段的前三位被放置在第一个指令字304A中,而字段的最后三位被放置到第二个指令字304B中)。还可以发现,大部分时间内SRC4和DEST3的所有位都保持为零,因此这些字段以其整体放置为朝向指令字的有序序列的末尾(例如,在第二个指令字304B中)。
如上所述,基于(在块202中接收的)编码类型标识符104来识别在混洗操作中(在块204中)使用的映射。用于指定编码的编码类型标识符104内的位的数目可以具有固定长度或可变长度。例如,如果编码类型标识符104包括三个位,则编码可以由这些位中的一个位、两个位或三个位来指定,如下表所示:
作为混洗操作的一部分,指令中的位形成指令字304A、304B的有序序列(在块204中,例如,形成N个字,其中N是可以是固定的或可变的整数)。然后将指令字304A、304B与其预测值进行比较,并且从序列中去除仅包含具有与预测值相匹配的值的位的一个或更多个字以生成包括M个字的缩短的有序序列,其中M是整数且1≤M≤N(块208)。然后,控制位310、312可以被添加到缩短的序列中的一个或更多个字中(例如,在头部和/或尾部中)。然后输出压缩形式的指令106,其包括具有任何添加的控制位(例如,DWORD 1 306和可选地DWORD2 308)的M个字的缩短的有序序列(块210)。
在图3中所示的示例中,控制位可以以头部和/或尾部的形式被添加。在图3中所示的示例中,每个指令字306、308包括包含结束位的尾部310,并且第一指令字306还包括包含编码类型标识符104(称为类型ID)的头部312。在N的值可变的示例中,尾部310或头部312可以包括指定N的值的一个或更多个位(例如,作为编码类型标识符104的一部分)。
如上所述,缩短指令字的序列(在块208中)基于与预测字的比较,并且可以通过截断(例如,通过去除序列末尾处仅包含具有与预测值相匹配的值的位的那些字)或使用掩码(例如,通过从序列中的任何位置去除仅包含具有与预测值相匹配的值的位的字)来执行。
输出指令字可以具有固定(即预定义的)大小,或者它们的大小可以是可变的(例如,长度=aL,其中a是可变整数,L是单位长度),并且输出指令字的一个或更多个可以另外包括控制位(例如,如上所述,以头部和/或尾部的形式)。
可以以多种方式生成形成压缩方案的核心的、在比较(在块208中)中使用的位的预测值。可以通过将典型内容馈送到能够生成目标指令集的编译器和/或汇编器并分析输出来生成经验数据。可选地,可以对尝试预测指令集的哪些特征将会是最常用的典型内容执行仿真。在这两种情况下,结果将是按照其使用频率排序的所有指令位的表,其中首先列出了最频繁更改的位。这然后提供对于包含预测值的字的初始排序;然而,最终排序可能是该初始排序的修改版本。可以以任何级别的粒度来确定预测值,如映射,且指令集内的多个指令可以共享相同的映射或预测值(例如,指令集内可以存在使用相同映射但不同预测位的两个指令位)。然后可以将预测值设置为对于指令中的位的每一个最可能的值(例如,如果对于包括在使用分析中的超过50%的情况下指令中的位具有一的值,则预测值可以被设置为一,并且如果对于包括在使用分析中的50%或更多的情况下指令中的位具有零的值,则预测值可以被设置为零)。在各种示例中,代替每次仅考虑一个指令,也可以考虑预测位值的相关性,例如使得所使用的预测值取决于相同指令中的其他位的值和/或其他指令(如上一条指令)中的相同位。在其他示例中,所有位的预测值可以被固定为相同的值(例如,一或零),在这种情况下,不需要访问预测值(并且块206可被省略或优化)。在其他示例中,如上所述,其中不同(例如非零)位的数目被限制的情况下,在软件的合成期间可以部分地优化块206。
如图1所示,在各种示例中,在每位的基础108上执行比较(在块208A中),然后将结果组合110,使得如果所有随后指令字仅包括等于其预测值的位,则在输出指令字的尾部310中设置结束位(块208B)。这些随后指令字(其仅包括等于其预测值的位)然后从指令字的序列中被去除(块208C),使得仅输出与预测字不相同的前M个指令字(在块210中)。
在其他示例中,在使用掩码的情况下,识别掩码的数据或掩码位本身可以被包括在一个或更多个输出指令字的头部或尾部内。例如,第一输出字可以(例如,在头部/尾部中)包含对于第二字的掩码位,第二输出字可以包含对于第三字的掩码位,等等。第一输出字中的掩码位的值可以具有两个可能的值,一个值指示第二字是存在的,而另一个值指示第二字不存在但第三字存在。类似地,随后输出字中的掩码位的值可以具有两个可能的值,一个值指示序列中的下一个字是存在的,而另一个值指示下一个字不存在但在下一个字之后的字是存在的。
参照图4中所示的示例,可以进一步描述比较过程。在该示例中,指令402(其可以是编译指令)包括16位。指令402中的位根据对于(如基于在块202中接收的编码类型标识符104所识别的)适当的编码类型的映射来进行混洗和分组(在块204中),以形成多个指令字406。
然后将一些或全部的指令字406与对于位的预测值408进行比较(在块208中)。从图1中的示意图中可以看出,由于总是输出一个指令字(例如,DWORD 1)(在块210中),因此对于该第一指令字可以省略在位与其预测值之间的比较(如图4中的对于第一指令字的预测值的虚线轮廓所指示),并且这减少了编码操作中涉及的处理努力。更一般地,如果对于指令总是使用最少的X个指令字(其中,在所示示例中X=1,但是在其他示例中,X可以大于一,使得X≤M≤N),那么该比较可能不被执行用于前X个指令字。
如上所述,每个传输指令字可以包括一个或更多个控制位,例如头部414和/或尾部412。在各种示例中,第一指令字包括可以与所接收的编码类型标识符104完全相同的编码类型标识符414,或者可以提供不同格式的相同信息。在各种示例中,每个传输指令字包括一个或更多个位412(其可以被称为结束位),其指示这是否是对于指令的最后传输指令字。在图4中所示的示例中,第二指令字中的所有位与预测值相匹配,因此只有第一指令字被传输(并且从而形成传输指令410),并且第一指令字的尾部412中的结束位被设置。
尽管图4示出传输指令410中的第一传输指令字包括编码类型标识符414(例如,作为该指令字内的控制位的一部分),但是在其他示例中,该编码类型标识符可以以另一方式被包括在传输指令410内。
在上述方法中,通过在其中所有位都具有预测值的情况下省略在指令字的序列的末尾处的任何指令字(例如,在图4所示的示例中通过省略第二指令字),或通过使用掩码在序列中的任何点处省略指令字,在传输之前来压缩指令。在各种示例中,如参考上表所描述的,可以通过再利用一个字段(例如,类型ID)中的位来进一步压缩指令。该技术也可以被描述为使用可变长度编码类型标识符(或其他)字段。例如,如果编码类型标识符104包括三个位,则存在八个可能的值和八个可能的编码。然而,如果使用少于八个不同的值,则可以再利用编码类型标识符字段位(在图4中标记为“类型ID”)中的一个或更多个,例如,如果只有四个不同的值被使用,则仅需要使用编码类型标识符的前两位,并且可以使用剩余位(编码类型标识符字段中的第三位)来编码其他数据,因为在对编码类型标识符字段进行解码时其值是无关的。
在上述方法中,尽管对于相同的ALU类型可能存在多个不同的编码,但是还是基于(从块202)接收到的编码类型来确定预测值和/或映射,该编码类型固有地识别将执行该指令的ALU类型。在上述编码方法的变型中,预测值和/或映射可以另外基于上下文信息(即,结合接收的编码类型)来确定。上下文信息可以例如是其中将执行指令的程序(例如,着色器)的类型(例如,程序可以例如是顶点着色器、像素着色器或计算着色器)。另外,或者替代地,上下文信息可以是在执行程序时可以确定的其他数据,诸如指令是否在有条件执行的分支内,或与在指令中不需要被显式编码的指令相关联的任何其它元数据。
虽然编码方法在图1和图2中被示出为应用于编译指令(例如,在编译过程结束时或更靠后),但是将认识到,在其他示例中,所描述的编码方法可以在编译器中的较早阶段实现。
可以参照图5-7来描述解码方法。图5是示出可以在硬件和/或软件中(例如在处理器的提取级和解码级内)实现的解码方法的示意图。图6是示出解码方法的流程图。如图5和图6所示,例如通过指令提取单元来提取一个或更多个指令字(例如,F个指令字)502(块602)。在各种示例中,提取操作(在块602中)可以在多个阶段中实现:首先提取多个(例如,N个)结束位(块602A),然后基于所提取的结束位的值来确定要提取的字的数目(例如F个)(块602B),接着,取出该数目个字(块602C)。通过以这种方式实现提取操作,减少了对其中存储指令字的存储器的带宽需求(因为提取的是最小数目的指令字)。可选地,可以以某种其他方式固定或确定被提取的指令字的数目(F个,其中F为整数且F≥1)(例如,通过提取第一指令字,检查其结束位,根据结束位的值,提取另一个指令字,检查其结束位等)。
在各种示例中,相比于所提取的指令字的其他位,结束位(和/或其他控制位)可以存储在单独类型的存储器(例如,较低延迟存储器)中。这使得能够快速访问结束位(由于较低的存储器延迟)。
在已经提取了一个或更多个指令字(在块602中)后,例如通过解码级来根据提取的指令字502确定编码类型(块604)。如上所述,每个指令字可以包括尾部412,其可以例如包括结束位,并且(所提取的多个指令字中的)第一指令字可以包括部分414(例如头部),其标识当生成指令字时使用的编码类型(例如,编码类型标识符)。因此可以根据该部分414确定编码类型(在块604中)。编码类型可以例如对应于将执行特定指令的ALU类型和可选地其他信息(例如上下文信息)。
在这个阶段,提取的指令字中的任何控制位都可以被去除。如上所述,在各种示例中,结束位(和/或其他控制位)可以与指令字分开存储,因此可能不需要从提取的指令字中被去除。
如上参考图1-4所述,单个指令可以被压缩成一个或更多个指令字,例如M个指令字,其中M是整数且1≤M≤N(或更一般地,X≤M≤N,其中X≥1)。因此,提取的F个指令字(在块602中)包括对应于正在被解码的指令的M个指令字,并且还可以包括对应于一个或更多个随后指令的F-M个指令字,这取决于F的值(以及其中,如上所述,F的值可以根据提取指令字是从缓存的哪一级别被提取而不同)。如下所述,(在块602中)被提取但与正被解码的特定指令无关的任何指令字稍后在方法中被丢弃(在块610中)。在从更高级别的缓存(即,距处理器更远的缓存的级别)中进行提取时仅提取另外的字的示例中,则这些另外的字(超过或多于所需的M个字)可被认为是预防性(pre-emptive)数据提取并且可以在解码随后指令时进行使用(例如,假设程序计数器递增并且不分支)。
编码类型标识符104用于识别(例如访问)预测字(即,对于指令字中的所有位的预测值),并且这些预测字可以存储在查找表中或以任何其他方式存储。编码类型标识符(或部分414中的其他数据)也用于识别(例如,访问)对于编码类型的映射。该映射指定接收到的指令字502中(当按顺序进行布置时)和解码的指令504中的位的位置,并且该映射可以存储在查找表中或任何其它方式进行存储。在各种示例中,编码类型标识符用于识别(例如,访问)映射(其在块612中使用)和预测字(其在块610中使用)两者。在各种示例中,其他因素(诸如指令类型、上下文信息或编译器/汇编器(或执行编码的其他实体)以及执行指令(且因此执行解码)的硬件的任何其他因素)也可以用于识别预测字和/或映射。
在各种示例中,预测字中的所有位对于所有指令和所有编码类型标识符可以是相同的(例如,所有预测字可以包括全部为一或全部为零或一和零的任何预定义模式的位),在这种情况下不需要识别(例如访问)预测字。
提取了F个指令字(在块602中)并且识别了预测字(例如,基于在块604中确定的编码类型)后,对于组成指令的N个指令字中的每一个,选择提取的指令字(即,F个提取的指令字中的一个)或预测指令字(块610)。
在各种示例中,可以基于提取的指令字中的一个或更多个提取的指令字中的结束位412的值来进行选择(在块610中),如图5中的示例所示。在该示例中,通过多路复用器508进行选择,该多路复用器508基于结束位412的值进行控制,如使用“或”门510组合。对于N个指令字(其将构成解码指令504)中的第一个指令字,总是选择F个提取的指令字中的第一个提取的指令字(字1)(因为传输的指令总是包括至少一个指令字)。对于N个指令字中的第二个指令字,如果在第一个指令字(字1)中未设置结束位,则选择F个提取的指令中的第二个提取的指令(字2);然而,如果结束位被设置在第一个指令字中(从而指示其是所传输的指令中的最后一个指令字),则反而选择预测字。类似地,对于将构成解码指令504的第n个指令字(其中1<n≤N),则选择第f个提取的指令字(其中1<f≤F),除非结束位被设置在先前提取的指令字的任何一个提取指令字中。如果结束位被设置在先前提取的指令字中的任何一个中,或者如果没有相应的提取的指令字(即因为F<N),则反而选择预测字。
在图5中所示的硬件实现中,预测字(即,预测字内的预测位值)是对多路复用器508的数据输入,并且映射提供在重新排序(或去混洗逻辑)506内的对于多路复用器的控制位。
N个选择的字(来自块610)被顺序放置(如上所述,可能在头部或尾部中的任何控制位已经从字中被去除),然后使用映射进行重新排序(其也可以被描述作为去混洗)(块612)。重新排序操作的结果(在块612和逻辑506中)是被输出的解码指令504(块614)。
参照图7所示的示例还可以进一步描述选择操作(在块610中)和重新排序操作(在块612中),这是对应于图4所示的编码示例的解码操作。如图7所示,F个指令字702被提取(在块602中),并且在该示例中F=2。第一字702A中的结束位412被设置,并且因此在选择操作中(在块610中),第一个提取的指令字702A被选择,并且第二个提取的指令字702B未被选择,且反而选择了相应的预测指令字(即,预测的第二指令字)。如图7所示,在执行选择之前,任何控制位(例如,头部414和尾部412)被去除,然后对没有控制位的所提取的指令字703执行选择。
所选择的指令字704(包括没有控制位的第一个提取的指令字703A和第二预测指令字)然后被连接(即,按顺序放置)以形成混洗指令706,并且对于所识别的编码类型的映射被用于重新排序(或去混洗)在混洗指令706中的位,以产生也可以被称为去混洗指令或解码指令708的重新排序的指令。
通过比较如图4和图7所示的示例,可以看出,第一个提取的指令字702A对应于传输的指令410,而第二个提取的指令字702B不对应于传输的指令410中的任何指令字(该第二个提取的指令字702B是下一个传输的指令的部分)。解码操作中所选择的指令字704与编码操作中的指令字408匹配,并且解码指令708与原始指令402匹配。
虽然以上图6和图7的描述是指在形成混洗指令706之前(并且因此在重新排序操作之前)去除控制位,但是在其它示例中,控制位可以保留在指令字中。例如,在其中编码类型标识符(头部414中的类型ID)中的位被再利用(如参考上表所描述的)的情况下,至少包括编码类型标识符的那些控制位可以被保留在选择的指令字中(例如,可以仅去除结束位412)并且被包括在混洗指令中。
在以上参考图5描述的示例中,因为传输的指令总是包括至少一个指令字,所以总是选择F个提取的指令字中的第一个提取的指令字(字1)。更一般地,如果传输的指令总是包括至少X个指令字(其中在所示示例中X=1,但在其他示例中,X可以大于一,使得X≤M≤N),则F个提取的指令字中的前X个指令字总是被选择并且选择提取的指令字或者预测的选择字的决定仅仅用于随后的指令字(例如,对于第(X+1)个至第N个指令字)。
在以上解码方法的描述中,假设通过截断指令字序列来生成压缩指令。然而,在其他示例中,并且如上所述,可以通过使用掩码从指令字的有序序列中的任何位置去除字来生成压缩指令。在这样的示例中,可以基于使用编码类型识别的掩码来进行所提取的指令字或预测字的选择(在块610中),并且在这样的示例中,当选择第n个指令字时,相应的预测字或者下一个提取的指令(其尚未被选择)被选择。例如,如果N=4并且掩码包括四位:0101,对于N个指令字中的第一个指令字,第一个提取的指令被选择,对于N个指令字中的第二个指令字,预测字被选择,对于N个指令字中的第三个指令字,第二个提取的指令被选择,并且对于N个指令字中的第四个指令字,预测字被选择。
尽管在上述解码示例中解码的指令(在块614中的输出)包括相同数目的位(不包括任何控制位),如相应接收的编译指令(如块202所接收的)(也不包括任何控制位),因此在由接收到的编译指令(在块204中)形成的有序序列和在解码时(在块610中)生成的指令字的序列中具有相同数目的指令字,在其他示例中相比于相应接收的编译指令(在编码之前且也不包括任何控制位)可能在解码指令中有更多位。例如,这可能发生在指令包括比可以容纳在最大数目的指令字中(即在N个指令字中)更多的位的情况下。在这样的示例中,编译器/汇编器可以根据如何使用指令来生成相同指令的多个不同编译版本中的一个,其中不同的版本从指令中省略不同的字段(例如,一个版本省略查找表字段,另一个版本省略DEST6字段)。然后,编译器/汇编器将根据哪些字段未使用而选择适当的编译版本,并且不同的版本将具有不同的编码类型,使得在解码操作中,通过选择默认指令字来重新插入省略的字段(在块610中)。
在上述一些示例中,N=2。在上述其他示例中,N=4。在上述示例的变型中,N可以具有其他值,例如N可以大于四。选择N的值和指令字的长度可以提供对可变长度编码和解码的粒度的控制。更精细的粒度(即较大的N值和较小的指令字的长度)导致较大的开销(例如更多的指令字控制位和更多的硬件逻辑)。
使用上述编码和解码方法,可以将指令的大小减小约50%(例如,当N=4时,对于指令集中的所有指令的M的平均值可能大约为二)。本文描述的方法有效地为着色器程序提供无损压缩方法。本文描述的方法增加了代码密度并减少了所需的存储器大小和存储器带宽。此外,这些方法提供了灵活性来改变映射(例如,对于硬件的不同变型或添加新的指令)而不需要手动改变(即,由人做出的改变)解码硬件或必然显著降低代码密度。生成关于编码和解码方法的硬件、软件和文档所需的总体努力减少了。还可以基于进一步的使用数据或更多的特定使用的使用数据来修改映射,以进一步提高代码密度而不需要改变硬件或改变编译器/汇编器。
如上所述,编码方法可以以在硬件(例如处理器)上运行的软件来实现,其中软件可以是在稍后阶段(例如在运行时)执行编码的编译器、汇编器或软件。图8是可被实现为计算和/或电子设备的任何形式的示例性基于计算的设备800的示意图,且其中以上所述的编码方法的实施方式可被实现。
基于计算的设备800包括一个或更多个处理器802,其可以是微处理器、控制器或用于处理计算机可执行指令以控制设备的操作以便实现上述编码方法的任何其它适当类型的处理器。在一些示例中,例如在使用片上架构的系统的一些示例中,处理器802可包括在硬件(而不是软件或固件)中实现编码方法的一部分的一个或更多个固定功能块(也被称为加速器)。可在基于计算的设备处提供包括操作系统804的平台软件或任何其它适当的平台软件以实现应用软件,包括将在设备上执行的编码软件806。编码软件806实现上述编码方法。
可使用基于计算的设备800可访问的任何计算机可读介质提供计算机可执行指令。计算机可读介质可包括例如计算机存储介质(诸如存储器808)和通信介质。诸如存储器808的计算机存储介质(即,非暂时性机器可读介质)包括在任何方法或技术中实现的用于存储信息(诸如计算机可读指令、数据结构、程序模块或其它数据)的易失性和非易失性的、可移动和不可移动的介质。计算机存储介质包括但不限于RAM、ROM、EPROM、EEPROM、闪存或其它存储器技术、CD-ROM、数字通用盘(DVD)或其它光学存储器、盒式磁带、磁带、磁盘存储器或其它磁性存储设备或可用于存储由计算设备访问的信息的任何其它非传输介质。相反,通信介质可体现计算机可读指令、数据结构、程序模块或在已调制数据信号(诸如载波)或其它传输机构中的其它数据。如在本文定义的,计算机存储介质不包括通信介质。虽然计算机存储介质(即,非暂时性机器可读介质,例如存储器808)被显示在基于计算的设备800内,但是将认识到,存储装置可远程地分布或定位并经由网络或其它通信链路(例如,使用通信接口810)来访问。
与存储可以由处理器802执行的计算机可执行指令一样,存储器808还可以存储包括上述映射和/或预测值的一个或更多个查找表812。可选地,可以经由接口810访问映射和/或预测值。由编码软件806编码的编译指令(当由处理器802执行时)可以存储在存储器808中,经由接口810接收或由处理器802生成(例如,运行其它软件,诸如编译器和/或汇编程序,其可以存储在存储器800中)。
基于计算的设备800还可包括在图8中未示出的另外的元件,如布置成向可与基于计算的设备800分离或对于构成基于计算的设备800必要的显示设备输出显示信息的输入/输出控制器。显示信息可提供图形用户界面。在被提供的情况下,输入/输出控制器也可被布置成接收并处理来自一个或更多个设备(诸如用户输入设备1016(例如,鼠标或键盘)的输入。如果显示设备是触敏显示设备,则其也可充当用户输入设备。输入/输出控制器在被提供的情况下也可将数据输出至除了显示设备以外的设备,例如本地连接的打印设备。
如上所述,解码方法可以在硬件和/或软件中实现,例如在处理器的解码级内实现。在解码方法完全以软件实现的情况下,可以在诸如图8所示的基于计算的设备上实现且如上所述,存储器808被布置为存储可由处理器802执行的解码软件。
图9是实现上述解码方法的示例解码硬件900的示意图。如上所述,解码硬件900可以是处理器(例如CPU或GPU)的解码级的一部分。如图9所示,解码硬件900包括用于接收提取的指令字502(其可以例如由处理器的提取级提取)的输入端902和用于输出解码指令504(例如,到包括多个ALU的处理器的执行级)的输出端904。
可以从存储器层级(图9中未示出)内提取指令字。如上所述,根据特定的缓存级别,指令字可以被不同地存储和提取。例如,当指令字存储在缓存的较高级别中时,可以将一些或全部的控制位(例如,结束位)与指令字的其余部分分开存储(例如,在不同类型的存储器中)和可以在指令字本身之前提取(如图6中的块602A-C中所示),在其中指令字存储在层级的较低级别(例如缓存的较低级别)中的情况下,一些或全部的控制位(例如,结束位)可以与指令字的其余部分一起存储,使得指令字与该特定指令字的结束位(或其他控制位)同时被提取。
硬件900还包括用于确定编码类型(例如,根据提取的指令字和可选的上下文信息)的逻辑906以及用于映射数据的数据存储装置908和预测值的数据存储装置910。如上所述,映射和预测值可以以任何方式存储,例如在查找表(在存储器中),并且可以独立地和/或以不同的方式存储映射和预测值。硬件900还包括字选择逻辑912,其可以例如包括逻辑门(诸如图5所示的或门510)和多路复用器(诸如图5所示的多路复用器508)的布置。预测值可以用作字选择逻辑912内的逻辑的输入(例如,如上参考图5所述)。硬件900另外包括重新排序逻辑914(其可以可选地被称为“去混洗逻辑”)。映射数据(如存储在映射数据存储装置908中)可以是用于在重新排序逻辑中使用的控制位的查找表。
尽管图9示出了字选择逻辑912和重新排序逻辑914作为分开的功能实体,但是在各种示例中,字选择功能912的一部分可以集成在重新排序逻辑914中。在这样的示例中,硬件900可以包括三个功能:用于确定编码类型906的逻辑、用于返回预测值的逻辑(其可以是逻辑912的一部分)和用于对指令进行去混洗的逻辑(其包括逻辑912和重新排序逻辑914的其余部分)。
尽管图9示出了与重新排序逻辑914分开的映射数据存储装置908,但是在各种示例中,映射数据存储装置908可以被集成到重新排序逻辑914中。如上所述,映射数据可以是用于在重新排序逻辑914内使用的控制位(例如,用于多路复用器或其他逻辑元件的控制位)的查找表且两者(映射数据存储装置908和重新排序逻辑914)可以在硬件的合成期间合并在一起,以减少实现解码方法所需的硬件逻辑的总量。
可以参照图10来描述自动生成用于解码装置900的编码软件806和硬件描述的工具。除了解码装置900的硬件描述之外,或者代替解码装置900的硬件描述,该工具可以生成用于实现本文描述的解码方法的软件(例如,可以在类似于图8所示的装置上运行的解码软件)。另外,该工具还可以自动生成人类可读的文档,其详细描述用于重新布置对于特定编码(或映射)类型的位的映射和/或执行分析以优化所使用的映射。如上所述,通过同时生成编码软件和解码硬件/软件,显著降低了由所使用的编码和解码过程之间的不匹配引起的错误的可能性,并且这提高了可靠性。通过同时另外生成人类可读文档,错误的可能性被进一步降低(从而可靠性进一步提高),并且所需的努力也显著降低。
图10是工具1000的示意图(例如,在诸如处理器802的处理器上运行的软件工具)。如图10所示,工具1000将映射1002和指令集中的范式的指令1004作为输入。指令的范式是当其由编译器/汇编器生成或在硬件中执行时的指令形式(例如指令402、708)。它可以以人类可读或机器可读形式呈现给工具。工具1000生成并输出解码装置的硬件描述1006(例如,以VHDL、Verilog或其他硬件描述语言)和编码软件1008(例如,C)。这些输出1006、1008包括映射数据和/或预测值,其可以是查找表的形式或任何其他形式(例如,对于图8所示的查找表812以及图9中所示的映射数据存储装置908和预测值存储装置910)和/或用于枚举数据类型的值。工具100还可以生成并输出解码软件1010(例如,以C,其中除了硬件描述1006之外,或代替硬件描述1006,还可以提供该输出解码软件1010)和/或调试数据和人类可读形式(例如以HTML)的文档1012。工具1000可另外提供图10中未示出的其他输出。
如图10所示,工具1000包括两个语法和解析引擎1022、1024,一个用于映射1002,而另一个用于指令1004。这两个引擎都访问语法和规范库1020以执行解析。用于映射1022的语法和解析引擎输出重新映射表,其详细说明了如何重新排序位(例如,在块204和612中),并且其可以可选地被称为重新排序或混洗表。用于指令1024的语法和解析引擎输出范式指令格式的内部表示,其适用于进一步处理和代码生成。这两个引擎1022、1024的输出被馈送到代码和数据生成引擎1026中,并用于生成工具1000的代码1008、1010和其他输出1006、1012。代码和数据生成引擎1026访问第二库(本文称为HTML转换库1028),以将注释(例如,编程注释)转换为HTML。
在各种示例中,工具1000可附加地接收使用数据1032,诸如对于指令集(例如,在一个或更多个不同的应用中)与使用编码软件1008生成的指令相关的统计数据,并且可以包括分析引擎1030(例如,位频率分析引擎),其生成关于指令中的每个位被切换的频率和/或与预测值不同的频率的统计信息(例如,其可以执行指令位频率分析),并且然后可以将更新的(例如优化的)映射反馈到该工具以进一步优化所使用的编码和解码方法。
图11示出了在其中可以实现本文所描述的解码装置的计算机系统1100。计算机系统包括CPU 1102、GPU 1104、存储器1106和诸如显示器1116、扬声器1118和相机1120的其他设备1114。在GPU 1104上实现处理块1110(对应于解码装置900)。在其他示例中,处理块1110可以在CPU1102上实现。计算机系统的部件可以经由通信总线1122彼此通信。存储装置1124(对应于映射数据存储装置908和/或预测值存储装置910)可以被实现为存储器1106的一部分。
图9的解码装置被示出为包括多个功能块。这仅是示意性且并不旨在限定这样的实体的不同逻辑元件之间的严格划分。可以以任何合适的方式设置每个功能块。应当理解,在本文描述为由解码装置形成的中间值不需要在任何点处由解码装置物理地生成,并且可以仅表示方便地描述由解码装置在其输入端和输出端之间执行的处理的逻辑值。
本文所描述的解码装置可被体现在集成电路上的硬件中。本文所描述的解码装置可被配置为执行本文所描述的解码方法中的任一个。通常,以上描述的功能、方法、技术或部件中的任一个可以在软件、固件、硬件(例如,固定逻辑电路)或其任何组合中实现。本文中使用的术语“模块”、“功能”、“部件”、“元件”、“单元”、“块”和“逻辑”通常可以表示软件、固件、硬件或其任何组合。在软件实现的情况下,模块、功能、部件、元件、单元、块或逻辑表示程序代码,当其在处理器上执行时,该程序代码执行指定的任务。本文所描述的算法和方法可由执行使处理器执行算法/方法的代码的一个或更多个处理器执行。计算机可读存储介质的示例包括随机存取存储器(RAM)、只读存储器(ROM)、光盘、闪存、硬盘存储器以及可使用磁、光和其他技术来存储指令或其他数据且可由机器访问的其他存储器设备。
如本文所使用的术语计算机程序代码和计算机可读指令指的是用于处理器的任何类型的可执行代码,其包括以机器语言、解释语言或脚本语言表达的代码。可执行代码包括二进制代码、机器代码、字节码、定义集成电路(诸如硬件描述语言或网表)的代码以及用诸如C、Java、GLSL或OpenCL C的编程语言代码表示的代码。可执行代码可以是例如任何类型的软件、固件、脚本、模块或库,当在虚拟机或其他软件环境下被适当地执行、处理、解释、编译、执行时,使支持可执行代码的计算机系统的处理器执行代码指定的任务。
处理器、计算机或计算机系统可以是具有处理能力从而使它可执行指令的任何类型的设备、机器或专用电路或其集合或部分。处理器可以是任何类型的通用或专用处理器,诸如CPU、GPU、片上系统、状态机、媒体处理器、专用集成电路(ASIC)、可编程逻辑阵列、现场可编程门阵列(FPGA)、物理处理单元(PPU)、无线电处理单元(RPU)、数字信号处理器(DSP)、通用处理器(例如,通用GPU))、微处理器、被设计成加速在CPU外部的任务的任何处理单元等。计算机或计算机系统可以包括一个或更多个处理器。本领域中的技术人员将认识到,这样的处理能力被结合到很多不同的设备中,且因此术语“计算机”包括机顶盒、媒体播放器、数字无线电设备、PC、服务器、移动电话、个人数字助理和很多其它设备。
其还旨在包括定义如本文描述的硬件的配置的软件,诸如HDL(硬件描述语言)软件,如对设计集成电路或对配置可编程芯片所使用的,以实现期望功能。也就是说,可提供计算机可读存储介质,其具有在其上编码的集成电路定义数据集的形式的计算机可读程序代码,该计算机可读程序代码当在集成电路制造系统中被处理时配置系统以制造被配置成执行本文所述的任何解码方法的解码装置,或制造包括本文所述的任何装置的处理器。集成电路定义数据集可以是例如集成电路描述。
集成电路定义数据集可以是计算机代码的形式,例如作为网表、用于配置可编程芯片的代码、作为定义在任何级别处的集成电路的硬件描述语言,包括作为寄存器传送级(RTL)代码,作为诸如Verilog或VHDL的高级电路表示,以及作为诸如OASIS(RTM)和GDSII的低级电路表示。逻辑上定义集成电路的更高级表示(诸如RTL)可以在计算机系统处进行处理,该计算机系统被配置用于在软件环境的背景下生成集成电路的制造定义,其包括电路元件的定义和用于组合这些元件以便生成由表示如此定义的集成电路的制造定义的规则。如通常在计算机系统处执行以定义机器的软件的情况一样,可能需要一个或更多个中间用户步骤(例如,提供命令、变量等),以便使被配置用于生成集成电路的制造定义的计算机系统执行定义集成电路的代码,从而生成该集成电路的制造定义。
现在将参考图12描述在集成电路制造系统中处理集成电路定义数据集以便配置该系统来制造执行如上文描述的编码和/或解码方法的装置的示例。
图12示出了集成电路(IC)制造系统1202的示例,其包括布局处理系统1204和集成电路生成系统1206。IC制造系统1202配置成接收(例如,定义如在本文的任何示例中所述的且例如可以由工具1000生成的编码/解码装置的)IC定义数据集,处理IC定义数据集,并根据IC定义数据集生成IC(例如,其体现如在本文的任何示例中所述的编码/解码装置)。IC定义数据集的处理将IC制造系统1202配置为制造体现如在本文的任何示例中所述的编码和/或解码装置的集成电路。
布局处理系统1204配置成接收并处理IC定义数据集以确定电路布局。根据IC定义数据集来确定电路布局的方法在本领域中是已知的,且例如可涉及合成RTL代码以例如根据逻辑部件(例如,与非、或非、与、或、多路和触发部件)确定待生成的电路的门级表示。电路布局可通过确定对于逻辑部件的位置信息来从电路的门级表示确定。这可以自动地或者通过用户参与来完成,以便优化电路布局。当布局处理系统1204已经确定电路布局时,其可以向IC生成系统1206输出电路布局定义。电路布局定义例如可以是电路布局描述。
如本领域中已知的,IC生成系统1206根据电路布局定义来生成IC。例如,IC生成系统1006可以实现半导体设备制造过程以生成IC,半导体设备制造过程可涉及光刻的多步骤序列和化学处理步骤,在此期间,电子电路逐渐地在由半导体材料制成的晶片上形成。电路布局定义可以是掩模的形式,掩模可以在光刻过程中使用以用于根据电路定义来生成IC。可选地,被提供到IC生成系统1206的电路布局定义可以以计算机可读代码的形式,IC生成系统1206可使用该计算机可读代码来形成适当的掩模用于在生成IC时使用。
由IC制造系统1202执行的不同过程可以都在一个位置上例如由一方实现。可选地,IC制造系统1202可以是分布式系统,使得过程中的一些可以在不同位置处执行并且可由不同方执行。例如,以下阶段中的一些可在不同位置和/或由不同方实施:(i)合成表示IC定义数据集的RTL代码,以形成要生成的电路的门级表示;(ii)基于门级表示,生成电路布局;(iii)根据电路布局,形成掩膜;以及(iv)使用掩膜制造集成电路。
在其它示例中,在集成电路制造系统处对集成电路定义数据集的处理可将系统配置为制造编码和/或解码装置,而无需对IC定义数据集进行处理,以便确定电路布局。例如,集成电路定义数据集可定义诸如FPGA的可重配置处理器的配置,并且对该数据集的处理可使IC制造系统配置为(例如,通过将配置数据加载到FPGA)生成具有该所定义的配置的可重配置处理器。
在一些实施例中,当在集成电路制造系统中被处理时,集成电路制造定义数据集可使集成电路制造系统生成如本文描述的设备。例如,由集成电路制造定义数据集的以在上文中参考图12描述的方式的集成电路制造系统的配置可使如本文描述的设备被制造。
在一些示例中,集成电路定义数据集可包含在数据集处定义的硬件上运行或结合在数据集处定义的硬件运行的软件。在图12所示的示例中,IC生成系统还可由集成电路定义数据集配置成在制造集成电路时根据在集成电路定义数据集处定义的程序代码将固件加载到那个集成电路上或以其他方式使用集成电路提供程序代码以与集成电路一起使用。
以下条款列出了其他方面和示例:
条款1:一种对指令集中的指令编码的方法,所述方法包括:接收指令集中的指令;根据编码类型将接收到的指令中的位重新排序和分组成多个指令字,以生成指令字的有序序列;将有序序列中的指令字的一个或更多个指令字中的位值与其相应的预测值进行比较,并且基于该比较,通过省略有序序列中的指令字中的一个或更多个指令字来生成指令的压缩版本,其中预测值使用经验和/或仿真数据生成;并输出该指令的压缩版本。
条款2:根据条款1所述的方法,其中,指令集内的不同指令组的压缩版本包括不同数目的指令字。
条款3:根据条款1或2所述的方法,其中,生成所述指令的压缩版本包括:从所述有序序列中省略仅包含其值与对于其的预测值相匹配的位的一个或更多个指令字。
条款4:根据条款3所述的方法,生成所述指令的压缩版本还包括:设置一个或更多个位以指示哪些指令字已经从所述有序序列中被省略。
条款5:根据条款4所述的方法,其中,设置一个或更多个位以指示哪些指令字已经从所述有序序列中被省略包括:在掩码中设置多个位来指示哪些指令字已经从所述有序序列中被省略。
条款6:根据条款4所述的方法,其中,设置一个或更多个位以指示哪些指令字已经从所述有序序列中被省略包括:如果所述有序序列中的所有后续指令字包括具有与其预测值相匹配的值的位,则在指令字中设置结束位,并且其中指令的压缩版本仅包括在其中设置结束位的指令字之前的序列中的那些指令字以及设置结束位的指令字。
条款7:根据前述条款中任一项所述的方法,其中,根据编码类型重新排序所接收的指令中的位并将所接收的指令中的位分组为多个指令字以生成指令字的有序序列包括:根据编码类型访问映射数据;并使用所访问的映射数据重新排序所接收的指令中的位并分组所接收的指令中的位以生成指令字的有序序列。
条款8:根据前述条款中任一项所述的方法,还包括:根据编码类型访问对于指令字的有序序列中的位的预测值。
条款9:根据前述条款中任一项所述的方法,还包括接收对于所述编码类型的标识符。
条款10:根据前述条款中任一项所述的方法,其中,所述编码类型对应于将在其上执行所述指令的ALU的类型。
条款11:根据前述条款中的任一项所述的方法,其中,所述所接收的指令是编译的指令。
条款12:根据条款11所述的方法,其中,所述方法由编译器或汇编器在生成编译的指令之后实现。
条款13:根据条款1-11中任一项所述的方法,其中,所述方法在将程序加载到处理器存储器中时实现。
条款14:根据前述条款中任一项所述的方法,其中,所述方法由执行存储在存储器中的设备可执行指令的处理器来实现。
条款15:一种用于编码指令集中的指令的设备,所述设备包括:处理器;以及存储器,所述存储器被布置为存储设备可执行指令,所述设备可执行指令在被所述处理器执行时被配置为使所述处理器响应于接收到指令集中的指令而:根据编码类型将所接收的指令中的位重新排序并分组为多个指令字以生成指令字的有序序列;将有序序列中的一个或更多个指令字中的位值与其相应的预测值进行比较,其中,预测值使用经验和/或仿真数据生成;基于有序序列中的指令字中的一个或更多个指令字中的位值与其相应的预测值之间的比较,通过省略有序序列中的指令字中的一个或更多个指令字来生成指令的压缩版本;以及输出指令的压缩版本。
条款16:一种解码指令的方法,包括:在处理器的解码级中接收一个或更多个提取的指令字;根据提取的指令字中的一个或更多个提取的指令字确定编码类型;通过为所述序列中的指令字中的每个选择提取的指令字或预测指令字来生成指令字的有序序列,其中,预测指令字使用经验和/或仿真数据生成;连接有序序列中的指令字以形成编码指令,并根据编码类型重新排序编码指令中的位以生成解码指令;以及输出解码指令。
条款17:根据条款16所述的方法,还包括:在处理器的提取级中从存储器提取一个或更多个指令字。
条款18:根据条款17所述的方法,其中,所述一个或更多个提取的指令字包括预定义数目的指令字。
条款19:根据条款17所述的方法,其中,从存储器提取一个或更多个指令包括:从多个指令字中提取一个或更多个控制位;基于提取的控制位确定要提取的指令字的数目;以及提取该数目个指令字。
条款20:根据条款16-19中任一项所述的方法,还包括:在生成指令字的有序序列之前,从提取的指令字中去除一个或更多个控制位。
条款21:根据条款20所述的方法,其中,在生成指令字的有序序列之前从提取的指令字中去除一个或更多个控制位包括:在生成指令字的有序序列之前,从提取的指令字中去除任何控制位。
条款22:根据条款16-21中任一项所述的方法,其中,所述一个或更多个提取的指令字包括提取的指令字的有序序列,并且通过对序列中的指令字中的每个选择提取的指令字或预测指令字来生成指令字的有序序列包括:对于所述序列中的指令字中的每个,选择相应提取的指令字或相应的预测指令字。
条款23:根据条款22所述的方法,其中,每个提取的指令字包括一个或更多个控制位,并且其中对提取的指令字或相应的预测指令字的选择基于有序序列中的任何先前提取的指令字中的控制位中的一个或更多个控制位的值。
条款24:根据条款16-21中任一项所述的方法,其中,所述一个或更多个提取的指令字包括提取的指令字的有序序列,并且通过对序列中的指令字中的每个选择提取的指令字或预测指令字来生成指令字的有序序列包括:对序列中的指令字中的每个,选择提取的指令字的有序序列中的下一个提取的指令字或相应的预测指令字。
条款25:根据条款24所述的方法,其中,对提取的指令字的有序序列中的下一个提取的指令字或相应的预测指令字的选择根据基于所述编码类型识别的掩码中的位的值来进行。
条款26:根据条款16-25中任一项所述的方法,其中,根据编码类型重新排序编码指令中的位以生成解码指令包括:基于根据编码类型识别的映射数据重新排序编码指令中的位。
条款27:根据条款16-26中任一项的方法,其中,根据提取的指令字中的一个或更多个提取的指令字确定编码类型包括:根据提取的指令字中的第一个提取的指令字中的一个或更多个控制位来确定编码类型。
条款28:根据条款16-27中任一项所述的方法,其中,所述编码类型对应于将在其上执行指令的ALU的类型。
条款29:一种解码硬件,包括:输入端,其被配置为接收一个或更多个提取的指令字;硬件逻辑,其被配置为根据提取的指令字中的一个或更多个提取的指令字来确定编码类型;字选择逻辑,其被配置为通过为指令字的有序序列中的指令字中的每个选择提取的指令字或预测指令字来生成所述序列,其中,预测指令字使用经验和/或仿真数据生成,并且被配置为连接所述有序序列中的指令字以形成编码指令;重新排序硬件逻辑,其被配置为根据编码类型重新排序编码指令中的位以生成解码指令;以及输出端,其被布置成输出解码指令。
条款30:根据条款29所述的解码硬件,其中,所述字选择逻辑还被配置为在生成指令字的有序序列之前,从提取的指令字中去除一个或更多个控制位。
条款31:根据条款29所述的解码硬件,其中,所述字选择逻辑还被配置为在生成指令字的有序序列之前从提取的指令字中去除任何控制位。
条款32:根据条款29-31中任一项所述的解码硬件,其中,所述一个或更多个提取的指令字包括提取的指令字的有序序列,并且所述字选择逻辑被配置为通过对序列中的所述指令字中的每个选择相应的提取的指令字或相应的预测指令字来生成指令字的有序序列。
条款33:根据条款32所述的解码硬件,其中,每个提取的指令字包括一个或更多个控制位,并且其中,所述字选择逻辑被配置为基于在有序序列中的任何先前提取的指令字中的控制位中的一个或更多个控制位的值来执行对提取的指令字或相应的预测指令字的选择。
条款34:根据条款29-31中任一项所述的解码硬件,其中,所述一个或更多个提取的指令字包括提取的指令字的有序序列,并且所述字选择逻辑被配置为通过对序列中的指令字中的每个选择下一个相应的提取的指令字或相应的预测指令字来生成指令字的有序序列。
条款35:根据条款34所述的解码硬件,其中,所述字选择逻辑被配置为基于根据编码类型所识别的掩码中的位的值来执行对提取的指令字的有序序列中的下一个提取的指令字或相应的预测指令字的选择。
条款36:根据条款29-35中任一项所述的解码硬件,其中,所述重新排序硬件逻辑被配置为根据所述编码类型对所述编码指令中的位重新排序,以通过基于根据编码类型所识别的映射数据重新排序所述编码指令中的位来生成解码指令。
条款37:根据条款29-36中任一项所述的解码硬件,其中,被配置为确定编码类型的硬件逻辑被布置成根据所述提取的指令字中的第一个提取的指令字中的一个或更多个控制位确定编码类型。
条款38:根据条款29-37中任一项所述的解码硬件,其中,所述编码类型对应于将在其上执行指令的ALU的类型。
条款39:一种包括解码级的处理器,其中,所述解码级包括根据条款29-38中任一项所述的解码硬件。
条款40:根据条款39所述的处理器,还包括提取级,其被配置为从存储器提取一个或更多个指令字。
条款41:根据条款40所述的处理器,其中,所述一个或更多个提取的指令字包括预定义数目的指令字。
条款42:根据条款40所述的处理器,其中,所述提取级被配置为从多个指令字中提取一个或更多个控制位;基于提取的控制位确定要提取的指令字的数目;以及提取该数目个指令字。
条款43:一种用于解码指令集中的指令的设备,所述设备包括:处理器;以及存储器,其被布置为存储设备可执行指令,所述设备可执行指令当由处理器执行时配置成使处理器响应于接收到一个或更多个提取的指令字而:根据提取的指令字中的一个或更多个提取的指令字确定编码类型;通过为序列中的指令字中的每个选择提取的指令字或预测指令字来生成指令字的有序序列,其中,预测指令字使用经验和/或仿真数据生成;连接有序序列中的指令字以形成编码指令,并根据编码类型重新排序编码指令中的位以生成解码指令;以及输出解码指令。
条款44:一种使用集成电路制造系统来制造根据条款29-38中任一项所述的解码硬件的方法。
条款45:一种集成电路定义数据集,其在集成电路制造系统中进行处理时,将集成电路制造系统配置为制造根据条款29-38中任一项所述的解码硬件。
条款46:一种计算机可读存储介质,其具有在其上存储的集成电路的计算机可读描述,当其在集成电路制造系统中进行处理时使集成电路制造系统制造根据条款29-38中任一项所述的解码硬件。
条款47:一种集成电路制造系统,其被配置为制造根据条款29-38中任一项所述的解码硬件。
条款48:一种集成电路制造系统,包括:非暂时性计算机可读存储介质,其上存储有描述解码硬件的集成电路的计算机可读描述;布局处理系统,其被配置为处理所述集成电路描述,以便生成体现所述解码硬件的集成电路的电路布局描述;以及集成电路生成系统,其被配置为根据所述电路布局描述来制造所述解码硬件,其中所述解码硬件包括:输入端,其被布置成接收一个或更多个提取的指令字;硬件逻辑,其被配置为根据提取的指令字中的一个或更多个提取的指令字确定编码类型;字选择逻辑,其被配置为通过为序列中的指令字中的每个选择提取的指令字或预测指令字来生成指令字的有序序列,其中,预测指令字使用经验和/或仿真数据生成,并且被配置为连接有序序列中的指令字以形成编码指令;重新排序硬件逻辑,其被配置成根据编码类型重新排序编码指令中的位以生成解码指令;以及输出端,其被布置成输出解码指令。
条款49:一种方法,包括:在输入端处接收用于指令集的映射数据和描述指令集中的范式指令的指令数据;使用语法库解析映射数据和指令数据;在代码和数据生成引擎中,基于解析的映射数据和指令数据生成编码软件和解码器的硬件描述;以及输出编码软件和解码器的硬件描述。
条款50:根据条款49所述的方法,还包括:在代码和数据生成引擎中并基于解析的映射数据和指令数据生成调试数据和人类可读形式的文档;以及输出调试数据和人类可读形式的文档。
条款51:一种设备,包括:处理器;以及存储器,其被布置为存储设备可执行指令,所述设备可执行指令在由所述处理器执行时被配置为使所述处理器响应于接收到用于指令集的映射数据和描述指令集的中的范式指令的指令数据而:使用语法库来解析映射数据和指令数据;基于解析的映射数据和指令数据生成编码软件和解码器的硬件描述;以及输出编码软件和解码器的硬件描述。
条款52:一种处理器,其被配置为执行条款1-14、16-28和49-50中的任一项所述的方法。
条款53:一种计算机可读代码,其被配置为在该代码运行时使得根据条款1-14、16-28和49-50中任一项的方法被执行。
条款54:一种计算机可读存储介质,其具有在其上编码的根据条款53所述的计算机可读代码。
本领域中的技术人员将认识到,用于存储程序指令的存储设备可分布在网络当中。例如,远程计算机可存储被描述为软件的过程的示例。本地或终端计算机可访问远程计算机并下载软件的一部分或全部以运行程序。可选地,本地计算机可根据需要下载软件的片段,或在本地终端处执行一些软件指令并在远程计算机(或计算机网络)处执行一些软件指令。本领域中的技术人员也将认识到,通过利用本领域中的技术人员已知的常规技术,软件指令的全部或一部分可由专用电路(诸如DSP、可编程逻辑阵列等)执行。
本文所述的方法可由配置有软件的计算机执行,软件是以机器可读形式存储在有形存储介质上,例如,以包括用于配置计算机以执行所描述的方法的组成部分的计算机可读程序代码的计算机程序的形式或以包括适于当程序在计算机上运行时执行本文所述的任何方法的所有步骤的计算机程序代码装置的计算机程序的形式,且其中计算机程序可被体现在计算机可读存储介质上。有形(或非暂时性)存储介质的示例包括磁盘、拇指驱动器、存储卡等,且不包括传播信号。软件可适合于在并行处理器或串行处理器上执行,使得方法步骤可以以任何合适的顺序或同时执行。
本文描述的硬件部件可由非暂时性计算机可读存储介质生成,非暂时性计算机可读存储介质具有在其上编码的计算机可读程序代码。
存储机器可执行数据以用于实现所公开的方面的存储器可以是非暂时性介质。非暂时性介质可以是易失性或非易失性的。易失性非暂时性介质的示例包括基于半导体的存储器,诸如SRAM或DRAM。可用于实现非易失性存储器的技术的示例包括光学和磁存储器技术、闪存、相变存储器、电阻式RAM。
对“逻辑”的特定引用指执行一种或多于一种功能的结构。逻辑的示例包括被布置成执行那些功能的电路。例如,这样的电路可包括晶体管和/或在制造过程中可用的其它硬件元件。作为示例,这样的晶体管和/或其它元件可用于形成实现和/或包含存储器(诸如寄存器、触发器或锁存器)、逻辑运算符(诸如布尔运算)、数学运算符(诸如加法器、乘法器或移位器)并且互相连接的电路或结构。这样的元件可作为定制电路或标准单元库、宏或者在其它抽象级处提供。这样的元件可以以特定布置互连。逻辑可包括固定功能的电路,且电路可被编程以执行一种或多于一种功能;这样的编程可从固件或软件更新或控制机制中被提供。被识别为执行一种功能的逻辑也可包括实现组成功能或子过程的逻辑。在示例中,硬件逻辑具有实现固定功能操作或多个操作、状态机或过程的电路。
本文给出的任何范围或设备值可被扩展或改变而不失去所寻求的效应,如对技术人员将明显的。
将理解,上面描述的益处和优点可涉及一个实施方式或可涉及几个实施方式。实施方式不限于解决任何或所有所陈述的问题的那些实施方式或具有任何或全部所陈述的益处和优点的那些实施方式。
对“一个(an)”项目的任何引用指的是那些项目中的一个或更多个。术语“包括”在本文用于意指包括所识别的方法块或元件,但这样的块或元件并不包括排他列表,且装置可包含额外的块或元件,以及方法可包含额外的操作或元件。此外,块、元件和操作本身并不隐含地是封闭的。
本文描述的方法的步骤可在适当时以任何适当的顺序或同时被执行。在附图中的方框之间的箭头示出方法步骤的一个示例顺序,但并不旨在排除其它顺序或并行执行多个步骤。此外,各个块可从任何方法中删除而不偏离本文描述的主题的精神和范围。上面描述的示例中的任一个的方面可与所描述的其它示例中的任一个的方面组合以形成另外的示例,而不失去所寻求的效果。在附图中的元件被示为由箭头连接的情况下,将认识到,这些箭头仅示出元件之间的通信(包括数据和控制消息)的一个示例流。元件之间的流可以在任一方向上或在两个方向上。
申请人在此独立地公开了本文所描述的每个单独特征和两个或更多个这样的特征的任意组合,在某种程度上,这样的特征或组合能够根据本领域中的技术人员的通用常识基于作为整体的本说明书来执行,而不管这样的特征或特征组合是否解决了本文所公开的任何问题。鉴于前述描述,对于本领域中的技术人员将明显的是,可以在本发明的范围内做出各种修改。

Claims (20)

1.一种解码硬件,包括:
输入端,所述输入端被布置成接收一个或更多个提取的指令字;
硬件逻辑,所述硬件逻辑被配置为根据所述提取的指令字中的一个或更多个提取的指令字来确定编码类型;
字选择逻辑,所述字选择逻辑被配置为通过为指令字的有序序列中的指令字中的每个选择提取的指令字或预测指令字来生成所述序列,其中,所述预测指令字使用经验和/或仿真数据生成,以及其中,所述选择是基于接收的提取的指令字和/或掩码的一个或更多个控制位来执行的,并且所述字选择逻辑被配置为连接所述有序序列中的指令字以形成编码指令;
重新排序硬件逻辑,所述重新排序硬件逻辑被配置成根据所述编码类型重新排序所述编码指令中的位以生成解码指令;和
输出端,所述输出端被布置成输出所述解码指令。
2.根据权利要求1所述的解码硬件,其中,所述字选择逻辑还被配置为在生成所述指令字的有序序列之前,从所述提取的指令字中去除一个或更多个控制位。
3.根据权利要求1所述的解码硬件,其中,所述字选择逻辑还被配置为在生成所述指令字的有序序列之前,从所述提取的指令字中去除任意控制位。
4.根据权利要求1所述的解码硬件,其中,所述一个或更多个提取的指令字包括提取的指令字的有序序列,并且所述字选择逻辑被配置为通过对指令字的有序序列中的指令字中的每一个指令字选择相应的提取的指令字或相应的预测指令字来生成所述序列。
5.根据权利要求4所述的解码硬件,其中,每个提取的指令字包括一个或更多个控制位,并且其中,所述字选择逻辑被配置为基于在所述有序序列中的任何先前提取的指令字中的控制位中的一个或更多个控制位的值来执行对所述提取的指令字或相应的预测指令字的选择。
6.根据权利要求1所述的解码硬件,其中,所述一个或更多个提取的指令字包括提取的指令字的有序序列,并且所述字选择逻辑被配置为通过对指令字的有序序列中的指令字中的每一个指令字选择下一个相应的提取的指令字或相应的预测指令字来生成所述序列。
7.根据权利要求6所述的解码硬件,其中,所述字选择逻辑被配置为基于根据所述编码类型所识别的掩码中的位的值来执行对所述提取的指令字的有序序列中的下一个提取的指令字或相应的预测指令字的选择。
8.根据权利要求1所述的解码硬件,其中,所述重新排序硬件逻辑被配置为根据所述编码类型对所述编码指令中的位重新排序,以通过基于根据所述编码类型所识别的映射数据来重新排序所述编码指令中的位来生成解码指令。
9.根据权利要求1所述的解码硬件,其中,被配置为确定编码类型的所述硬件逻辑被布置成根据所述提取的指令字中的第一个提取的指令字中的一个或更多个控制位来确定编码类型。
10.根据权利要求1所述的解码硬件,其中,所述编码类型对应于将在其上执行指令的ALU的类型。
11.一种解码指令的方法,包括:
在处理器的解码级中接收一个或更多个提取的指令字;
根据所述提取的指令字中的一个或更多个提取的指令字确定编码类型;
通过为指令字的有序序列中的指令字的每一个选择提取的指令字或预测指令字来生成所述序列,其中,所述预测指令字使用经验和/或仿真数据生成以及其中,所述选择是基于接收的提取的指令字和/或掩码的一个或更多个控制位来执行的;
连接所述有序序列中的指令字以形成编码指令,并根据所述编码类型重新排序所述编码指令中的位以生成解码指令;以及
输出所述解码指令。
12.根据权利要求11所述的方法,还包括:
在处理器的提取级中,从存储器中提取一个或更多个指令字。
13.根据权利要求12所述的方法,其中,所述一个或更多个提取的指令字包括预定义数目的指令字。
14.根据权利要求12所述的方法,其中,从存储器中提取一个或更多个指令包括:
从多个指令字中提取一个或更多个控制位;
基于所提取的控制位确定要提取的指令字的数目;以及
提取所述数目的指令字。
15.一种对指令集中的指令编码的方法,所述方法包括:
接收所述指令集中的指令;
根据编码类型对所接收到的指令中的位重新排序并分组成多个指令字,所述重新排序和分组基于所述位的经验或仿真差异,以生成指令字的有序序列;
将所述有序序列中的指令字的一个或更多个指令字中的位值与其相应的预测值进行比较,并且通过基于所述比较省略所述有序序列中的指令字的一个或更多个指令字来生成指令的压缩版本,其中,所述预测值使用经验和/或仿真数据生成;以及
输出所述指令的压缩版本。
16.根据权利要求15所述的方法,其中,所述指令集内的不同组的指令的压缩版本包括不同数目的指令字。
17.根据权利要求15所述的方法,其中,生成所述指令的压缩版本包括:
从所述有序序列中省略仅包含其值与对于其的预测值相匹配的位的一个或更多个指令字;
并且可选地,其中,生成所述指令的压缩版本还包括:
设置一个或更多个位以指示哪些指令字已经从所述有序序列中省略。
18.一种集成电路制造系统,包括:
非暂时性计算机可读存储介质,所述非暂时性计算机可读存储介质具有在其上存储的描述根据权利要求1所述的解码硬件的、集成电路的计算机可读描述;
布局处理系统,所述布局处理系统被配置为对集成电路描述进行处理,以便生成体现所述解码硬件的集成电路的电路布局描述;以及
集成电路生成系统,所述集成电路生成系统被配置为根据所述电路布局描述来制造所述解码硬件。
19.一种操作软件工具的方法,包括:
在输入端处,接收用于指令集的映射数据和描述指令集中的范式的指令的指令数据;
使用语法库解析所述映射数据和指令数据;
在代码和数据生成引擎中,基于所解析的映射数据和指令数据生成编码软件和解码器的硬件描述,其中,所述解码器包括根据权利要求1所述的解码硬件;以及
输出所述编码软件和解码器的所述硬件描述。
20.根据权利要求19所述的方法,还包括:
在所述代码和数据生成引擎中并基于所解析的映射数据和指令数据生成调试数据和人类可读形式的文档;以及
输出所述调试数据和人类可读形式的文档。
CN201711143525.0A 2016-11-23 2017-11-17 编码和解码可变长度指令 Active CN108089882B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311057973.4A CN117112028A (zh) 2016-11-23 2017-11-17 编码和解码可变长度指令

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB1619781.6A GB2556886B (en) 2016-11-23 2016-11-23 Encoding and decoding variable length instructions
GB1619781.6 2016-11-23

Related Child Applications (1)

Application Number Title Priority Date Filing Date
CN202311057973.4A Division CN117112028A (zh) 2016-11-23 2017-11-17 编码和解码可变长度指令

Publications (2)

Publication Number Publication Date
CN108089882A CN108089882A (zh) 2018-05-29
CN108089882B true CN108089882B (zh) 2023-09-12

Family

ID=57993781

Family Applications (2)

Application Number Title Priority Date Filing Date
CN201711143525.0A Active CN108089882B (zh) 2016-11-23 2017-11-17 编码和解码可变长度指令
CN202311057973.4A Pending CN117112028A (zh) 2016-11-23 2017-11-17 编码和解码可变长度指令

Family Applications After (1)

Application Number Title Priority Date Filing Date
CN202311057973.4A Pending CN117112028A (zh) 2016-11-23 2017-11-17 编码和解码可变长度指令

Country Status (4)

Country Link
US (3) US10579381B2 (zh)
EP (2) EP3754484A3 (zh)
CN (2) CN108089882B (zh)
GB (1) GB2556886B (zh)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2514618B (en) * 2013-05-31 2020-11-11 Advanced Risc Mach Ltd Data processing systems
CN112631595B (zh) * 2019-10-09 2024-03-01 安徽寒武纪信息科技有限公司 混洗方法、装置、计算机设备及可读存储介质
CN112631597A (zh) * 2019-10-09 2021-04-09 中科寒武纪科技股份有限公司 混洗方法及计算装置
CN110995285B (zh) * 2019-12-27 2023-05-05 成都达安众科技有限公司 一种uhf rfid分步式指令解码方法及芯片
GB2593690B (en) * 2020-03-30 2022-11-09 Imagination Tech Ltd Efficient encoding methods
GB2593691B (en) * 2020-03-30 2022-08-24 Imagination Tech Ltd Efficient encoding methods
US11782729B2 (en) * 2020-08-18 2023-10-10 SambaNova Systems, Inc. Runtime patching of configuration files
US11593110B2 (en) * 2021-01-07 2023-02-28 Texas Instruments Incorporated Instruction packing scheme for VLIW CPU architecture
CN112735498B (zh) * 2021-02-03 2024-02-20 山东大学 一种存储器译码方法
CN114756880B (zh) * 2022-04-14 2023-03-14 电子科技大学 一种基于fpga的信息隐藏方法及系统
CN114625419B (zh) * 2022-05-16 2022-08-26 西安芯瞳半导体技术有限公司 一种可变长指令的缓存结构、方法及介质

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6564314B1 (en) * 1994-06-21 2003-05-13 Sgs-Thomson Microelectronics Limited Computer instruction compression
CN102017634A (zh) * 2008-05-02 2011-04-13 微软公司 重新排序的变换系数的多级表示
CN103119849A (zh) * 2010-04-13 2013-05-22 弗兰霍菲尔运输应用研究公司 概率区间分割编码器和译码器
CN104011670A (zh) * 2011-12-22 2014-08-27 英特尔公司 用于基于向量写掩码的内容而在通用寄存器中存储两个标量常数之一的指令
CN104778030A (zh) * 2013-12-20 2015-07-15 想象技术有限公司 具有虚拟化指令集架构的处理器和方法
CN105808209A (zh) * 2011-05-03 2016-07-27 高通股份有限公司 用于内嵌在存储器层级内的经熵编码软件的存储和翻译的方法和设备

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5926644A (en) * 1991-10-24 1999-07-20 Intel Corporation Instruction formats/instruction encoding
US5809272A (en) * 1995-11-29 1998-09-15 Exponential Technology Inc. Early instruction-length pre-decode of variable-length instructions in a superscalar processor
US5819058A (en) * 1997-02-28 1998-10-06 Vm Labs, Inc. Instruction compression and decompression system and method for a processor
US6101592A (en) * 1998-12-18 2000-08-08 Billions Of Operations Per Second, Inc. Methods and apparatus for scalable instruction set architecture with dynamic compact instructions
US6317748B1 (en) * 1998-05-08 2001-11-13 Microsoft Corporation Management information to object mapping and correlator
US6477683B1 (en) * 1999-02-05 2002-11-05 Tensilica, Inc. Automated processor generation system for designing a configurable processor and method for the same
US7028286B2 (en) * 2001-04-13 2006-04-11 Pts Corporation Methods and apparatus for automated generation of abbreviated instruction set and configurable processor architecture
EP1387250B8 (en) * 2002-07-31 2012-02-29 Texas Instruments Inc. Processor that accomodates multiple instruction sets and multiple decode modes
US7249243B2 (en) * 2003-08-06 2007-07-24 Intel Corporation Control word prediction and varying recovery upon comparing actual to set of stored words
GB2415269B (en) * 2004-06-15 2007-07-25 Advanced Risc Mach Ltd Program instruction decompression and compression techniques
US7774748B1 (en) * 2004-08-03 2010-08-10 Tensilica, Inc. System and method for automatic conversion of a partially-explicit instruction set to an explicit instruction set
US7673187B2 (en) * 2006-10-24 2010-03-02 Arm Limited Data processing apparatus and method for reducing trace bandwidth
US7688232B2 (en) * 2007-03-27 2010-03-30 Intel Corporation Optimal selection of compression entries for compressing program instructions
KR20110011357A (ko) * 2009-07-28 2011-02-08 삼성전자주식회사 비트의 순서를 변경한 데이터의 부호화, 복호화 방법 및 장치
US9135008B2 (en) * 2009-09-24 2015-09-15 Freescale Semiconductor, Inc. Device and method for performing conditional bitwise set/clear/toggle manipulations in a general purpose register
JP2012098893A (ja) * 2010-11-01 2012-05-24 Fujitsu Semiconductor Ltd 圧縮命令処理装置及び圧縮命令生成装置
US8819397B2 (en) * 2011-03-01 2014-08-26 Advanced Micro Devices, Inc. Processor with increased efficiency via control word prediction

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6564314B1 (en) * 1994-06-21 2003-05-13 Sgs-Thomson Microelectronics Limited Computer instruction compression
CN102017634A (zh) * 2008-05-02 2011-04-13 微软公司 重新排序的变换系数的多级表示
CN103119849A (zh) * 2010-04-13 2013-05-22 弗兰霍菲尔运输应用研究公司 概率区间分割编码器和译码器
CN105808209A (zh) * 2011-05-03 2016-07-27 高通股份有限公司 用于内嵌在存储器层级内的经熵编码软件的存储和翻译的方法和设备
CN104011670A (zh) * 2011-12-22 2014-08-27 英特尔公司 用于基于向量写掩码的内容而在通用寄存器中存储两个标量常数之一的指令
CN104778030A (zh) * 2013-12-20 2015-07-15 想象技术有限公司 具有虚拟化指令集架构的处理器和方法

Also Published As

Publication number Publication date
US20220261248A1 (en) 2022-08-18
US20180143832A1 (en) 2018-05-24
EP3754484A2 (en) 2020-12-23
GB2556886B (en) 2019-05-15
EP3754484A3 (en) 2021-04-14
US10579381B2 (en) 2020-03-03
GB201619781D0 (en) 2017-01-04
US11868775B2 (en) 2024-01-09
EP3327566B1 (en) 2020-08-19
US20200183693A1 (en) 2020-06-11
EP3327566B8 (en) 2020-09-30
GB2556886A (en) 2018-06-13
CN117112028A (zh) 2023-11-24
US11347509B2 (en) 2022-05-31
EP3327566A1 (en) 2018-05-30
CN108089882A (zh) 2018-05-29

Similar Documents

Publication Publication Date Title
CN108089882B (zh) 编码和解码可变长度指令
US11863208B2 (en) Data compression and storage
CA2735354C (en) Programmable processor and method with wide operations
KR102471606B1 (ko) 내장형 라운딩 규칙을 갖는 부동 소수점 명령어 포맷
US10379861B2 (en) Decoding instructions that are modified by one or more other instructions
US20030028844A1 (en) Method and apparatus for implementing a single cycle operation in a data processing system
US20140047218A1 (en) Multi-stage register renaming using dependency removal
US10083034B1 (en) Method and apparatus for prefix decoding acceleration
US20240012613A1 (en) Look Ahead Normaliser
JP7385009B2 (ja) 圧縮支援命令
US11126663B2 (en) Method and apparatus for energy efficient decompression using ordered tokens
CN108228238B (zh) 用于确定具有多个数据元素的数据集合中的最小的两个值的方法及装置
GB2593514A (en) Method and system for optimizing data transfer from one memory to another memory
US11593106B1 (en) Circuits and methods for vector sorting in a microprocessor
US20110289339A1 (en) Semiconductor device

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