指令处理方法、装置、程序产品、计算机设备和介质与流程

文档序号:31660865发布日期:2022-09-27 23:03阅读:85来源:国知局
指令处理方法、装置、程序产品、计算机设备和介质与流程

1.本技术涉及计算机技术领域,尤其涉及一种指令处理方法、装置、程序产品、计算机设备和介质。


背景技术:

2.处理器可以在计算机系统中负责控制和运算和工作,处理器是信息处理、程序运行的最终执行单元。
3.现有应用,大多数处理器中并没有硬件循环指令,而对于有硬件循环指令的处理器,针对硬件循环指令的编译也会有很多限制,导致对硬件循环指令的编译并不灵活。


技术实现要素:

4.本技术提供了一种指令处理方法、装置、程序产品、计算机设备和介质,可提高对硬件循环指令的编译灵活性。
5.本技术一方面提供了一种指令处理方法,该方法包括:对硬件循环指令的循环体进行循环执行;循环体中包含分支指令;当执行至分支指令时,获取分支指令的预测信息,预测信息用于指示预测的分支指令的下一指令;执行分支指令,并按照预测信息的指示执行预测的下一指令;获取分支指令的执行结果,执行结果用于指示确定的分支指令的下一指令;若预测的下一指令与确定的下一指令不匹配,则撤销对预测的下一指令的执行,并对循环体的当前执行参数进行校正处理;当前执行参数用于指示当前对循环体进行循环执行的进度。
6.本技术一方面提供了一种指令处理装置,该装置包括:执行模块,用于对硬件循环指令的循环体进行循环执行;循环体中包含分支指令;获取模块,用于当执行至分支指令时,获取分支指令的预测信息,预测信息用于指示预测的分支指令的下一指令;执行模块,用于执行分支指令,并按照预测信息的指示执行预测的下一指令;获取模块,用于获取分支指令的执行结果,执行结果用于指示确定的分支指令的下一指令;校正模块,用于若预测的下一指令与确定的下一指令不匹配,则撤销对预测的下一指令的执行,并对循环体的当前执行参数进行校正处理;当前执行参数用于指示当前对循环体进行循环执行的进度。
7.可选的,执行模块执行分支指令,并按照预测信息的指示执行预测的下一指令的方式,包括:在流水线结构的多个阶段依次执行分支指令;在执行分支指令的过程中和在对分支指令执行完成后,在多个阶段中执行过分支
指令的阶段执行预测的下一指令。
8.可选的,预测信息用于指示预测的需要跳转到分支指令的关联指令,或预测的不需要跳转到分支指令的关联指令;若预测信息用于指示预测的需要跳转到分支指令的关联指令,则预测信息用于获取预测的分支指令的关联指令;分支指令的执行结果用于指示确定的需要跳转到分支指令的关联指令,或确定的不需要跳转到分支指令的关联指令;若分支指令的执行结果用于指示确定的需要跳转到分支指令的关联指令,则分支指令的执行结果用于获取确定的分支指令的关联指令。
9.可选的,若预测信息包含预测的关联指令,则预测的下一指令是指预测的关联指令;若预测信息不包含预测的关联指令,则预测的下一指令是指循环体中与分支指令相邻的下一指令。
10.可选的,若分支指令的执行结果包含确定的关联指令,则确定的下一指令是指确定的关联指令;若分支指令的执行结果不包含确定的关联指令,则确定的下一指令是指循环体中与分支指令相邻的下一指令。
11.可选的,上述装置还用于:若预测的下一指令与确定的下一指令不匹配,则在撤销对预测的下一指令的执行后,执行确定的下一指令。
12.可选的,分支指令是在对循环体进行第n次循环执行的过程中获取的,n为正整数,n小于或等于循环体总的循环次数;当前执行参数包含循环体在当前的剩余循环次数;上述装置还用于:若预测的下一指令是循环体中的结束指令,则在执行结束指令时,获取循环体在进行第n次循环执行前的剩余循环次数;将循环体在进行第n次循环执行前的剩余循环次数减去单位次数,得到循环体在当前的剩余循环次数;其中,若预测的下一指令不是结束指令,则在执行预测的下一指令时,循环体在当前的剩余循环次数等于循环体在进行第n次循环执行前的剩余循环次数。
13.可选的,校正模块对循环体的当前执行参数进行校正处理的方式,包括:获取循环体在进行第n次循环执行前的剩余循环次数;若循环体在进行第n次循环执行前的剩余循环次数与循环体在当前的剩余循环次数不同,则将循环体在当前的剩余循环次数加上单位次数,得到对循环体在当前的剩余循环次数进行校正后的剩余循环次数。
14.可选的,分支指令是在对循环体进行第n次循环执行的过程中获取的,n为正整数,n小于或等于循环体总的循环次数;当前执行参数包含当前的提交标识,当前的提交标识用于指示当前已对目标执行结果进行提交或未对目标执行结果进行提交,目标执行结果是指循环体在进行第n次循环执行时对循环体中结束指令的执行结果;当前的提交标识为初始标识或未提交标识;
上述装置还用于:若预测的下一指令是循环体中的结束指令,则在执行结束指令时,将循环体在进行第n次循环执行前的提交标识由初始标识更新为未提交标识,得到当前的提交标识;若对结束指令执行完成,则将当前的提交标识由未提交标识更新为初始标识;其中,若预测的下一指令不是结束指令,则在执行预测的下一指令时,当前的提交标识为初始标识。
15.可选的,校正模块对循环体的当前执行参数进行校正处理的方式,包括:若当前的提交标识为未提交标识,则将当前的提交标识由未提交标识重新校正为初始标识。
16.可选的,方法具有相互嵌套的k个硬件循环指令,k个硬件循环指令中的第k-1个硬件循环指令嵌套在第k个硬件循环指令中,k和k均为正整数,k小于或等于k且k大于1;相互嵌套的k个硬件循环指令根据嵌套的顺序被依次压入栈中,第k-1个硬件循环指令和第k个硬件循环指令在栈中的位置相邻,第k个硬件循环指令先于第k-1个硬件循环指令被压入栈中;k个硬件循环指令根据被压入栈中的反顺序被依次执行。
17.可选的,上述装置还用于:当依次对k个硬件循环指令执行完成时,得到第k个硬件循环指令的执行结果,并输出第k个硬件循环指令的执行结果。
18.本技术一方面提供了一种计算机设备,包括存储器和处理器,存储器存储有计算机程序,计算机程序被处理器执行时,使得处理器执行本技术中一方面中的方法。
19.本技术一方面提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序,该计算机程序包括程序指令,该程序指令被处理器执行时使该处理器执行上述一方面中的方法。
20.根据本技术的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述一方面等各种可选方式中提供的方法。
21.本技术可以对硬件循环指令的循环体进行循环执行;循环体中包含分支指令;当执行至分支指令时,获取分支指令的预测信息,预测信息用于指示预测的分支指令的下一指令;执行分支指令,并按照预测信息的指示执行预测的下一指令;获取分支指令的执行结果,执行结果用于指示确定的分支指令的下一指令;若预测的下一指令与确定的下一指令不匹配,则撤销对预测的下一指令的执行,并对循环体的当前执行参数进行校正处理;当前执行参数用于指示当前对循环体进行循环执行的进度。由此可见,本技术提出的方法硬件循环指令中可以编译有分支指令,并在得到分支指令的预测信息后,不仅可以执行分支指令,还可以根据预测信息的指示执行预测的分支指令的下一指令,后续若预测的下一指令不准确,则也可以撤销对预测的下一指令的执行,并校正循环体的当前执行参数,因此在保证了硬件循环指令中可以编译有分支指令的前提下,可以准确对分支指令及分支指令的下一指令进行执行,提升了对硬件循环指令的编辑灵活性和丰富性。
附图说明
22.为了更清楚地说明本技术或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
23.图1是本技术提供的一种网络架构的结构示意图;图2是本技术提供的一种指令执行的场景示意图;图3是本技术提供的一种指令处理方法的流程示意图;图4是本技术提供的一种流水线的结构示意图;图5是本技术提供的一种流水线式执行指令的场景示意图;图6a-图6b是本技术提供的一种参数恢复的场景示意图;图7是本技术提供的一种指令嵌套的场景示意图;图8是本技术提供的一种通过堆栈实现指令执行的场景示意图;图9是本技术提供的一种数据维护的场景示意图;图10是本技术提供的一种指令处理装置的结构示意图;图11是本技术提供的一种计算机设备的结构示意图。
具体实施方式
24.下面将结合本技术中的附图,对本技术中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
25.本技术涉及到人工智能相关技术。其中,人工智能(artificial intelligence,ai)是利用数字计算机或者数字计算机控制的机器模拟、延伸和扩展人的智能,感知环境、获取知识并使用知识获得最佳结果的理论、方法、技术及应用系统。换句话说,人工智能是计算机科学的一个综合技术,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器。人工智能也就是研究各种智能机器的设计原理与实现方法,使机器具有感知、推理与决策的功能。
26.人工智能技术是一门综合学科,涉及领域广泛,既有硬件层面的技术也有软件层面的技术。人工智能基础技术一般包括如传感器、专用人工智能芯片、云计算、分布式存储、大数据处理技术、操作/交互系统、机电一体化等技术。人工智能软件技术主要包括计算机视觉技术、语音处理技术、自然语言处理技术以及机器学习/深度学习等几大方向。
27.本技术中主要涉及到了人工智能中的机器学习。其中,机器学习(machine learning,ml)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。机器学习是人工智能的核心,是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。机器学习和深度学习通常包括人工神经网络、置信网络、强化学习、迁移学习、归纳学习、式教学习等技术。
28.本技术中所涉及到的机器学习可以指,本技术中的硬件循环指令可以是用于执行
模型任务的指令,该模型可以是通过机器学习得到。
29.首先,需要进行说明的是,本技术所采集的所有数据(如执行硬件循环指令的相关数据)都是在同意并授权的情况下进行采集的,且相关数据的收集、使用和处理也需要遵守相关国家和地区的相关法律法规和标准。
30.请参见图1,图1是本技术提供的一种网络架构的结构示意图。如图1所示,网络架构可以包括服务器200和终端设备集群,终端设备集群可以包括一个或者多个终端设备,这里将不对终端设备的数量进行限制。如图1所示,多个终端设备具体可以包括终端设备1、终端设备2、终端设备3、

