CN113138800A - 定长指令集的编解码方法及计算系统 - Google Patents
定长指令集的编解码方法及计算系统 Download PDFInfo
- Publication number
- CN113138800A CN113138800A CN202110322351.4A CN202110322351A CN113138800A CN 113138800 A CN113138800 A CN 113138800A CN 202110322351 A CN202110322351 A CN 202110322351A CN 113138800 A CN113138800 A CN 113138800A
- Authority
- CN
- China
- Prior art keywords
- instruction
- length
- fixed
- encoding
- contents
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
Abstract
本文公开了一种定长指令集的编解码方法及计算系统,涉及基于定长指令集实现超长指令的系统和方法。在根据本公开的一种定长指令集的编码方法中,使用固定比特长度来对指令集中的每条指令进行编码;将编码后的指令存储在系统存储器中。当固定比特长度不足以对一条指令的全部内容进行编码时,则将该条指令的一部分内容保存在数据存储器中,使得固定比特长度足以对该条指令的剩余部分进行编码以形成编码后的指令。指令集的编码长度是固定的,有利于编译器编码效率。对于需要超出固定编码长度的指令,本公开也提供了将指令编码长度进行扩展的方法,由此实现超长指令,从而有利于指令集可扩展性。
Description
技术领域
本公开涉及计算系统中的指令集编解码,尤其涉及一种定长指令集的编解码方法及计算系统。
背景技术
随着硬件功能的增加和变化,中央处理单元/图形处理单元(CPU/GPU)等计算系统的指令集会变得非常复杂,执行长度也会增长。
现有指令集都是变长指令为主。
举例来说,AMD GCN指令集中的指令长度包含32比特、64比特。AMD GPU指令集可参见如下地址中的文档,该文档中的全部内容通过引用并入本公开中且作为本公开的一部分:
https://developer.amd.com/wp-content/resources/Vega_Shader_ISA_28July2017.pdf
图1A和1B示出了几种长度分别为32比特和64比特的指令代码结构的示意图。图1A是如上所述的AMD GCN指令集中的指令长度为32比特的五条指令的示例。图1B是如上所述的AMD GCN指令集中的指令长度为64比特的两条指令的示例。
另一个例子中,Intel的指令集长度为1-17个字节。可参考如下地址中所记载的关于Intel X86计算架构中的指令集介绍,该介绍的全部内容通过引用并入本公开中且作为本公开的一部分:
http://linasm.sourceforge.net/docs/instructions/index.php
然而,变长指令不利于程序代码对齐,也不利于编译器产生二进制代码。而且,变长指令使得CPU/GPU中的指令取出(或称取指,Instruction Fetch)、指令解码(Instruction Decoder)以及PC管理代码非常复杂。
由于指令的长度不固定,则使得跳转指令的偏移地址计算繁琐。
总的来说,现有的各种指令集中,指令长度变化非常大。这造成硬件指令读取管理复杂,带来程序PC计算、编译器编码转移地址计算等多种困难。而某些指令还有可能跨越不同缓存行(Cache lines),指令取指、译码困难,造成性能的损失。
另一方面,在GPU中,同一程序在不同的图形渲染上下文(Graphics RenderingContext),需要经常插入不同的代码来适配、或者性能优化,变长代码带来非常大的不便。
对于以上的问题,NVIDIA采取的解决方法之一是不断增加指令编码长度。另一种解决思路是将3条指令合为一组,每组增加一条64比特的控制指令。然而,以上两种解决方法都存在如下的缺点:(1)不断增加的指令长度使得取指带宽需求倍数增加;(2)指令有效利用率较低;(3)指令缓冲区倍数增加。
因此,希望能有一种在计算系统中对指令集进行编解码的方法,既能使得指令编码的长度相对固定,又能灵活地对指令编码长度进行扩展。
GPU
一个GPU芯片包含一个或者多个流处理器核心,还包含视频编解码和其他处理核心,可参见图2。
流处理器通过交叉开关矩阵或者交叉网络与二级高速缓存,及PCIe控制器进行数据的读写。二级高速缓存通过对应的存储控制器读写内存。
一个流处理器包含一个或者多个单指令多线程(SIMT)处理器,一个或者多个一级高速缓存(Cache),内存管理单元和共享存储。
流处理器
前面已经说过,一个流处理器包含一个或者多个SIMT(单指令多线程)单元,如图3所示。其中各个模块的名称与用途如下:
SEQ:指令调度器;
I-Cache:指令缓存;
D-Cache:数据缓存;
PMM(Power Management Module):功耗管理模块,用于根据SIMT的指令,调整SIMT功耗的最小值或者时钟树;
共享内存:多个SIMT可以读写共享内存的数据,从而实现多个线程之间的数据交换;
存储地址计算单元:计算数据读写外部存储的地址;
数据读写控制单元:从一级缓存读数据,然后将数据写入SMIT,或者将SIMT的存储指令和数据发给一级缓存。
一级缓存包含4-128KB的SRAM,如果读MISS(未读到),发送读指令到二级缓存。存储写指令直接发送到二级缓存。
WARP
WARP是GPU SIMT执行指令的基本单位,单指令多线程并行线程数。SIMT16的硬件采用大小为16,32,64的WARP大小。
一个SIMT最多支持8-16个WARP。
一个拥有四个SIMT的流处理最多支持32-128个WARP。
SIMT 8+WARP_SIZE 32:SIMT8有8个物理的计算道(Lane),WARP有32个物理的道(Lane),有32个物理的线程(Thread),每个线程最多可访问128、192、256或者512个GPR(通用寄存器),每个线程的GPR位宽为32比特或者64比特。整个SIMT的SRAM存储空间为(32比特*256)每线程*32线程。
图4说明一个SIMT包含了最多8个WARP。每个WARP包含多个特种寄存器指示或指向其资源:
Instruction Buffer:每个WARP有一个指令缓冲区;
PC:程序计数器,寄存器是个地址指针,指向其要执行的指令地址;
Lane Mask:图4是一个SIMT8+WARP_SIZE=32的SIMT,例如0x01 FF FFFF,表示其中0-24是有效的,将参与SIMT计算指令和异步内存指令;其余25-31是无效的。
GPR base,GPR SIZE:例如SIMT8+WARP_SIZE,每个线程被分配一个GPR空间,所有线程的GPR基地址或首地址相同,例如GPR Base=64,GPR Size=32;本图实例中为32线程;每个线程的寄存器值可以是不同的,例如R6的物理位置是GPR BASE+6,实际寻址为70;
Shared Memory Base,Size:每个WARP都可以分配一个共享内存空间,每个线程都可以访问共享内存的内容;
Warp Share GPR base,Size:warp share GPR只有一个道,每个线程看到的都是相同的值;warp share GPR base=320,W16的物理寻址位置为336;
Warp Share GPR Size:不同的硬件设计,逻辑寻址空间从32到256个。
发明内容
如上所述,本公开的目的在于提供一种在计算系统中对指令集进行编解码的方法,既能使得指令编码的长度相对固定,又能在有需要时灵活地对指令编码长度进行扩展。
根据上述目的,发明人构思了一种基于定长指令集实现超长指令的系统和方法。
本公开的第一方面提供了一种定长指令集的编码方法。所述方法可以包括:使用固定比特长度来对指令集中的每条指令进行编码;将编码后的定长指令存储在系统存储器中。当所述固定比特长度不足以对一条指令的全部内容进行编码时,则将该条指令的一部分内容保存在数据存储器中,使得所述固定比特长度足以对该条指令的剩余部分进行编码以形成编码后的定长指令。
根据本公开的第一方面的实施例,优选地,编码后的定长指令中包括变长指示位,用于指示该条指令是否有一部分内容保存在数据存储器中。
根据本公开的第一方面的实施例,优选地,编码后的定长指令中包括指向保存在数据存储器中的该条指令的一部分内容的链接。
根据本公开的第一方面的实施例,优选地,编码后的定长指令中包括寄存器地址,寄存器用于加载保存在数据存储器中的该条指令的一部分内容。
根据本公开的第一方面的实施例,优选地,寄存器地址为寄存器的首地址,并且编码后的定长指令中还包括加载该条指令的一部分内容所需占用的寄存器长度。
根据本公开的第一方面的实施例,优选地,编码后的定长指令中包括数据缓存区域地址,数据缓存用于预取保存在数据存储器中的该条指令的一部分内容。
根据本公开的第一方面的实施例,优选地,数据缓存地址为数据缓存区域的首地址,并且编码后的定长指令中还包括预取该条指令的一部分内容所需占用的数据缓存区域的长度。
本公开的第二方面提供了一种定长指令集的解码方法。所述方法可以包括:从系统存储器中读取固定比特长度的指令编码,其中,所述固定比特长度的指令编码是使用固定比特长度来对指令集中的指令进行编码得到的;根据读取的定长指令编码的内容,确定读取的固定比特长度的指令编码是否已经包括了相应指令的全部内容;当确定读取的固定比特长度的指令编码并未包括相应指令的全部内容时,则进一步从数据存储器中读取内容,使得从系统存储器中读取的指令编码与从数据存储器中读取的内容合并构成相应指令的全部内容;将相应指令的全部内容解码为可执行的指令。
根据本公开的第二方面的实施例,优选地,从系统存储器中读取的定长指令编码包括变长指示位,用于指示相应指令是否有一部分内容保存在数据存储器中。
根据本公开的第二方面的实施例,优选地,从系统存储器中读取的定长指令编码中包括指向保存在数据存储器中的相应指令的一部分内容的链接。
根据本公开的第二方面的实施例,优选地,从系统存储器中读取的定长指令编码中包括寄存器地址,所述寄存器用于加载保存在数据存储器中的相应指令的一部分内容。
根据本公开的第二方面的实施例,优选地,寄存器地址为寄存器的首地址,并且从系统存储器中读取的定长指令编码中还包括加载相应指令的一部分内容所需占用的寄存器长度。
根据本公开的第二方面的实施例,优选地,从系统存储器中读取的定长指令编码中包括数据缓存区域地址,数据缓存用于预取保存在数据存储器中的相应指令的一部分内容。
根据本公开的第二方面的实施例,优选地,数据缓存地址为数据缓存区域的首地址,并且从系统存储器中读取的定长指令编码中还包括预取相应指令的一部分内容所需占用的数据缓存区域的长度。
本公开的第三方面提供了一种计算系统。该计算系统可以包括:计算核;系统存储器,被配置为存储使用固定比特长度对所述计算系统的指令集中的每条指令进行编码后得到的各个定长指令编码;数据存储器。当固定比特长度不足以对一条指令的全部内容进行编码时,数据存储器被配置为保存该条指令的一部分内容,使得固定比特长度足以对该条指令的剩余部分进行编码以形成定长指令编码。
根据本公开的第三方面的实施例,优选地,定长指令编码包括变长指示位,用于指示相应指令是否有一部分内容保存在数据存储器中。
根据本公开的第三方面的实施例,优选地,定长指令编码中包括指向保存在数据存储器中的相应指令的一部分内容的链接。
根据本公开的第三方面的实施例,优选地,定长指令编码中包括寄存器地址,寄存器用于加载保存在数据存储器中的相应指令的一部分内容。
根据本公开的第三方面的实施例,优选地,寄存器地址为寄存器的首地址,并且定长指令编码中还包括加载相应指令的一部分内容所需占用的寄存器长度。
根据本公开的第三方面的实施例,优选地,定长指令编码中包括数据缓存区域地址,数据缓存用于预取保存在数据存储器中的相应指令的一部分内容。
根据本公开的第三方面的实施例,优选地,数据缓存地址为数据缓存区域的首地址,并且定长指令编码中还包括预取相应指令的一部分内容所需占用的数据缓存区域的长度。
本公开的一个主要特点在于,指令集的编码长度是固定的。本领域技术人员应该理解,指令长度的固定有利于编译器编码效率。
此外,尽管指令集的编码长度是固定的,但是对于需要超出固定编码长度的指令而言,本公开也提供了将指令编码长度进行扩展的方法,由此实现超长指令,从而有利于指令集可扩展性。
由此,本公开所教导的技术方案中,指令编码效率比较高。
而且,由于指令集是长度固定的,超长指令的实现是通过跳转到数据存储地址而实现的。因此,指令集急剧扩展不需要改变指令取出的带宽,指令集急剧扩展也不需要改变指令缓冲器的大小。
此外,在指令扩展过程中,指令编码中保存寄存器或数据缓存区域的首地址,还指定需要扩展的部分所占用的寄存器或数据缓存区域的长度。由此,在寄存器中加载或在数据缓存区域中预取需要扩展的部分,以实现超长指令的扩展。由此可以看出,针对这一情况,跳转指令地址的计算相对简单。
附图说明
包含在说明书中并且构成说明书的一部分的附图与说明书一起示出了本公开的示例性实施例、特征和方面,并且用于解释本公开的原理。
图1A和1B示出了几种长度分别为32比特和64比特的指令代码结构的示意图。
图2示出了GPU芯片的内部结构的示意图。
图3示出了流处理器的内部结构的示意图。
图4示出了GPU单指令多线程(SIMT)的内部结构的示意图。
图5示出了根据本公开的实施例的定长指令集的编码方法的流程图。
图6示出了根据本公开的实施例的定长指令集的解码方法的流程图。
图7示出了根据本公开的实施例的计算系统的示意框图。
图8示出了根据本公开的实施例的编码长度为64比特的定长指令代码结构的示意图。
图9示出了根据本公开的实施例的编码长度为128比特的定长指令代码结构的示意图。
图10示出了根据本公开的优选实施例的定长指令代码结构的示意图,其中变长指示位为0。
图11示出了根据本公开的优选实施例的定长指令代码结构的示意图,其中变长指示位为1。
图12示出了根据本公开的优选实施例的通过寄存器来扩展指令内容的方法的示意图。
图13示出了采用定长指令加7位变长编码的指令代码结构的示意图。
图14示出了采用定长指令加变长编码的指令进行解码的示意图。
具体实施方式
下面通过实施例,并结合附图,对本发明的技术方案作进一步详细的说明,但本发明不限于下面的实施例。
以下将参考附图详细说明本公开的各种示例性实施例、特征和方面。附图中相同的附图标记表示功能相同或相似的元件。尽管在附图中示出了实施例的各种方面,但是除非特别指出,不必按比例绘制附图。
在这里专用的词“示例性”意为“用作例子、实施例或说明性”。这里作为“示例性”所说明的任何实施例不必解释为优于或好于其他实施例。
另外,为了更好的说明本公开,在下文的具体实施方式中给出了众多的具体细节。本领域技术人员应当理解,没有某些具体细节,本公开同样可以实施。在一些实例中,对于本领域技术人员熟知的方法、手段、元件和电路未作详细描述,以便于凸显本公开的主旨。
指令集编码方法
图5示出了根据本公开的实施例的定长指令集的编码方法的流程图。
如图5中所示,根据本公开的一种定长指令集的编码方法500可以开始于步骤S510,在该步骤,使用固定比特长度来对指令集中的每条指令进行编码。在具体实施例中,固定比特长度可以是32、64、128或更多比特。在本公开的优选实施例中,指令集的固定比特长度可以是64或128比特,这符合大多数指令的情况。换句话说,选择64或128比特作为指令集的固定编码长度,兼顾了编码效率(不至于浪费)和尽量减少指令长度扩展的情况。
接下来,在步骤S520,对于固定比特长度是否足以对当前一条指令的全部内容进行编码进行判断。如上所述,按照本公开的设想,大多数情况下,固定比特长度,例如64或128比特,足以对当前一条指令的全部内容进行编码。然而,本公开的目的一方面在于使得指令集的编码长度固定,即定长指令编码;另一方面则在于可以灵活地进行扩展,即如果固定编码长度不够时,可以对该指令的长度进行容易地设置。
因此,在步骤S520的判断结果为“否”时,也就是说,当固定比特长度,例如64或128比特,不足以对一条指令的全部内容进行编码时,方法500可以执行步骤S530。在步骤S530,将该条指令的一部分内容保存在数据存储器中,使得固定比特长度足以对该条指令的剩余部分进行编码以形成编码后的定长指令。
另一种情况是,在步骤S520的判断结果为“是”时,也就是说,当固定比特长度,例如64或128比特,足以对一条指令的全部内容进行编码时,方法500可以执行步骤S540。在步骤S540,进行定长指令编码,将编码后的定长指令存储在系统存储器中。本领域技术人员应该理解,尽管步骤S540被描述为进行定长指令编码,但这里的编码细节与常规的定长指令编码技术依然存在区别,这些区别将在下文进行更详细的讨论。
再回过头来看指令长度需要扩展的情况,如上所述,在步骤S530,将超出固定长度的指令部分保存在数据存储器中,则剩余部分仍可以采用步骤S540的方式进行定长指令编码,即使用固定比特长度对该条指令的剩余部分进行编码以形成编码后的定长指令,并且将编码后的定长指令存储在系统存储器中。
对于指令集中的所有指令,步骤S540执行完毕后,本方法500就可以结束了。
下面将讨论各个步骤,尤其是步骤S530和S540中的一些细节。
根据本公开的指令编码方法的一个优选特征在于:编码后的指令中包括变长指示位。该变长指示位可以是用二进制值0或1来表示的1比特(1位)长度的标志。变长指示位用于指示该条指令是否有一部分内容保存在数据存储器中。例如,当变长指示位的二进制值为0时,指示该条指令不需要扩展变长,所以不会有一部分内容保存在数据存储器中;相反地,当变长指示位的二进制值为1时,指示该条指令是需要扩展变长的,所以该条指令会有一部分内容保存在数据存储器中。当然,变长指示位也可以是2比特长度,或者需要更多的比特,用于指示更加复杂的情况。
当指令需要扩展时,例如,当变长指示位指示该条指令有一部分内容保存在数据存储器中时,编码后的定长指令中应包括指向保存在数据存储器中的该条指令的一部分内容的链接。也就是说,在固定比特长度中,例如64比特中,除了常规的编码内容以外,还需要有一个字段用来存放对指令扩展内容的链接。
本领域技术人员应该理解,变长指示位与指向数据存储器的链接可以共同存在于编码后的定长指令中。然而,定长指令中也可以只包括指向数据存储器的链接,而不包括变长指示位。换句话说,具有指向保存在数据存储器中的该条指令的一部分内容的链接,就已经表明该定长指令是需要扩展的,从而不需要额外的变长指示位来重复指示。
在一种优选实施方式中,该链接可以是寄存器地址。也就是说,当定长指令需要扩展时,编码后的定长指令中包括寄存器地址。寄存器用于加载保存在数据存储器中的该条指令的那一部分内容。
在一种优选实施方式中,寄存器地址可以是寄存器的首地址,并且编码后的定长指令中还包括加载该条指令的一部分内容所需占用的寄存器长度。
也就是说,尽管指令扩展内容存放于数据存储器中,但在读取该部分内容时,需要先将这部分内容加载到寄存器中。寄存器可以是计算系统中的通用寄存器组中的某个寄存器。在编码后的定长指令中,可以明确地指定该寄存器,或者寄存器地址。所需占用的寄存器的长度也可能编码在定长指令中。后文中将有更加详细的描述。
在另一种优选实施方式中,上文中提到的指向保存在数据存储器中的该条指令的一部分内容的链接也可以是数据缓存(D-Cache)区域地址。也就是说,当定长指令需要扩展时,编码后的定长指令中包括数据缓存区域地址。数据缓存用于预取保存在数据存储器中的该条指令的那一部分内容。
在一种优选实施方式中,数据缓存地址可以是数据缓存区域的首地址,并且编码后的指令中还包括预取该条指令的一部分内容所需占用的数据缓存区域的长度。
也就是说,尽管指令扩展内容存放于数据存储器中,但在读取该部分内容时,需要先将这部分内容加载到数据缓存中。数据缓存可以是计算系统中的高速缓存中的某个区域。在编码后的指令中,可以明确地指定该数据缓存区域,或者其地址。所需占用的数据缓存区域的长度也可能编码在定长指令中。后文中将有更加详细的描述。
指令集解码方法
图6示出了根据本公开的实施例的定长指令集的解码方法的流程图。
如图6中所示,根据本公开的一种定长指令集的解码方法600可以开始于步骤S610,在该步骤,从系统存储器中读取固定比特长度的指令编码,其中,所述固定比特长度的指令编码是使用固定比特长度来对指令集中的指令进行编码得到的。关于使用固定比特长度来对指令集中的指令进行编码,可以参见图5中编码方法500的描绘。因此,从另一个角度来说,解码方法600实际上是针对编码方法500所得到的编码后的定长指令执行的。
接下来,在步骤S620,根据读取的定长指令编码的内容,对于读取的固定比特长度的指令编码是否已经包括了相应指令的全部内容进行判断。如上所述,按照本公开的设想,大多数情况下,固定比特长度,例如64或128比特,足以对当前一条指令的全部内容进行编码。所以,在大多数情况下,读取的固定比特长度的指令编码已经包括了相应指令的全部内容。然而,本公开的目的一方面在于使得指令集的编码长度固定,即定长指令编码;另一方面则在于可以灵活地进行扩展,即如果固定编码长度不够时,可以对该指令的长度进行容易地设置。所以,还存在读取的固定比特长度的指令编码未能包括相应指令的全部内容的情况。
因此,在步骤S620的判断结果为“否”时,也就是说,当确定读取的固定比特长度的指令编码,例如64或128比特,并未包括相应指令的全部内容时,方法600可以执行步骤S630。在步骤S630,进一步从数据存储器中读取内容,使得从系统存储器中读取的定长指令编码与从数据存储器中读取的内容合并构成相应指令的全部内容。
另一种情况是,在步骤S620的判断结果为“是”时,也就是说,当确定读取的固定比特长度的指令编码,例如64或128比特,已经包括了相应指令的全部内容时,方法600可以执行步骤S640。在步骤S640,将相应指令的全部内容解码为可执行的指令。
再回过头来看指令长度扩展的情况,如上所述,在步骤S630,从数据存储器中读取内容,则相应指令的全部内容都已得到,所以仍可以采用步骤S640的方式进行解码,即,在将从系统存储器中读取的定长指令编码与从数据存储器中读取的内容合并构成相应指令的全部内容后,将相应指令的全部内容解码为可执行的指令。
步骤S640执行完毕后,本方法600就可以结束了。
下面将讨论各个步骤,尤其是步骤S630和S640中的一些细节。
根据本公开的指令解码方法的一个优选特征在于:从系统存储器中读取的固定比特长度的每个定长指令编码中包括变长指示位。该变长指示位可以是用二进制值0或1来表示的1比特(1位)长度的标志。变长指示位用于指示相应指令是否有一部分内容保存在数据存储器中。例如,当变长指示位的二进制值为0时,指示相应指令不需要扩展变长,所以不会有一部分内容保存在数据存储器中;相反地,当变长指示位的二进制值为1时,指示相应指令需要扩展变长,所以相应指令会有一部分内容保存在数据存储器中。当然,变长指示位也可以是2比特长度,或者需要更多的比特,用于指示更加复杂的情况。
当定长指令编码需要扩展变长时,例如,当变长指示位指示相应指令有一部分内容保存在数据存储器中时,从系统存储器中读取的定长指令编码中还包括指向保存在数据存储器中的相应指令的一部分内容的链接。也就是说,在固定比特长度中,例如64比特中,除了常规的编码内容以外,还需要有一个字段用来存放对指令扩展内容的链接。
本领域技术人员应该理解,变长指示位与指向数据存储器的链接可以共同存在于定长指令编码中。然而,定长指令编码中也可以只包括指向数据存储器的链接,而不包括变长指示位。换句话说,具有指向保存在数据存储器中的相应指令的一部分内容的链接,就已经表明该定长指令编码是需要扩展的,从而不需要额外的变长指示位来重复指示。
在一种优选实施方式中,该链接可以是寄存器地址。也就是说,当定长指令编码需要扩展时,从系统存储器中读取的定长指令编码中包括寄存器地址。寄存器用于加载保存在数据存储器中的相应指令的那一部分内容。
在一种优选实施方式中,寄存器地址可以是寄存器的首地址,并且从系统存储器中读取的定长指令编码中还包括加载相应指令的一部分内容所需占用的寄存器长度。
也就是说,尽管指令扩展内容存放于数据存储器中,但在读取该部分内容时,需要先将这部分内容加载到寄存器中。寄存器可以是计算系统中的通用寄存器组中的某个寄存器。在固定比特长度的指令编码中,可以明确地指定该寄存器,或者寄存器地址。所需占用的寄存器的长度也可能编码在指令中。后文中将有更加详细的描述。
在另一种优选实施方式中,上文中提到的指向保存在数据存储器中的相应指令的一部分内容的链接也可以是数据缓存(D-Cache)区域地址。也就是说,当定长指令编码需要扩展时,从系统存储器中读取的定长指令编码中包括数据缓存区域地址。数据缓存用于预取保存在数据存储器中的相应指令的那一部分内容。
在一种优选实施方式中,数据缓存地址可以是数据缓存区域的首地址,并且从系统存储器中读取的定长指令编码中还包括预取相应指令的一部分内容所需占用的数据缓存区域的长度。
也就是说,尽管指令扩展内容存放于数据存储器中,但在读取该部分内容时,需要先将这部分内容加载到数据缓存中。数据缓存可以是计算系统中的高速缓存中的某个区域。在固定比特长度的指令编码中,可以明确地指定该数据缓存区域,或者其地址。所需占用的数据缓存区域的长度也可能编码在指令中。后文中将有更加详细的描述。
计算系统
图7示出了根据本公开的实施例的计算系统的示意框图。
如图7中所示,根据本公开的计算系统700可以包括:计算核710、系统存储器720和数据存储器730。系统存储器720被配置为存储使用固定比特长度对计算系统700的指令集中的每条指令进行编码后得到的各个定长指令编码。当固定比特长度不足以对一条指令的全部内容进行编码时,数据存储器730被配置为保存该条指令的一部分内容,使得固定比特长度足以对该条指令的剩余部分进行编码以形成定长指令编码。
在计算系统700中,定长指令编码包括变长指示位,用于指示相应指令是否有一部分内容保存在数据存储器中。
当定长指令编码需要扩展时,定长指令编码中包括指向保存在数据存储器中的相应指令的一部分内容的链接。
在一种优选实施方式中,当定长指令编码需要扩展时,定长指令编码中包括寄存器地址,寄存器用于加载保存在数据存储器中的相应指令的那一部分内容。
在一种优选实施方式中,寄存器地址为寄存器的首地址,并且定长指令编码中还包括加载相应指令的一部分内容所需占用的寄存器长度。
在另一种优选实施方式中,当定长指令编码需要扩展时,定长指令编码中包括数据缓存区域地址,数据缓存用于预取保存在数据存储器中的相应指令的那一部分内容。
在一种优选实施方式中,数据缓存地址为数据缓存区域的首地址,并且定长指令编码中还包括预取相应指令的一部分内容所需占用的数据缓存区域的长度。
下面将结合更具体的实施例来描述本公开的方法以及系统。
实施例1
在一个优选实施例中,本公开所涉及的一种计算系统的指令集是定长的。指令集定长的含义是指,该指令集的指令编码的长度固定。例如,该指令集的指令编码可以是64比特(64位)的。图8示出了根据本公开的实施例的编码长度为64比特的定长指令代码结构的示意图。在另一个优选实施例中,指令集的指令编码的固定长度可以是128比特(128位)。图9示出了根据本公开的实施例的编码长度为128比特的定长指令代码结构的示意图。
一般情况下或大多数情况下,可以就用64比特来对每个指令进行编码。在这64比特中,可以包含不同的字段。例如,如图1A和1B中所示,这64比特可以包括一个或多个比特的固定标志位、操作码字段、一个或多个操作数字段、目标寄存器字段等等。
然而,固定比特长度的指令编码不一定能满足所有的情况。根据本公开的实施例,在定长不够的时候,可以在指令编码中包括一个特殊的字段:在该字段中,使用4-8比特来指明该指令为变长指令且对该指令进行扩展。
例如,根据本公开的一个优选实施例,该扩展字段包括8比特长度。该8比特可以如下使用:
当Bits[0]=0,即该字段中的第0位的二进制值为0时,指示该指令为定长指令,即该指令不需要进行扩展。在此情况下,预留的其他7个比特可以用作其他编码用途。图10示出了根据本公开的优选实施例的定长指令代码结构的示意图,其中变长指示位为0。
当Bits[0]=1,即该字段中的第0位的二进制值为1时,指示该指令为变长指令,即该指令需要进行扩展。在此情况下,该指令不仅包括定长指定编码中的内容,还包括扩展的内容。扩展的内容可以存储在其他存储位置上,在需要扩展时,加载到指定的寄存器上。例如,在这个优选实施例中,该字段中的BITS[1:7]即第1到7位的二进制值指示的就是该变长指令的扩展的内容所加载到的寄存器首地址。图11示出了根据本公开的优选实施例的定长指令代码结构的示意图,其中变长指示位为1。
可以将占用的寄存器长度定义在指令中,例如:
long_instructionRDest,RSrc,enable_variant,Register for variant instlength varint_length:5
在这个扩展后变长的指令中,RDest代表目的寄存器,RSrc代表源寄存器,enable_variant代表其他可用变量。而用于该变长指令扩展所需占用的寄存器的长度可以被定义为5。
在编译器生成该指令集的代码时,对于定长指令而言,生成的代码就是固定长度的。对于长度变长的扩展指令而言,对于该指令仍然生成固定长度的代码,可以将需要扩展的变长部分保存在数据段,即存储在数据存储器中,而不是与固定长度的代码一起存储在系统存储器中。
图12示出了根据本公开的优选实施例的通过寄存器来扩展指令内容的方法的示意图。图12的左侧显示的是指令缓冲区,右侧显示的是通用寄存器组。
如图12中所示,当执行指令集中的指令时,从系统存储器中加载固定长度的指令代码到指令缓冲器中。对于定长指令而言,根据代码中的特殊位置上的指示(第0位的二进制值为0)确定该指令不需要扩展,直接将编码后的指令翻译(解码)为具体的指令操作去执行。而对于长度变长的扩展指令而言,从系统存储器中加载固定长度的指令代码到指令缓冲器中后,根据代码中的特殊位置上的指示(第0位的二进制值为1)确定该指令需要扩展,同时代码中已经指定了需要链接到的寄存器(寄存器首地址)。例如,在图12的示例中,一条指令链接到寄存器9,另一条指令链接到寄存器7。图12示出了解码链接到寄存器9的指令的情况。本领域技术人员应该可以类推出解码链接到寄存器7的指令的类似的情况。无论链接到哪个寄存器,需要提前通过Load指令将指令扩展部分的内容加载到指定寄存器上。通过读取寄存器中的扩展内容,解码后的指令得以扩展,从而可以根据扩展后的具体指令内容去执行相应操作。
本领域技术人员应当理解,尽管图12的右侧显示的是通用寄存器组,但是根据本公开的思想,也可以使用数据缓存(D-Cache)中预取的区域来存放变长指令的扩展内容。同样地,无论链接到数据缓存中的哪个区域,需要提前通过Load指令将指令扩展部分的内容加载到指定区域上。通过读取指定数据缓存区域中的扩展内容,解码后的指令得以扩展,从而可以根据扩展后的具体指令内容去执行相应操作。
实施例2
本实施例采用定长指令+7位warp Share GPR的方法实现变长指令编码和译码。
首先在编码中,用7位(比特)来指明变长编码部分的warp Share GPR基地址或首地址(wGPR base)。
7比特编码可以表达128个不同的值。也可以用4-8位不同编码形式表示warpShare GPR基地址或首地址。如图13所示,给出了采用定长指令+7位变长编码的示意图。
在本公开的当前实施例中,可以使用超过一个warp share GPR。
每条指令隐式指明所需的wGPR的数量。例如:
tensor_read_2D,需要2个w GPR定义维度
tensor_read_3D,需要3个w GPR定义维度
tensor_read_4D,需要4个w GPR定义维度
tensor_read_5D,需要5个w GPR定义维度
tensor_read_6D,需要6个w GPR定义维度
在取指阶段,读取固定长度的指令。
在译码(解码)阶段,如果发现变长指令,发送wGPR base和Length(长度)到warpShare GPR,从warp Share GPR中读取对应长度的wGPR数据。该过程可以参见图14的描绘。
考虑定义一个复杂的DOT Product 4指令。
公式Result=A0*B0+A1*B1+A2*B2+A3*B3
那么该指令包含8个操作数(operands)。每个操作数需要9比特编码,则需要72比特。结果寄存器需要9比特编码,即需要9比特。每个操作数包含4比特的前操作,则一共需要32比特编码。
BITS[0:1]:
Value 0:Keep original value//保持原数值
Value 1:Negative//取反
Value 2:ABS//绝对值
Value 3//预留
BITS[2:3]:
Value 0---keep register value//保持寄存器值
Value 1---register value*2//寄存器值*2
Value 2---register value*1/2//寄存器值*1/2
Value 3---register value*4//寄存器值*4
操作数的前操作需要32比特。运算编码需要10比特。
总计10+72+9+32+7(w GPR base)=128比特,即需要4DWORD。
技术效果
如前所述,本公开的一个主要特点在于,指令集的编码长度是固定的。本领域技术人员应该理解,指令长度的固定有利于编译器编码效率。
此外,尽管指令集的编码长度是固定的,但是对于需要超出固定编码长度的指令而言,本公开的另一个主要特点在于,提供了将指令编码长度进行扩展的方法,由此实现超长指令,从而有利于指令集可扩展性。
由此,本公开所教导的技术方案中,指令编码效率比较高。
而且,由于指令集是长度固定的,超长指令的实现是通过跳转到数据存储地址而实现的。因此,指令集急剧扩展不需要改变指令取出的带宽,指令集急剧扩展也不需要改变指令缓冲器的大小。
此外,在指令扩展过程中,指令编码中保存寄存器或数据缓存区域的首地址,还指定需要扩展的部分所占用的寄存器或数据缓存区域的长度。由此,在寄存器中加载或在数据缓存区域中预取需要扩展的部分,以实现超长指令的扩展。由此可以看出,针对这一情况,跳转指令地址的计算相对简单。
以上已经描述了本公开的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其他普通技术人员能理解本文披露的各实施例。
Claims (21)
1.一种定长指令集的编码方法,包括:
使用固定比特长度来对指令集中的每条指令进行编码;
将编码后的定长指令存储在系统存储器中,
其中,当所述固定比特长度不足以对一条指令的全部内容进行编码时,则将该条指令的一部分内容保存在数据存储器中,使得所述固定比特长度足以对该条指令的剩余部分进行编码以形成编码后的定长指令。
2.根据权利要求1所述的方法,其中,所述编码后的定长指令中包括变长指示位,用于指示该条指令是否有一部分内容保存在数据存储器中。
3.根据权利要求1或2所述的方法,其中,所述编码后的定长指令中包括指向保存在数据存储器中的该条指令的一部分内容的链接。
4.根据权利要求3所述的方法,其中,所述编码后的定长指令中包括寄存器地址,所述寄存器用于加载保存在数据存储器中的该条指令的一部分内容。
5.根据权利要求4所述的方法,其中,所述寄存器地址为所述寄存器的首地址,并且其中,所述编码后的定长指令中还包括加载该条指令的一部分内容所需占用的寄存器长度。
6.根据权利要求3所述的方法,其中,所述编码后的定长指令中还包括数据缓存区域地址,所述数据缓存用于预取保存在数据存储器中的该条指令的一部分内容。
7.根据权利要求6所述的方法,其中,所述数据缓存地址为所述数据缓存区域的首地址,并且其中,所述编码后的定长指令中还包括预取该条指令的一部分内容所需占用的数据缓存区域的长度。
8.一种定长指令集的解码方法,包括:
从系统存储器中读取固定比特长度的指令编码,其中,所述固定比特长度的指令编码是使用固定比特长度来对指令集中的指令进行编码得到的;
根据读取的定长指令编码的内容,确定读取的固定比特长度的指令编码是否已经包括了相应指令的全部内容;
当确定读取的固定比特长度的指令编码并未包括相应指令的全部内容时,则进一步从数据存储器中读取内容,使得从系统存储器中读取的定长指令编码与从数据存储器中读取的内容合并构成相应指令的全部内容;
将相应指令的全部内容解码为可执行的指令。
9.根据权利要求8所述的方法,其中,所述的从系统存储器中读取的定长指令编码包括变长指示位,用于指示相应指令是否有一部分内容保存在数据存储器中。
10.根据权利要求8或9所述的方法,其中,所述的从系统存储器中读取的定长指令编码中包括指向保存在数据存储器中的相应指令的一部分内容的链接。
11.根据权利要求10所述的方法,其中,所述的从系统存储器中读取的定长指令编码中包括寄存器地址,所述寄存器用于加载保存在数据存储器中的相应指令的一部分内容。
12.根据权利要求11所述的方法,其中,所述寄存器地址为所述寄存器的首地址,并且其中,所述的从系统存储器中读取的定长指令编码中还包括加载相应指令的一部分内容所需占用的寄存器长度。
13.根据权利要求10所述的方法,其中,所述的从系统存储器中读取的定长指令编码中包括数据缓存区域地址,所述数据缓存用于预取保存在数据存储器中的相应指令的一部分内容。
14.根据权利要求13所述的方法,其中,所述数据缓存地址为所述数据缓存区域的首地址,并且其中,所述的从系统存储器中读取的定长指令编码中还包括预取相应指令的一部分内容所需占用的数据缓存区域的长度。
15.一种计算系统,包括:
计算核;
系统存储器,被配置为存储使用固定比特长度对所述计算系统的指令集中的每条指令进行编码后得到的各个定长指令编码;
数据存储器,
其中,当所述固定比特长度不足以对一条指令的全部内容进行编码时,所述数据存储器被配置为保存该条指令的一部分内容,使得所述固定比特长度足以对该条指令的剩余部分进行编码以形成定长指令编码。
16.根据权利要求15所述的计算系统,其中,所述定长指令编码包括变长指示位,用于指示相应指令是否有一部分内容保存在数据存储器中。
17.根据权利要求15或16所述的计算系统,其中,所述定长指令编码包括指向保存在数据存储器中的相应指令的一部分内容的链接。
18.根据权利要求17所述的计算系统,其中,所述定长指令编码中包括寄存器地址,所述寄存器用于加载保存在数据存储器中的相应指令的一部分内容。
19.根据权利要求18所述的计算系统,其中,所述寄存器地址为所述寄存器的首地址,并且其中,所述定长指令编码中还包括加载相应指令的一部分内容所需占用的寄存器长度。
20.根据权利要求17所述的计算系统,其中,所述定长指令编码中包括数据缓存区域地址,所述数据缓存用于预取保存在数据存储器中的相应指令的一部分内容。
21.根据权利要求20所述的计算系统,其中,所述数据缓存地址为所述数据缓存区域的首地址,并且其中,所述定长指令编码中还包括预取相应指令的一部分内容所需占用的数据缓存区域的长度。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110322351.4A CN113138800B (zh) | 2021-03-25 | 2021-03-25 | 定长指令集的编解码方法及计算系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110322351.4A CN113138800B (zh) | 2021-03-25 | 2021-03-25 | 定长指令集的编解码方法及计算系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113138800A true CN113138800A (zh) | 2021-07-20 |
CN113138800B CN113138800B (zh) | 2023-05-09 |
Family
ID=76810754
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110322351.4A Active CN113138800B (zh) | 2021-03-25 | 2021-03-25 | 定长指令集的编解码方法及计算系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113138800B (zh) |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1144359A (zh) * | 1995-05-31 | 1997-03-05 | 松下电器产业株式会社 | 支持程序编码长度减小的微处理器 |
JPH09185548A (ja) * | 1995-12-28 | 1997-07-15 | Sony Corp | キャッシュメモリ制御方法、可変長符号化方法、および可変長復号化方法 |
US6633969B1 (en) * | 2000-08-11 | 2003-10-14 | Lsi Logic Corporation | Instruction translation system and method achieving single-cycle translation of variable-length MIPS16 instructions |
TW200534163A (en) * | 2004-04-12 | 2005-10-16 | Univ Nat Chiao Tung | Hierarchical instruction coding suitable for very long instruction word and decoder thereof |
CN102200905A (zh) * | 2010-03-26 | 2011-09-28 | Mips技术公司 | 具有紧凑指令集架构的微处理器 |
CN103336681A (zh) * | 2013-07-03 | 2013-10-02 | 同济大学 | 针对采用变长指令集的流水线结构处理器的取指方法 |
CN103582871A (zh) * | 2011-05-03 | 2014-02-12 | 高通股份有限公司 | 用于内嵌在存储器层级内的经熵编码软件的存储和翻译的方法和设备 |
CN111158756A (zh) * | 2019-12-31 | 2020-05-15 | 百度在线网络技术(北京)有限公司 | 用于处理信息的方法和装置 |
-
2021
- 2021-03-25 CN CN202110322351.4A patent/CN113138800B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1144359A (zh) * | 1995-05-31 | 1997-03-05 | 松下电器产业株式会社 | 支持程序编码长度减小的微处理器 |
JPH09185548A (ja) * | 1995-12-28 | 1997-07-15 | Sony Corp | キャッシュメモリ制御方法、可変長符号化方法、および可変長復号化方法 |
US6633969B1 (en) * | 2000-08-11 | 2003-10-14 | Lsi Logic Corporation | Instruction translation system and method achieving single-cycle translation of variable-length MIPS16 instructions |
TW200534163A (en) * | 2004-04-12 | 2005-10-16 | Univ Nat Chiao Tung | Hierarchical instruction coding suitable for very long instruction word and decoder thereof |
CN102200905A (zh) * | 2010-03-26 | 2011-09-28 | Mips技术公司 | 具有紧凑指令集架构的微处理器 |
CN103582871A (zh) * | 2011-05-03 | 2014-02-12 | 高通股份有限公司 | 用于内嵌在存储器层级内的经熵编码软件的存储和翻译的方法和设备 |
CN103336681A (zh) * | 2013-07-03 | 2013-10-02 | 同济大学 | 针对采用变长指令集的流水线结构处理器的取指方法 |
CN111158756A (zh) * | 2019-12-31 | 2020-05-15 | 百度在线网络技术(北京)有限公司 | 用于处理信息的方法和装置 |
Non-Patent Citations (2)
Title |
---|
YUAN XIE等: "Code compression using variable-to-fixed coding based on arithmetic coding", 《DATA COMPRESSION CONFERENCE, 2003. PROCEEDINGS. DCC 2003》 * |
马佳利: "基于FPGA的卷积神经网络加速器关键技术研究与设计", 《中国优秀硕士学位论文全文数据库》 * |
Also Published As
Publication number | Publication date |
---|---|
CN113138800B (zh) | 2023-05-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6151662A (en) | Data transaction typing for improved caching and prefetching characteristics | |
JP2616182B2 (ja) | データ処理装置 | |
KR100230105B1 (ko) | 간략화된 명령 세트 프로세서의 성능 개선 방법 및 그 프로세서 시스템 | |
US6275927B2 (en) | Compressing variable-length instruction prefix bytes | |
KR100218572B1 (ko) | 고성능 프로세서의 번역버퍼에 대해 세분성 힌트를 이용하는 프로세서 동작 방법 및 장치 | |
JP5837126B2 (ja) | 現在実行している命令セット以外の命令セットから命令をプリロードするシステム、方法およびソフトウェア | |
US6665749B1 (en) | Bus protocol for efficiently transferring vector data | |
JP7244046B2 (ja) | 遠隔アトミックオペレーションの空間的・時間的マージ | |
JP5341163B2 (ja) | 可変長命令の固定数を持つ命令キャッシュ | |
US20010021970A1 (en) | Data processor | |
US20050086277A1 (en) | Processor core for using external extended arithmetic unit efficiently and processor incorporating the same | |
JP2017538213A (ja) | アウトオブオーダーハードウェアソフトウェア協調設計プロセッサにおいてスタック同期命令を用いてプレディケート値のスタックを実装し維持する方法および装置 | |
KR20160130324A (ko) | 1들을 최하위 비트들이 되도록 풀링하면서 비트들을 좌측으로 시프팅하기 위한 명령어 | |
JP2024501635A (ja) | 固定機能動作を使用するオフロードされた命令のプロセッサ誘導実行 | |
US20050251621A1 (en) | Method for realizing autonomous load/store by using symbolic machine code | |
US6014739A (en) | Increasing general registers in X86 processors | |
CN111767081A (zh) | 用于加速存储处理的装置、方法和系统 | |
JP2018502364A (ja) | 実行のためのデータ要素の読み込みにおいて空間的局所性を考慮する装置および方法 | |
US6460116B1 (en) | Using separate caches for variable and generated fixed-length instructions | |
JP2021051727A (ja) | グラフアプリケーション内の圧縮されたリストに効率的にアクセスするための間接参照のロード及びストアへのisaサポートのシステム及び方法 | |
US6405303B1 (en) | Massively parallel decoding and execution of variable-length instructions | |
CN110554887A (zh) | 间接存储器提取器 | |
CN113138800B (zh) | 定长指令集的编解码方法及计算系统 | |
US6253309B1 (en) | Forcing regularity into a CISC instruction set by padding instructions | |
JP2556182B2 (ja) | デ−タ処理装置 |
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 |