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

指令处理方法、指令处理装置及存储介质与流程

2022-02-20 00:51:57 来源:中国专利 TAG:


1.本公开的实施例涉及一种指令处理方法、指令处理装置及存储介质。


背景技术:

2.现代处理器(例如冯
·
诺伊曼型计算机的cpu,central processing unit)的工作流程可以包括如下阶段:取指令、指令解码、寄存器重命名、指令分发、iq(指令缓存单元,issue queue)缓存、执行单元执行、结果写回等过程。取指令(instruction fetch,if)阶段是将一条指令从主存中取到指令寄存器的过程。取出指令后,进入指令解码(instruction decode,id)阶段,指令解码器按照预定的指令格式,对取回的指令进行拆分和解释,识别区分出不同的指令类别以及各种获取操作数的方法。由于各指令写入结果的逻辑寄存器一定要分配到空闲的物理寄存器上,所以将程序中记载的逻辑寄存器的编号对应到物理寄存器的编号上,就是寄存器重命名的过程。寄存器重命名之后的指令分发至指令缓存单元中进行缓存,指令缓存单元中的控制逻辑模块在一个较大的范围内调遣已译码的程序指令流,以及允许执行单元执行已译码的程序指令流。对于在指令缓存单元中的指令,当某时刻当前指令满足被执行条件时,并且当前有空闲的对应执行该当前指令的执行单元,那么该当前指令就可以请求发射,发射后进入执行单元执行,而不需要等待按指令顺序排在该当前指令前面的指令执行完成再发射。最后,在执行单元中执行当前指令,运行结果数据“写回”到某种存储形式,例如,结果数据经常被写到cpu的内部寄存器中,以便被后续的指令快速地存取。
3.为了减少指令相关性对执行速度的影响,可以在保证程序正确性的前提下,调整指令的执行顺序,即进行指令调度。实行动态指令调度的前提是在保持指令间、数据间的依赖关系的前提下,允许不相关的指令的执行顺序与程序的原有顺序有所不同,在此基础上提出乱序执行(out-of-order),即把原来有序执行的指令列表,在保证执行结果一致的情况下根据指令依赖关系及指令执行周期重新安排执行顺序。


技术实现要素:

