一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

指令退休单元、指令执行单元及相关装置和方法与流程

2022-09-04 04:51:52 来源:中国专利 TAG:


1.本技术实施例涉及芯片技术领域,尤其涉及一种指令退休单元、指令执行单元及相关装置和方法。


背景技术:

2.在乱序执行架构的处理单元中,应用动态调度技术重新安排指令的执行顺序,可以在保持数据流的同时减少停顿,从而提高处理单元的性能。通过动态调度技术不需要通过软件对处理单元架构进行针对性优化,便可以解决编译时无法预知的相关性问题,而且处理单元在遇到较大延迟时仍能够不产生空泡。通过动态调度技术重新安排指令的执行顺序后,需要在指令执行后恢复指令的执行顺序,以使指令的顺序提交,保证整体执行行为的正确。
3.目前,对于乱序执行架构的处理单元,使用重排序缓冲区(re-order buffer,rob)对指令执行结果进行暂存,并使指令按原有顺序提交。
4.然而,在使用重排序缓冲区对指令执行结果进行暂存并恢复执行顺序时,针对一条指令而言,该条指令对重排序缓冲区中指令缓冲表项的占用从指令分发开始,直至指令退休,因此处理单元中每个正在执行的指令均需要分配一个指令缓冲表项,指令缓冲表项的数量等于处理单元允许的乱序度,处理单元需要消耗较多的资源来维护重排序缓冲区,进而造成处理单元进行乱序处理时用于指令重排序部分的硬件资源消耗较大。


技术实现要素:

