CN112540795A - 指令处理装置和指令处理方法 - Google Patents

指令处理装置和指令处理方法 Download PDF

Info

Publication number
CN112540795A
CN112540795A CN201910898789.XA CN201910898789A CN112540795A CN 112540795 A CN112540795 A CN 112540795A CN 201910898789 A CN201910898789 A CN 201910898789A CN 112540795 A CN112540795 A CN 112540795A
Authority
CN
China
Prior art keywords
instruction
prediction information
field
information
meta
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
CN201910898789.XA
Other languages
English (en)
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.)
Alibaba Group Holding Ltd
Original Assignee
Alibaba Group Holding 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 Alibaba Group Holding Ltd filed Critical Alibaba Group Holding Ltd
Priority to CN201910898789.XA priority Critical patent/CN112540795A/zh
Priority to US16/931,932 priority patent/US11550587B2/en
Priority to PCT/US2020/042490 priority patent/WO2021061260A1/en
Publication of CN112540795A publication Critical patent/CN112540795A/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/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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt

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)
  • Advance Control (AREA)

Abstract

公开了一种指令处理装置和指令处理方法。指令处理装置包括:指令边界预测单元,用于获取所述变长指令集的指令包,并为所述指令包内的每个指令元字段增加指令预测信息;指令流水线结构,所述指令流水线结构的取指单元包括指令边界确定单元,所述指令边界确定单元用于根据所述指令预测信息确定一条或多条指令。和现有技术相比,本发明实施例的优势在于:在进入到指令流水线结构之前,将指令预测信息添加到每个指令元字段中,使得取指单元可以根据指令预测信息确定指令边界信息,从而可以更快速地确定指令边界信息,避免了花费更多的逻辑长度确定指令边界信息。

Description