、终端设备n;如图1所示,终端设备1、终端设备2、终端设备3、

、终端设备n均可以与服务器200进行网络连接,以便于每个终端设备可以通过网络连接与服务器200之间进行数据交互。
31.如图1所示的服务器200可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、cdn、以及大数据和人工智能平台等基础云计算服务的云服务器。终端设备可以是:智能手机、平板电脑、笔记本电脑、桌上型电脑、智能电视等智能终端。下面以终端设备1与服务器200之间的通信为例,进行本技术实施例的具体描述。
32.请一并参见图2,图2是本技术提供的一种指令执行的场景示意图。如图2所示,终端设备1可以向服务器200请求执行硬件循环指令,服务器200在对硬件循环指令执行完成后,可以将对硬件循环指令的执行结果给到终端设备1,终端设备1就可以对获取到的执行结果进行进一步的处理,如输出显示或者其他处理。其中,服务器200中可以具有处理器,硬件循环指令可以是处理器中的指令,如硬件循环指令可以是用于完成一个ai任务的指令等。
33.其中,硬件循环指令可以具有循环体,该循环体中可以包含多个指令,该多个指令可以包含分支指令,通过该分支指令可以跳转到其他的指令。
34.当服务器200(下述中服务器200所执行的操作,可以是通过处理器执行的)执行到分支指令时,服务器200可以预测分支指令的执行结果(可以称为预测信息),该预测信息可以用于指示预测的分支指令的下一指令。
35.进而,服务器200可以执行分支指令,其中,分支指令是通过流水线结构进行执行的,该流水线结构可以具有多个阶段(可以包括此处的阶段1、阶段2、

阶段i、

、阶段j,i和j均为正整数,i小于j,j的具体数值可以根据实际应用场景确定),服务器200可以在该多个阶段执行分支指令。
36.当服务器200当前正在上述多个阶段中的某个阶段(如阶段i)执行分支指令时,服务器200还可以通过该个阶段之前的阶段(如阶段i之前的阶段)来执行上述预测的分支指令的下一指令。即分支指令和预测的分支指令的下一指令可以同时进行执行。
37.当执行完分支指令后,就可以得到分支指令实际的(即确定的)执行结果,通过该实际的执行结果就可以得到确定的分支指令的下一指令,此时,可以对比上述预测的分支指令的下一指令与该确定的分支指令的下一指令是否匹配(如是否相同),若不同(表明预测的下一指令不正确),就可以撤销对预测的下一指令的执行,并校正循环体的当前执行参数,该当前执行参数可以用于指示对循环体进行循环执行的进度。其中,具体如何更新循环
体的当前执行参数的过程可以参见下述图3对应实施例中的描述。
38.本技术中,硬件循环指令中可以编译有分支指令,当对分支指令预测不准确时,也可以通过撤销预测的分支指令的下一指令的执行以及校正循环体的当前执行参数来进行指令执行的恢复,提升了对于硬件循环指令的编译灵活性。
39.请参见图3,图3是本技术提供的一种指令处理方法的流程示意图。本技术实施例中的执行主体可以是计算机设备,该计算机设备可以是服务器,也可以是终端设备,还可以是其他设备。该计算机设备中可以包含处理器,也可以理解为本技术中的执行主体为计算机设备中的处理器,该处理器执行的操作可以是通过所属的计算机设备来执行的,下述将本技术中的执行主体统称为计算机设备为例进行说明。如图3所示,该方法可以包括:步骤s101,对硬件循环指令的循环体进行循环执行;循环体中包含分支指令。
40.其中,计算机设备的处理器中可以具有硬件循环指令,该硬件循环指令属于处理器中可以被编译得到的指令,该硬件循环指令可以是一种循环指令,该循环指令可以是根据次数循环或者根据条件循环等。例如该硬件循环指令可以是for循环(一种循环语句)、if循环(一种循环语句)或者while循环(一种循环语句)等。
41.举个例子,上述硬件循环指令可以是for(i=0;i《10;i++) {

},{

}内的就是硬件循环指令的循环体,循环体中可以包含若干个指令,该循环表达的意思就是i的初始值为0,每对循环体循环执行一次,i的值就加1,不断对循环体进行循环执行,直到i不小于10,就停止循环。
42.可选的,硬件循环指令具体用于完成什么计算任务可以根据实际应用场景确定,对此不做限制。
43.因此,计算机设备可以对硬件循环指令的循环体进行循环执行,如在满足硬件循环指令的判定条件(如上述(i=0;i《10;i++))下,重复多次执行循环体。
44.更多的,循环体内的指令还可以包含分支指令,该分支指令可以是改变指令执行流程的指令。其中,该分支指令可以具有关联指令(也可以称之为是分支指令的目标地址处的指令),该关联指令即为通过分支指令可以跳转到的指令,即如果分支指令成立(即判断出需要跳转到分支指令的关联指令),那么下一条原本将要执行的指令(如循环体中分支指令的相邻下一条指令)就会被改变,改变为分支指令的关联指令。
45.举个例子,分支指令可以是“若a,则b”的形式,其中,a就是分支指令的判定条件,b就是分支指令的关联指令,若条件a满足,就表明需要跳转执行分支指令的关联指令(即b),反之,若条件b不满足,就表明不需要跳转执行分支指令的关联指令(即b)。
46.其中,循环体中包含的分支指令的数量、以及分支指令在循环体中的位置可以根据实际应用场景确定,对此不做限制。可以理解的是,对于每条分支指令的执行原理可以是相同的。
47.步骤s102,当执行至分支指令时,获取分支指令的预测信息,预测信息用于指示预测的分支指令的下一指令。
48.可选的,当执行至分支指令时,计算机设备可以获取分支指令的预测信息,该预测信息可以是在执行分支指令前所预测得到的,该预测信息用于指示预测的分支指令的下一指令,该预测的下一指令就是指预测的在开始执行分支指令后需要执行的指令,即该预测的下一指令就是预测的继分支指令后接着要执行的指令。
49.此处对预测信息进行说明:预测信息可以用于指示预测的需要跳转到分支指令的关联指令,或者,用于指示预测的不需要跳转到分支指令的关联指令。
50.若预测信息用于指示需要跳转到分支指令的关联指令,则预测信息还可以用于获取预测的分支指令的关联指令。
51.需要进行说明的是,分支指令也是循环体中的指令,分支指令和循环体中其他指令的性质相同,也是需要被执行的。因此,在对分支指令执行完成后,才能得知确定的(也可以理解为实际的)是否需要跳转到分支指令的关联指令,以及得知确定的(即实际的)分支指令的关联指令。
52.上述预测信息可以理解为是预测的分支指令的执行结果。
53.因此,可以理解的是,对于分支指令,有两种信息需要获得,一种是跳或不跳的判断结果,另一种是若判断出是跳,那跳的指令(即关联指令)是什么。
54.因此,若预测信息用于指示需要跳转到分支指令的关联指令,即预测信息可以用于获取预测的关联指令(即预测的分支指令的关联指令),则预测的分支指令的下一指令(简称预测的下一指令)就是指该预测的关联指令。
55.若预测信息用于指示不需要跳转到分支指令的关联指令,即预测信息不用于获取预测的关联指令,则预测的下一指令就是指循环体中与分支指令相邻的下一个指令,即该预测的下一指令就是循环体中处于分支指令后面、与分支指令相邻的下一个指令。
56.换句话说,若预测出需要跳转到分支指令的关联指令,则在继分支指令后跳转执行预测的分支指令的关联指令;若预测出不需要跳转到分支指令的关联指令,则在继分支指令后接着执行循环体中分支指令的下一个指令。
57.其中,当执行到分支指令时,计算机设备可以获取到分支指令的指针(pc),进而,计算机设备可以根据分支指令的指针从缓存中获取到分支指令,继而就可以对分支指令进行执行。
58.更多的,计算机设备在通过分支指令的指针拿到分支指令后,在开始执行分支指令前,可以通过分支指令的指针来预测分支指令的上述预测信息,该预测信息可以理解为是预测的分支指令的执行结果。
59.其中,通过分支指令的指针来预测分支指令的预测信息(包括是否需要跳转到分支指令的关联指令的预测、以及若是需要跳转到分支指令的关联指令则对于分支指令的关联指令的预测)的具体方法可以根据实际应用场景确定。
60.其中,若上述预测信息用于指示需要跳转到分支指令的关联指令,则通过预测信息获取预测的分支指令的关联指令的过程可以是:预测信息可以包含预测的分支指令的关联指令的指针,该指针就指示了预测的关联指令的缓存地址,通过该指针就可以在对应缓存地址处获取到预测的关联指令。
61.例如,可以根据分支指令历史执行的情况来预测,具体的,可以采用两位饱和计数器的分支预测方法通过分支指令前两次执行的结果来得到本次分支指令的预测信息。
62.可选的,对于有规律的分支指令,可以使用一个寄存器记录分支指令过去的历史状态,该寄存器被称为分支历史寄存器(bhr),进而可以通过该寄存器错记录的分支指令的历史状态来得到分支指令的预测信息,这种方法可以称为基于局部历史的分支预测。
63.可选的,如果对分支指令进行分支预测时,需要考虑到它前面的分支指令的执行
结果,则称这种预测方法为基于全局历史(global history)的分支预测,即若一个分支指令的预测需要考虑到该分支指令之前的分支指令的执行结果,则可以采用全局历史的分支预测方法来得到该分支指令的预测信息。在全局历史的分支预测方法中也需要使用到类似上述bhr的全局历史寄存器(ghr),一般使用有限宽的ghr记录最近执行的所有分支指令的执行结果,进而通过记录的所有分支指令的执行结果来获取到当前分支指令的预测信息。
64.其中,具体分支指令的类型、对分支指令的分支预测方法可以根据实际应用场景确定,对此不作限制。
65.步骤s103,执行分支指令,并按照预测信息的指示执行预测的下一指令。
66.可选的,计算机设备可以通过流水线结构来执行各个指令,计算机设备在执行分支指令的过程中和在对分支指令执行完成后,可以执行预测的下一指令,如下述内容描述。
67.流水线结构可以包含多个阶段,该多个阶段可以依次包含取指的阶段、译码的阶段、执行的阶段和提交的阶段。其中,取指的阶段就是根据指令的指针(pc)去缓存中拿取指令的阶段,译码的阶段就是将在缓存中拿取的指令译码为机器执行时能够识别的格式的指令,执行的阶段就是执行译码后的指令的阶段,提交的阶段就是提交指令的执行结果的阶段。
68.可选的,取指的阶段可以有多个(如可以有3个),执行的阶段也可以有多个(如可以有2个)。
69.计算机设备可以在该多个阶段依次执行分支指令,当在该多个阶段均对分支指令执行完成,就可以认为对分支指令执行完成。
70.其中,在上述多个阶段依次执行分支指令的过程中,就可以在该多个阶段中已经执行过分支指令的阶段执行上述预测的下一指令,即分支指令在还未执行完成之前,就可以提前执行上述预测的下一指令,这可以提高对指令进行执行的效率。若在分支指令执行完成后,该预测的下一指令还未执行完成,则也可以不影响地继续执行该预测的下一指令。
71.请参见图4,图4是本技术提供的一种流水线的结构示意图。如图4所示,本技术中流水线结构的多个阶段可以包含fetch1、fetch2、fetch3、decode、exe1、exe2和commit,其中,fetch1、fetch2、fetch3均为取指的阶段,即取指的阶段可以有3个,即执行的阶段可以有2个,decode为译码的阶段,exe1、exe2均为执行的阶段,commit为提交的阶段。
72.循环体中各个指令可以在上述多个阶段依次执行,该多个阶段中执行过上一个指令(如分支指令)的阶段可以接着执行下一个指令(如上述预测的下一指令),而无需等到上一个指令执行完成后再执行,实现流水线式地执行指令。
73.由上可知,通过提前预测分支指令的预测信息,可以在执行分支指令的过程中,提前执行预测的分支指令的下一指令,提高了对各个指令的执行效率。
74.步骤s104,获取分支指令的执行结果,执行结果用于指示确定的分支指令的下一指令。
75.可选的,在对分支指令执行完成后,计算机设备就可以获取到对分支指令的执行结果(该执行结果就是对分支指令执行完成后确定的执行结果),实际上在上述执行阶段完成对分支指令的执行后,就可以获取到分支指令的执行结果。
76.分支指令的执行结果可以用于指示确定的分支指令的下一指令,该确定的下一指令就是实际确定的在开始执行分支指令后需要执行的下一个指令,即该确定的下一指令就
是确定的继分支指令后接着要执行的指令。
77.同理,分支指令的执行结果用于指示确定的需要跳转到分支指令的关联指令,或者,用于指示确定的不需要跳转到分支指令的关联指令。
78.若分支指令的执行结果用于指示确定的需要跳转到分支指令的关联指令,则分支指令的执行结果还可以用于获取确定的分支指令的关联指令。
79.因此,若分支指令的执行结果用于指示需要跳转到分支指令的关联指令,即分支指令的执行结果用于获取确定的关联指令(即确定的分支指令的关联指令),则确定的分支指令的下一指令(简称确定的下一指令)就是指该确定的关联指令。
80.若分支指令的执行结果用于指示不需要跳转到分支指令的关联指令,即分支指令的执行结果不用于获取确定的关联指令,则确定的下一指令就是指循环体中与分支指令相邻的下一个指令,即该确定的下一指令就是循环体中处于分支指令后面、与分支指令相邻的下一个指令。
81.若分支指令的执行结果用于指示需要跳转到分支指令的关联指令,则分支指令的执行结果可以包含确定的分支指令的关联指示的指针,该指针就指示了确定的关联指令的缓存地址,通过该指针就可以在对应缓存地址获取到确定的关联指令。
82.换句话说,若确定出需要跳转到分支指令的关联指令,则在继分支指令后跳转执行确定的分支指令的关联指令;若确定出不需要跳转到分支指令的关联指令,则在继分支指令后接着执行循环体中分支指令的下一个指令。
83.步骤s105,若预测的下一指令与确定的下一指令不匹配,则撤销对预测的下一指令的执行,并对循环体的当前执行参数进行校正处理;当前执行参数用于指示当前对循环体进行循环执行的进度。
84.因此,若上述预测的下一指令与上述确定的下一指令不匹配(即不相同),表明预测的下一指令是错误的,也就是上述预测信息预测失败,则可以撤销对上述预测的下一指令的执行(包括清空对该预测的下一指令的执行结果),并可以对循环体的当前执行参数进行校正处理,该当前执行参数可以用于指示当前对循环体进行循环执行的进度。即当预测信息预测失败,可以刷新流水线(即上述流水线结构),通过刷新后的流水线就可以对实际确定的指令进行正确地执行。
85.可选的,检测到预测的下一指令与确定的下一指令不匹配的操作可以是在提交阶段执行分支指令时所执行的。
86.更多的,若预测的下一指令与确定的下一指令不匹配,则在撤销对预测的下一指令的执行后,可以执行该确定的下一指令,并按照后续各个指令的执行规则继续完成对循环体的循环执行。
87.请一并再参见图5,图5是本技术提供的一种流水线式执行指令的场景示意图。如图5所示,此处流水线结构同样可以包含上述多个阶段(具体包括fetch1、fetch2、fetch3、decode、exe1、exe2和commit共7个阶段)。
88.其中,预测上述分支指令的预测信息可以是在fetch1阶段完成的(或者其他阶段,具体也可以根据实际应用场景确定),在fetch1阶段得到分支指令的预测信息后,就可以执行分支指令。在exe2阶段完成对分支指令的执行后,就可以得到分支指令最终确定的执行结果,进而,在commit阶段可以判断分支指令是否预测失败(如判断预测的下一指令是否与
确定的下一指令相匹配),若失败(即若不匹配),就可以撤销对预测的分支指令的下一指令的执行,并可以对循环体的当前执行参数进行校正。
89.其中,在上述多个阶段执行分支指令的过程中,执行过分支指令的阶段就可以接着执行预测的下一指令。例如,若分支指令执行到fetch2阶段,则在fetch1阶段就可以执行预测的下一指令;若分支指令执行到fetch3阶段,则在fetch1~fetch2阶段都可以执行预测的下一指令;若分支指令执行到decode阶段,则在fetch1~fetch3阶段都可以执行预测的下一指令;若分支指令执行到exe1阶段,则在fetch1~decode阶段都可以执行预测的下一指令;若分支指令执行到exe2阶段,则在fetch1~exe1阶段都可以执行预测的下一指令;若分支指令执行到commit阶段,则在fetch1~exe2阶段都可以执行预测的下一指令;若分支指令在该多个阶段均执行完成,则该多个阶段都可以执行预测的下一指令。
90.其中,对于循环体内的各个指令若是没有分支指令的跳转,则通常都是按各个指令在循环体中的顺序依次进行执行的,当对一个硬件循环指令的循环体被循环执行了指定的次数(如指定的总的循环次数)时,该硬件循环指令被执行完成。
91.可选的,若是循环体中具有分支指令,并跳转执行了该分支指令的关联指令,则该关联指令也可以具有执行该关联指令后、需要接着执行下一条需要执行的指令的指示信息,如执行了分支指令的关联指令后,该指示信息可以用于重新跳回到循环体中某个指令(可以是任意的指令,如循环体中分支指令的下一条指令),进而从该指令开始继续完成对循环体的当次循环执行的过程。可选的,循环体中该指令的后面某个或者某些指令也可以用到执行分支指令的关联指令后的执行结果。
92.例如,若预测的下一指令与确定的下一指令不匹配,且分支指令的执行结果包含确定的分支指令的关联指令,则在撤销对预测的下一指令的执行后,可以执行该确定的分支指令的关联指令(该确定的分支指令的关联指令就是正确的分支指令的下一指令),并按照后续各个指令的执行条件继续完成对循环体的循环执行。
93.再如,若预测的下一指令与确定的下一指令不匹配,且分支指令的执行结果不包含确定的分支指令的关联指令,则在撤销对预测的下一指令的执行后,可以执行循环体中分支指令的下一指令。
94.更多的,下述描述对循环体的当前执行参数进行校正处理的过程:上述分支指令可以是在对循环体进行第n次循环执行的过程中获取的,n为正整数,n小于或等于循环体总的循环次数,该总的循环次数就是一共需要对循环体进行循环执行的次数,对循环体的第n次循环执行可以是对循环体的任一次循环执行。
95.上述当前执行参数可以包含循环体在当前的剩余循环次数,该剩余循环次数也就是当前还需要对循环体进行循环执行的剩余次数,该剩余循环次数等于上述总的循环次数减去已经对循环体进行循环执行的次数。
96.需要进行说明的是,硬件循环指令一开始就明确给出了循环体总的循环次数,后续,每对硬件循环指令循环执行一次,就会在该总的循环次数的基础上减1,得到剩余循环次数,直到最终的剩余循环次数被减为0,就结束循环。
97.例如,对循环体总的循环次数可以是100,则对循环体进行第1次循环执行后,就可以对100减1(即单位次数),得到剩余循环次数99;接着,对循环体进行第2次循环执行后,就可以对99再减1(即单位次数),得到剩余循环次数98,以此类推,直到对循环体进行100次循
环执行后,剩余循环次数被减为0,循环结束,跳出循环。
98.而当执行到循环体中的结束指令(即循环体中最后一个指令)时,就可以表明对循环体此次的循环执行完成,就可以对循环体在此时的剩余循环次数减1,得到新的剩余循环次数。
99.因此,若预测的下一指令是循环体中的结束指令,则在执行结束指令时(如在取指阶段执行结束指令时),计算机设备就可以获取循环体在进行第n次循环执行前的剩余循环次数(也就是在执行第n次循环执行的上一次循环执行后的剩余循环次数),并可以对循环体在进行第n次循环执行前的剩余循环次数减去单位次数(如1),得到循环体在当前的剩余循环次数,该当前的剩余循环次数就属于上述当前执行参数中,因为在计算机设备检测到预测的下一指令与确定的下一指令不匹配之前,预测的下一指令已经在执行过程中了。
100.可以理解的是,若预测的下一指令不是结束指令,则在执行预测的下一指令时,循环体在当前的剩余循环次数就等于循环体在进行第n次循环执行前的剩余循环次数。
101.换句话说,在执行到循环体中的结束指令时,循环体的剩余循环次数就会减1。
102.因此,对循环体的当前执行参数进行校正处理可以包括:计算机设备可以在检测到预测的下一指令和确定的下一指令不匹配时,获取循环体在进行第n次循环执行前的剩余循环次数,若循环体在进行第n次循环执行前的剩余循环次数与循环体在当前的剩余循环次数不同,则表明循环体在进行第n次循环执行前的剩余循环次数被错误减了1,可以将循环体在当前的剩余循环次数加上单位次数(即1),就可以得到对循环体在当前的剩余循环次数进行校正后的剩余循环次数,该校正后的剩余循环次数也就等于循环体在进行第n次循环执行前的剩余循环次数,该校正后的剩余循环次数就属于校正后的当前执行参数。
103.而若在检测到预测的下一指令和确定的下一指令不匹配时,发现循环体在进行第n次循环执行前的剩余循环次数与循环体在当前的剩余循环次数相同,则无需对该当前的剩余循环次数进行校正(即无需恢复)。
104.综上,通过上述所描述的过程,通过将随指令流传递的lsb(即循环体在进行当次(如第n次)循环执行前的剩余循环次数)与返回的随路传递的loop info(即循环体在当前的剩余循环次数)进行比较,如果相等,则无需对循环体在当前的剩余循环次数进行恢复,如果不等,则需要对循环体在当前的剩余循环次数进行恢复,恢复即对循环体在当前的剩余循环次数进行加1操作,实现了通过一种轻量级的恢复电路,以极小的代价对iters_num(即循环体的剩余循环次数)的误操作进行恢复。
105.更多的,上述分支指令是在对循环体进行第n次循环执行的过程中所获取的,上述当前执行参数还可以包含当前的提交标识,该当前的提交标识用于指示当前已对目标执行结果进行提交,或者用于指示当前未对目标执行结果进行提交,即通过该当前的提交标识可以知道现在是否已经对目标执行结果进行提交,该目标执行结果可以是指循环体在进行第n次循环执行时对循环体中结束指令的执行结果。
106.在对循环体进行第n次循环执行时,若未开始执行循环体中的结束指令,则针对结束指令的提交标识就为初始标识(可以是0)。因此,若预测的下一指令是循环体中的结束指令,则在执行结束指令时(如在取指阶段执行结束指令时),就可以将循环体在进行第n次循环执行前针对结束指令的提交标识由初始标识(可以是0)更新为未提交标识(可以是1),得到上述当前的提交标识,该当前的提交标识属于当前执行参数,该当前的提交标识在此处
就为未提交标识。
107.而在执行结束指令的过程中(从取指阶段到提交阶段),针对结束指令的提交标识都可以是未提交标识,当对结束指令执行完成(如已对结束指令的执行结果进行提交)时,就可以将当前的提交标识再从上述未提交标识更新为初始标识。其中,若在执行结束指令后,当前的提交标识为未提交标识,就表明未对目标执行结果进行提交,若在执行结束标识后,当前的提交标识未初始标识,就表明已对目标执行结果进行提交。
108.可以理解的是,若预测的下一指令不是循环体中的结束指令,则在执行预测的下一指令时,当前的提交标识还是为上述初始标识,此时由于此次循环(第n次循环)还未执行到结束指令,因此此时当前的提交标识为初始标识是指还未执行到结束指令,而不是已对结束指令的执行结果进行提交。
109.因此,对循环体的当前执行参数进行校正处理还可以包括:若预测的下一指令与确定的下一指令不匹配,当前的提交标识为未提交标识,表明错误执行了结束指令(即预测的下一指令是结束指令,该预测的下一指令又是被错误预测的),需要将当前的提交标识由未提交标识重新校正为初始标识。
110.而若预测的下一指令与确定的下一指令不匹配,当前的提交标识为初始标识,则无需校正(即无需恢复)。上述提交标识可以记为end_not_commit,通过end_not_commit机制,可以保证流水线结构的多个阶段中执行的指令只会位于循环体相邻的两圈层之内,该两圈层可以是指对该循环体的任意相邻的两次循环执行过程。
111.本技术可以对硬件循环指令的循环体进行循环执行;循环体中包含分支指令;当执行至分支指令时,获取分支指令的预测信息,预测信息用于指示预测的分支指令的下一指令;执行分支指令,并按照预测信息的指示执行预测的下一指令;获取分支指令的执行结果,执行结果用于指示确定的分支指令的下一指令;若预测的下一指令与确定的下一指令不匹配,则撤销对预测的下一指令的执行,并对循环体的当前执行参数进行校正处理;当前执行参数用于指示当前对循环体进行循环执行的进度。由此可见,本技术提出的方法,硬件循环指令中可以编译有分支指令,并在得到分支指令的预测信息后,不仅可以执行分支指令,还可以根据预测信息的指示执行预测的分支指令的下一指令,后续若预测的下一指令不准确,则也可以撤销对预测的下一指令的执行,并校正循环体的当前执行参数,因此在保证了硬件循环指令中可以编译有分支指令的前提下,可以准确对分支指令及分支指令的下一指令进行执行,提升了对硬件循环指令的编辑灵活性和丰富性。
112.可选的,本技术中,可以具有相互嵌套的k个硬件循环指令,k为正整数,k的具体数值可以根据实际应用场景确定。其中,k个硬件循环指令中第k-1个硬件循环指令可以嵌套在第k个硬件循环指令中,k为正整数,k大于1,k小于或等于k。第k-1个硬件循环指令和第k个硬件循环指令可以是k个硬件循环指令中具有嵌套关系的任意两个硬件循环指令。
113.例如,相互嵌套的k个硬件循环指令可以是5个硬件循环指令(即k等于5时),该5个硬件循环指令包括第1个硬件循环指令、第2个硬件循环指令、第3个硬件循环指令、第4个硬件循环指令和第5个硬件循环指令。
114.其中,第1个硬件循环指令可以嵌套在第2个硬件循环指令中,第2个硬件循环指令可以嵌套在第3个硬件循环指令中,第3个硬件循环指令可以嵌套在第4个硬件循环指令中,第4个硬件循环指令可以嵌套在第5个硬件循环指令中。
115.可选的,上述相互嵌套的k个硬件循环指令可以根据嵌套的顺序被依次压入栈中,第k-1个硬件循环指令和第k个硬件循环指令在栈中的位置是相邻的,第k个硬件循环指令先于第k-1个硬件循环指令被压入栈中,即嵌套越靠外的硬件循环指令(如第k个硬件循环指令)可以先于嵌套越靠内的硬件循环指令(如第k-1个硬件循环指令)被压入栈中。
116.因此,计算机设备可以根据上述k个硬件循环指令依次被压入栈中的反顺序,依次执行该k个硬件循环指令,嵌套越靠内的硬件循环指令越先执行。
117.例如,上述5个硬件循环指令,由于第1个硬件循环指令可以嵌套在第2个硬件循环指令中,第2个硬件循环指令可以嵌套在第3个硬件循环指令中,第3个硬件循环指令可以嵌套在第4个硬件循环指令中,第4个硬件循环指令可以嵌套在第5个硬件循环指令中,因此,该5个硬件循环指令可以是依次按照硬件循环指令5、硬件循环指令4、硬件循环指令3、硬件循环指令2、硬件循环指令1的顺序依次被压入栈中,嵌套最靠外的硬件循环指令(如硬件循环指令5)可以是最先被压入栈中,嵌套最靠内的硬件循环指令(如硬件循环指令1)可以是最晚被压入栈中。
118.而由于堆栈是按照先进后出(同后进先出)的原理进行数据处理,因此,该5个硬件循环指令是依次按照硬件循环指令1、硬件循环指令2、硬件循环指令3、硬件循环指令4、硬件循环指令5的顺序(即被压入栈中的反顺序)依次被执行。
119.其中,将k个硬件循环指令压入栈中可以是指将该k个硬件循环指令的相关循环信息压入栈中,实现通过堆栈的方式来维护各个相互嵌套的硬件循环指令。
120.例如,任一个硬件循环指令的循环信息可以包含:该硬件循环指令中循环体的起始地址(如循环体中起始指令的指针,记为start_pc,该指针可以用于指示该起始指令对应的缓存地址)、该硬件循环指令中循环体的结束地址(如循环体中结束指令的指针,记为end_pc,该指针可以用于指示该结束指令对应的缓存地址)、以及该硬件循环指令中循环体总的需要被循环的次数。
121.此外,通过堆栈的方式,还可以维护各个硬件循环指令的关联信息,该关联信息可以是通过与堆栈相关联的条目进行维护的,一个硬件循环指令可以对应于一个条目(entry),各个条目具有对应硬件循环指令的域段,任一个硬件循环指令的域段就可以包含该硬件循环指令的关联信息,该关联信息可以包含:硬件循环指令的当前有效状态(即当前是否有效)、硬件循环指令中循环体的起始地址(如循环体中起始指令的指针,记为start_pc,该指针可以用于指示该起始指令对应的缓存地址)、硬件循环指令中循环体的结束地址(如循环体中结束指令的指针,记为end_pc,该指针可以用于指示该结束指令对应的缓存地址)、硬件循环指令中循环体总的需要被循环的次数、以及硬件循环指令的结束指令已经被执行但该结束指令的执行结果还未被提交的指示信息(可以记为end_not_commit,若end_not_commit为1,则表示还未提交,若end_not_commit为0,则表示已提交)。
122.上述k个相互嵌套的硬件循环指令包括硬件循环指令y1~硬件循环指令yk,该k个相互嵌套的硬件循环指令可以表示为yk(yk-1(yk-2(

(y1)))),在依次对该k个硬件循环指令进行执行完成后,就可以得到第k个硬件循环指令的执行结果,该执行结果就是对k个硬件循环指令执行完成后最终的执行结果,计算机设备可以输出该执行结果,以展示给对应的技术人员查阅。
123.请参见图6a-图6b,图6a-图6b是本技术提供的一种参数恢复的场景示意图。本申
请中多层嵌套的硬件循环指令可以包括硬件循环指令loop0、硬件循环指令loop1和硬件循环指令loop2,其中,loop2嵌套在loop1中,loop1嵌套在loop0中。
124.上述多层嵌套的loop0~loop2可以表示为:{loop0_start_pc

loop1_start_pc

loop2_start_pc

beq

loop2_end_pc & loop1_end_pc & loop0_end_pc}其中,loop0_start_pc表示loop0的起始指令的地址,loop1_start_pc表示loop1的起始指令的地址,loop2_start_pc表示loop2的起始指令的地址,beq表示分支指令,loop2_end_pc表示loop2的结束指令的地址,loop1_end_pc表示loop1的结束指令的地址,loop0_end_pc表示loop0的结束指令的地址。
125.当执行到分支指令beq时,可以获取到beq的预测信息,进而执行分支指令以及预测信息所指示的预测的下一指令,后续,若预测的下一指令与确定的下一指令不匹配,且循环体在当前的剩余循环次数与在进行第n次循环执行(即当次循环执行)前的剩余循环次数不同,就可以对循环体在当前的剩余循环次数进行恢复(即校正);若预测的下一指令与确定的下一指令不匹配,且循环体在当前的剩余循环次数与在进行第n次循环执行(即当次循环执行)前的剩余循环次数相同,则无需对循环体在当前的剩余循环次数进行恢复。
126.可选的,如图6a所示,在进行当次循环执行前,loop0的循环体的剩余循环次数为3,loop1的循环体的剩余循环次数为1,loop2的循环体的剩余循环次数为1;而loop0的循环体在当前的剩余循环次数为2,loop1的循环体在当前的剩余循环次数为0,loop2的循环体在当前的剩余循环次数为0,即各个硬件循环指令的循环体在当前的剩余循环次数与在进行第n次循环执行(即当次循环执行)前的剩余循环次数都不同,因此,需要对各个硬件循环指令的循环体在当前的剩余循环次数分别加1,以实现对各个硬件循环指令的循环体在当前的剩余循环次数的校正。
127.可选的,如图6b所示,在进行当次循环执行前,loop0的循环体的剩余循环次数为3,loop1的循环体的剩余循环次数为1,loop2的循环体的剩余循环次数为1;loop0的循环体在当前的剩余循环次数也为3,loop1的循环体在当前的剩余循环次数也为1,loop2的循环体在当前的剩余循环次数也为1,即各个硬件循环指令的循环体在当前的剩余循环次数与在进行第n次循环执行(即当次循环执行)前的剩余循环次数都相同,因此,无需对各个硬件循环指令的循环体在当前的剩余循环次数进行恢复(即校正)。
128.上述k个硬件循环指令具体处理的数据任务(即通过执行该k个硬件循环指令具体需要得到的执行结果,也就是该k个硬件循环指令的类型)可以根据实际应用场景确定,且每个硬件循环指令都可以如上述所描述的可以存在分支指令,当分支指令预测错误(如预测的下一指令与确定的下一指令不同)时,各个硬件循环指令的循环体的当前执行参数都
可以同步且相互独立地如上述所描述的过程进行校正。
129.请参见图7,图7是本技术提供的一种指令嵌套的场景示意图。上述k个硬件循环指令可以包括硬件循环指令1~硬件循环指令k,硬件循环指令1可以嵌套在硬件循环指令2中,硬件循环指令2可以嵌套在硬件循环指令3中,硬件循环指令3可以嵌套在硬件循环指令4中,以此类推,硬件循环指令k-1可以嵌套在硬件循环指令k中。
130.本技术中,可以通过堆栈来实现各个硬件循环指令间的多层嵌套,由于堆栈本身就是先进后出的原理,因此,通过按照各个硬件循环指令之间的嵌套顺序,将越先需要被执行的硬件循环指令越后压入栈中,进而按照各个硬件循环指令被压入栈中的反顺序就可以准确地对各个硬件循环指令进行执行,使得该多层嵌套的硬件循环指令的执行不会出错,提升了对硬件循环指令进行嵌套编译的灵活性,丰富了对硬件循环指令的使用场景和使用方式。
131.请参见图8,图8是本技术提供的一种通过堆栈实现指令执行的场景示意图。如图8所示,硬件循环指令loop2可以嵌套在硬件循环指令loop1中,硬件循环指令loop1可以嵌套在硬件循环指令loop0中。
132.因此,在执行到loop0时,可以将loop0的相关循环信息压入栈中;接着,在执行到loop1时,可以将loop1的相关循环信息压入栈中;进而,在执行到loop2时,可以将loop2的相关循环信息压入栈中。
133.其中,loop0_cnt表示loop0的剩余循环次数,最开始栈中的该loop0_cnt为loop0总的循环次数,后续每循环执行一次loop0(如每命中一次栈中的loop0_end_pc),就可以对该loop0_cnt进行减1,得到更新后的loop0_cnt,直到loop0_cnt减为0,就表明loop0执行完成。
134.同理,loop1_cnt表示loop1的剩余循环次数,最开始栈中的该loop1_cnt为loop1总的循环次数,后续每循环执行一次loop1(如每命中一次栈中的loop1_end_pc),就可以对该loop1_cnt进行减1,得到更新后的loop1_cnt,直到loop1_cnt为0,就表明loop1执行完成。
135.同理,loop2_cnt表示loop2的剩余循环次数,最开始栈中的该loop2_cnt为loop2总的循环次数,后续每循环执行一次loop2(如每命中一次栈中的loop2_end_pc),就可以对该loop2_cnt进行减1,得到更新后的loop2_cnt,直到loop2_cnt为0,就表明loop2执行完成。
136.其中,若loop2执行完成,就可以从栈中弹出了loop2的循环信息;接着,若loop1执行完成,就可以从栈中弹出了loop1的循环信息;进而,若loop0执行完成,就可以从栈中弹出了loop0的循环信息。loop0执行完成,就表明对各个嵌套的硬件循环指令执行完成。
137.进一步的,并参见图9,图9是本技术提供的一种数据维护的场景示意图。上述k个硬件循环指令可以包括loop0~loop7共8个硬件循环指令,通过堆栈还可以维护各个硬件循环指令的关联信息,如图8所示,loop_entry0表示loop0的条目,loop_entry0的域段包含loop0的当前有效状态(即valid)、loop0的start_pc(即loop0的循环体中起始指令的指针)、loop0的end_pc(即loop0的循环体中结束指令的指针)、iters_num(也表示loop0中循环体的剩余循环次数,每对循环体循环执行一次,就可以对iters_num减1)以及end_not_commit。
138.同理,loop_entry1表示loop1的条目,loop_entry1的域段包含loop1的当前有效状态(即valid)、loop1的start_pc(即loop1的循环体中起始指令的指针)、loop1的end_pc(即loop1的循环体中结束指令的指针)、iters_num(也表示loop1中循环体的剩余循环次数,每对循环体循环执行一次,就可以对iters_num减1)以及end_not_commit。
139.loop_entry2表示loop2的条目,loop_entry2的域段包含loop2的当前有效状态(即valid)、loop2的start_pc(即loop2的循环体中起始指令的指针)、loop2的end_pc(即loop2的循环体中结束指令的指针)、iters_num(也表示loop2中循环体的剩余循环次数,每对循环体循环执行一次,就可以对iters_num减1)以及end_not_commit。
140.loop_entry3表示loop3的条目,loop_entry3的域段包含loop3的当前有效状态(即valid)、loop3的start_pc(即loop3的循环体中起始指令的指针)、loop3的end_pc(即loop3的循环体中结束指令的指针)、iters_num(也表示loop3中循环体的剩余循环次数,每对循环体循环执行一次,就可以对iters_num减1)以及end_not_commit。
141.loop_entry4表示loop4的条目,loop_entry4的域段包含loop4的当前有效状态(即valid)、loop4的start_pc(即loop4的循环体中起始指令的指针)、loop4的end_pc(即loop4的循环体中结束指令的指针)、iters_num(也表示loop4中循环体的剩余循环次数,每对循环体循环执行一次,就可以对iters_num减1)以及end_not_commit。
142.loop_entry5表示loop5的条目,loop_entry5的域段包含loop5的当前有效状态(即valid)、loop5的start_pc(即loop5的循环体中起始指令的指针)、loop5的end_pc(即loop5的循环体中结束指令的指针)、iters_num(也表示loop5中循环体的剩余循环次数,每对循环体循环执行一次,就可以对iters_num减1)以及end_not_commit。
143.loop_entry6表示loop6的条目,loop_entry6的域段包含loop6的当前有效状态(即valid)、loop6的start_pc(即loop6的循环体中起始指令的指针)、loop6的end_pc(即loop6的循环体中结束指令的指针)、iters_num(也表示loop6中循环体的剩余循环次数,每对循环体循环执行一次,就可以对iters_num减1)以及end_not_commit。
144.loop_entry7表示loop7的条目,loop_entry7的域段包含loop7的当前有效状态(即valid)、loop7的start_pc(即loop7的循环体中起始指令的指针)、loop7的end_pc(即loop7的循环体中结束指令的指针)、iters_num(也表示loop7中循环体的剩余循环次数,每对循环体循环执行一次,就可以对iters_num减1,直至减为0,)以及end_not_commit。
145.上述任一循环体的iters_num最起始的数值可以是该循环体总的循环次数。循环体的每次循环执行都可以具有一个end_not_commit。若对一个循环体循环执行了总的循环次数,则可以将该循环体对应的valid设置为无效状态(如可以用0表示);若一个循环体循环还未被执行,或者循环执行的次数还未达到总的循环次数,则该循环体对应的valid可以是有效状态(如可以用1表示)。
146.本技术通过堆栈的方式维护多层嵌套的硬件循环指令的相关信息可以有利于准确地执行该多层嵌套的硬件循环指令。
147.通过对循环体在当前的剩余循环次数和end_not_commit(即提交标识)的恢复,可以解决当出现分支预测失败时发生的栈污染问题(如预测失败时可以校正栈中循环体的剩余循环次数以及end_not_commit,即校正栈中循环体的当前循环参数),循环体内可以有任意多条分支指令,且多个硬件循环指令间可以多层嵌套,大大提升了硬件循环指令的编译
灵活性和使用灵活性。且由于硬件循环指令明确给出了对循环体进行循环的次数,因此,对于通过使用硬件循环指令,也可以实现对循环体本身准确的循环执行。
148.请参见图10,图10是本技术提供的一种指令处理装置的结构示意图。该指令处理装置可以是运行于计算机设备中的一个计算机程序(包括程序代码),例如该指令处理装置为一个应用软件,该指令处理装置可以用于执行本技术实施例提供的方法中的相应步骤。如图10所示,该指令处理装置1可以包括:执行模块11、获取模块12和校正模块13;执行模块11,用于对硬件循环指令的循环体进行循环执行;循环体中包含分支指令;获取模块12,用于当执行至分支指令时,获取分支指令的预测信息,预测信息用于指示预测的分支指令的下一指令;执行模块11,用于执行分支指令,并按照预测信息的指示执行预测的下一指令;获取模块12,用于获取分支指令的执行结果,执行结果用于指示确定的分支指令的下一指令;校正模块13,用于若预测的下一指令与确定的下一指令不匹配,则撤销对预测的下一指令的执行,并对循环体的当前执行参数进行校正处理;当前执行参数用于指示当前对循环体进行循环执行的进度。
149.可选的,执行模块11执行分支指令,并按照预测信息的指示执行预测的下一指令的方式,包括:在流水线结构的多个阶段依次执行分支指令;在执行分支指令的过程中和在对分支指令执行完成后,在多个阶段中执行过分支指令的阶段执行预测的下一指令。
150.可选的,预测信息用于指示预测的需要跳转到分支指令的关联指令,或预测的不需要跳转到分支指令的关联指令;若预测信息用于指示预测的需要跳转到分支指令的关联指令,则预测信息用于获取预测的分支指令的关联指令;分支指令的执行结果用于指示确定的需要跳转到分支指令的关联指令,或确定的不需要跳转到分支指令的关联指令;若分支指令的执行结果用于指示确定的需要跳转到分支指令的关联指令,则分支指令的执行结果用于获取确定的分支指令的关联指令。
151.可选的,若预测信息包含预测的关联指令,则预测的下一指令是指预测的关联指令;若预测信息不包含预测的关联指令,则预测的下一指令是指循环体中与分支指令相邻的下一指令。
152.可选的,若分支指令的执行结果包含确定的关联指令,则确定的下一指令是指确定的关联指令;若分支指令的执行结果不包含确定的关联指令,则确定的下一指令是指循环体中与分支指令相邻的下一指令。
153.可选的,上述装置1还用于:若预测的下一指令与确定的下一指令不匹配,则在撤销对预测的下一指令的执行
后,执行确定的下一指令。
154.可选的,分支指令是在对循环体进行第n次循环执行的过程中获取的,n为正整数,n小于或等于循环体总的循环次数;当前执行参数包含循环体在当前的剩余循环次数;上述装置1还用于:若预测的下一指令是循环体中的结束指令,则在执行结束指令时,获取循环体在进行第n次循环执行前的剩余循环次数;将循环体在进行第n次循环执行前的剩余循环次数减去单位次数,得到循环体在当前的剩余循环次数;其中,若预测的下一指令不是结束指令,则在执行预测的下一指令时,循环体在当前的剩余循环次数等于循环体在进行第n次循环执行前的剩余循环次数。
155.可选的,校正模块13对循环体的当前执行参数进行校正处理的方式,包括:获取循环体在进行第n次循环执行前的剩余循环次数;若循环体在进行第n次循环执行前的剩余循环次数与循环体在当前的剩余循环次数不同,则将循环体在当前的剩余循环次数加上单位次数,得到对循环体在当前的剩余循环次数进行校正后的剩余循环次数。
156.可选的,分支指令是在对循环体进行第n次循环执行的过程中获取的,n为正整数,n小于或等于循环体总的循环次数;当前执行参数包含当前的提交标识,当前的提交标识用于指示当前已对目标执行结果进行提交或未对目标执行结果进行提交,目标执行结果是指循环体在进行第n次循环执行时对循环体中结束指令的执行结果;当前的提交标识为初始标识或未提交标识;上述装置1还用于:若预测的下一指令是循环体中的结束指令,则在执行结束指令时,将循环体在进行第n次循环执行前的提交标识由初始标识更新为未提交标识,得到当前的提交标识;若对结束指令执行完成,则将当前的提交标识由未提交标识更新为初始标识;其中,若预测的下一指令不是结束指令,则在执行预测的下一指令时,当前的提交标识为初始标识。
157.可选的,校正模块13对循环体的当前执行参数进行校正处理的方式,包括:若当前的提交标识为未提交标识,则将当前的提交标识由未提交标识重新校正为初始标识。
158.可选的,方法具有相互嵌套的k个硬件循环指令,k个硬件循环指令中的第k-1个硬件循环指令嵌套在第k个硬件循环指令中,k和k均为正整数,k小于或等于k且k大于1;相互嵌套的k个硬件循环指令根据嵌套的顺序被依次压入栈中,第k-1个硬件循环指令和第k个硬件循环指令在栈中的位置相邻,第k个硬件循环指令先于第k-1个硬件循环指令被压入栈中;k个硬件循环指令根据被压入栈中的反顺序被依次执行。
159.可选的,上述装置1还用于:当依次对k个硬件循环指令执行完成时,得到第k个硬件循环指令的执行结果,并输出第k个硬件循环指令的执行结果。
160.根据本技术的一个实施例,图3所示的指令处理方法所涉及的步骤可由图10所示
的指令处理装置1中的各个模块来执行。例如,图3中所示的步骤s101可由图10中的执行模块11来执行,图3中所示的步骤s102可由图10中的获取模块12来执行;图3中所示的步骤s103可由图10中的执行模块11来执行,图3中所示的步骤s104可由图10中的获取模块12来执行,图3中所示的步骤s105可由图10中的校正模块13来执行。
161.本技术可以对硬件循环指令的循环体进行循环执行;循环体中包含分支指令;当执行至分支指令时,获取分支指令的预测信息,预测信息用于指示预测的分支指令的下一指令;执行分支指令,并按照预测信息的指示执行预测的下一指令;获取分支指令的执行结果,执行结果用于指示确定的分支指令的下一指令;若预测的下一指令与确定的下一指令不匹配,则撤销对预测的下一指令的执行,并对循环体的当前执行参数进行校正处理;当前执行参数用于指示当前对循环体进行循环执行的进度。由此可见,本技术提出的装置,硬件循环指令中可以编译有分支指令,并在得到分支指令的预测信息后,不仅可以执行分支指令,还可以根据预测信息的指示执行预测的分支指令的下一指令,后续若预测的下一指令不准确,则也可以撤销对预测的下一指令的执行,并校正循环体的当前执行参数,因此在保证了硬件循环指令中可以编译有分支指令的前提下,可以准确对分支指令及分支指令的下一指令进行执行,提升了对硬件循环指令的编辑灵活性和丰富性。
162.根据本技术的一个实施例,图10所示的指令处理装置1中的各个模块可以分别或全部合并为一个或若干个单元来构成,或者其中的某个(些)单元还可以再拆分为功能上更小的多个子单元,可以实现同样的操作,而不影响本技术的实施例的技术效果的实现。上述模块是基于逻辑功能划分的,在实际应用中,一个模块的功能也可以由多个单元来实现,或者多个模块的功能由一个单元实现。在本技术的其它实施例中,指令处理装置1也可以包括其它单元,在实际应用中,这些功能也可以由其它单元协助实现,并且可以由多个单元协作实现。
163.根据本技术的一个实施例,可以通过在包括中央处理单元(cpu)、随机存取存储介质(ram)、只读存储介质(rom)等处理元件和存储元件的例如计算机的通用计算机设备上运行能够执行如图3中所示的相应方法所涉及的各步骤的计算机程序(包括程序代码),来构造如图10中所示的指令处理装置1,以及来实现本技术实施例的指令处理方法。上述计算机程序可以记载于例如计算机可读记录介质上,并通过计算机可读记录介质装载于上述计算设备中,并在其中运行。
164.请参见图11,图11是本技术提供的一种计算机设备的结构示意图。如图11所示,计算机设备1000可以包括:处理器1001,网络接口1004和存储器1005,此外,计算机设备1000还可以包括:用户接口1003,和至少一个通信总线1002。其中,通信总线1002用于实现这些组件之间的连接通信。其中,用户接口1003可以包括显示屏(display)、键盘(keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如wi-fi接口)。存储器1005可以是高速ram存储器,也可以是非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。存储器1005可选的还可以是至少一个位于远离前述处理器1001的存储装置。如图11所示,作为一种计算机存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及设备控制应用程序。
165.在图11所示的计算机设备1000中,网络接口1004可提供网络通讯功能;而用户接
口1003主要用于为用户提供输入的接口;而处理器1001可以用于调用存储器1005中存储的设备控制应用程序,以实现:对硬件循环指令的循环体进行循环执行;循环体中包含分支指令;当执行至分支指令时,获取分支指令的预测信息,预测信息用于指示预测的分支指令的下一指令;执行分支指令,并按照预测信息的指示执行预测的下一指令;获取分支指令的执行结果,分支指令的执行结果用于指示确定的分支指令的下一指令;若预测的下一指令与确定的下一指令不匹配,则撤销对预测的下一指令的执行,并对循环体的当前执行参数进行校正处理;当前执行参数用于指示当前对循环体进行循环执行的进度。
166.应当理解,本技术实施例中所描述的计算机设备1000可执行前文图3对应实施例中对上述指令处理方法的描述,也可执行前文图10所对应实施例中对上述指令处理装置1的描述,在此不再赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。
167.此外,这里需要指出的是:本技术还提供了一种计算机可读存储介质,且计算机可读存储介质中存储有前文提及的指令处理装置1所执行的计算机程序,且计算机程序包括程序指令,当处理器执行程序指令时,能够执行前文图3所对应实施例中对指令处理方法的描述,因此,这里将不再进行赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。对于本技术所涉及的计算机存储介质实施例中未披露的技术细节,请参照本技术方法实施例的描述。
168.作为示例,上述程序指令可被部署在一个计算机设备上执行,或者被部署位于一个地点的多个计算机设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个计算机设备上执行,分布在多个地点且通过通信网络互连的多个计算机设备可以组成区块链网络。
169.上述计算机可读存储介质可以是前述任一实施例提供的指令处理装置或者上述计算机设备的内部存储单元,例如计算机设备的硬盘或内存。该计算机可读存储介质也可以是该计算机设备的外部存储设备,例如该计算机设备上配备的插接式硬盘,智能存储卡(smart media card,smc),安全数字(secure digital,sd)卡,闪存卡(flash card)等。进一步地,该计算机可读存储介质还可以既包括该计算机设备的内部存储单元也包括外部存储设备。该计算机可读存储介质用于存储该计算机程序以及该计算机设备所需的其他程序和数据。该计算机可读存储介质还可以用于暂时地存储已经输出或者将要输出的数据。
170.本技术提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行前文图3对应实施例中对上述指令处理方法的描述,因此,这里将不再进行赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。对于本技术所涉及的计算机可读存储介质实施例中未披露的技术细节,请参照本技术方法实施例的描述。
171.本技术实施例的说明书和权利要求书及附图中的术语“第一”、“第二”等是用于区别不同对象,而非用于描述特定顺序。此外,术语“包括”以及它们任何变形,意图在于覆盖
不排他的包含。例如包含了一系列步骤或单元的过程、方法、装置、产品或设备没有限定于已列出的步骤或模块,而是可选地还包括没有列出的步骤或模块,或可选地还包括对于这些过程、方法、装置、产品或设备固有的其他步骤单元。
172.本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本技术的范围。
173.本技术实施例提供的方法及相关装置是参照本技术实施例提供的方法流程图和/或结构示意图来描述的,具体可由计算机程序指令实现方法流程图和/或结构示意图的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。这些计算机程序指令可提供到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或结构示意图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或结构示意图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或结构示意一个方框或多个方框中指定的功能的步骤。
174.以上所揭露的仅为本技术较佳实施例而已,当然不能以此来限定本技术之权利范围,因此依本技术权利要求所作的等同变化,仍属本技术所涵盖的范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1