4.本公开至少一实施例提供一种指令处理方法,该方法包括:将接收的对象指令同时分发至多个指令缓存单元中缓存,其中,所述多个指令缓存单元中的每个分别与不同的至少一个能够执行所述对象指令的执行单元对应连接;响应于所述多个指令缓存单元中第一数量的第一指令缓存单元中缓存的所述对象指令首先满足被执行条件,在与所述第一指令缓存单元对应连接的执行单元中选择第一执行单元执行所述对象指令,其中,所述第一数量为一个或多个。
5.本公开至少一实施例还提供一种指令处理装置,该装置包括:指令分发模块,被配置为将接收的对象指令同时分发至多个指令缓存单元中缓存,其中,所述多个指令缓存单元中的每个分别与至少一个能够执行所述对象指令的不同的执行单元对应连接;指令控制模块,被配置为响应于所述多个指令缓存单元中第一数量的第一指令缓存单元中缓存的所
述对象指令首先满足被执行条件,在与所述第一指令缓存单元对应连接的执行单元中选择第一执行单元执行所述对象指令,所述第一数量为一个或多个。
6.本公开至少一实施例还提供一种指令处理装置,该装置包括:存储器,用于非暂时性存储计算机可执行指令;以及处理器,用于运行所述计算机可执行指令,其中,所述计算机可执行指令被所述处理器运行时,执行本公开任一实施例提供的指令处理方法。
7.本公开至少一实施例还提供一种非暂时性存储介质,非暂时性地存储计算机可执行指令,其中,当所述计算机可执行指令由计算机执行时,执行本公开任一实施例提供的指令处理方法。
附图说明
8.为了更清楚地说明本公开实施例的技术方案,下面将对实施例的附图作简单地介绍,显而易见地,下面描述中的附图仅仅涉及本公开的一些实施例,而非对本公开的限制。
9.图1为一种指令缓存单元(iq)以及对应的执行单元的示意图;
10.图2a为程序运行过程中指令缓存单元(iq)的状态示意图;
11.图2b为程序运行过程中指令缓存单元(iq)的另一状态示意图;
12.图3为本公开一实施例提供的一种指令处理方法流程图示意图;
13.图4为本公开一实施例提供的一种指令执行装置的结构示意图;
14.图5为本公开另一实施例提供的一种指令处理方法流程图示意图;
15.图6本公开一实施例提供的一种指令处理装置的示意性框图;
16.图7为本公开一实施例提供的另一种指令处理装置的示意性框图;
17.图8为本公开一些实施例提供的一种非暂时性存储介质的示意图。
具体实施方式
18.为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例的附图,对本公开实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本公开的一部分实施例,而不是全部的实施例。基于所描述的本公开的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
19.除非另外定义,本公开使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。同样,“一个”、“一”或者“该”等类似词语也不表示数量限制,而是表示存在至少一个。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
20.下面通过几个具体的实施例对本公开进行说明。为了保持本公开实施例的以下说明清楚且简明,本公开省略了已知功能和已知部件的详细说明。当本公开实施例的任一部件在一个以上的附图中出现时,该部件在每个附图中由相同或类似的参考标号表示。
21.例如,在乱序执行的处理器中,通过重排序缓冲区(re-order buffer,rob)追踪流水线中正在执行的指令。指令缓存单元(issue queue,iq)也称为发射队列,存储着进入rob但还未执行的指令。不同类型的指令会放入不同的iq中,这些不同的iq的读出端口(发射端)分别与相同或不同类型的执行单元连接,这些执行单元包括例如用于定点指令的执行单元、用于浮点指令的执行单元、用于访存指令的执行单元等。
22.图1为一种指令缓存单元(iq)以及对应的执行单元的示意图。例如,如图1所示,第一个iq可以存放定点指令,第二个iq可以存放浮点指令,第三个iq可以存放访存指令。例如,一些常见指令类型包括定点加法(add)指令、定点除法(div)指令、定点乘法(mul)指令、数据存储(store data)指令、数据读取(load)指令、浮点加法(fadd)指令、浮点乘法(fmull)指令、浮点除法(fdiv)指令、逻辑运算指令、分支跳转(branch)指令等。
23.每个iq包括多个缓存槽(entry),缓存槽为iq中的物理存储空间。这些缓存槽按序排列在iq中,每个缓存槽中可以存放一条指令。缓存槽的作用主要有:保存待发射指令的类型、操作数、状态等信息,当该指令满足可进入执行单元条件(例如,所有操作数全部准备好)时发起发射请求。由于高性能的处理器需要更多的缓存槽数量,还需要满足从iq取出指令到进入执行单元间的低延迟要求,所以,根据指令类型,执行单元分布等情况,将用于存放同种类型指令的iq有多个,每个iq对应少量的缓存槽,以减轻硬件电路设计的时序压力。
24.如图1所示的示例中,用于存放定点指令的iq包括iq0和iq1,每个iq包括两个读出端口,分别与两个定点指令执行单元连接;用于存放浮点指令的iq包括iq2至iqn(n为大于2的正整数),每个iq包括两个读出端口,分别与两个浮点指令执行单元连接;用于存放访存指令的iq为一个,即iqm,其包括三个读出端口,分别与三个访存指令执行单元连接。
25.目前,指令进入各iq时,可以根据各iq当前的空满状态、各iq是否有对应执行单元,对应执行单元上待执行指令的数量等,分发指令进入某一个iq。例如,如上所述如图1所示,div指令可进入iq0或iq1的其中之一。指令进入某个iq之后,针对该iq内的多个指令,当某时刻存在多个满足被执行条件的指令,但因iq读出端口或执行部件数量限制,需选取一定数量的指令进入执行单元。选取规则通常是进入iq的先后顺序,即先进先出作为该指令从iq取出进入执行单元的规则。
26.图2a为程序运行过程中指令缓存单元(iq)的状态示意图;图2b为程序运行过程中指令缓存单元(iq)的另一状态示意图。如图2a所示,在iq0中,假设从下向上顺序排列的指令add_00、add_01、add_02、add_03、div是按照进入iq0的先后顺序排列;在iq1中,假设从下向上顺序排列的指令add_10、add_11、add_12、div、add_13是按照进入iq1的先后顺序排列。需要说明的是add_ij中的i表示add指令所在的指令缓存单元的编号,j表示依次进入iq0/iq1中的三条add指令的顺序编号。例如,按照进入iq0的先后顺序排列的指令add_00、add_01、add_02、add_03、div可以分别缓存在编号按照顺序排列的缓存槽内,例如,add_00缓存在缓存槽0,add_01缓存在缓存槽1、add_02缓存在缓存槽2、add_03缓存在缓存槽3、div缓存在缓存槽4,需要说明的是,按照进入iq0的先后顺序排列的指令并不一定缓存在编号按照顺序排列的缓存槽内,也可以缓存在编号乱序排列的缓存槽内,例如,add_00缓存在缓存槽5,add_01缓存在缓存槽3、add_02缓存在缓存槽1、add_03缓存在缓存槽7、div缓存在缓存槽0,保证按照进入iq0的先后顺序排列的多个指令缓存在处于空闲的缓存槽内即可。
27.如果有大于读出端口数量的指令都满足被执行条件时,但受限于iq0/iq1的2个读
出端口限制,因此可以选取先进入iq0的add_00和add_01两条指令分别从读出端口1和读出端口2取出进入各自对应的能够执行add指令的执行单元中执行。当然,iq的读出端口的数量还可以是两个以上,那么相应的可以选取先进入该iq中的多条指令分别从多个读出端口取出进入各自对应的执行单元。例如,如上所述如图1所示的用于存放访存指令的iqm有三个读出端口,相应的可以选取先进该iqm中的3条指令分别从3个读出端口取出进入各自对应的执行单元。需要指出的是,本公开中对于指令缓存单元的读出端口的数量并不做限制。
28.然而,由于指令进入各个iq是可以动态调整的,各个iq的状态也是动态变化的,例如,各个iq当前的空满状态、指令需要的操作数是否准备好、各个iq的读出端口限制等,以及各个iq是否有对应执行单元,对应执行单元上是否空闲,对应执行单元上待执行指令的数量等因素,导致在某一指令被分发时无法选择最优的iq,来使得该指令能够在更早时间满足被执行条件时取出并进入执行单元执行。例如,图2a中,在分配div指令时,可能会因为iq1中排在div指令之前的缓存的指令总个数较少(即add_10、add_11、add_12),而iq0中排在div指令之前的缓存的指令总个数较多(即add_00、add_01、add_02、add_03),因此判断div如果被分配到iq1中,那么在iq1中div指令可能会更快地取出,从而更快地被执行,因此基于这种动态判断,可以将div被分配到iq1中而非iq0中。然而,这种动态判断方式并不一定总是准确。
29.又由于在cpu运行过程中,受到内存数据的缓存缺失(cache miss)、冲刷(flush)、指令固有执行时间等因素影响,同一指令在不同iq中取出的速度往往存在差异且难以预测,导致同一指令在不同iq中被选取进入执行单元的时间存在差异。例如,缓存缺失的过程是指令分发时,指令需要获得的数据需要从距离cpu核最近的读取速度最快的数据存储区(cache)中读取,但是当数据存储区中没有该指令需要的数据时,那么会逐级向下一个数据缓存区进行读取,导致引起较长数据延迟,进而影响指令在iq中被选取进入执行单元的时间。冲刷是指取指模块在按顺序取指令过程中,遇到跳转指令时,对跳转指令的是否跳转以及跳转位置进行预测,但是如果预测发生错误时,导致跳转指令在错误的地址取到错误的指令,则要将错误指令从cpu中清除,导致对正确指令流的取指时间延长。另外,随机访问缓存数据缺失或投机失败以及一些其它情况也会导致延迟。例如,图2b中,假设div指令同时分配在iq0和iq1中,iq0中除div指令之外的其他指令相对更快地满足被执行条件,而iq1中除div指令之外的其他指令相对较慢地满足被执行条件,那么假设分配到iq0中的div指令反而会比假设分配到iq1中的div指令更早进入执行单元,从而更早地被执行,这与之前的动态判断结果不一致。
30.例如div指令、fmul指令、load指令等具有长延迟、不定延迟,或其还有它对性能有具有较大影响的指令等,这些指令可被称为“关键指令”,关键指令会受到各iq的状态、选取规则、以及指令执行速度等因素影响,若这些关键指令所在的iq取出的时间较晚,则会导致其执行完成时间更长,同时也导致流水线上的其他指令等待时间延长,整体上降低了处理器的性能。
31.本公开至少一些实施例提供一种指令处理方法,该方法包括:将接收的对象指令同时分发至多个指令缓存单元中缓存,其中,多个指令缓存单元中的每个分别与不同的至少一个能够执行对象指令的执行单元对应连接;响应于多个指令缓存单元中第一数量的第一指令缓存单元中缓存的对象指令首先满足被执行条件,在与第一指令缓存单元对应连接
的执行单元中选择第一执行单元执行对象指令,第一数量为一个或多个。
32.本公开的一些实施例还提供对应于指令处理方法的指令处理装置及非暂时性存储介质。
33.本公开的实施例提供的指令处理方法和装置,可以将对象指令(例如上述关键指令)同时分发至多个指令缓存单元(iq)中,并在接收该对象指令的多个指令缓存单元中,选出首先被满足被执行条件的对象指令,将选出的对象指令从对应的指令缓存单元中取出并发送至执行单元执行,由此能够将执行单元执行对象指令的时间提前,从而提高处理器性能。
34.下面结合附图对本公开的一些实施例及其示例进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本公开,并不用于限制本公开。
35.图3为本公开一些实施例提供的一种指令处理方法的流程图。例如,图4为本公开一实施例提供的一种处理器中指令执行装置的结构示意图。如图4所示,该指令执行装置包括取指模块、指令解码模块、寄存器重命名模块、指令分发模块、指令缓存模块、指令执行模块、指令控制模块等。需要指出的是,在不同情形中,指令流水线的步骤可以增加或减少,相应地,上述模块可以增加或减少,本公开的实施例对此不做限制。指令缓存模块包括多个指令缓存单元,指令执行模块包括多个执行单元,这些执行单元可以执行不同类型的逻辑操作和/算术操作,每个指令缓存单元具有1个或多个读出端口,指令缓存单元的一个读出端口连接一个执行单元,由此每个指令缓存单元分别与例如2个或多个执行单元连接。每个指令缓存单元具有多个缓存槽。
36.下面将结合图3和图4对本公开实施例的指令处理方法进行介绍。该实施例的指令处理方法包括以下步骤s100至步骤s300。
37.步骤s100:将接收的对象指令同时分发至多个指令缓存单元中缓存,其中,多个指令缓存单元中的每个分别与不同的至少一个能够执行对象指令的执行单元对应连接。
38.如图4示出的,取指模块将对象指令从cpu能直接寻址访问的存储空间中取出,例如,经过指令解码模块对对象指令进行解码,寄存器重命名模块进行寄存器重命名处理之后,由指令分发模块根据流水线上当前正在处理的指令(“对象指令”)的类型,将对象指令同时分发至用于缓存该类型对象指令的多个指令缓存单元中。
39.例如,流水线上当前正在处理的指令(“对象指令”)为div指令,指令分发模块将div指令同时分发至用于存放定点指令的iq0和iq1中,且iq0对应连接能够执行div指令的执行单元,iq1对应连接能够执行div指令的另一执行单元。或者,对象指令为fadd指令,指令分发模块将fadd指令同时分发至用于存放浮点指令的iq2至iqn中,且iq2至iqn均连接有能够执行fadd指令的执行单元。或者,对象指令为load指令,指令分发模块将load指令同时分发至用于存放访问指令的iqm中,且iqm连接有能够执行load指令的执行单元。
40.需要指出的是,本公开实施例的对于对象指令的类型、每个类型的iq中包含的iq(例如,用于存放定点指令的iq中iq0和iq1)的数量、每个iq的缓存槽的数量不做限制。
41.如上所述,在分发对象指令时,根据对象指令的类型以及每个指令缓存单元所连接的执行单元的类型,将对象指令分发到多个指令缓存单元,以使得接收分发的对象指令的每个指令缓存单元对应连接有不同的至少一个能够执行该对象指令的执行单元。例如,接收div指令的iq0连接两个执行单元,这两个执行单元分别与iq0的读出端口0和读出端口
1连接,第一个执行单元不能执行div指令,第二个执行单元能够执行div指令;接收div指令的iq1连接两个执行单元,这两个执行单元分别与iq1的读出端口0和读出端口1连接,第一个执行单元不能执行div指令,同样的第二个执行单元能够执行div指令。与iq0连接的能执行div指令的执行单元不同于与iq1连接的能执行div指令的执行单元。
42.当然,在其他示例中,也可以是与iq0或iq1连接的两个执行单元都可以执行div指令,而且与iq0连接的能执行div指令的执行单元不同于与iq1连接的能执行div指令的执行单元。本公开实施例对于每个指令缓存单元对应连接的能够执行对象指令的执行单元的数量不做限制,可以根据iq的读出端口数量调整。
43.步骤s200:响应于多个指令缓存单元中第一数量的第一指令缓存单元中缓存的对象指令首先满足被执行条件,在与第一指令缓存单元对应连接的执行单元中选择第一执行单元执行对象指令。
44.例如,在将对象指令分发至多个指令缓存单元之后,每个缓存单元中该对象指令将等待被执行条件是否满足,在满足被执行条件时,那么该对象指令就可以请求取出。被执行条件可以包括但不限于如下几项:指令所需的所有操作数全部准备好、指令缓存单元连接的能够执行该对象指令的执行单元处于空闲状态、指令缓存单元具有空闲的读出端口等。
45.由于指令缓存单元的状态(例如,所有操作数是否准备好、是否有空闲的读出端口等)不同,在不同指令缓存单元内的对象指令满足被执行条件的时间可能不同,指令控制模块响应于多个指令缓存单元中第一数量的第一指令缓存单元中缓存的对象指令首先满足被执行条件,控制该第一指令缓存单元来选取各自缓存的对象指令,并将选取的对象指令发射至与第一指令缓存单元连接的第一执行单元中进行执行,第一数量为一个或多个(即第一指令缓存单元有至少一个)。这里,“第一指令缓存单元”用于指代接收同时分发的对象指令且缓存的对象指令的执行条件首先被满足的一个或多个指令缓存单元,而非特指某个具体的指令缓存单元。“第一执行单元”用于指代与第一指令缓存单元对应连接的多个执行单元中的任一执行单元,而非特指某个具体的执行单元。
[0046]“指令控制模块”可以是如图4所示的独立于指令缓存单元之外的模块,也可以是设置在指令缓存单元内的控制逻辑电路,本公开的实施例不做限定。
[0047]
例如,在图4的示例中,假设在工作过程中,某一fmull指令被同时分发至多个指令缓存单元iq2、iq3、iq5中,如果iq3中缓存的fmull指令(对象指令)首先满足被执行条件,那么iq3作为第一指令缓存单元,选取iq3中的对象指令发射至与iq3连接的能够执行fmull指令的执行单元中,收到该对象指令的执行单元作为第一执行单元,执行该fmull指令。如果iq2和iq5中缓存的fmull指令同时首先满足被执行条件,那么iq2和iq5都作为第一指令缓存单元,此时可以将iq2中的对象指令发射至与iq2连接的能够执行fmull指令的执行单元中,收到该对象指令的执行单元作为第一执行单元,执行该fmull指令,或者,可以将iq5中的对象指令发射至与iq5连接的能够执行fmull指令的执行单元中,收到该对象指令的执行单元作为第一执行单元,执行该fmull指令;或者,可以将iq2和iq5中的对象指令分别发射至与iq2和iq5分别连接的能够执行fmull指令的执行单元中,收到该对象指令的两个执行单元都作为第一执行单元,执行该fmull指令,该情形中,将选择放弃两个第一执行单元之一的计算结果。
[0048]
例如,在第一指令缓存单元响应对象指令首先满足被执行条件之后,指令处理方法还包括:
[0049]
步骤s300:放弃执行多个指令缓存单元中除该第一指令缓存单元之外的指令缓存单元中缓存的对象指令。
[0050]
例如,由于第一指令缓存单元中缓存的对象指令已经首先满足被执行条件,那么此时,除第一指令缓存单元之外的指令缓存单元中缓存的对象指令还未满足被执行条件,因此这些对象指令可以放弃响应满足被执行条件,或者将放弃执行将未满足被执行条件的对象指令发射至对应的执行单元以及后续的执行过程。即,指令控制模块控制多个指令缓存单元中除第一指令缓存单元之外的指令缓存单元,将其中缓存的对象指令放弃执行。
[0051]
例如,仍然参考上述示例,fmull指令同时分发至多个指令缓存单元iq2、iq3、iq5中缓存,如果指令控制模块响应于iq3中缓存的fmull指令首先满足被执行条件,那么指令控制模块控制iq2和iq5将缓存的fmull指令放弃发射至iq2和iq5对应连接的执行单元中。如果指令控制模块响应于iq2和iq5中缓存的fmull指令同时首先满足被执行条件,那么指令控制模块控制iq3将缓存的fmull指令放弃发射至iq3对应连接的执行单元中。
[0052]
例如,可以有多种放弃执行的方式,例如,在多个指令缓存单元中除第一指令缓存单元之外的指令缓存单元中,将缓存的对象指令删除,或者,将对象指令标记为不可用状态。
[0053]
例如,在第一指令缓存单元中缓存的对象指令已经首先满足被执行条件之后,指令控制模块可以控制除第一指令缓存单元之外的指令缓存单元将缓存的对象指令删除或者标记为不可用状态。如图4所示,仍然参考上述示例,fmull指令同时分发至多个指令缓存单元iq2、iq3、iq5中缓存,如果指令控制模块响应于iq3中缓存的fmull指令首先满足被执行条件,那么指令控制模块控制iq2和iq5将各自缓存的fmull指令删除或标记为不可用状态。如果指令控制模块响应于iq2和iq5中缓存的fmull指令同时首先满足被执行条件,那么指令控制模块控制iq3将缓存的fmull指令删除或标记为不可用状态。
[0054]
例如,为了便于将多个指令缓存单元中除第一指令缓存单元之外的指令缓存单元中缓存的对象指令删除或标记不可用状态,例如,同时分发至多个指令缓存单元中缓存的对象指令携带相同的标识;将缓存的携带这一标识的对象指令删除,或者,将缓存的携带这一标识的对象指令标记为不可用状态。
[0055]
例如,同时分发至多个指令缓存单元中缓存的对象指令可以携带相同的标识,例如该标识为编号。本公开实施例对于对象指令携带相同的标识的类型不做限制,可以是编号还可以是其他标识,例如标识码等。当第一指令缓存单元中缓存的对象指令已经首先满足被执行条件之后,指令控制模块可以控制除第一指令缓存单元之外的指令缓存单元查询相同编号的对象指令,并将查询到的相同编号的对象指令删除或者标记为不可用状态。
[0056]
例如,仍然参考上述示例,如图4所示,携带编号1的fmull指令同时分发至多个指令缓存单元iq2、iq3、iq5中缓存,如果指令控制模块响应于iq3中缓存的携带编号1的fmull指令首先满足被执行条件,那么指令控制模块控制iq2和iq5将各自缓存的携带编号1的fmull指令删除或标记为不可用状态。如果指令控制模块响应于iq2和iq5中各自缓存的携带编号1的fmull指令同时首先满足被执行条件,那么指令控制模块控制iq3将缓存的携带编号1的fmull指令删除或标记为不可用状态。
[0057]
例如,为了便于将多个指令缓存单元中除第一指令缓存单元之外的指令缓存单元中缓存的对象指令删除或标记不可用状态,例如,同时分发至多个指令缓存单元中缓存的对象指令,缓存至各个指令缓存单元中的缓存槽中;在多个指令缓存单元中除第一指令缓存单元之外的指令缓存单元中,查询缓存对象指令的缓存槽的编号,将查询到的具有该编号的缓存槽中的对象指令删除,或者,将查询到的具有该编号的缓存槽中的对象指令标记为不可用状态。
[0058]
例如,具有某一编号的缓存槽中,在第一时间点存放当前的对象指令,当前对象指令取出之后,第二时间点可以存放流水线中的下一指令,这两个指令分时存放在相同编号的缓存槽中。
[0059]
同时分发的对象指令在多个不同的指令缓存单元中存放的缓存槽的编号可能不同,可以通过查询各个指令缓存单元中存放对象指令的缓存槽的编号,来确定对象指令的具体存放地址。当第一指令缓存单元中缓存的对象指令已经首先满足被执行条件,其他指令缓存单元中存放在各自对应的缓存槽中的对象指令未满足被执行条件,这些对象指令仍然存放在各自的缓存槽中,那么指令控制模块查询缓存对象指令的缓存槽的编号,通过查询到的编号,将相应编号的缓存槽中的对象指令删除,或者,将相应编号的缓存槽中的对象指令标记为不可用状态。
[0060]
例如在第一数量为多个的情况下,,即在第一数量的第一指令缓存单元包括多个第一指令缓存单元的情况下,也即这些第一指令缓存单元中缓存的对象指令同时满足被执行条件(由此首先满足被执行条件),响应于多个第一指令缓存单元中缓存的对象指令首先满足被执行条件,在多个第一指令缓存单元中选择目标第一指令缓存单元,将目标第一指令缓存单元中缓存的对象指令,发送至与目标第一指令缓存单元对应连接的目标执行单元执行,并放弃执行多个第一指令缓存单元中除目标第一指令缓存单元之外的第一指令缓存单元中缓存的对象指令。
[0061]
例如,指令控制模块响应于多个第一指令缓存单元中缓存的首先满足被执行条件的对象指令,指令控制模块根据预设规则从多个第一指令缓存单元中选择目标第一指令缓存单元,并控制目标第一指令缓存单元选取缓存的对象指令发送至与目标第一指令缓存单元对应连接的多个执行单元中的目标第一执行单元执行。并且,指令控制模块控制多个第一指令缓存单元中除目标第一指令缓存单元之外的第一指令缓存单元放弃执行缓存的对象指令。例如,放弃执行多个第一指令缓存单元中除目标第一指令缓存单元之外的第一指令缓存单元中缓存的对象指令的方式有多种,例如,将缓存的对象指令删除,或者,将对象指令标记为不可用状态。
[0062]
需要指出的是,“目标第一指令缓存单元”用于指代在一个或多个第一指令缓存单元中被挑选出来发射对象指令以执行并保存执行及结果的指令缓存单元。“目标第一执行单元”可以指代为与目标第一指令缓存单元对应连接的多个第一执行单元中的任一执行单元,并非特指某个特定的第一执行单元。
[0063]
例如,仍然参考上述示例,fmull指令同时分发至多个指令缓存单元iq2、iq3、iq5中缓存,如果指令控制模块响应于iq2、iq3、iq5中缓存的fmull指令(对象指令)首先满足被执行条件,根据预设规则选择iq2为目标第一指令缓存单元,则iq3和iq5为除目标第一指令缓存单元iq2之外的第一指令缓存单元,指令控制模块控制iq3和iq5将各自缓存的对象指
令删除,或者,将各自缓存的对象指令标记为不可用状态。
[0064]
例如,在第一数量为多个的情况下,即在第一数量的第一指令缓存单元包括多个第一指令缓存单元的情况下,也即这些第一指令缓存单元中缓存的对象指令同时满足被执行条件,响应于多个第一指令缓存单元中缓存的对象指令首先满足被执行条件,在多个第一指令缓存单元中选择目标第一指令缓存单元之后,将多个第一指令缓存单元中除目标第一指令缓存单元之外的第一指令缓存单元中缓存的对象指令,发送至与多个第一指令缓存单元中除目标第一指令缓存单元之外的第一指令缓存单元对应的执行单元执行,以分别得到执行结果,放弃执行结果。
[0065]
例如,仍然参考上述示例,fmull指令同时分发至多个指令缓存单元iq2、iq3、iq5、iq6中缓存,如果指令控制模块响应于iq2、iq3、iq5中缓存的fmull指令同时首先满足被执行条件,根据预设规则选择iq2为目标第一指令缓存单元,则iq3和iq5为除目标第一指令缓存单元iq2之外的第一指令缓存单元,此时仍然控制iq3和iq5将各自缓存的对象指令发送至各自对应的执行单元中执行,得到执行结果。由于保留了iq2对应的执行单元执行的结果,那么指令控制模块控制指令缓存单元iq3和iq5放弃各自缓存的对象指令的执行结果,例如,将其删除或标记为不可用,也即iq3和iq5中各自缓存的对象指令的执行结果被抛弃,对于计算过程不产生影响。
[0066]
例如,放弃上述iq3和iq5中各自缓存的对象指令的执行结果的方式可以有多种,本实施例中不做具体限定。例如,删除执行结果,或将执行结果标记为不可用状态。
[0067]
例如,如上所述,在第一数量的第一指令缓存单元包括多个第一指令缓存单元的情况下,可以根据预设规则在多个第一指令缓存单元中选择目标第一指令缓存单元。该预设规则可以包括多种,可以根据实际情况进行调整,在本实施例中并不做限定。
[0068]
例如,预设规则可以包括:按照多个第一指令缓存单元在多个指令缓存单元中的固定顺序指定其中一个第一指令缓存单元,作为目标第一指令缓存单元,或,在多个第一指令缓存单元中随机指定其中一个第一指令缓存单元,作为目标第一指令缓存单元,或,按照多个第一指令缓存单元中其它待执行指令确定的优先级,选择其中一个第一指令缓存单元,作为目标第一指令缓存单元。
[0069]
例如,fmull指令同时分发至多个指令缓存单元iq2、iq3,iq5