指令处理装置和指令处理方法
技术领域
本发明涉及处理器制造领域,更具体而言,涉及一种指令处理装置和指令处理方法。
背景技术
处理器架构的改进是非常困难的任务。研发人员为此付出大量劳动,期望在哪怕最微小环节方面取得进步。在高性能处理器的设计中,减少流水线级成为改进处理器架构的共识。
在流水线结构中,取指级的主要任务是按照指令包地址,从指令高速缓或外部总线上获取固定长度的指令包,得到指令包之后,根据指令PC的值,确定有效指令在指令包的位置,然后对有效指令中的所有指令元字段逐一译码,确定每个指令元字段是否为指令头,然后根据PC的值及每个指令元字段的指令头信息从前到后依次确认每条指令的边界,拆分指令包得到正确的指令。
在取指级,通常包含如下两个功能:
1)、封装好指令信息,存入到指令缓存中;
2)、通常需要更快的得到指令的部分译码信息,例如,指令是否为分支指令,或者函数返回指令等等,利用这些信息可以开始对程序的执行流进行改变,比如利用分支预测信息进行跳转,利用函数返回预测器预测的函数返回地址,即可开始新的指令流的取指。
传统方法中,在得到指令包之后才进行指令边界信息的译码,不利于上述两个功能在同一时间的取指级中实现,对于高性能处理器而言,由于不满足时序要求,将会增加额外的流水线级,从而导致处理器的性能极大的降低,例如,对于分支指令,需要晚一个周期才能得到是否跳转的信息。
发明内容
有鉴于此,本方案针对提出了一种指令处理装置和指令处理方法,以解决上述问题。
为了达到这个目的,根据本发明的第一方面,本发明提供一种指令处理装置,用于处理变长指令集下的指令,包括:
指令边界预测单元,用于获取所述变长指令集的指令包,并为所述指令包内的每个指令元字段增加指令预测信息;
指令流水线结构,所述指令流水线结构的取指单元包括指令边界确定单元,所述指令边界确定单元用于根据所述指令预测信息确定一条或多条指令。
在一些实施例中,所述指令边界预测单元通过以下步骤获得每个指令元字段的指令预测信息:
确定所述指令包中的第一个指令元字段在所述变长指令集下的所有可能设定;
根据在先指令元字段的指令预测信息和译码信息确定当前指令元字段的指令预测信息。
在一些实施例中,根据前x个指令元字段的指令预测信息和译码信息确定所述当前指令元字段的指令预测信息,其中x的值与所述变长指令集中的最大的指令编码长度和所述指令元字段的长度相关。
在一些实施例中,所述指令边界确定单元确定与程序指针对应的指令元字段,并据此得到与所述程序指针对应的指令元字段的指令预测信息,如果与所述程序指针对应的指令元字段的指令预测信息包含表示指令头的条目,则将所述条目作为所述指令边界信息,并据此得到一个或多条指令。
在一些实施例中,如果与所述程序指针对应的指令元字段的指令预测信息不包含表示指令头的条目,则调用指令边界计算单元重新计算指令边界信息。
在一些实施例中,所述装置还包括指令高速缓存,用于缓存增加了指令预测信息的指令包。
在一些实施例中,所述装置为处理器核。
在一些实施例中,所述装置为处理器。
第二方面,本发明实施例提供一种指令处理方法,包括:
获取变长指令集的指令包,并为所述指令包内的每个指令元字段增加指令预测信息;以及
在指令流水线的取指级,根据所述指令预测信息确定一条或多条指令。
在一些实施例中,通过以下步骤获得每个指令元字段的指令预测信息:
确定所述指令包中的第一个指令元字段在所述变长指令集下的所有可能设定;
根据在先指令元字段的指令预测信息和译码信息确定当前指令元字段的指令预测信息。
在一些实施例中,根据前x个指令元字段的指令预测信息和译码信息确定所述当前指令元字段的指令预测信息,其中x的值与所述变长指令集中的最大的指令编码长度和所述指令元字段的长度相关。
在一些实施例中,所述根据所述指令预测信息确定一条或多条指令包括:
确定与程序指针对应的指令元字段,并据此得到与所述程序指针对应的指令元字段的指令预测信息;
如果与所述程序指针对应的指令元字段的指令预测信息包含表示指令头的条目,则将所述条目作为所述指令边界信息,并据此得到一个或多条指令。
在一些实施例中,所述指令处理方法还包括:如果与所述程序指针对应的指令元字段的指令预测信息不包含表示指令头的条目,则重新计算指令边界信息。
在一些实施例中,还包括:缓存增加了指令预测信息的指令包。
第三方面,本发明实施例提供一种计算机***,包括:存储器;
与所述存储器耦合的处理器,所述处理器包括:
指令边界预测单元,用于获取所述变长指令集的指令包,并为所述指令包内的每个指令元字段增加指令预测信息;
指令流水线结构,所述指令流水线结构的取指单元包括指令边界确定单元,所述指令边界确定单元用于根据所述指令预测信息确定一条或多条指令。
第四方面,本发明实施例提供一种片上***,包括上述任意一项所述的指令处理装置。
和现有技术相比,本发明实施例的优势在于:在进入到指令流水线结构之前,将指令预测信息添加到每个指令元字段中,使得取指单元可以根据指令预测信息确定指令边界信息,从而可以更快速地确定指令边界信息,避免了花费过多时间确定指令边界信息,并进一步避免了由于在当前取指周期内没有充足时间对当前指令(例如分支指令)进行预译码,导致需要增加额外的流水线级的问题。
附图说明
通过参考以下附图对本发明实施例的描述,本发明的上述以及其它目的、特征和优点将更为清楚,在附图中:
图1是用于实施本发明实施例的计算机***的结构示意图;
图2是用于实施本发明实施例的片上***的结构示意图;
图3是用于实施本发明实施例的处理器核的结构示意图;
图4是图3中的指令预测单元的输入输出示意图;
图5a和图5b分别示出了16/32bit的变长指令集的预测逻辑的示意图;
图5c示出了适用于任意变长指令集的预测逻辑的示意图;
图6示出了指令确认单元的确认逻辑的示意图;
图7示出了图3所示的前端单元301的更多细节;
图8是图7基础上的一个实施例变形。
具体实施方式
以下基于实施例对本发明进行描述,但是本发明并不仅仅限于这些实施例。在下文对本发明的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员来说没有这些细节部分的描述也可以完全理解本发明。为了避免混淆本发明的实质,公知的方法、过程、流程没有详细叙述。另外附图不一定是按比例绘制的。
在本文中使用以下术语。
变长指令集,指令集中的指令的指令编码长度为可变长度,例如,指令集中包括既包括以16bit编码的指令也包括以32bit编码的指令。
指令包,指处理器从指令高速缓中或外部总线上获取、固定长度的二进制段。
指令预测信息,用于指示一条指令元字段是否指令头、指令尾或指令中间各段等的预测信息。
指令头信息,用于指示指令包中的一个指令元字段是否为指令头。如果确定了指令包中的所有指令元字段的指令头信息,则指令边界信息也就确定了。
指令边界信息,变长编码的指令集中,指令在内存中并不是按照地址对齐的,因此需要获取每条指令的边界,即一条指令的指令头在一块连续地址上的位置。在本文中,指令头信息和指令边界信息可以为对指令预测信息进行比较分析确认的信息,也可以为经由指令边界计算单元得到的信息。该信息基本上可以认为是真实的指令边界信息,除非计算或者预测错误。
指令元字段,按照变长指令集中各个指令编码长度的最大公约数从指令包中提取的一个个字段。例如,如果一个指令包内包含两种指令编码,指令编码长度分别为8bit和16bit,则按照8bit从指令包中提取一个个指令元字段。
指令高速缓存,第一级高速缓存,用于存储各个指令。
程序PC,程序指针。
指令流水线,指令流水线是为提高处理器执行指令的效率,把一条指令的操作分成多个细小的步骤,每个步骤由专门的电路完成的方式。目前主流的指令流水线的技术有三级、四级、五级、七级和超级指令流水线,等等。例如教课书示例的五级指令流水线包括取指级、译码级、执行级、访存级和写回级。在本文中,将取指级、译码级、执行级、访存级和写回级又称为取指单元、译码单元、执行单元、访存单元和引退单元。将实现指令流水线的软件硬件组合称为指令流水线结构。
图1是用于实施本发明的计算机***的结构示意图。参考图1,***100是“中心”***架构的示例。***100可基于目前市场上各种型号的处理器构建,并由WINDOWSTM操作***版本、UNIX操作***、Linux 操作***等操作***驱动。此外,***100一般在PC机、台式机、笔记本、服务器中实施。
如图1所示,***100包括处理器102。处理器102具有本领域所公知的数据处理能力。它可以是复杂指令集(CISC)架构、精简指令集 (RISC)架构、超长指令宇(VLIW)架构的处理器、或者是实现上述指令集组合的处理器、或者是任何为了专用目标构建的处理器设备。
处理器102耦接到***总线101,***总线101可以在处理器102和其它部件之间传输数据信号。处理器102还包括根据本发明实施例提供的技术方案进行改进的处理器核1021,其具体细节将在下文提供。
***100还包括存储器104和显卡105。存储器104可以是动态随机存取存储器(DRAM)设备、静态随机存取存储器(SRAM)设备、闪速存储器设备或其它存储器设备。存储器104可以存储由数据信号表示的指令信息和/或数据信息。显卡105包括显示驱动器,用于控制显示信号在显示屏上的正确显示。
经由存储器控制器中心103,显卡105和存储器104被耦接到***总线101上。处理器102可以经由***总线101与存储器控制器中心103 通信。存储器控制器中心103向存储器104提供高带宽存储器访问路径 421,用于指令信息和数据信息的存储和读取。同时,存储器控制器中心 103和显卡105基于显卡信号输入输出接口420进行显示信号的传输。显卡信号输入输出接口420例如为DVI、HDMI等接口类型。
存储器控制器中心103不仅在处理器102、存储器103和显卡105 之间传输数字信号,而且,实现了在***总线101和存储器104以及输入/输出控制中心106桥接数字信号。
***100还包括输入/输出控制中心106,通过专用集线器接口总线 422耦接到存储器控制器中心103,并经由局部I/0总线将一些I/0设备到输入/输出控制中心106上。局部I/0总线用于将***设备耦接到输入 /输出控制中心106,进而耦接到存储器控制器中心103和***总线101 上。***设备包括但不限于以下设备:硬盘107、光盘驱动器108、声卡109、串行扩展端口110、音频控制器111、键盘112、鼠标113、GPIO 接口114、闪存115和网卡116。
当然,不同的计算机***根据主板,操作***和指令集架构的不同,其结构图也有所变化。例如目前很多计算机***将存储器控制器中心 103集成到处理器102的内部,这样输入/输出控制中心106会成为和处理器103耦接的控制中心。
图2是用于实施本发明的片上***200的结构示意图。其中,所述***200作为片上***,既可以作为一个独立器件生产和销售,也可以和其他组件结合,形成新的器件进行生产和销售。
***200可以使用目前市场上多种型号的处理器制造,并可由 WINDOWSTM、UNIX、Linux和Android、RTOS等操作***进行驱动。*** 200可以在计算机设备、手持设备和嵌入式产品中实现。手持设备的一些示例包括蜂窝电话、互联网协议设备、数字摄像机、个人数字助理(PDA) 和手持PC。嵌入式产品可以包括网络计算机(NetPC)、机顶盒、网络集线器、广域网(WAN)交换机、或可以执行一个或多个指令的任何其它***。
参考图2所示,***200包括经由AHB(Advanced High performance Bus,***总线)总线201耦接的处理器202、静态随机存取存储器205、 LCD控制器204和闪存206以及AHB/APB桥207。
处理器202可以为复杂指令集(CISC)微处理器、精简指令集(RISC) 微处理器、超长指令宇(VLIW)微处理器、实现上述指令集组合的微处理器、或任何其它处理器设备中的一种。处理器202还包括根据本发明实施例提供的技术方案进行改进的处理器核2021,其具体细节将在下文提供。
静态随机存取存储器205和闪存206用于存储由数字信号表示的指令信息和/或数据信息。例如,静态随机存取存储器205可以作为各种应用程序的运行空间,为各种应用程序创建堆、栈、存储中间数据等,闪存206可以存储各种应用程序的可执行代码和操作***的可执行代码。
AHB总线201用于在***200的高性能模块之间传输数字信号,例如在处理器202和静态随机存取存储器205、处理器202和LCD控制器204、处理器202和闪存206、处理器202和AHB/APB桥207之间传输数字信号。
AHB/APB桥407用于在AHB总线和APB总线之间进行数据传输的桥接,通过锁存来自AHB总线的地址、数据和控制信号,并提供二级译码以产生APB***设备的选择信号,从而实现AHB协议到APB协议的转换。
***200还可以包括与APB总线耦接的各种接口。各种接口包括但不限于通过以下接口类型:高容量SD存储卡(SDHC,Secure Digital High Capacity)、I2C总线、串行外设接口(SPI,Serial Peripheral Interface)、通用异步收发传输器(UART,UniversalAsynchronous Receiver/Transmitter)、通用串行总线(USB,Universal Serial Bus)、通用型之输入输出(GPIO,General-purpose input/output)和蓝牙UART。与接口耦接的***设备例如为USB设备、存储卡、报文收发传输器、蓝牙设备等。
应该指出的是,图1和图2所示的***仅用于示例本发明实施例的应用场景,不作为对本发明实施例的限制。理论上,根据本发明实施例改进的处理器或处理器核可以应用于具有任意处理器架构的***中。
图3是根据本发明实施例的处理器核的结构示意图。在图上,箭头表示两个或者以上的单元之间的耦合关系以及两者之间的数据传输方向。
如图3所示,处理器核300包括耦合到***300上的前端单元301、引擎单元302和存储器单元303。
前端单元301包括耦合的指令边界预测单元3011、指令高速缓存单元3012、指令TLB3013、与或门3014、取指单元3015和译码单元3016。指令高速缓存单元3012可以进一步耦合到存储器单元303中的第2级 (L2)高速缓存单元3033,以便于指令数据的搬运。
指令包PCK1来自处理器核300或者处理器内的其他组件,或者由总线提供。指令边界预测单元3011获取并解析指令包PCK1,为指令包PCK1 中的每个指令元字段增加指令预测信息,并得到指令包PCK2(包含了 PCK1和指令预测信息)。指令边界预测单元3011可以将指令包PCK2存储到指令高速缓存3012,或者直接将指令包PCK2发送给取指单元3015 进行处理。仅仅为了示意,图1中采用了一个与或门3014表示取指单元3015输入的信息可以直接来自指令边界预测单元3011的输出,也可以来自指令高速缓存3012。取指单元3015可以包括指令边界确认单元 30151。取指单元3015根据程序PC从指令TLB单元3013中获取物理地址并据此从指令高速缓存3012中获取指令包,之后调用指令边界确认单元根据预测信息确定指令边界信息,并根据指令边界信息从指令包中获得多条指令,进而对每条指令进行预译码,得到预译码信息,例如该指令是否为分支指令、分支指令的跳转方向和目标地址等。
译码单元3016可根据指令集架构译码指令,确定指令是什么操作,以及确定指令流水线如何处理指令。指令集架构由处理器的生产厂商决定,当程序被编译为可执行的形式时,编译器仅使用指令集架构中定义的指令组织可执行代码。如果编译器使用了未经定义的指令,则译码单元3016无法理解该指令试图表达的含义,使得指令译码失败。
译码单元3016可进一步耦合至引擎单元302的中的调度器单元 3021。引擎单元302可以包括耦合的调度器单元3021、引退单元3022、寄存器堆单元3023和执行模块3024。调度器单元3021可以耦合到寄存器堆单元3023。调度器单元3021可以调度指令流水线中的多条指令,例如调整指令流水线中的指令执行顺序((例如,乱序执行等),或者将一条指令同时路由给多个执行单元。在一个可选的实施例中,译码单元 3016和调度器单元3021也可以合并为一个单元。
寄存器堆单元3023表示一个或多个物理寄存器堆,不同的物理寄存器堆存储一个或多个不同的数据类型(例如,标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点,等等)、状态(诸如,下一条指令的指令PC)、等等。在一个可选的实施例中,寄存器堆单元3023可以被引退单元3022所覆盖,以实现寄存器重命名和乱序执行的多种方式。物理寄存器堆中的寄存器的示例包括但可能不限于专用物理寄存器、使用寄存器重命名的动态分配的物理寄存器、以及专用物理寄存器和动态分配的物理寄存器的组合,等等。
引退单元3022和物理寄存器堆单元3023可以耦合至执行模块3024。执行模块3024可以包括一个或多个执行单元30241和一个或多个访存单元30242。每个执行单元30241可以对一种类型的数据执行相应操作(例如,移位、加法、减法、乘法)。访存单元30242可以耦合到存储器单元 303,该存储器单元可以包括耦合到数据高速缓存单元3032的数据TLB 单元3031,其中数据高速缓存单元耦合到第2级(L2)高速缓存单元3033。 L2高速缓存单元3033还可以耦合至一个或多个其他等级的高速缓存(未示出),并最终耦合至主存储器(经由***总线耦接的存储器)上。尽管图3中示出了指令高速缓存单元3012、数据高速缓存单元3032和L2 高速缓存单元3033,但是在其他实施例中,在不同组合中,一个或多个高速缓存或高速缓存单元可以在核内部、在核外部、或部分在核内部并且部分在核外部;且虽然处理器所示出的实施例也可以包括单独的指令和数据高速缓存单元以及共享的L2高速缓存单元,但其他实施例可具有用于指令和数据两者的单个的内部高速缓存。在一些实施例中,***可以包括内部高速缓存以及可以在核和/或处理器外部的外部高速缓存的组合。在其他实施例中,全部高速缓存都可以在核和/或处理器的外部。
应该指出的是,取指单元3015、译码单元3016、调度器单元3021、执行模块3024之间对于指令的处理速度存在差异,一般需要在两者之间设置指令缓存,或者通过设置不同数量的单元来调节速度差异,例如一个取指单元对应多个执行模块3024。
另外,虽然图上采用取指单元、译码单元、调度器单元、执行单元、访存单元和引退单元实现指令流水线结构(指令边界预测单元不作为指令流水线结构的组件),但是本发明不限于此,本领域的技术人员可以采用其他指令流水线实施本实施例,例如采用教科书示例的标准五级流水线结构实现本实施例,或者采用超级指令流水线结构实现本实施例。
和现有技术相比,本发明实施例的优势在于:在进入到指令流水线结构之前,将指令预测信息添加到每个指令元字段中,使得取指单元可以根据指令预测信息确定指令边界信息,从而可以更快速地确定指令边界信息,避免了花费更多的逻辑长度确定指令边界信息,并进一步避免了由于在当前取指周期内没有充足时间对指令(例如分支指令)进行预译码,导致需要增加额外的流水线级的问题。以示例说明。如果取指单元不能及时地在当前取指周期确定当前指令为一条分支指令,则无法及时地到跳转目标地址处获取指令包,因此就可能需要在指令流水线中加入空拍,以等待从跳转目标地址处获取到指令包。
在下述实施例中,将进一步详细描述指令边界预测单元和指令边界确定单元的各个方面。
图4是图3中的指令预测单元的输入输出示意图。参考图4所示,指令预测单元3011获取包括指令元字段H1-Hn的指令包PCK1,输出包括添加了预测信息的指令包PCK2。如图上所示,指令元字段H1的预测信息示为e0至en,指令元字段H2-Hn的预测信息示为inf2-infn,这样示意的原因在于,一般需要根据前一个指令元字段的预测信息推测当前指令元字段的预测信息,但作为第一个指令元字段,指令元字段H1在先并没有其他指令元字段,因此这里e0至en表示可能存在的各种假设,例如e0表示指令元字段H1是指令头,e1表示指令元字段H1不是指令头,诸如此类。之后,可以根据各种假设e0-en得到指令元字段H2的预测信息inf2,之后可以根据各种假设e0-en和预测信息inf2得到指令元字段H3的预测信息。以此类推。
基于图4所示,在一个实施例中,将预测信息的求解逻辑设定为:根据前x个指令元字段的指令预测信息和译码信息得到确定当前指令元字段的指令预测信息。其中x=A/B-1,其中,A表示变长指令集中的最大的指令编码长度,B表示指令元字段的长度。下面,通过两个例子来示意该方法如何工作。
■16/32bit的变长指令集的预测逻辑
指令集的指令编码长度为16位和32位,那么指令元字段长度为 16位,则X的值为1,根据上述公式,可以基于在先1个指令元字段的指令预测信息和译码信息得到下一个指令元字段的指令预测信息。对于 16/32bit混编的指令,对于每个指令元字段,只存在两种假设情况:该指令元字段是指令头和不是指令头。图5a和图5b分别示出了以指令元字段H1不是指令头和是指令头的两种假设开始进行逻辑求解的示意图。
参考图5a所示,从指令元字段H1不是指令头开始进行逻辑求解, H1不是指令头,那么H2一定是指令头。指令元字段H2经由译码确定指令元字段H2或者为单倍元字段长度(16bit),或者为双倍元字段长度(32bit),当指令元字段H2为单倍元字段时,指令元字段H3只能为指令头,当指令元字段H2为双倍元字段时,则H3一定不为指令头;指令元字段H3经由译码确定指令元字段H3或者为单倍元字段长度(16bit),或者为双倍元字段长度,当指令元字段H3为单倍元字段时,指令元字段H4只能为指令头,当指令元字段H3为双倍元字段时,且指令元字段 H3不为指令头时,指令元字段H4不为指令头。以此类推,可以得到指令元字段H4-Hn的指令预测信息。
参考图5b所示,从指令元字段H1是指令头开始进行逻辑求解,指令元字段H1经由译码确定指令元字段H1或者为单倍元字段长度 (16bit),或者为双倍元字段长度(32bit),当指令元字段H1为单倍元字段时,指令元字段H2只能为指令头,当指令元字段H1为双倍元字段时,指令元字段H2不是指令头;指令元字段H2经由译码确定指令元字段H2或者为单倍元字段长度(16bit),或者为双倍元字段长度,当指令元字段H2为单倍元字段的指令头时,指令元字段H3是指令头,当指令元字段H2为单倍元字段且不是指令头时,指令元字段H3只能为指令头。以此类推,可以对指令元字段H4-n给出预测信息。
■16/24/32混编预测逻辑
指令集的指令编码长度为16位24位和32位,那么指令元字段长度为8位,则X的值为3,则看前3个元字段的指令预测信息和译码信息得到当前指令元字段的指令头信息。如下表所示,通过查看指令元字段H1-H4的译码信息可以得到指令元字段H5是否是指令头的信息。
Figure RE-RE-GDA0002291452890000121
由上表中,对于指令元字段H4,有如下几种情况:
·若指令元字段H1为32位指令的指令头,指令元字段H4不为指令头,则指令元字段5即为指令头;
·若指令元字段H2为32位指令的指令头,指令元字段H4不为指令头,则指令元字段5不为指令头;
·若指令元字段H3为32位指令的指令头,指令元字段H4不为指令头,则指令元字段5不为指令头;
·若指令元字段H2为24位指令的指令头,指令元字段H4不为指令头,则指令元字段5为指令头;
·若指令元字段H3为24位指令的指令头,指令元字段H4不为指令头,则指令元字段5不为指令头;
·若指令元字段H3为16位指令的指令头,指令元字段H4不为指令头,则指令元字段5为指令头;
·当指令元字段H4位32位指令的指令头,则指令元字段5不为指令头;
·当指令元字段H4位24位指令的指令头,则指令元字段5不为指令头;
·当指令元字段H4位26位指令的指令头,则指令元字段5不为指令头。
通过上述逻辑,求得指令元字段5是否为指令头。
而针对16/24/32混编的情况来说,对指令包的第一个指令元字段,有如下7种假设情况,即假设指令包的第一个指令元字段是如下情况下,需要按照上述逻辑求解每个元字段需要扩展的指令头预测信息:
Ex 意义
e0 不是指令头,是32位指令的第二个元字段
e1 不是指令头,是32位指令的第3个元字段
e2 不是指令头,是32位指令的第4个元字段
e3 不是指令头,是24位指令的第二个元字段
e4 不是指令头,是24位指令的第3个元字段
e5 不是指令头,是16位指令的第二个元字段
e6 指令头
在上述实施例中,通过查看当前指令元字段是否是指令头,并且结合当前字段的译码信息得到下一字段是否为指令头。比如,当前是指令头,译码信息显示,为一条32位指令,则,下一个元字段则不是指令头。若当前字段不为指令头,则下一元字段一定为指令头。
■通用的求解逻辑
本方法适用于不同的指令包长度和不同的指令编码长度的指令头预测信息的求解过程为:
For ex从e0到en:#对H1是指令编码的头、中间各段、尾的假设下,
#依次求解下一个段的信息
For Hx从H2到Hn
结合前x个指令元字段的ex(e0-en)和译码信息,得到Hx+1的 ex(e0-en)。其中,H1_e[x]为遍历假设(e0-en)下,H1字段为各指令码长度下对应的各个预测信息。令L0为该指令集中最小编码长度,LN为该指令集中最大编码长度,LE为指令元字段的长度,则采用以下代码求解 H1_e[x]。
Figure RE-RE-GDA0002291452890000141
图5c所示是通用的求解逻辑的示意图。参考图5c所示,在假设条件为e0的情况下,根据指令元字段H1的译码信息进行指令头信息判断,得到H1的指令预测信息H1-e0,然后根据H1-e0和指令元字段H2的译码信息进行指令头信息判断,得到H2的指令预测信息H2-e0,以此类推。通过有限数量的穷举逻辑,可以得到每个指令元字段的预测信息。
经过图5c的求解逻辑,在计算了各个指令预测信息之后,将指令连同指令预测信息一同存入到指令高速缓存中。取指单元,按照对齐的地址从指令高速缓存或片外获取一个指令包(指令高速缓存位于片外的情况),该指令包包含了一条指令和上述的指令预测信息,经过指令边界确认单元30151即可快速获得指令边界信息。
图6示出了指令确认单元30151的确认逻辑的示意图。参考图上所示,指令边界确认单元30151按照程序指针(PC)从指令包中确认有效的指令元字段,其中,通过程序PC指示指令包内的有效的指令元字段的开始位置。例如,指令包为256bits,64个字节,则PC的低6位的值指示有效元字段的开始。如果程序PC的低6位值为8,则有效元字段为从第8个字节开始。从该指令元字段中选取标为指令头的指令元字段 start_ex,若根据start_ex找到对应的指令元字段的指令预测信息e0-en,将预测信息e0-en中值为1的条目作为指令边界信息(hx_head)(x的取指为0…n),若start_ex对应的指令预测信息不包含1的条目,则表示指令预测错误,需要重新计算指令边界信息。上述逻辑可以通过与或门实现,极大的降低了逻辑长度。
在原理上,如果程序的指令段中没有数据信息,即指令段中都是指令信息,那么上述方法一定能够直接得到正确的指令边界信息。但是如果程序的指令段中包含了数据,那么上述方法则有可能得不到正确的指令边界信息,那么正确的指令边界将需要根据真实的程序PC在指令包中的位置,重新计算。具体参见图7所示。
图7示出了图3所示的前端单元301的更多细节。参见图7所示,指令边界确认单元30151接收程序PC和增加了预测信息的指令包PCK2,在指令包PCK2中确定程序PC对应的指令元字段,该指令元字段应为一条指令的指令头,在该指令元字段对应的指令预测信息中找到表示指令头的条目,该条目以及该条目对应的指令预测信息为指令边界信息,并可以据此得到一条或多条指令。取指单元3015进而可以对指令进行预译码,以确定指令是否为分支指令,如果一条指令为分支指令,则可以根据该指令的程序PC检索分支跳转预测单元3017,获取目标跳转地址,根据目标跳转地址执行跳转行为701以获得目标跳转地址处的指令包,同时将指令存储到指令缓存3018中,供译码单元3016从中读取并进行译码。
当指令边界确认单元30151在指令包PCK2中确定程序PC对应的指令元字段时,该指令元字段应为一条指令的指令头,但是存在另一种可能:在该指令元字段对应的指令预测信息中找不到表示指令头的条目,则表示预测错误。此时,需要调用指令边界计算单元30152以重新计算指令边界信息。
本发明实施例提供的指令边界预测方法使得确认指令边界信息的逻辑长度变短,同时从确认边界信息到执行跳转行为之间的逻辑长度也会变短,这种方式对于深指令流水线尤其适用,能够显著提升指令流水线的执行效率。本发明提供的指令边界预测方法不受处理器看待指令流顺序的影响。
图8是图7基础上的一个实施例变形。在图8中,示出了经过指令边界预测单元3011的指令包PCK11和未经过指令边界预测单元3011的指令包PCK12。PCK11经过的处理流程如图7所示,这里就不再赘述。指令PCK12直接被存储到指令高速缓存3012中。当取指单元3015从指令高速缓存3012中获取到一个指令包时,通过检测单元3019对其进行检测,检测单元3019通过检测该指令包是否包含指令预测信息以区分出指令包PCK21和PCK12。指令包PCK12经由指令边界计算单元30152 以计算指令边界信息,并据此从指令包PCK12得到多条指令。
在图8的实施例中,集成了两种处理变长指令集的指令的硬件逻辑,以适用于不同应用场景,并兼顾两种硬件逻辑各自的特点。具体来说,在指令包中为每条指令增加指令预测信息,虽然可以帮助指令单元更快地解析出指令,但是会占用较多的指令高速缓存的存储空间。将两者集成在同一取指单元中,则可以根据实际需求使用其中之一的硬件逻辑。
对于本发明,可以在硬件或专用电路、软件、逻辑或其任何组合中实现。举例说明。在取指单元之外增加一个用于实施本发明的处理装置,该处理装置通过硬件逻辑或者软件固件实现,该处理装置实现从高速缓存中取出指令包,为每条指令增加指令预测信息后回调到指令高速缓存中。同时修改取指单元的硬件逻辑,使得取指单元优先使用指令预测信息得到指令边界信息。如此实现本发明实施例的技术方案。当然本发明并不限于此。还可以以硬件、软件、回件、专用电路或逻辑、通用硬件或控制器或其它计算设备,或者其某种组合来重新构建文中所描述的装置和方法。如果涉及的话,可以在诸如集成电路模块的各种组件中实施本发明的电路设计。
以上所述仅为本发明的优选实施例,并不用于限制本发明,对于本领域技术人员而言,本发明可以有各种改动和变化。凡在本发明的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (16)

1.一种指令处理装置,用于处理变长指令集的指令,包括:
指令边界预测单元,用于获取所述变长指令集的指令包,并为所述指令包内的每个指令元字段增加指令预测信息;
指令流水线结构,所述指令流水线结构的取指单元包括指令边界确定单元,所述指令边界确定单元用于根据所述指令预测信息确定一条或多条指令。
2.根据权利要求1所述的指令处理装置,所述指令边界预测单元通过以下步骤获得每个指令元字段的指令预测信息:
确定所述指令包中的第一个指令元字段在所述变长指令集下的所有可能设定;
根据在先指令元字段的指令预测信息和译码信息确定当前指令元字段的指令预测信息。
3.根据权利要求2所述的指令处理装置,根据前x个指令元字段的指令预测信息和译码信息确定所述当前指令元字段的指令预测信息,其中x的值与所述变长指令集中的最大的指令编码长度和所述指令元字段的长度相关。
4.根据权利要求2所述的指令处理装置,所述指令边界确定单元确定与程序指针对应的指令元字段,并据此得到与所述程序指针对应的指令元字段的指令预测信息,如果与所述程序指针对应的指令元字段的指令预测信息包含表示指令头的条目,则将所述条目作为所述指令边界信息,并据此得到一个或多条指令。
5.根据权利要求4所述的指令处理装置,如果与所述程序指针对应的指令元字段的指令预测信息不包含表示指令头的条目,则调用指令边界计算单元重新计算指令边界信息。
6.根据权利要求1所述的指令处理装置,所述指令处理装置还包括指令高速缓存,用于缓存增加了指令预测信息的指令包。
7.根据权利要求1至6任一项所述的指令处理装置,所述指令处理装置为处理器核。
8.根据权利要求1至6任一项所述的指令处理装置,所述指令处理装置为处理器。
9.一种指令处理方法,包括:
获取变长指令集的指令包,并为所述指令包内的每个指令元字段增加指令预测信息;以及
在指令流水线的取指级,根据所述指令预测信息确定一条或多条指令。
10.根据权利要求9所述的指令处理方法,通过以下步骤获得每个指令元字段的指令预测信息:
确定所述指令包中的第一个指令元字段在所述变长指令集下的所有可能设定;
根据在先指令元字段的指令预测信息和译码信息确定当前指令元字段的指令预测信息。
11.根据权利要求10所述的指令处理方法,根据前x个指令元字段的指令预测信息和译码信息确定所述当前指令元字段的指令预测信息,其中x的值与所述变长指令集中的最大的指令编码长度和所述指令元字段的长度相关。
12.根据权利要求11所述的指令处理方法,所述根据所述指令预测信息确定一条或多条指令包括:
确定与程序指针对应的指令元字段,并据此得到与所述程序指针对应的指令元字段的指令预测信息;
如果与所述程序指针对应的指令元字段的指令预测信息包含表示指令头的条目,则将所述条目作为所述指令边界信息,并据此得到一个或多条指令。
13.根据权利要求12所述的指令处理方法,所述指令处理方法还包括:如果与所述程序指针对应的指令元字段的指令预测信息不包含表示指令头的条目,则重新计算指令边界信息。
14.根据权利要求11所述的指令处理方法,还包括:缓存增加了指令预测信息的指令包。
15.一种计算机***,包括:存储器;
与所述存储器耦合的处理器,所述处理器包括:
指令边界预测单元,用于获取所述变长指令集的指令包,并为所述指令包内的每个指令元字段增加指令预测信息;
指令流水线结构,所述指令流水线结构的取指单元包括指令边界确定单元,所述指令边界确定单元用于根据所述指令预测信息确定一条或多条指令。
16.一种片上***,包括如权利要求1至6任意一项所述的指令处理装置。
CN201910898789.XA 2019-09-23 2019-09-23 指令处理装置和指令处理方法 Pending CN112540795A (zh)

Priority Applications (3)

Application Number Priority Date Filing Date Title
CN201910898789.XA CN112540795A (zh) 2019-09-23 2019-09-23 指令处理装置和指令处理方法
US16/931,932 US11550587B2 (en) 2019-09-23 2020-07-17 System, device, and method for obtaining instructions from a variable-length instruction set
PCT/US2020/042490 WO2021061260A1 (en) 2019-09-23 2020-07-17 System, device, and method for obtaining instructions from a variable-length instruction set

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910898789.XA CN112540795A (zh) 2019-09-23 2019-09-23 指令处理装置和指令处理方法

Publications (1)

Publication Number Publication Date
CN112540795A true CN112540795A (zh) 2021-03-23

Family

ID=74880126

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910898789.XA Pending CN112540795A (zh) 2019-09-23 2019-09-23 指令处理装置和指令处理方法

Country Status (3)

Country Link
US (1) US11550587B2 (zh)
CN (1) CN112540795A (zh)
WO (1) WO2021061260A1 (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111444123B (zh) * 2020-03-28 2021-01-15 珠海市一微半导体有限公司 基于硬件加速的spi接口的自动读取控制***及方法

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5450605A (en) * 1992-02-06 1995-09-12 Intel Corporation Boundary markers for indicating the boundary of a variable length instruction to facilitate parallel processing of sequential instructions
US5502826A (en) * 1990-05-04 1996-03-26 International Business Machines Corporation System and method for obtaining parallel existing instructions in a particular data processing configuration by compounding instructions
US5625787A (en) * 1994-12-21 1997-04-29 International Business Machines Corporation Superscalar instruction pipeline using alignment logic responsive to boundary identification logic for aligning and appending variable length instructions to instructions stored in cache
JPH10207707A (ja) * 1997-01-14 1998-08-07 Ind Technol Res Inst スーパースカラパイプライン式データ処理装置の可変長命令の並列デコーディング装置及び方法
US5881260A (en) * 1998-02-09 1999-03-09 Hewlett-Packard Company Method and apparatus for sequencing and decoding variable length instructions with an instruction boundary marker within each instruction
WO1999054811A1 (en) * 1998-04-23 1999-10-28 Advanced Micro Devices, Inc. Processor employing control transfer bit in predecode for identifying control transfer instructions
US6308257B1 (en) * 1999-04-20 2001-10-23 Intel Corporation Method and apparatus for generating boundary markers for an instruction stream including variable-length instructions
US20140281246A1 (en) * 2013-03-15 2014-09-18 Mauricio Breternitz, Jr. Instruction boundary prediction for variable length instruction set
US20170083337A1 (en) * 2015-09-19 2017-03-23 Microsoft Technology Licensing, Llc Prefetching instruction blocks

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0586057B1 (en) * 1992-08-31 2000-03-01 Sun Microsystems, Inc. Rapid instruction (pre)fetching and dispatching using prior (pre)fetch predictive annotations
JP4141112B2 (ja) * 2001-04-12 2008-08-27 株式会社日立製作所 プロセッサおよびプロセッサシステム
US20140019722A1 (en) * 2011-03-31 2014-01-16 Renesas Electronics Corporation Processor and instruction processing method of processor

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5502826A (en) * 1990-05-04 1996-03-26 International Business Machines Corporation System and method for obtaining parallel existing instructions in a particular data processing configuration by compounding instructions
US5450605A (en) * 1992-02-06 1995-09-12 Intel Corporation Boundary markers for indicating the boundary of a variable length instruction to facilitate parallel processing of sequential instructions
US5625787A (en) * 1994-12-21 1997-04-29 International Business Machines Corporation Superscalar instruction pipeline using alignment logic responsive to boundary identification logic for aligning and appending variable length instructions to instructions stored in cache
JPH10207707A (ja) * 1997-01-14 1998-08-07 Ind Technol Res Inst スーパースカラパイプライン式データ処理装置の可変長命令の並列デコーディング装置及び方法
US5881260A (en) * 1998-02-09 1999-03-09 Hewlett-Packard Company Method and apparatus for sequencing and decoding variable length instructions with an instruction boundary marker within each instruction
WO1999054811A1 (en) * 1998-04-23 1999-10-28 Advanced Micro Devices, Inc. Processor employing control transfer bit in predecode for identifying control transfer instructions
US6308257B1 (en) * 1999-04-20 2001-10-23 Intel Corporation Method and apparatus for generating boundary markers for an instruction stream including variable-length instructions
US20140281246A1 (en) * 2013-03-15 2014-09-18 Mauricio Breternitz, Jr. Instruction boundary prediction for variable length instruction set
US20170083337A1 (en) * 2015-09-19 2017-03-23 Microsoft Technology Licensing, Llc Prefetching instruction blocks

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
J. ZHANG 等: "A Precise Interrupts Mechanism Based on Micro-Operation Tracing of Instruction Boundary for Embedded Processor", 2008 INTERNATIONAL CONFERENCE ON NETWORKING, ARCHITECTURE, AND STORAGE, 25 July 2008 (2008-07-25) *
戴曦: "X通用微处理器指令控制部件的关键技术研究", 中国优秀硕士学位论文全文数据库——信息科技辑, vol. 2006, no. 03, 15 March 2006 (2006-03-15) *

Also Published As

Publication number Publication date
US20210089311A1 (en) 2021-03-25
WO2021061260A1 (en) 2021-04-01
US11550587B2 (en) 2023-01-10

Similar Documents

Publication Publication Date Title
JP6227621B2 (ja) 複数の試験ソースに対するor試験及びand試験機能を提供するために命令をフュージングする方法及び装置
TWI706255B (zh) 用於緊耦合異質計算的硬體處理器及方法
KR101607161B1 (ko) 데이터 요소들의 스트라이드 패턴 수집 및 데이터 요소들의 스트라이드 패턴 분산을 위한 시스템, 장치 및 방법
KR101851439B1 (ko) 충돌 검출을 수행하고, 레지스터의 콘텐츠를 다른 레지스터의 데이터 구성요소 위치들로 브로드캐스트하기 위한 시스템들, 장치들 및 방법들
CN112631657B (zh) 用于字符串处理的字节比较方法以及指令处理装置
KR101618669B1 (ko) 마스크 레지스터를 이용한 점프를 위한 시스템, 장치, 및 방법
KR101624786B1 (ko) 기입마스크 레지스터의 트레일링 최하위 마스킹 비트를 결정하는 시스템, 장치, 및 방법
EP3343360A1 (en) Apparatus and methods of decomposing loops to improve performance and power efficiency
CN110825437B (zh) 用于处理数据的方法和装置
US11704131B2 (en) Moving entries between multiple levels of a branch predictor based on a performance loss resulting from fewer than a pre-set number of instructions being stored in an instruction cache register
KR20160046149A (ko) 데이터 처리 방법 및 장치
CN116400960A (zh) 寄存器堆预提取
KR101680065B1 (ko) 억제된 어드레스 트레이스를 생성하는 장치들 및 방법들
CN112540795A (zh) 指令处理装置和指令处理方法
CN112540794A (zh) 处理器核、处理器、装置和指令处理方法
JP4502532B2 (ja) データ処理装置
NL2028988B1 (en) Instruction set architecture and microarchitecture for early pipeline re-steering using load address prediction to mitigate branch misprediction penalties
US11210091B2 (en) Method and apparatus for processing data splicing instruction
US20210089305A1 (en) Instruction executing method and apparatus
US11487680B2 (en) Apparatus and method for burst mode data storage
CN115269011A (zh) 指令执行单元、处理单元及相关装置和方法
JP2005149297A (ja) プロセッサおよびそのアセンブラ
CN116149603A (zh) 运算指令处理方法及***、主处理器和协处理器
EP0186668A1 (en) Three word instruction pipeline
JP2006268487A (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