5.有鉴于此,本技术实施例提供一种指令退休单元、指令执行单元及相关装置和方法,以至少解决或缓解上述问题。
6.根据本技术实施例的第一方面,提供了一种指令退休单元,包括:接收子单元,用于接收指令执行单元针对待完成指令发送的完成请求信号,其中,所述完成请求信号用于请求对所述待完成指令进行完成;仲裁子单元,用于在根据已退休指令与所述待完成指令的新老关系确定所述待完成指令可完成后,向所述指令执行单元发送针对所述待完成指令的允许完成信号,并接收所述指令执行单元发送的所述待完成指令的指令完成信息,将所述待完成指令的指令完成信息存储到缓冲区中的指令缓冲表项,其中,所述缓冲区中指令缓存表项的数量大于1且小于处理单元允许的乱序度,每个指令缓冲表项可存储一个指令的指令完成信息;退休子单元,用于根据各所述指令缓冲表项中存储的指令完成信息,对已完成且未退休的待退休指令进行退休处理,并将已退休指令的指令完成信息从指令缓冲表项中删除。
7.根据本技术实施例的第二方面,提供了一种指令执行单元,包括:请求子单元,用于向指令退休单元发送完成请求信号,其中,所述完成请求信号用于请求对待完成指令进行完成;发送子单元,用于在接收到所述指令退休单元发送的允许完成信号后,将所述待完成指令的指令完成信息发送给所述指令退休单元,由所述指令退休单元将所述指令完成信
息存储到缓冲区中的指令缓冲表项,并根据各所述指令缓冲表项中存储的指令完成信息,对已完成且未退休的待退休指令进行退休处理,及将已退休指令的指令完成信息从指令缓冲表项中删除,其中,所述缓冲区中指令缓存表项的数量大于1且小于处理单元允许的乱序度,每个指令缓冲表项可存储一个指令的指令完成信息。
8.根据本技术实施例的第三方面,提供了一种处理单元,包括:上述第一方面所述的指令退休单元;至少一个上述第二方面所述的指令执行单元。
9.根据本技术实施例的第四方面,提供了一种计算设备,包括:上述第三方面所述的处理单元;存储器,与所述处理单元耦接,存储待执行的指令。
10.根据本技术实施例的第五方面,提供了一种指令处理方法,应用于指令退休单元,所述指令处理方法包括:接收指令执行单元针对待完成指令发送的完成请求信号,其中,所述完成请求信号用于请求对所述待完成指令进行完成;在根据已退休指令与所述待完成指令的新老关系确定所述待完成指令可完成后,向所述指令执行单元发送针对所述待完成指令的允许完成信号,并接收所述指令执行单元发送的所述待完成指令的指令完成信息,将所述待完成指令的指令完成信息存储到缓冲区中的指令缓冲表项,其中,所述缓冲区中指令缓存表项的数量大于1且小于处理单元允许的乱序度,每个指令缓冲表项可存储一个指令的指令完成信息;根据各所述指令缓冲表项中存储的指令完成信息,对已完成且未退休的待退休指令进行退休处理,并将已退休指令的指令完成信息从指令缓冲表项中删除。
11.根据本技术实施例的第六方面,提供了一种指令处理方法,应用于指令执行单元,所述指令处理方法包括:向指令退休单元发送完成请求信号,其中,所述完成请求信号用于请求对待完成指令进行完成;在接收到所述指令退休单元发送的允许完成信号后,将所述待完成指令的指令完成信息发送给所述指令退休单元,由所述指令退休单元将所述指令完成信息存储到缓冲区中的指令缓冲表项,并根据各所述指令缓冲表项中存储的指令完成信息,对已完成且未退休的待退休指令进行退休处理,及将已退休指令的指令完成信息从指令缓冲表项中删除,其中,所述缓冲区中指令缓存表项的数量大于1且小于处理单元允许的乱序度,每个指令缓冲表项可存储一个指令的指令完成信息。
12.根据本技术实施例提供的指令执行顺序恢复方案,缓冲区中指令缓冲表项的数量小于处理单元的乱序度,按序完成指令,将已完成指令的指令完成信息存储到指令缓冲表项中,根据指令缓冲表项中的指令完成信息对待退休指令进行退休处理,并将已退休指令的指令完成信息从指令缓冲表项中删除。由于指令缓冲表项中存储已完成且未退休或正在退休指令的指令完成信息,所以指令仅在完成和退休两个阶段占用指令缓冲表项,因此缓冲区仅需包括较少的指令缓冲表项便能够满足处理单元的乱序执行,而维护较少的指令缓冲表项可以减少处理单元进行乱序处理时用于指令重排序部分的硬件资源消耗。
附图说明
13.为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术实施例中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
14.图1是本技术一个实施例所应用的计算设备的示意图;
15.图2是本技术一个实施例的处理单元的示意图;
16.图3是本技术一个实施例的指令执行阶段的示意图;
17.图4是本技术一个实施例的指令退休单元的示意图;
18.图5是本技术一个实施例的可接受完成指令的示意图;
19.图6是本技术另一个实施例的指令退休单元的示意图;
20.图7是本技术一个实施例的当前可提交指令的示意图;
21.图8是本技术一个实施例的指令执行单元的示意图;
22.图9是本技术另一个实施例的指令执行单元的示意图;
23.图10是本技术又一个实施例的指令执行单元的示意图;
24.图11是本技术一个实施例的指令处理方法的流程图;
25.图12是本技术另一个实施例的指令处理方法的流程图。
具体实施方式
26.以下基于实施例对本技术进行描述,但是本技术并不仅仅限于这些实施例。在下文对本技术的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员来说没有这些细节部分的描述也可以完全理解本技术。为了避免混淆本技术的实质,公知的方法、过程、流程没有详细叙述。另外附图不一定是按比例绘制的。
27.首先,对本技术实施例进行描述的过程中出现的部分名词或术语适用于如下解释。
28.投机执行:投机执行是优化技术的一种,采用投机执行技术的处理器可以根据现有信息,预测程序流和分支方向,根据预测结果,利用空转时间提前执行程序流中的后序指令,提前执行的指令后续可能会被使用,也可能不会被使用。
29.正确路径:产生投机失败时,程序流会执行到的路径。位于正确路径上的投机指令需要产生执行效果,位于正确路径上的投机指令相对于导致投机失败的投机失败指令更老。
30.错误路径:产生投机失败时,程序流不会执行到的路径。位于错误路径上的投机指令不需要产生执行效果,位于错误路径上的投机指令相对于导致投机失败的投机失败指令更新。
31.投机失败指令:导致投机失败的投机指令,比投机失败指令新的投机指令不需要完成执行效果,比投机失败指令老的投机指令需要完成执行效果。
32.流水线冲刷:发生投机失败时,处理器清除内部位于错误路径上的投机指令的行为。
33.动态调度:重新安排指令的执行顺序,以减少处理单元的停顿,同时保持数据流。
34.乱序执行:处理单元对指令流进行动态调度,以期望一条指令在其操作数和指令执行单元可用时,能够立即开始对该指令进行执行,而无需等待该指令的前序指令执行完毕后再执行该指令。
35.分发:在乱序执行架构的处理单元中,使指令由按序状态进入乱序状态的过程,通常由处理单元中的指令发射单元实现。在一般实现过程中,指令译码、分发、发射可统一由指令译码单元实现。
36.发射:将指令发送到指令执行单元以开始对指令进行执行的过程,通常由处理单元中的指令发射单元实现。
37.提交:指示指令被允许对处理器状态进行修改,以产生编程模型可见的执行效果,通常由处理单元中的指令执行单元实现。
38.写回:指令执行单元执行编程模型可见的处理器状态修改,包括寄存器值等,通常由处理单元中的指令退休单元实现。
39.完成:指令执行单元返回执行除目的寄存器值以外的执行结果(指令完成信息),指令完成是指指令执行单元判定指令可以执行完毕,指令的完成通过由处理单元中的指令退休单元实现。
40.退休:处理单元完成指令的执行,通常由处理单元中的指令退休单元实现。
41.计算设备
42.图1示出一个计算设备10的示意性框图。计算设备10可以基于各种型号的处理单元构建,并由windows操作系统、unix操作系统、linux操作系统等任一操作系统驱动。此外,计算设备10可以在pc机、台式机、笔记本、服务器和移动通信装置等硬件和/或软件中实施。
43.如图1所示,计算设备10可以包括一个或多个处理单元12,以及存储器14。计算设备10中的存储器14可以作为主存储器(简称为主存或内存),用于存储由数据信号表示的指令信息和/或数据信息,例如,存储器14可以存放处理单元12提供的数据(例如为预算结果),也可以用于实现处理单元12与外部存储设备16(或成为辅助存储器或外部存储器)之间的数据交换。
44.在一些情形下,处理单元12需要通过总线11访问存储器14,以获取存储器14中的数据或对存储器14中的数据进行修改。由于存储器14的访问速度较慢,为了缓解处理单元12与存储器14之间的速度差距,计算设备10还包括与总线11通信连接的高速缓冲存储器18,高速缓冲存储器18用于对存储器14中的一些可能会被反复调用的程序数据或者报文数据进行缓存。高速缓冲存储器18可以由诸如静态随机存储器(static random access memory,sram)等类型的存储装置实现。高速缓冲存储器18可以为多级结构,例如具有一级缓存(l1cache)、二级缓存(l2cache)和三级缓存(l3cache)的三级缓存结构,高速缓冲存储器18也可以是三级以上的缓存结构或其他类型缓存结构。在一些实施例中,高速缓冲存储器18的一部分(例如一级缓存,或一级缓存和二级缓存两者)可以集成在处理单元12内部或与处理单元12集成在同一片上系统中。
45.基于此,处理单元12可以包括指令执行单元121、以及内存管理单元122等部分。指令执行单元121在执行一些需要修改内存的指令时发起写访问请求,该写访问请求指定了需要写入内存中的写入数据和相应的物理地址。内存管理单元122用于将这些指令指定的虚拟地址转译为该虚拟地址映射的物理地址,写访问请求指定的物理地址与相应指令指定的物理地址可以一致。
46.存储器14和高速缓冲存储器18之间的信息交互可以按照数据块来组织。在一些实施例中,高速缓冲存储器18和存储器14可以按照相同的空间尺寸被划分成数据块,数据块可以作为高速缓冲存储器18和存储器14之间的数据交换的最小单位(包括预设长度的一个或多个数据)。为了表述简洁清晰,下面将高速缓冲存储器18中的各数据块简称为缓存块(或者可以称为cacheline或高速缓存线),且不同的缓存块具有不同的缓存块地址。将存储
器14中的各个数据块简称为内存块,且不同的内存块具有不同的内存块地址。缓存块地址和/或内存块地址可以包括用于定位数据块的物理地址标签。
47.由于受到空间和资源的限制,高速缓冲存储器18无法对存储器14中的全部内容进行缓存,即高速缓冲存储器18的存储容量通常小于存储器14,高速缓冲存储器18提供的各个缓存块地址无法对应存储器14提供的全部内存块地址。处理单元12在需要访问内存时,首先经总线11访问高速缓冲存储器18,以判断所要访问的内容是否已被存储于高速缓冲存储器18中。如果所要访问的内容已被存储于高速缓冲存储器18中,则高速缓冲存储器18命中,此时处理单元12直接从高速缓冲存储器18中调用所要访问的内容。如果所要访问的内容未被存储于高速缓冲存储器18中,则高速缓冲存储器18和处理单元12需要经总线11访问存储器14,以在存储器14中查找相应的信息。由于高速缓冲存储器18的存取速率非常快,因此在高速缓冲存储器18命中时,处理单元12的效率可以显著提高,进而也使得整个计算设备10的性能和效率得以提升。
48.此外,计算设备10还可以包括存储设备16、显示设备、音频设备、鼠标/键盘等输入/输出设备。存储设备16可以是通过相应接口与总线11耦合的硬盘、光盘以及闪存等用于信息存取的设备。显示设备可以经相应的显卡与总线11耦合,用于根据总线11提供的显示信号进行显示。
49.计算设备10还可以包括通信设备17,进而计算设备10可以通过各种方式与网络或其他设备进行通信。通信设备17可以包括一种或多种通信模块,通信设备17可以包括适用于特定的无线通信协议的无线通信模块。例如,通信设备17可以包括wlan模块,用于实现符合电气和电子工程协会(ieee)制定的802.11标准的wifi通信。通信设备17可以包括wwan模块,用于实现符合蜂窝或其他无线广域协议的无线广域通信。通信设备17还可以包括蓝牙模块等采用其他协议的通信模块,或其他自定义类型的通信模块。通信设备17还可以是用于串行传输数据的端口。
50.需要说明的是,不同的计算设备10根据主板、操作系统和指令集架构的不同,计算设备10的结构可能有所变化。例如,目前很多计算设备设置有连接在总线11和各个输入/输出设备之间的输入/输出控制中心,且该输入/输出控制中心可以集成于处理单元12之内或独立于处理单元12。
51.处理单元
52.图2是本技术一个实施例的处理单元12的示意性框图。如图2所示,每个处理单元12可以包括用于处理指令的一个或多个处理器核120,指令的处理和执行是可以被用户(例如通过应用程序)和/或系统平台控制的。每个处理器核120可以用于处理特定的指令集,指令集可以支持复杂指令集计算(complex instruction set computing,cisc)、精简指令集计算(reduced instruction set computing,risc)或基于超长指令字(very long instruction word,vliw)的计算,特别需要说明的是,处理器核120适用于处理risc-v指令集。不同的处理器核120可以各自处理不同或相同的指令集。处理器核120还可以包括其他处理模块,比如数字信号处理器(digital signal processor,dsp)等。作为一种示例,图2中示出了处理器核1至处理器核m,m是正整数。
53.图1示出的高速缓冲存储器18可以被全部或部分集成于处理单元12中。根据架构的不同,高速缓冲存储器18可以是位于各个处理器核120之内和/或之外的单个或多级的内
部高速缓冲存储器(如图2示出的3级高速缓冲存储器l1至l3,图2中统一标识为18),也可以包括面向指令和指令高速缓存和面向数据的数据高速缓存。处理单元12中的各部件可以共享至少一部分的高速缓存存储器,例如,处理器核1至m可以共用第三级高速缓冲存储器l3。处理单元12还可以包括外部高速缓存(未示出),其他高速缓存结构也可以作为处理单元12的外部高速缓存。
54.如图2所示,处理单元12可以包括寄存器堆(register file)126,寄存器堆126可以包括用于存储不同类型的数据和/或指令的多个寄存器,这些寄存器可以是不同类型,比如寄存器堆126可以包括整数寄存器、浮点寄存器、状态寄存器、指令寄存器和指针寄存器等。寄存器堆126中的寄存器可以选用通用寄存器来实现,也可以根据处理单元12的实际需求采用特定的设计。
55.处理单元12可以包括内存管理单元(memory management unit,mmu)122,用于实现虚拟地址到物理地址的转译。内存管理单元122中缓存有页表中的一部分表项,内存管理单元122也可以从内存中获取未被缓存的表项。每个处理器核120中可以设置一个或多个内存管理单元122,不同处理器核120中的内存管理单元122可以与位于其他处理单元或处理器核中的内存管理单元122实现同步,使得每个处理单元或处理器核可以共享统一的虚拟存储系统。
56.处理单元12用于执行指令序列(即程序)。处理单元12执行每个指令的过程包括:从存放指令的存储器中取出指令,对取出的指令进行译码,执行译码后的指令,及保存指令执行结果等步骤,如此循环,直到执行完指令序列中的全部指令或遇到停机指令。
57.为了实现上述过程,处理单元12可以包括取指令单元124、指令译码单元125、指令发射单元(未示出)、指令执行单元121和退休单元123等。
58.取指令单元124作为处理单元12的启动引擎,用于将指令从存储器14中搬运到指令寄存器(可以是图2示出的寄存器堆126中的一个用于存放指令的寄存器)中,并接收下一个取指地址或根据取指算法计算获得下一个取指地址,取指算法可以是根据指令长度递增地址或递减地址。
59.取出指令后,处理单元12进入指令译码阶段,指令译码单元125按照预定的指令格式,对取回的指令进行解码,以获得取回的指令所需的操作数获取信息,从而为指令执行单元121的操作做准备。操作数获取信息可以包括指向立即数、寄存器或其他能够提供源操作数的软件/硬件。
60.指令发射单元通常存在于高性能的处理单元12中,位于指令译码单元125与指令执行单元121之间,用于指令的调度和控制,以将各个指令高效地分配至不同的指令执行单元121,使得多个指令的并行操作成为可能。指令经取指、译码并被调度到相应的指令执行单元121之后,相应的指令执行单元121开始执行该指令,即执行该指令所指示的操作,现相应的功能。
61.退休单元123(或称为指令引退单元或指令写回单元)主要用于将指令执行单元121产生的执行结果写回到相应的存储位置(例如为处理单元12内部的寄存器),以使后序指令能够从该存储位置快速获取相应的执行结果。
62.对于不同类别的指令,可以在处理单元12中相应地设置不同的指令执行单元121。指令执行单元121可以是运算单元(例如包含算术逻辑单元、整形处理单元、矢量运算单元
等,用于根据操作数进行运算并输出运算结果)、内存执行单元(例如用于根据指令访问内存以读取内存中的数据或向内存写入指定的数据等)以及协处理器等。在处理单元12中,各个指令执行单元121可以并行运行并输出相应的执行结果。
63.指令执行单元121在执行某类指令(例如访存指令)时,需要访问存储器14,以获取存储器14中存储的信息或提供需要写入存储器14中的数据。需要说明的是,用于执行访存指令的指令执行单元121也可以简称为内存执行单元,该内存执行单元可以为加载存储单元(load store unit,lsu)和/或其他用于内存访问的单元。
64.访存指令被取指令单元124获取之后,指令译码单元125可以对访存指令进行译码处理,使得访存指令的源操作数可被获取。译码处理后的访存指令被提供至相应的指令执行单元121,该指令执行单元121可以对访存指令的源操作数进行相应的运算(例如由算术逻辑单元对存储于寄存器中的源操作数进行运算)以获得访存指令对应的地址信息,并根据该地址信息发起相应的请求,例如地址转译请求、写访问请求等。
65.访存指令的源操作数通常包括地址操作数,指令执行单元121对该地址操作数进行运算以获得访存指令对应的虚拟地址或物理地址。当内存管理单元122被禁用时,指令执行单元121可以直接通过逻辑运算获得访存指令的物理地址。当内存管理单元121被启用时,相应的指令执行单元121根据访存指令对应的虚拟地址发起地址转译请求,该地址转译请求包括与访存指令的地址操作数对应的虚拟地址;内存管理单元122响应地址转译请求,并根据与该虚拟地址匹配的表项将地址转译请求中的虚拟地址转换为物理地址,使得指令执行单元121可以根据转译后的物理地址访问高速缓冲存储器18和/或存储器14。
66.根据功能的不同,访存指令可包括加载指令和存储指令。加载指令的执行过程通常不需要对存储器14或高速缓冲存储器18中的信息进行修改,指令执行单元121只需要根据加载指令的地址操作数读取存储于存储器14、高速缓冲存储器18或外部的存储设备中的数据。不同于加载指令,存储指令的源操作数不仅包括地址操作数,还包括数据信息,存储指令的执行过程通常需要对存储器14和/或高速缓冲存储器18中的信息进行修改。存储指令的数据信息可以指向写入数据,该写入数据的来源可以是运算指令、加载指令等指令的执行结果,也可以是处理单元12中的寄存器或其他存储单元提供的数据,还可以是立即数。
67.处理单元12可以实现微乱序机构,在对指令进行乱序发射的同时,仅需在指令的完成和退休两个阶段占用重排序缓冲区中的表项,不需要在指令完整的执行生命周期都占用重排序缓冲区中的表项,从而不需要维护完整的重排序缓冲区,进而可以减小维护重排序缓冲区所需消耗的资源,减小处理单元12的资源消耗。另外,由于指令仅在完成和退休两个阶段占用重排序缓冲区中的表项,因此可以减小重排序缓冲区中表项的数量,较小的重排序缓冲区便能够满足需求,减小重排序缓冲区可以降低处理单元12的成本。
68.对于乱序执行架构的处理单元12,处理单元12还可以包括指令分发单元,指令分发单元可以将指令从按序状态转换至乱序状态,并为指令分配指令标识(指令id),使得指令执行单元121和指令退休单元123能够指令标识,确定指令的新老关系。指令分发单元将指令转换至乱序状态后,指令发射单元可以将乱序状态的指令发射给指令执行单元121,进而指令执行单元121乱序执行指令。
69.本技术实施例主要着眼于指令退休单元123的指令完成和退休过程,及指令执行单元121的指令提交过程,在后文中会对指令的完成、退休和提交进行详细描述。
70.指令退休单元
71.动态调度可以重新安排功能的执行顺序,以减少执行指令序列执行过程中的停顿,从而提高处理单元的性能,但是在对指令乱序执行后,需要恢复指令的执行顺序,以对执行后的指令顺序提交,保证整体执行行为的正确。
72.目前,指令退休单元123维护重排序缓冲区,通过重排序缓冲区对指令执行结果进行暂存并恢复指令执行顺序。如图3所示,对于乱序执行架构的处理单元12,每条指令的执行生命周期都需要经过分发、发射、执行、完成、提交、写回和退休等多个阶段,指令从分发开始直至退休,都会占用重排序缓冲区中的指令缓冲表项,即在指令完整的执行生命周期中都需要占用重排序缓存区中的指令缓冲表项,所以指令缓冲表项的数量等于处理单元12允许的乱序度,由于重排序缓冲区中包括较多数量的指令缓冲表项,指令退休单元123需要消耗较多资源对重排序缓冲区进行维护,进行造成处理单元12的资源消耗较大。
73.本技术实施例就是为了应对维护重排序缓冲区需要消耗较多资源的问题而产生的,它主要是通过指令执行单元121和执行退休单元123实现。下面详细讨论指令退休单元123的内部结构和本技术实施例的实现过程。
74.图4是本技术一个实施例的指令退休单元的内部结构示意图。如图4所示,指令退休单元123包括接收子单元1231、仲裁子单元1232和退休子单元1233。接收子单元1231可以接收指令执行单元121针对待完成指令发送的完成请求信号。仲裁子单元1232可以响应于接收子单元1231接收到的完成请求信号,根据已退休指令与待完成指令的新老关系确定待完成指令可完成后,向指令执行单元121发送针对待完成指令的允许完成信号,并接收指令执行单元121发送的待完成指令的指令完成信息,并将待完成指令的指令完成信息存储到缓冲区中的指令缓冲表项。退休子单元1233可以根据各个指令缓冲表项中存储的指令完成信息,对已完成且未退休的待退休指令进行退休处理,并将已退休指令的指令完成信息从指令缓冲表项中删除。其中,缓冲区中指令缓冲表项的数量大于1且小于处理单元12允许的乱序度,每个指令缓冲表项可存储一个指令的指令完成信息。
75.指令能否完成由指令执行单元121确定,当指令执行单元121确定其所执行的一个指令可以完成时,该指令作为待完成指令,指令执行单元121会向指令退休单元123发送针对该指令的完成请求信号。仲裁子单元1232在确定待完成指令可完成后,会向指令执行单元121发送允许完成信号。指令执行单元121在接收到允许完成信号后,将待完成指令的指令完成信息发送给指令退休单元123,实现指令的完成。
76.指令完成是位于指令执行之后的一个阶段,可完成的指令是可以正常执行获得进行结果的指令。指令执行单元121在判断一个指令可以正常执行完毕时,可以发起针对该指令的完成请求,所以待完成指令并不一定是已经执行完毕的指令。指令执行单元121开始指令一个指令后,便可以判断该指令是否能够正常执行完毕,如果确定该指令能够正常执行完毕,则可以发起针对该指令的完成请求。
77.在待完成指令被允许完成后,指令执行单元121会将待完成指令的指令完成信息发送给指令退休单元123,进而由仲裁子单元1232将指令完成信息存储到指令缓存表项中,以备退休子单元1233对指令进行退休处理时使用。指令完成信息包括指令的长度、指令会不会更新标识位、指令会不会产生异常等信息。
78.缓冲区位于指令退休单元123内,缓冲区中指令缓存表项的数量大于1且小于处理
单元12允许的乱序度,同一时刻每个指令缓冲表项可存储一个指令的指令完成信息。处理单元12的乱序度等于指令执行单元121内所允许指令数量的上限,即指令执行单元121内处于分发阶段至退休阶段的指令的数量上限。比如,指令执行单元121的乱序度为64,指令执行单元121内未退休指令的数量上限为64,缓冲区中指令缓冲表项的数量大于1且小于64,例如指令缓冲表项的数量为4。
79.应理解,缓冲区中指令缓冲表项的数量会影响处于已完成但未退休指令的数量,进而响处理单元12的性能,同时指令缓冲表项的数量也会影响对缓冲区进行维护的资源消耗,通过设定合理的指令缓冲表项数量,可以平衡处理单元12的性能和资源消耗。
80.仲裁子单元1232根据已退休指令与待完成指令的新老关系,判断待完成指令是否可以完成,在确定待完成指令可以完成后,将待完成指令的指令完成信息存储到指令缓存表项后。由于指令缓存表项的数量小于处理单元12允许的乱序度,仲裁子单元1232控制指令按序完成,并将完成指令的指令完成信息存储在指令缓冲表项中,避免已完成指令无法退休持续占据指令缓存表项,导致其他指令无法完成,进而如此循环造成流水线堵塞的情况发生。
81.在本技术实施例中,缓冲区中指令缓冲表项的数量小于处理单元12的乱序度,仲裁子单元1232使指令按序完成,将已完成指令的指令完成信息存储到指令缓冲表项中,退休子单元1233则根据指令缓冲表项中的指令完成信息对待退休指令进行退休处理,并将已退休指令的指令完成信息从指令缓冲表项中删除。由于指令缓冲表项中存储已完成且未退休或正在退休指令的指令完成信息,所以指令仅在完成和退休两个阶段占用指令缓冲表项,因此缓冲区仅需包括较少的指令缓冲表项便能够满足处理单元12的乱序执行,而维护较少的指令缓冲表项可以减少处理单元12进行乱序处理时用于指令重排序部分的硬件资源消耗。
82.在一种可能的实现方式中,缓冲区包括n个指令缓冲表项,n为大于或等于2的正整数。为了避免发送流水线堵塞,缓冲区存储除已退休指令外较老的n条指令的指令完成信息,每个指令缓冲表项存储一个指令的指令完成信息。接收子单元1231接收到针对待完成指令的完成请求信号后,仲裁子单元1232确定除已退休指令外较老的n条指令中是否包括该待完成指令,如果包括则允许该待完成指令进行完成,进而向指令执行单元121发送允许完成信号,使指令执行单元121发送该待完成指令的指令完成信息,并将该待完成指令的指令完成信息存储到指令缓冲表项中。
83.图5是本技术一个实施例的可接受完成指令的示意图。如图5所示,指令x-1至指令x n 1为指令包中的序列指令,指令x及前序各指令均已退休,在指令缓冲表项的数量为n时,可接收完成指令为指令x 1至指令x n,即除已退休的指令1至指令x外,较老的n条指令为指令x 1至指令x n,指令x 1至指令x n中的任一指令发起完成请求均会被仲裁子单元1232接受,而指令x 1至指令x n之外的指令发起完成请求则不会被仲裁子单元1232接受。在图5中,包括斜线底纹矩形框所示指令为已退休指令,不包括斜线底纹矩形框所示指令为未退休指令。
84.例如,指令缓冲表项的数量为4,指令包按指令序列(指令的新老关系)包括指令1至指令64。指令1和指令2已退休,则除指令1和指令2之外较老的4个指令为指令3至指令6,如果指令3至指令6中的任一指令发起完成请求,仲裁子单元1232会允许该指令进行完成,
如果指令3至指令6之外的任一指令发起完成请求,比如指令7发起完成请求,仲裁子单元1232拒绝该指令进行完成。
85.应理解,当除已退休指令外较老的n条指令中的任一条指令发起完成请求时,仲裁子单元1232均会运行该指令进行完成,即这n条指令并不需要按新老关系进行完成,而且这n条指令中的部分指令或全部指令可以同时发起完成请求。比如,除已退休指令外较老的n条指令为指令3至指令6,则对指令3至指令6的完成顺序没有要求。
86.在本技术实施例中,由于指令需要按序退休,仲裁子单元1232根据已退休指令,允许除已退休指令外较老的n条指令退休,即缓冲区可以存储除已退休指令外较老的n条指令的指令完成信息,避免后序指令占据指令缓冲表项而前序指令无法完成,前序指令无法完成导致已完成指令无法退休而腾空指令缓冲表项,如此循环进而导致流水线堵塞,从而在减小处理单元12资源消耗的同时,保证了处理单元12的性能和可靠性。
87.在一种可能的实现方式中,缓冲区所包括的n个指令缓冲表项用于存储不同指令的指令完成信息,且n个指令缓冲表项中的第i指令缓冲表项用于存储指令序列中第i kn指令的指令完成信息,k取值非负整数。
88.例如,在缓冲区包括指令缓冲表项1至指令缓冲表项4共计4个指令缓冲表项,即n等于4,则指令缓冲表项1用于存储指令1 4k的指令完成信息,指令缓冲表项2用于存储指令2 4k的指令完成信息,指令缓冲表项3用于存储指令3 4k的指令完成信息,指令缓冲表项4用于存储指令4 4k的指令完成信息,其中,k取值0,1,2等非负整数。在处理单元12允许的乱序度为64时,指令缓冲表项1至指令缓冲表项4所存储指令完成信息对应的指令如下表1所示。
89.表1
[0090][0091]
需要说明的是,每个指令缓冲表项同一时刻仅能存储一个指令的指令完成信息,待上一指令的指令完成信息被从指令缓冲表项中删除后,下一指令的指令完成信息才能够被存储到指令缓冲表项中。比如,针对上述表1中的指令缓冲表项1,在指令1的指令完成信
息位于指令缓冲表项1中时,指令5的指令完成信息无法被存储到指令缓冲表项1中,此时指令5的完成请求不会被仲裁子单元1232接受,待指令1退休后,指令1的指令完成信息被从指令缓冲表项1中删除,然后指令5的指令完成信息可被存储到指令缓冲表项1中,此时指令5的完成请求会被仲裁子单元1232接受。
[0092]
对于各指令缓冲表项中的第i指令缓冲表项,如果第i指令缓冲表项中存储的是第i kn指令的指令完成信息,在第i kn指令的指令完成信息退休后,仲裁子单元1232会将第i (k 1)n指令的指令标识匹配到第i指令缓冲表项,以指示第i指令缓冲表项当前可存储第i (k 1)n指令的指令完成信息,进而第i (k 1)n指令的完成请求可被仲裁子单元1232接受。
[0093]
在本技术实施例中,缓冲区包括的n个指令缓冲表项用于存储不同指令的指令完成信息,而且每个指令缓冲表项用于存储指令序列中间隔n-1个指令的各指令的指令完成信息,使指令序列中相邻指令的指令完成信息存储到不同的指令缓冲表项中,可以缩短指令的完成等待时间,提高指令完成和退休的效率,在减小处理单元12资源消耗的同时可以保证处理单元12的性能。
[0094]
在一种可能的实现方式中,针对每个已完成且未退休的待退休指令,退休子单元1233可以根据指令缓冲表项中该待退休指令的指令完成信息,判断该待退休指令的前序指令是否均已退休或已完成且不会引发投机失败,如果该待退休指令的前序指令均已退休或者未退休但已完成且不会引发投机失败,则对该待退休指令及未退休的前序指令依次进行退休处理,并将已退休指令的指令完成信息从指令缓冲表项中删除。
[0095]
例如,在将指令5的指令完成信息存储到来自缓冲表项中之后,退休子单元1233会判断指令5的各前序指令是否均已退休或者未退休但已完成且不会引发投机失败。如果指令5的各前序指令均已退休或未退休但已完成且不会引发投机失败,则可以对指令5进行退休,若指令5的前序存在未退休但已完成且不会引发投机失败的指令,则同时对指令5前序的未退休但已完成且不会引发投机失败的指令进行退休处理,比如,指令5前序的指令1至指令3均已退休,指令4已完成且不会引发投机失败,则按顺序因此对指令4和指令5进行退休。
[0096]
对于任一待退休指令,如果该待退休指令前序存在未完成指令,则需要等待该待退休指令的前序指令均完成后,根据各前序指令是否会引发投机失败,在确定该待退休指令能够正常退休。
[0097]
在本技术实施例中,退休子单元1233按序对已完成且不会引发投机失败的指令进行退休,并将已退休指令的指令完成信息从指令缓冲表项中删除,使得后序指令的指令完成信息能够存储到指令缓冲表项中,以使后序指令能够按序完成,在恢复指令执行顺序,保证整体执行行为正确的同时,保证整体执行行为的正确。
[0098]
在一种可能的实现方式中,针对每个已完成且未退休的待退休指令,退休子单元1233可以根据指令缓冲表项中该待退休指令的指令完成信息,判断该待退休指令的前序是否存在引发投机失败的已完成指令,如果该待退休指令的前序存在引发投机失败的已完成指令,则退休子单元1233对该引发投机失败的已完成指令进行退休处理,并产生冲刷流水线操作,向指令执行单元121发送流水线冲刷请求,并将已退休指令及位于错误路径上的已完成指令的指令完成信息从指令缓冲表项中删除。
[0099]
例如,退休子单元1233在对指令5进行退休处理时,会判断指令5前序的各已完成
指令是否会引发投机失败,在会引发投机失败的指令3完成后,退休子单元1233会对指令3进行退休处理,并产生冲刷流水线操作,向指令执行单元121发送流水线冲刷请求,以使位于错误路径上的投机指令不产生执行效果。如果有错误路径上的投机指令已完成,则从指令缓冲表项中将错误路径上投机指令的指令完成信息删除。
[0100]
在本技术实施例中,当已完成指令前序存在引发投机失败的指令完成时,退休子单元1233退休至该引发投机失败的投机失败指令,并产生冲刷流水线操作,向指令执行单元121发送流水线冲刷请求,以使位于错误路径上的投机指令不产生执行效果,若位于错误路径上的投机指令已完成,则从指令缓冲表项中将错误路径上投机指令的指令完成信息删除,使得退休的指令一定是正确路径上的指令,保证了整体执行行为的正确。
[0101]
图6是本技术另一个实施例的指令退休单元123的内部结构示意图。如图6所示,指令退休单元123还包括确定子单元1234。确定子单元1234可以根据各指令缓冲表项中存储的指令完成信息,确定当前可提交指令,其中,当前可提交指令的前序指令均已退休或未退休但已完成且不会引发投机失败。在确定出当前可提交指令后,确定子单元1234会基于当前可提交指令向指令执行单元121发送指令提交信号,接收到指令提交信号的指令执行单元121,可以根据指令提交信号对当前可提交指令及其前序指令进行提交。
[0102]
确定子单元1234根据各指令缓冲表项中存储的指令完成信息,可以将前序指令均已退休或未退休但已完成且不会引发投机失败的指令确定为当前可提交指令,当前可提交指令可以是未完成指令。由于可退休指令为前序指令均已退休或未退休但已完成且不会引发投机失败的指令,所以当前可提交指令为末位可退休指令的下一个指令。
[0103]
图7是本技术一个实施例的当前可提交指令的示意图。如图7所示,指令x为处于末位的可退休指令,指令x 1为当前可提交指令。在图7中,包括斜线底纹矩形框所示指令为已完成指令,不包括斜线底纹矩形框所示指令为未完成指令,即指令x-2、指令x-1、指令x和指令x 2为已完成指令,指令x 1为未完成指令。
[0104]
在本技术实施例中,确定子单元1234根据各指令缓冲表项中存储的指令完成信息,确定当前可提交指令,基于当前可提交指令向指令执行单元121发送指令提交信号后,指令执行单元121可以对当前可提交指令及其前序指令进行提交。由于当前可提交指令的前序指令均已退休或未退休但已完成且不会引发投机失败,保证提交的指令均是正确路径上的指令,从而保证整体执行行为的正确。
[0105]
指令执行单元
[0106]
图8是本技术一个实施例的指令执行单元的内部结构示意图。如图8所示,指令执行单元121包括请求子单元1211和发送子单元1212。在确定指令执行单元121所执行的一个指令可以完成时,请求子单元1211可以向指令退休单元123发送针对该待完成指令的完成请求信号,以请求对该待完成指令进行完成。指令退休单元123确定该待完成指令可以完成时,会向指令执行单元121发送允许完成信号,发送子单元1212接收到允许完成信号后,会将待完成指令的指令完成信息发送给指令退休单元123,由指令退休单元123将指令完成信息存储到缓冲区中的指令缓冲表项,进而指令退休单元123可以根据各指令缓冲表项中存储的指令完成信息,对已完成且未退休的待退休指令进行退休处理,并将已退休指令的指令完成信息从指令缓冲表项中删除。其中,缓冲区中指令缓冲表项的数量大于1且小于处理单元12允许的乱序度,每个指令缓冲表项可存储一个指令的指令完成信息。
[0107]
在指令执行单元121开始执行一个指令后,请求子单元1211可以判断该指令是否可以完成,如果确定该指令可以完成,则针对该指令向指令退休单元123发送完成请求信号,如果确定该指令暂时不可以完成,则等待该指令可以完成后,再向指令退休单元123发送完成请求信号。请求子单元1211向指令退休单元123发送完成请求信号后,如果没有接收到指令退休单元123发送的允许完成信号,说明指令退休单元123判断待完成请求还不可以完成,请求子单元1211需要在后续重新进行该待完成指令的完成。
[0108]
在本技术实施例中,缓冲区中指令缓冲表项的数量小于处理单元12的乱序度,请求子单元1211向指令退休单元123发送指令完成信息,指令退休单元123将指令完成信息存储到指令缓冲表项中,实现指令的完成,进而指令退休单元123可以根据指令缓冲表项中的指令完成信息对待退休指令进行退休处理,并将已退休指令的指令完成信息从指令缓冲表项中删除。由于指令缓冲表项中存储已完成且未退休或正在退休指令的指令完成信息,所以指令仅在完成和退休两个阶段占用指令缓冲表项,因此缓冲区仅需包括较少的指令缓冲表项便能够满足处理单元12的乱序执行,而维护较少的指令缓冲表项可以减少处理单元12的资源消耗。
[0109]
图9是本技术另一个实施例的指令执行单元的内部结构示意图。如图9所示,指令执行单元121还包括提交子单元1213。提交子单元1213可以接收来自指令退休单元123的指令提交信号,并对指令提交信号所对应的当前可提交指令及其前序指令进行提交。其中,当前可提交指令的前序指令均已退休或未退休但已完成且不会引发投机失败。
[0110]
指令退休单元123可以根据各指令缓冲表项中存储的指令完成信息,确定当前可提交指令,并基于当前可提交指令向指令执行单元121广播指令提交信号,指令执行单元121接收到指令提交信号后,对当前可提交指令及其前序指令进行提交。
[0111]
在本技术实施例中,由于当前可提交指令根据各指令缓冲表项中的指令完成信息确定,当前可提交指令的前序指令均已退休或未退休但已完成且不会引发投机失败,所以当前可提交指令及其前序指令均为正确路径上的指令,从而可以保证整体执行行为的正确。
[0112]
在一种可能的实现方式中,指令提交信号包括当前可提交指令的指令标识,指令的指令标识在指令被分发时获得,指令标识可以指示指令的时序关系,即根据指令标识可以确定指令的新老关系。提交子单元1213可获取产生提交请求的待提交指令的指令标识,将待提交指令的指令标识与当前可提交指令的指令标识进行比较,如果待提交指令的指令标识老于或等于当前可提交指令的指令标识,则对待提交指令进行提交,如果待提交指令的指令标识新于当前可提交指令的指令标识,则不对待提交指令进行提交。
[0113]
指令分发单元在使指令从按序状态进入乱序状态时,会为每个指令分配指令标识,指令标识是指令在流水线中的唯一标识,通过比较指令标识可以确定不同指令的新老关系。指令标识可以按照指令序列递增或递减,当指令标识按照指令序列递增时,指令标识大的指令相对于指令标识小的指令较新,当指令标识按照指令序列递减时,指令标识大的指令相对于指令标识小的指令较老。
[0114]
在本技术实施例中,提交子单元1213根据指令标识确定指令的新老关系,如果一个指令老于当前可提交指令,则对该指令进行提交,如果一个指令与当前可提交指令的指令标识相同,说明该指令即为当前可提交指令,进而对该指令进行提交,如果一个指令新于
当前可提交指令,则暂不对该指令进行提交。通过指令标识确定指令间的新老关系,进而确定可以提交的指令,保证了所提交的指令位于正确路径上,进而保证了整体执行行为的正确。
[0115]
图10是本技术又一个实施例的指令执行单元的内部结构示意图。如图10所示,指令执行单元121还包括冲刷子单元1214。冲刷子单元1214可以响应于来自指令退休单元123的流水线冲刷请求,根据指令执行单元121的执行延时和架构,通过第一冲刷模式和/或第二冲刷模式对指令执行单元121进行流水线冲刷,其中,第一冲刷模式在指令被执行之前清除错误路径上的投机指令,第二冲刷模式使错误路径上的投机指令不产生执行效果。
[0116]
第一冲刷模式在指令被执行之前清除错误路径上的投机指令,所以不需要等待指令执行单元121内部的全部指令执行完毕,便可以进行流水线冲刷,从而可以缩短每次流水线冲刷所需的时间,但是第一冲刷模式需要在指令被指令前确定出指令的新老关系,为此第一冲刷模式对指令执行单元121的架构有硬性要求,比如,按序处理指令的指令执行单元121可以通过第一冲刷模式进行流水线冲刷,而乱序处理指令的指令执行单元121单纯通过第一冲刷模式无法完成流水线冲刷。
[0117]
第二冲刷模式可以使错误路径上的投机指令不产生执行效果,在指令执行单元121内部的全部指令执行完毕后,可以根据执行结果确定指令的新老关系,从而可以适用于各种架构的指令执行单元121,但是第二冲刷模式需要在指令被执行后确定指令的新老关系,如果指令执行单元121中存在长延迟指令,指令执行单元121执行长延迟指令需要耗费较长时间,需要较长时间才能完成流水线冲刷,而在进行流水线冲刷的过程中,前级无法向指令执行单元121发射新的指令,导致处理单元12产生执行空泡,影响处理单元12的性能。
[0118]
在本技术实施例中,发生投机失败时,指令退休单元123会向指令执行单元121发送流水线冲刷请求,冲刷子单元1214响应于流水线冲刷请求,根据指令执行单元121的执行延时和架构,通过第一冲刷模式和/或第二冲刷模式对指令执行单元121进行流水线冲刷,由于第一冲刷模式在指令被执行之前清除错误路径上的投机指令,流水线冲刷速度较快,但只适用于部分架构类型的指令执行单元,而第二冲刷模式可以使错误路径上的投机指令不产生执行效果,适用于各种架构类型的指令执行单元。所以冲刷子单元1214可以根据指令执行单元121的执行延时和架构,通过第一冲刷模式和/或第二冲刷模式对指令执行单元121进行流水线冲刷,在可以对不同架构指令执行单元进行流水线冲刷的基础上,可以提高流水线的冲刷速度,从而可以提高流水线冲刷效率。
[0119]
指令处理方法
[0120]
图11是本技术一个实施例的指令处理方法的流程图,该指令处理方法可由上述实施例中的指令退休单元123执行。如图11所示,该指令执行方法包括如下步骤:
[0121]
步骤1101、接收指令执行单元针对待完成指令发送的完成请求信号,其中,完成请求信号用于请求对待完成指令进行完成。
[0122]
步骤1102、在根据已退休指令与待完成指令的新老关系确定待完成指令可完成后,向指令执行单元发送针对待完成指令的允许完成信号,并接收指令执行单元发送的待完成指令的指令完成信息,将待完成指令的指令完成信息存储到缓冲区中的指令缓冲表项。
[0123]
其中,缓冲区中指令缓存表项的数量大于1且小于处理单元允许的乱序度,每个指
令缓冲表项可存储一个指令的指令完成信息;
[0124]
步骤1103、根据各指令缓冲表项中存储的指令完成信息,对已完成且未退休的待退休指令进行退休处理,并将已退休指令的指令完成信息从指令缓冲表项中删除。
[0125]
在本技术实施例中,缓冲区中指令缓冲表项的数量小于处理单元的乱序度,通过按序完成指令,将已完成指令的指令完成信息存储到指令缓冲表项中,根据指令缓冲表项中的指令完成信息对待退休指令进行退休处理,并将已退休指令的指令完成信息从指令缓冲表项中删除。由于指令缓冲表项中存储已完成且未退休或正在退休指令的指令完成信息,所以指令仅在完成和退休两个阶段占用指令缓冲表项,因此缓冲区仅需包括较少的指令缓冲表项便能够满足处理单元的乱序执行,而维护较少的指令缓冲表项可以减少处理单元的资源消耗。
[0126]
在一种可能的实现方式中,所述缓冲区包括n个指令缓冲表项,在完成指令时,可以确定除已退休指令外较老的n条指令中是否包括待完成指令,若除已退休指令外较老的n条指令中包括待完成指令,则向指令执行单元发送针对待完成指令的允许完成信号,并接收指令执行单元发送的待完成指令的指令完成信息,将待完成指令的指令完成信息存储到缓冲区中的指令缓冲表项。
[0127]
在一种可能的实现方式中,n个指令缓冲表项用于存储不同指令的指令完成信息,且n个指令缓冲表项中的第i指令缓冲表项用于存储指令序列中第i kn指令的指令完成信息,k取值非负整数。
[0128]
在一种可能的实现方式中,在对指令进行退休处理时,针对每个待退休指令,若根据指令缓冲表项中该待退休指令的指令完成信息,确定该待退休指令的前序指令均已退休或已完成且不会引发投机失败,则对该退休指令及未退休的前序指令依次进行退休处理,并将已退休指令的指令完成信息从指令缓冲表项中删除。
[0129]
在一种可能的实现方式中,在对指令进行退休处理时,针对每个待退休指令,若根据指令缓冲表项中该待退休指令的指令完成信息,确定该待退休指令的前序存在引发投机失败的已完成指令,则对引发投机失败的已完成指令进行退休处理,并向指令执行单元发送流水线冲刷请求,及将已退休指令及位于错误路径上的已完成指令的指令完成信息从指令缓冲表项中删除。
[0130]
在一种可能的实现方式中,该指令处理方法还包括:根据各指令缓存表项中存储的指令完成信息,确定当前可提交指令,并基于当前可提交指令向指令执行单元发送指令提交信号,使指令执行单元根据指令提交信号,对当前可提交指令及当前可提交指令的前序指令进行提交,其中,当前可提交指令的前序指令均已退休或已完成且不会引发投机失败。
[0131]
图12是本技术另一个实施例的指令处理方法的流程图,该指令处理方法可由上述实施例中的指令执行单元121执行。如图12所示,该指令执行方法包括如下步骤:
[0132]
步骤1201、向指令退休单元发送完成请求信号,其中,完成请求信号用于请求对待完成指令进行完成。
[0133]
步骤1202、在接收到指令退休单元发送的允许完成信号后,将待完成指令的指令完成信息发送给指令退休单元,由指令退休单元将指令完成信息存储到缓冲区中的指令缓冲表项,并根据各指令缓冲表项中存储的指令完成信息,对已完成且未退休的待退休指令
进行退休处理,及将已退休指令的指令完成信息从指令缓冲表项中删除。
[0134]
其中,缓冲区中指令缓存表项的数量大于1且小于处理单元允许的乱序度,每个指令缓冲表项可存储一个指令的指令完成信息。
[0135]
在本技术实施例中,缓冲区中指令缓冲表项的数量小于处理单元的乱序度,通过按序完成指令,将已完成指令的指令完成信息存储到指令缓冲表项中,根据指令缓冲表项中的指令完成信息对待退休指令进行退休处理,并将已退休指令的指令完成信息从指令缓冲表项中删除。由于指令缓冲表项中存储已完成且未退休或正在退休指令的指令完成信息,所以指令仅在完成和退休两个阶段占用指令缓冲表项,因此缓冲区仅需包括较少的指令缓冲表项便能够满足处理单元的乱序执行,而维护较少的指令缓冲表项可以减少处理单元的资源消耗。
[0136]
在一种可能的实现方式中,该指令处理方法还包括:接收来自指令退休单元的指令提交信号,并对指令提交信号所对应的当前可提交指令及当前可提交指令的前序指令进行提交,其中,当前可提交指令的前序指令均已退休或已完成且不会引发投机失败。
[0137]
在一种可能的实现方式中,指令提交信号包括当前可提交指令的指令标识,指令的指令标识在指令被分发时获得,指令标识用于指示指令的时序关系;在对指令进行提交时,可以获取产生提交请求的待提交指令的指令标识,若待提交指令的指令标识老于或等于当前可提交指令的指令标识,则对待提交指令进行提交。
[0138]
在一种可能的实现方式中,该指令处理方法还包括:响应于来自指令退休单元的流水线冲刷请求,根据指令执行单元的执行延时和架构,通过第一冲刷模式和/或第二冲刷模式对指令执行单元进行流水线冲刷,其中,第一冲刷模式在指令被执行之前清除错误路径上的投机指令,第二冲刷模式使错误路径上的投机指令不产生执行效果。
[0139]
需要说明的是,由于指令处理方法的细节在上述实施例的指令退休单元和指令执行单元部分,已经结合结构示意图进行了详细说明,具体过程可参见前述指令退休单元实施例和指令执行单元实施例中的描述,在此不再进行赘述。
[0140]
计算机存储介质
[0141]
本技术还提供了一种计算机可读存储介质,存储用于使一机器执行如本文所述的指令处理方法的指令。具体地,可以提供配有存储介质的系统或者装置,在该存储介质上存储着实现上述实施例中任一实施例的功能的软件程序代码,且使该系统或者装置的计算机(或cpu或mpu)读出并执行存储在存储介质中的程序代码。
[0142]
在这种情况下,从存储介质读取的程序代码本身可实现上述实施例中任何一项实施例的功能,因此程序代码和存储程序代码的存储介质构成了本技术的一部分。
[0143]
用于提供程序代码的存储介质实施例包括软盘、硬盘、磁光盘、光盘(如cd-rom、cd-r、cd-rw、dvd-rom、dvd-ram、dvd-rw、dvd rw)、磁带、非易失性存储卡和rom。可选择地,可以由通信网络从服务器计算机上下载程序代码。
[0144]
计算机程序产品
[0145]
本技术实施例还提供了一种计算机程序产品,包括计算机指令,该计算机指令指示计算设备执行上述多个方法实施例中的任一对应的操作。
[0146]
本技术实施例的商业价值
[0147]
本技术实施例在解决处理单元恢复指令执行顺序时资源消耗较大的问题时,缓冲
区中指令缓冲表项的数量小于处理单元的乱序度,按序按成指令,将已完成指令的指令完成信息存储到指令缓冲表项中,根据指令缓冲表项中的指令完成信息对待退休指令进行退休处理,并将已退休指令的指令完成信息从指令缓冲表项中删除。由于指令缓冲表项中存储已完成且未退休或正在退休指令的指令完成信息,所以指令仅在完成和退休两个阶段占用指令缓冲表项,因此缓冲区仅需包括较少的指令缓冲表项便能够满足处理单元的乱序执行,而维护较少的指令缓冲表项可以减少处理单元的资源消耗。
[0148]
应该理解,本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同或相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于方法实施例而言,由于其基本相似于装置和系统实施例中描述的方法,所以描述的比较简单,相关之处参见其他实施例的部分说明即可。
[0149]
应该理解,上述对本说明书特定实施例进行了描述。其它实施例在权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
[0150]
应该理解,本文用单数形式描述或者在附图中仅显示一个的元件并不代表将该元件的数量限于一个。此外,本文中被描述或示出为分开的模块或元件可被组合为单个模块或元件,且本文中被描述或示出为单个的模块或元件可被拆分为多个模块或元件。
[0151]
还应理解,本文采用的术语和表述方式只是用于描述,本说明书的一个或多个实施例并不应局限于这些术语和表述。使用这些术语和表述并不意味着排除任何示意和描述(或其中部分)的等效特征,应认识到可能存在的各种修改也应包含在权利要求范围内。其他修改、变化和替换也可能存在。相应的,权利要求应视为覆盖所有这些等效物。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献