iqn中,如果iq2、iq5和iqn中缓存的fmull指令同时首先满足被执行条件,那么iq2、iq5和iqn分别作为第一指令缓存单元,指令控制模块按照固定顺序iq2、iq5和iqn指定排在首位的iq2作为目标第一指令缓存单元,或者指定排在末位的iqn作为目标第一指令缓存单元。或者,指令控制模块在iq2、iq5和iqn中随机选取例如iq5作为目标第一指令缓存单元,本实施例对随机选取的对象不做限定。或者,iq2、iq5和iqn中后续待执行的指令可能包括其他耗时较长的指令,例如,iq2中后续待执行的指令可能包括其他耗时较长的指令,那么优先选择iq2作为目标第一指令缓存单元。本实施例对多个第一指令缓存单元中其它待执行指令确定的优先级不做具体限定。
[0070]
例如,将接收的对象指令同时分发至多个指令缓存单元中缓存之前,在接收的多个待执行指令中选择属于预设类别的待执行指令作为对象指令。
[0071]
例如,预设类别的待执行指令包括长延迟、不定延迟,或其它对性能有关键影响的指令,例如mul/div指令、fmul/fdiv指令、load指令等,这里可以将这些指令可以定义为“关
键指令”。如果当前接收的对象指令为关键指令,那么可以将其同时分发至多个指令缓存单元,进而选择首先满足被执行条件的关键指令进行执行。如果当前接收的对象指令不属于预设类别,那么可以将其发送至对应的一个指令缓存单元,进行后续执行即可。
[0072]
因此,被标记为预设类别的待执行指令可以最快速度进入执行单元,不会因为例如在指令动态分配和cpu动态运行的情况下,引起预设类别的待执行指令延迟执行,从而提高cpu整体性能。
[0073]
例如,预设类别的待执行指令(“关键指令”)包括一个或多个成员指令,成员指令的选择规则包括:成员指令在对应的执行单元中的执行时间、成员指令具有未被执行结束且阻挡其它执行结束的对象指令释放资源的特性、成员指令具有的不定延迟的特性。
[0074]
例如,成员指令在对应的执行单元中的执行时间较长,需要成员指令提前进入执行单元执行,或者,在其它对象指令执行结束之后,且成员指令未被执行结束时,其它对象指令的执行结果的资源无法释放,需要成员指令提前执行完成,或者,成员指令的不定延迟特性,同样需要提前进入执行单元执行等情况。本实施例对预设类别的待执行指令不做具体限定。
[0075]
例如,成员指令包括但不限于:除法(div)指令、乘法(mul)指令、数据读取(load)指令和数据存储(store data)指令。
[0076]
例如,乘法指令可以包括浮点乘法指令和定点乘法指令,除法指令包括浮点除法指令和定点除法指令。
[0077]
例如,为了在接收的多个待执行指令中选择属于预设类别的待执行指令(“关键指令”)作为对象指令,可以提供一个寄存器以保存预设类别的待执行指令的指令码,当接收的多个待执行指令中的指令码与寄存器中预存的指令码一致时,确定当前的待执行指令属于预设类别的待执行指令,并将当前的待执行指令作为对象指令。
[0078]
例如,指令分发模块将接收的多个待执行指令中的指令码与从寄存器中获取的预存的指令码进行一一比较,如果指令码一致,那么确定当前的待执行指令属于预设类别的待执行指令,那么将该待执行指令作为对象指令分发至多个指令缓存单元中。需要指出的是,对判断当前的待执行指令是否属于预设类别的待执行指令的方式并不做具体限定,除了通过比较多个待执行指令中的指令码与从寄存器中获取的预存的指令码来确定当前的待执行指令属于预设类别的待执行指令之外,还可以通过其它方式进行判断。
[0079]
图5示出了一个实施例中针对预设类别的成员指令作为对象指令进行指令处理的方法流程图。
[0080]
在指令流水线的处理过程中,指令分发模块在接收的多个待执行指令中选择属于预设类别的待执行指令(“关键指令”)作为对象指令,然后将作为对象指令的关键指令同时分发至多个指令缓存单元(即连接到能够执行该对象指令的执行单元的多个iq),这些指令缓存单元每个均连接有能够执行该关键指令的执行单元。在分发的对象指令在对应的指令缓存单元中缓存的过程,系统将持续监视对象指令的被执行条件,直至发现任一指令缓存单元中的对象指令满足该被执行条件。指令控制模块响应于h个(h为大于或等于1的正整数)第一指令缓存单元(多个iq中的任一)中缓存的关键指令首先满足被执行条件之后,如果h=1,指令控制模块控制这个第一指令缓存单元取出关键指令,指令控制模块控制除第一缓存指令单元之外的其它指令缓存单元将缓存的关键指令删除或标定为不可用状态,如
果h>1,指令控制模块按照预设规则在该h个第一指令缓存单元选择其中一个第一指令缓存单元,控制被选择的这个第一指令缓存单元取出缓存的关键指令,同时将除被选择的第一指令缓存单元之外的其他指令缓存单元(包括除被选择的第一指令缓存单元之外的其他第一指令缓存单元,以及包括除第一指令缓存单元之外的其他指令缓存单元)中的预设类别的对象指令删除或标定为不可用状态。最后,将取出的关键指令发送至对应的执行单元进行执行,输出执行结果。
[0081]
本公开至少一些实施例还提供一种指令处理装置,该指令处理装置例如可以用于各种适当类型的处理器,例如单核cpu或多核cpu等。图5为本公开一些实施例提供的指令处理装置的示意性框图。
[0082]
例如,如图6所示,该指令处理装置100包括:指令分发模块110和指令控制模块120。例如,参考图4的示例性结构,该指令处理装置100还可以进一步包括指令缓存模块和指令执行模块,指令缓存模块包括多个指令缓存单元,指令执行模块包括多个执行单元,这些执行单元可以执行不同类型的逻辑操作和/算术操作,每个指令缓存单元具有1个或多个读出端口,指令缓存单元的一个读出端口连接一个执行单元,由此每个指令缓存单元分别与例如1个或多个执行单元连接。每个指令缓存单元具有多个缓存槽。这些模块可以通过硬件、固件等方式实现。
[0083]
例如,指令分发模块110被配置为将接收的对象指令同时分发至多个指令缓存单元中缓存,其中,多个指令缓存单元中的每个分别与至少一个能够执行对象指令的不同的执行单元对应连接,指令控制模块120被配置为响应于多个指令缓存单元中第一数量的第一指令缓存单元中缓存的对象指令首先满足被执行条件,在与第一指令缓存单元对应连接的执行单元中选择第一执行单元执行对象指令。
[0084]
例如,指令控制模块120可以配置为执行以下操作:放弃执行多个指令缓存单元中除第一指令缓存单元之外的指令缓存单元中缓存的对象指令。
[0085]
例如,为放弃执行多个指令缓存单元中除第一指令缓存单元之外的指令缓存单元中缓存的对象指令,指令控制模块120还可以配置为执行以下操作:在多个指令缓存单元中除第一指令缓存单元之外的指令缓存单元中,将缓存的对象指令删除,或者,将对象指令标记为不可用状态。
[0086]
例如,同时分发至多个指令缓存单元中缓存的对象指令携带相同的编号;为将缓存的对象指令删除,或者,将对象指令标记为不可用状态,指令控制模块120还可以配置为执行以下操作:将缓存的携带前述编号的对象指令删除,或者,将缓存的携带前述编号的对象指令标记为不可用状态。
[0087]
例如,同时分发至多个指令缓存单元中缓存的对象指令,缓存至各个多个指令缓存单元中的缓存槽中;为将缓存的对象指令删除,或者,将对象指令标记为不可用状态,指令控制模块120还可以配置为执行以下操作:在多个指令缓存单元中除第一指令缓存单元之外的指令缓存单元中,查询缓存对象指令的缓存槽的编号,将查询到的具有该编号缓存槽中的对象指令删除,或者,将查询到的具有该编号缓存槽中的对象指令标记为不可用状态。
[0088]
例如,在第一数量为多个的情形,即在第一数量的第一指令缓存单元包括多个第一指令缓存单元的情形,为在与第一指令缓存单元对应连接的执行单元中选择第一执行单
元执行对象指令,指令控制模块120可以配置为执行以下操作:在多个第一指令缓存单元中选择目标第一指令缓存单元,将目标第一指令缓存单元中缓存的对象指令,发送至与目标第一指令缓存单元对应连接的执行单元执行。
[0089]
例如,指令控制模块120还可以配置为执行以下操作:放弃执行多个第一指令缓存单元中除目标第一指令缓存单元之外的第一指令缓存单元中缓存的对象指令。
[0090]
例如,为放弃执行多个第一指令缓存单元中除目标第一指令缓存单元之外的第一指令缓存单元中缓存的对象指令,指令控制模块120还可以配置为执行以下操作:在多个第一指令缓存单元中除目标第一指令缓存单元之外的第一指令缓存单元中,将缓存的对象指令删除,或者,将对象指令标记为不可用状态。
[0091]
例如,指令控制模块120还可以配置为执行以下操作:将多个第一指令缓存单元中除目标第一指令缓存单元之外的第一指令缓存单元中缓存的对象指令,发送至与多个第一指令缓存单元中除目标第一指令缓存单元之外的第一指令缓存单元对应的执行单元执行,以分别得到执行结果,放弃执行结果。
[0092]
例如,为放弃上述执行结果,指令控制模块120还可以配置为执行以下操作:删除执行结果,或将执行结果标记为不可用状态。
[0093]
例如,为在多个第一指令缓存单元中选择目标第一指令缓存单元,指令控制模块120可以配置为:根据预设规则在多个第一指令缓存单元中选择目标第一指令缓存单元。
[0094]
例如,该预设规则包括:按照多个第一指令缓存单元在多个指令缓存单元中的固定顺序指定其中一个第一指令缓存单元,作为目标第一指令缓存单元,或,在多个第一指令缓存单元中随机指定其中一个第一指令缓存单元,作为目标第一指令缓存单元,或,按照多个第一指令缓存单元中其它待执行指令确定的优先级,选择其中一个第一指令缓存单元,作为目标第一指令缓存单元。
[0095]
例如,为将接收的对象指令同时分发至多个指令缓存单元中缓存之前,指令分发模块110可以配置为:在接收的多个待执行指令中选择属于预设类别的待执行指令作为对象指令。
[0096]
例如,预设类别的待执行指令包括一个或多个成员指令,成员指令的选择规则包括:成员指令在对应的执行单元中的执行时间、成员指令具有未被执行结束且阻挡其它执行结束的对象指令释放资源的特性、成员指令具有的不定延迟的特性。
[0097]
例如,成员指令包括但不限于:除法(div)指令、乘法(mul)指令、数据读取(load)指令和数据存储(store data)指令。
[0098]
例如,为在接收的多个待执行指令中选择属于预设类别的待执行指令作为对象指令,指令分发模块110可以配置为:当接收的多个待执行指令中的指令码与寄存器中预存的指令码一致时,确定当前的待执行指令属于预设类别的待执行指令,并将当前的待执行指令作为对象指令。
[0099]
图7为本公开一些实施例提供的另一种指令处理装置的示意性框图。
[0100]
例如,如图7所示,该指令处理装置500包括存储器510和处理器520。例如,存储器510用于非暂时性存储计算机可执行指令,处理器520用于运行该计算机可执行指令,该计算机可执行指令被处理器520运行时执行本公开任一实施例提供的指令处理方法。
[0101]
例如,存储器510和处理器520之间可以直接或间接地互相通信。例如,在一些示例
中,如图8所示,该指令处理装置500还可以包括系统总线530,存储器510和处理器520之间可以通过系统总线530互相通信,例如,处理器520可以通过系统总线1006访问存储器510。例如,在另一些示例中,存储器510和处理器520等组件之间可以通过片上网络(noc)连接进行通信。
[0102]
例如,处理器520可以控制指令处理装置中的其它组件以执行期望的功能。处理器520可以是中央处理单元(cpu)、张量处理器(tpu)、网络处理器(np)或者图形处理器(gpu)等具有数据处理能力和/或程序执行能力的器件,还可以是数字信号处理器(dsp)、专用集成电路(asic)、现场可编程门阵列(fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。
[0103]
例如,存储器510可以包括一个或多个计算机程序产品的任意组合,计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。易失性存储器例如可以包括随机存取存储器(ram)和/或高速缓冲存储器(cache)等。非易失性存储器例如可以包括只读存储器(rom)、硬盘、可擦除可编程只读存储器(eprom)、便携式紧致盘只读存储器(cd-rom)、usb存储器、闪存等。
[0104]
例如,在存储器510上可以存储一个或多个计算机指令,处理器520可以运行所述计算机指令,以实现各种功能。在计算机可读存储介质中还可以存储各种应用程序和各种数据,例如指令处理代码以及应用程序使用和/或产生的各种数据等。
[0105]
例如,存储器510存储的一些计算机指令被处理器520执行时可以执行根据上文所述的指令处理方法中的一个或多个步骤。
[0106]
例如,如图6所示,指令处理装置500还可以包括允许外部设备与指令处理装置500进行通信的输入接口540。例如,输入接口540可被用于从外部计算机设备、从用户等处接收指令。指令处理装置500还可以包括使指令处理装置500和一个或多个外部设备相互连接的输出接口550。例如,指令处理装置500可以通过输出接口550等。
[0107]
例如,关于指令处理方法的处理过程的详细说明可以参考上述指令处理方法的实施例中的相关描述,重复之处不再赘述。
[0108]
需要说明的是,本公开的实施例提供的指令处理装置是示例性的,而非限制性的,根据实际应用需要,该指令处理装置还可以包括其他常规部件或结构,例如,为实现指令处理装置的必要功能,本领域技术人员可以根据具体应用场景设置其他的常规部件或结构,本公开的实施例对此不作限制。
[0109]
本公开至少一些实施例还提供一种非暂时性存储介质。图7为本公开一些实施例提供的一种非暂时性存储介质的示意图。
[0110]
例如,如图7所示,该存储介质600非暂时性地存储计算机可执行指令601,当非暂时性计算机可执行指令601由计算机(包括处理器)执行时可以执行本公开任一实施例提供的指令处理方法。
[0111]
例如,在存储介质600上可以存储一个或多个计算机指令。存储介质600上存储的一些计算机指令可以是例如用于实现上述指令处理方法中的一个或多个步骤的指令。
[0112]
例如,存储介质可以包括平板电脑的存储部件、个人计算机的硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom)、光盘只读存储器(cd-rom)、闪存、或者上述存储介质的任意组合,也可以为其他适用的存储介质。例如,存储介质600可
以包括前述指令处理装置500中的存储器510。
[0113]
本公开的实施例提供的存储介质的技术效果可以参考上述实施例中关于指令处理方法的相应描述,在此不再赘述。
[0114]
对于本公开,有以下几点需要说明:
[0115]
(1)本公开实施例附图中,只涉及到与本公开实施例涉及到的结构,其他结构可参考通常设计。
[0116]
(2)在不冲突的情况下,本公开同一实施例及不同实施例中的特征可以相互组合。
[0117]
以上,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应以权利要求的保护范围为准。
再多了解一些

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

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

相关文献