CN104123195B - 一种指令清除方法及装置 - Google Patents
一种指令清除方法及装置 Download PDFInfo
- Publication number
- CN104123195B CN104123195B CN201310142721.1A CN201310142721A CN104123195B CN 104123195 B CN104123195 B CN 104123195B CN 201310142721 A CN201310142721 A CN 201310142721A CN 104123195 B CN104123195 B CN 104123195B
- Authority
- CN
- China
- Prior art keywords
- instruction
- branch
- information
- mark
- abnormal
- 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.)
- Active
Links
Abstract
本发明实施例公开了一种指令清除方法及装置,涉及通信领域,在不增加电路复杂度的情况下,当指令执行发生异常时,实现了对异常指令的快速响应。具体方案为:当第一指令发生异常时,获取所述第一指令的分支标识;根据所述第一指令的分支标识生成掩码;根据所述掩码从存储有指令发射、执行以及提交过程中所需信息的所有指令队列和指令缓存中清除分支标识与所述第一指令的分支标识相同的信息。本发明用于指令的清除过程中。
Description
技术领域
本发明涉及通信领域,尤其涉及一种指令清除方法及装置。
背景技术
随着科技的不断进步,人们对计算机处理速度的要求也越来越高。现有技术提出一种超标量处理器,其原理是通过一个时钟周期内乱序发射多条指令并乱序执行这些指令来实现多指令并行技术。具体的,超标量处理器不需要按照指令原有的顺序发射执行这些指令,而是哪条指令的操作数准备就绪就可以提前执行该条指令,这样便可以提高指令的执行效率和算数逻辑单元(Arithmetic Logic Unit,ALU)的利用率,进而提高计算机的处理速度。但是为了保证流水线对精确异常的响应,在指令乱序执行完成后需要按照指令原先的顺序提交这些指令的执行结果,在超标量处理器中维护指令乱序执行和顺序提交的核心部件称为重排序缓存(Reorder Buffer,ROB)。
在超标量处理器中,若某条指令在执行的过程中发生异常,则需要从存放有指令发射、执行以及提交过程中所需信息的所有指令队列和指令缓存中清除该异常指令之后的所有信息。为了能够在指令发生异常之后尽早响应并处理该异常,现有技术提供一种解决方案,先将出现异常的指令的执行结果写到ROB中,然后将异常指令的ROB标识与所有已发射且未提交的指令的ROB标识相比较,根据比较结果判断哪些指令在该异常指令之后,哪些指令在该异常指令之前,然后将该异常指令之后的所有指令对应的信息从存放指令发射、执行以及提交过程中所需信息的所有指令队列和指令缓存中清除掉,从而达到快速响应并处理异常的目的。
在实现上述指令清除的过程中,发明人发现现有技术中至少存在如下问题:为了对所有已发射且未提交的指令的ROB标识与异常指令的ROB标识进行比较,需要在存放指令对应信息的的所有指令队列和指令缓存中分别加入一个比较器电路,这样便会增加电路的复杂度,并会导致资源的严重浪费。
发明内容
本发明的实施例提供一种指令清除方法及装置,在不增加电路复杂度的情况下,当指令执行发生异常时,实现了对异常指令的快速响应。
为达到上述目的,本发明的实施例采用如下技术方案:
本发明的第一方面,提供一种指令清除方法,包括:
当第一指令执行时发生异常,获取所述第一指令的分支标识;
根据所述第一指令的分支标识生成掩码;
根据所述掩码从存储有指令发射、执行以及提交过程中所需信息的所有指令队列和指令缓存中清除分支标识与所述第一指令的分支标识相同的信息。
结合第一方面,在一种可能的实现方式中,在所述获取所述第一指令的分支标识之前,还包括:
将所述第一指令的异常信息存储在重排序缓存ROB中;
根据所述异常信息判断所述第一指令为需要立即响应的异常指令。
结合第一方面和上述可能的实现方式,在另一种可能的实现方式中,当所述第一指令为非分支指令时,
在所述根据所述第一指令的分支标识生成掩码之前,还包括:
判断所述第一指令所对应的分支不处于分支队列的队头。
结合第一方面和上述可能的实现方式,在另一种可能的实现方式中,在所述根据所述掩码从存储有指令发射、执行以及提交过程中所需信息的所有指令队列和指令缓存中清除分支标识与所述第一指令的分支标识相同的信息之后,还包括:
获取第一分支指令的检查点信息;其中,所述第一分支指令的分支标识与所述第一指令的分支标识相同,所述第一分支指令的检查点信息包括所述第一分支指令执行之前超标量处理器的状态信息;
根据所述第一分支指令的检查点信息恢复超标量处理器的状态。
结合第一方面和上述可能的实现方式,在另一种可能的实现方式中,在所述获取所述第一指令的分支标识之后,还包括:
将所述第一指令的异常信息存储在第一电路中;其中,所述第一电路用于保存程序执行过程中发生异常的指令的异常信息;
在所述根据所述第一分支指令的检查点信息恢复超标量处理器的状态之后,还包括:
从所述第一分支指令开始,重新取指并执行所述程序;
若所述第一指令执行时再次发生异常,判断所述第一指令再次发生的异常为所述第一电路中存储的所述异常信息对应的异常,则不对所述第一指令的异常立即响应。
结合第一方面和上述可能的实现方式,在另一种可能的实现方式中,当所述第一指令为分支指令时,
在所述根据所述掩码从存储有指令发射、执行以及提交过程中所需信息的所有指令队列和指令缓存中清除分支标识与所述第一指令的分支标识相同的信息之后,还包括:
获取所述第一指令的检查点信息;其中,所述第一指令的检测点信息包括所述第一指令执行之前超标量处理器的状态信息;
根据所述第一指令的检查点信息恢复超标量处理器的状态。
结合第一方面和上述可能的实现方式,在另一种可能的实现方式中,所述指令队列包括但不限于所述分支队列、发射队列、加载存储队列、程序计数器列表;所述指令缓存包括但不限于所述ROB、存储缓存。
本发明的第二方面,提供一种指令清除装置,包括:
第一获取单元,用于当第一指令执行时发生异常,获取所述第一指令的分支标识;
生成单元,用于根据所述第一获取单元得到的所述第一指令的分支标识生成掩码;
清除单元,用于根据所述生成单元得到的所述掩码从存储有指令发射、执行以及提交过程中所需信息的所有指令队列和指令缓存中清除分支标识与所述第一指令的分支标识相同的信息。
结合第二方面,在一种可能的实现方式中,还包括:
第一存储单元,用于在所述第一获取单元获取所述第一指令的分支标识之前,将所述第一指令的异常信息存储在重排序缓存ROB中;
第一判断单元,用于根据所述第一存储单元存储的所述异常信息判断所述第一指令为需要立即响应的异常指令。
结合第二方面和上述可能的实现方式,在另一种可能的实现方式中,当所述第一指令为非分支指令时,
所述装置还包括:
第二判断单元,用于在所述生成单元根据所述第一指令的分支标识生成掩码之前,判断所述第一指令所对应的分支不处于分支队列的队头。
结合第二方面和上述可能的实现方式,在另一种可能的实现方式中,还包括:
第二获取单元,用于在所述清除单元根据所述掩码从存储有指令发射、执行以及提交过程中所需信息的所有指令队列和指令缓存中清除分支标识与所述第一指令的分支标识相同的信息之后,获取第一分支指令的检查点信息;其中,所述第一分支指令的分支标识与所述第一指令的分支标识相同,所述第一分支指令的检查点信息包括所述第一分支指令执行之前超标量处理器的状态信息;
第一恢复单元,用于根据所述第二获取单元得到的所述第一分支指令的检查点信息恢复超标量处理器的状态。
结合第二方面和上述可能的实现方式,在另一种可能的实现方式中,还包括:
第二存储单元,用于在所述第一获取单元获取所述第一指令的分支标识之后,将所述第一指令的异常信息存储在第一电路中;其中,所述第一电路用于保存程序执行过程中发生异常的指令的异常信息;
处理单元,用于在所述第一恢复单元根据所述第一分支指令的检查点信息恢复超标量处理器的状态之后,从所述第一分支指令开始,重新取指并执行所述程序;
第三判断单元,用于若所述第一指令执行时再次发生异常,判断所述第一指令再次发生的异常为所述第一电路中存储的所述异常信息对应的异常,则不对所述第一指令的异常立即响应。
结合第二方面和上述可能的实现方式,在另一种可能的实现方式中,当所述第一指令为分支指令时,
所述装置还包括:
第三获取单元,用于在所述清除单元根据所述掩码从存储有指令发射、执行以及提交过程中所需信息的所有指令队列和指令缓存中清除分支标识与所述第一指令的分支标识相同的信息之后,获取所述第一指令的检查点信息;其中,所述第一指令的检测点信息包括所述第一指令执行之前超标量处理器的状态信息;
第二恢复单元,用于根据所述第三获取单元得到的所述第一指令的检查点信息恢复超标量处理器的状态。
结合第二方面和上述可能的实现方式,在另一种可能的实现方式中,所述指令队列包括但不限于所述分支队列、发射队列、加载存储队列、程序计数器列表;所述指令缓存包括但不限于所述ROB、存储缓存。
本发明实施例提供的指令清除方法及装置,获取执行时发生异常的第一指令的分支标识,并根据第一指令的分支标识生成掩码,然后根据生成的掩码从存储有指令发射、执行以及提交过程中所需信息的所有指令队列和指令缓存中清除分支标识与第一指令的分支标识相同的信息,当指令执行发生异常时,通过根据异常指令的分支标识生成的掩码,快速的从所有指令队列和指令缓存中清除分支标识与异常指令的分支标识相同的指令的信息,在不增加电路复杂度的情况下,达到了快速响应异常指令的目的。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明一实施例提供的一种指令清除方法流程图;
图2为本发明另一实施例提供的一种指令清除方法流程图;
图3为本发明另一实施例提供的另一种指令清除方法流程图;
图4为本发明另一实施例提供的一种指令清除装置组成示意图;
图5为本发明另一实施例提供的另一种指令清除装置组成示意图;
图6为本发明另一实施例提供的又一种指令清除装置组成示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明一实施例提供一种指令清除方法,如图1所示,该方法可以包括:
101、当第一指令执行时发生异常,获取第一指令的分支标识。
其中,当第一指令在执行的过程中发生异常,超标量处理器可以获取第一指令的分支标识。
102、根据第一指令的分支标识生成掩码。
其中,当超标量处理器获取到第一指令的分支标识之后,便可以根据第一指令的分支标识生成掩码。可以理解的是:在超标量处理器中,每条指令在执行的过程中都会携带一个分支标识,且该分支标识都是独热编码的,因此根据第一指令的分支标识生成的掩码只需要将该分支标识中为“1”的那一比特掩掉即可。
103、根据掩码从存储有指令发射、执行以及提交过程中所需信息的所有指令队列和指令缓存中清除分支标识与第一指令的分支标识相同的信息。
其中,当超标量处理器根据第一指令的分支标识生成对应的掩码之后,便可以根据该掩码清除第一指令所属分支的所有指令在指令队列和指令缓存中存储的用于发射、执行以及提交过程中所需的信息,包括该分支的分支指令。
本发明实施例提供的指令清除方法,获取执行时发生异常的第一指令的分支标识,并根据第一指令的分支标识生成掩码,然后根据生成的掩码从存储有指令发射、执行以及提交过程中所需信息的所有指令队列和指令缓存中清除分支标识与第一指令的分支标识相同的信息,当指令执行发生异常时,通过根据异常指令的分支标识生成的掩码,快速的从所有指令队列和指令缓存中清除分支标识与异常指令的分支标识相同的指令的信息,在不增加电路复杂度的情况下,达到了快速响应异常指令的目的。
本发明另一实施例提供一种指令清除方法,众所周知,在超标量处理器中,对于程序中的分支指令,往往需要对分支指令的跳转方向及跳转地址进行预测,超标量处理器会将预测出的跳转方向及预测地址保存在分支队列中,并为每个分支指令分配一个分支标识,对于程序中的在某条分支指令之后的非分支指令也会携带一个分支标识,且该分支标识与分支指令的分支标识相同,直到新的分支指令出现,再改变分支标识,我们将具有相同分支标识的所有指令称为分支块,在本发明实施例中,当指令执行发生异常时,便可以利用异常指令的分支标识,达到快速清除指令在发射、执行及提交过程中所需的信息的目的。本发明在两种不同的应用场景中对指令清除的方法进行介绍。
在一种应用场景中,当第一指令为非分支指令时,如图2所示,该方法可以包括:
201a、当第一指令执行时发生异常,将第一指令的异常信息存储在ROB中。
其中,当第一指令在执行的过程中发生异常,超标量处理器将第一指令的异常信息保存至ROB中。
202a、根据异常信息判断第一指令为需要立即响应的异常指令。
其中,当超标量处理器将第一指令的异常信息存储在ROB中之后,便可以根据指令集、超标量处理器的实现方式以及第一指令的异常信息来确定该第一指令的异常是否需要立即响应,例如:1、对于推测执行的载入(load)指令,若该load指令越过其前面的存储(store)指令执行,有可能发生推测执行失败,即该load指令与store指令的地址发生了冲突,则需要及时清除该load指令以及load指令的相关信息,并重新取指执行,该过程越早越好,即对于推测执行的load指令发生异常的情况需要立即响应;2、对于分支预测失败,也需要尽早的响应,这样才能保证尽快的从正确分支取指执行;3、在指令集中可以要求某些异常或外部中断是需要立即响应的,如定时器中断。对于需要立即响应的异常处理器需要尽快做出处理。
需要说明的是,在本发明实施例中只是对需要立即响应的异常进行简单的举例说明,对于哪些指令发生异常时需要立即响应,可以根据指令集、超标量处理器的实现方式等实际情况来确定,本发明实施例在此对需要立即响应的异常指令不做限制。
203a、获取第一指令的分支标识。
其中,当根据异常信息判断得到第一指令为需要立即响应的异常指令之后,超标量处理器便可以获取第一指令的分支标识。
可选的,当根据异常信息判断得到第一指令不是需要立即响应的异常指令,则将该异常延迟至提交时再做处理。
204a、将第一指令的异常信息存储在第一电路中。
其中,在判断得到第一指令为需要立即响应的异常指令之后,也可以将第一指令的异常信息保存在第一电路中,以便后续当第一指令在执行是再次发生异常时使用。第一电路用于保存程序执行过程中发生异常的指令的异常信息。
需要说明的是,步骤203a和步骤204a的执行部分先后顺序,本发明实施例对步骤203a和步骤204a的执行顺序不做限制。
205a、判断第一指令所对应的分支不处于分支队列的队头。
其中,当超标量处理器获取到第一指令的分支标识之后,判断第一指令所对应的分支是否处于分支队列的对头。
可选的,若第一指令所对应的分支处于分支队列的对头,则表明马上可以提交第一指令的执行结果,因此可以不对第一指令的异常立即处理,而是待第一指令到达ROB队头时再处理该异常,并且若立即处理该第一指令的异常,恰巧处于第一指令之前的与第一指令分支标识相同的指令已将执行结果提交,则可能导致处理的粒度不同,也有可能在异常恢复之后重新取指执行时重复执行已提交过执行结果的指令。
206a、根据第一指令的分支标识生成掩码。
其中,当判断得到第一指令对应的分支不处于分支队列的队头时,根据第一指令的分支标识生成掩码。由于每条指令的分支标识时独热编码的,因此生成的掩码只需要将分支标识中为“1”的比特掩掉即可,例如第一指令的分支标识为00001000,则生成的掩码可以是00000110。
207a、根据掩码从存储有指令发射、执行以及提交过程中所需信息的所有指令队列和指令缓存中清除分支标识与第一指令的分支标识相同的信息。
其中,当超标量处理器根据第一指令的分支标识生成掩码之后,便可以根据生成的掩码从存储有指令发射、执行以及提交过程中所需信息的所有指令队列和指令缓存中清除分支标识与第一指令的分支标识相同的指令相应的信息。例如,将掩码与所有指令队列中的指令相关信息的分支标识相“与”,并将得到结果为零的信息清除。其中,在超标量处理器中存储有指令的队列包括不限于分支队列(branch queue)、发射队列(issue queue)、加载存储队列(load store queue)、程序计数器列表(PC table),指令缓存包括但不限于所述ROB、存储缓存(store buffer)。例如,在发射队列中,将发射队列中存储的每条指令在发射时所需信息的分支标识与掩码相“与”,若某条指令在发射时所需信息的分支标识与掩码相“与”的结果为零,说明该条指令与第一指令同属于一个分支块,也就是说该条指令的执行结果可能会受到第一指令执行结果的影响,则该指令在发射时所需的信息需要被清除,若某条指令在发射时所需信息的分支标识与掩码相“与”的结果为不为零,则该条指令不需要被清除。
208a、获取第一分支指令的检查点信息。
其中,第一分支指令的分支标识与第一指令的分支标识相同。第一检查点信息包括在第一分支指令执行之前超标量处理器的状态信息。
209a、根据第一分支指令的检查点信息恢复超标量处理器的状态。
其中,在超标量处理器中,为了能在对分支指令预测失败时,将超标量处理器的状态恢复到该分支指令之前,需要在对每一条分支指令进行预测时记录下超标量处理器当前的状态,该状态信息为检查点信息的其中一部分。在本发明实施例中,便可以根据与发生异常的第一指令同属于一个分支块的第一分支指令的检查点信息来恢复超标量处理的状态,其中,该检查点信息包括当前时刻超标量处理器的物理寄存器状态、寄存器映射表、空闲寄存器列表等。
210a、从第一分支指令开始,重新取指并执行程序。
其中,当超标量处理器的状态恢复到第一分支指令执行前之后,则可以从第一分支指令开始,重新取指并执行程序。
211a、若第一指令执行时再次发生异常,判断第一指令再次发生的异常为第一电路中存储的异常信息对应的异常,则不对第一指令的异常立即响应。
其中,若第一指令在执行时再次发生异常,且该异常与第一电路中保存的第一次执行时发生的异常相同,表明第一指令的异常很有可能是由于在自身执行过程中导致的,与第一指令之前的指令无关,因此可以不对第一指令的异常立即响应,避免重复清除第一指令之前的指令,导致第一指令之前的指令的正确执行结果不能提交。
在另一种应用场景中,当第一指令为分支指令时,如图3所示,该方法可以包括:
201b、当第一指令执行时发生异常,将第一指令的异常信息存储在ROB中。
202b、根据异常信息判断第一指令为需要立即响应的异常指令。
203b、获取第一指令的分支标识。
204b、根据第一指令的分支标识生成掩码。
其中,由于第一指令是分支指令,在第一指令之前的指令与该指令的分支标识肯定不相同,在该第一指令之后的指令肯定还未提交,因此当第一指令为分支指令时,不用判断第一指令是否处于分支队列的对头,从该第一指令开始便可以保证每次清除的粒度是相同的,并可以确保在异常恢复之后重新取指执行时不会重复执行已提交过的指令。
205b、根据掩码从存储有指令发射、执行以及提交过程中所需信息的所有指令队列和指令缓存中清除分支标识与第一指令的分支标识相同的信息。
206b、获取第一指令的检查点信息。
207b、根据第一指令的检查点信息恢复超标量处理器的状态。
需要说明的是,本发明实施例步骤201b-步骤207b的中参数的具体描述,可以参考本发明实施例步骤201a-步骤210a中对应参数的具体描述,本发明实施例在此不再一一赘述。
本发明实施例提供的指令清除方法,获取执行时发生异常的第一指令的分支标识,并根据第一指令的分支标识生成掩码,然后根据生成的掩码从存储有指令发射、执行以及提交过程中所需信息的所有指令队列和指令缓存中清除分支标识与第一指令的分支标识相同的信息,当指令执行发生异常时,通过根据异常指令的分支标识生成的掩码,快速的从所有指令队列和指令缓存中清除分支标识与异常指令的分支标识相同的指令的信息,在不增加电路复杂度的情况下,达到了快速响应异常指令的目的。
并且,利用分支指令的检测点信息可以快速的恢复超标量处理器的状态,使得超标量处理器可以快速的取到正确的指令重新执行,且每次清除指令时都以一个分支块为单位进行清除,确保了指令清除的粒度相同,并可以确保在异常恢复之后重新取指执行时不会重复执行已提交过的指令。
本发明另一实施例提供一种指令清除装置,如图4所示,包括:第一获取单元301、生成单元302、清除单元303。
第一获取单元301,用于当第一指令执行时发生异常,获取所述第一指令的分支标识。
生成单元302,用于根据所述第一获取单元301得到的所述第一指令的分支标识生成掩码。
清除单元303,用于根据所述生成单元302得到的所述掩码从存储有指令发射、执行以及提交过程中所需信息的所有指令队列和指令缓存中清除分支标识与所述第一指令的分支标识相同的信息。
进一步的,如图5所示,该装置还可以包括:第一存储单元304、第一判断单元305。
第一存储单元304,用于在所述第一获取单元301获取所述第一指令的分支标识之前,将所述第一指令的异常信息存储在重排序缓存ROB中。
第一判断单元305,用于根据所述第一存储单元304存储的所述异常信息判断所述第一指令为需要立即响应的异常指令。
进一步的,当所述第一指令为非分支指令时,该装置还可以包括:第二判断单元306。
第二判断单元306,用于在所述生成单元302根据所述第一指令的分支标识生成掩码之前,判断所述第一指令所对应的分支不处于分支队列的队头。
进一步的,该装置还可以包括:第二获取单元307、第一恢复单元308。
第二获取单元307,用于在所述清除单元303根据所述掩码从存储有指令发射、执行以及提交过程中所需信息的所有指令队列和指令缓存中清除分支标识与所述第一指令的分支标识相同的信息之后,获取第一分支指令的检查点信息;其中,所述第一分支指令的分支标识与所述第一指令的分支标识相同,所述第一分支指令的检查点信息包括所述第一分支指令执行之前超标量处理器的状态信息。
第一恢复单元308,用于根据所述第二获取单元307得到的所述第一分支指令的检查点信息恢复超标量处理器的状态。
进一步的,该装置还可以包括:第二存储单元309、处理单元310、第三判断单元311。
第二存储单元309,用于在所述第一获取单元301获取所述第一指令的分支标识之后,将所述第一指令的异常信息存储在第一电路中;其中,所述第一电路用于保存程序执行过程中发生异常的指令的异常信息。
处理单元310,用于在所述第一恢复单元308根据所述第一分支指令的检查点信息恢复超标量处理器的状态之后,从所述第一分支指令开始,重新取指并执行所述程序。
第三判断单元311,用于若所述第一指令执行时再次发生异常,判断所述第一指令再次发生的异常为所述第一电路中存储的所述异常信息对应的异常,则不对所述第一指令的异常立即响应。
进一步的,当所述第一指令为分支指令时,该装置还可以包括:第三获取单元312、第二恢复单元313。
第三获取单元312,用于在所述清除单元303根据所述掩码从存储有指令发射、执行以及提交过程中所需信息的所有指令队列和指令缓存中清除分支标识与所述第一指令的分支标识相同的信息之后,获取所述第一指令的检查点信息,其中,所述第一指令的检测点信息包括所述第一指令执行之前超标量处理器的状态信息。
第二恢复单元313,用于根据所述第三获取单元312得到的所述第一指令的检查点信息恢复超标量处理器的状态。
进一步的,所述指令队列包括但不限于所述分支队列、发射队列、加载存储队列、程序计数器列表;所述指令缓存包括但不限于所述ROB、存储缓存。
本发明实施例提供的指令清除装置,获取执行时发生异常的第一指令的分支标识,并根据第一指令的分支标识生成掩码,然后根据生成的掩码从存储有指令发射、执行以及提交过程中所需信息的所有指令队列和指令缓存中清除分支标识与第一指令的分支标识相同的信息,当指令执行发生异常时,通过根据异常指令的分支标识生成的掩码,快速的从所有指令队列和指令缓存中清除分支标识与异常指令的分支标识相同的指令的信息,在不增加电路复杂度的情况下,达到了快速响应异常指令的目的。
并且,利用分支指令的检测点信息可以快速的恢复超标量处理器的状态,使得超标量处理器可以快速的取到正确的指令重新执行,且每次清除指令时都以一个分支块为单位进行清除,确保了指令清除的粒度相同,并可以确保在异常恢复之后重新取指执行时不会重复执行已提交过的指令。
本发明另一实施例提供一种指令清除装置,如图6所示,包括:至少一个处理器41、存储器42、通信接口43和总线44,该至少一个处理器41、存储器42和通信接口43通过总线44连接并完成相互间的通信,其中:
所述总线44可以是工业标准体系结构(Industry Standard Architecture,ISA)总线、外部设备互连(Peripheral Component Interconnect,PCI)总线或扩展工业标准体系结构(Extended Industry Standard Architecture,EISA)总线等。该总线44可以分为地址总线、数据总线、控制总线等。为便于表示,图6中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
所述存储器42用于存储可执行程序代码,该程序代码包括计算机操作指令。存储器42可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
所述处理器41可能是一个中央处理器(Central Processing Unit,CPU),或者是特定集成电路(Application Specific Integrated Circuit,ASIC),或者是被配置成实施本发明实施例的一个或多个集成电路。
所述通信接口43,主要用于实现本实施例的设备之间的通信。
所述处理器41,用于执行所述存储器42中存储的可执行程序代码,具体用于执行以下操作:
所述处理器41,用于当第一指令执行时发生异常,获取所述第一指令的分支标识;根据所述第一指令的分支标识生成掩码;根据所述掩码从存储有指令发射、执行以及提交过程中所需信息的所有指令队列和指令缓存中清除分支标识与所述第一指令的分支标识相同的信息。
进一步的,所述存储器42,还用于在所述获取所述第一指令的分支标识之前,将所述第一指令的异常信息存储在重排序缓存ROB中。
所述处理器41,还用于根据所述异常信息判断所述第一指令为需要立即响应的异常指令。
进一步的,当所述第一指令为非分支指令时,所述处理器41,还用于在所述根据所述第一指令的分支标识生成掩码之前,判断所述第一指令所对应的分支不处于分支队列的队头。
进一步的,所述处理器41,还用于在所述根据所述掩码从存储有指令发射、执行以及提交过程中所需信息的所有指令队列和指令缓存中清除分支标识与所述第一指令的分支标识相同的信息之后,获取第一分支指令的检查点信息;其中,所述第一分支指令的分支标识与所述第一指令的分支标识相同,所述第一分支指令的检查点信息包括所述第一分支指令执行之前超标量处理器的状态信息;根据所述第一分支指令的检查点信息恢复超标量处理器的状态。
进一步的,所述存储器42,还用于在所述获取所述第一指令的分支标识之后,将所述第一指令的异常信息存储在第一电路中;其中,所述第一电路用于保存程序执行过程中发生异常的指令的异常信息。
所述处理器41,还用于在所述根据所述第一分支指令的检查点信息恢复超标量处理器的状态之后,从所述第一分支指令开始,重新取指并执行所述程序;若所述第一指令执行时再次发生异常,判断所述第一指令再次发生的异常为所述第一电路中存储的所述异常信息对应的异常,则不对所述第一指令的异常立即响应。
进一步的,当所述第一指令为分支指令时,所述处理器41,还用于在所述根据所述掩码从存储有指令发射、执行以及提交过程中所需信息的所有指令队列和指令缓存中清除分支标识与所述第一指令的分支标识相同的信息之后,获取所述第一指令的检查点信息,其中,所述第一指令的检测点信息包括所述第一指令执行之前超标量处理器的状态信息;根据所述第一指令的检查点信息恢复超标量处理器的状态。
进一步的,所述指令队列包括但不限于所述分支队列、发射队列、加载存储队列、程序计数器列表;所述指令缓存包括但不限于所述ROB、存储缓存。
本发明实施例提供的指令清除装置,获取执行时发生异常的第一指令的分支标识,并根据第一指令的分支标识生成掩码,然后根据生成的掩码从存储有指令发射、执行以及提交过程中所需信息的所有指令队列和指令缓存中清除分支标识与第一指令的分支标识相同的信息,当指令执行发生异常时,通过根据异常指令的分支标识生成的掩码,快速的从所有指令队列和指令缓存中清除分支标识与异常指令的分支标识相同的指令的信息,在不增加电路复杂度的情况下,达到了快速响应异常指令的目的。
并且,利用分支指令的检测点信息可以快速的恢复超标量处理器的状态,使得超标量处理器可以快速的取到正确的指令重新执行,且每次清除指令时都以一个分支块为单位进行清除,确保了指令清除的粒度相同,并可以确保在异常恢复之后重新取指执行时不会重复执行已提交过的指令。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘,硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (14)
1.一种指令清除方法,其特征在于,应用于超标量处理器,包括:
当第一指令执行时发生异常,获取所述第一指令的分支标识;
根据所述第一指令的分支标识生成掩码;
根据所述掩码从存储有指令发射、执行以及提交过程中所需信息的所有指令队列和指令缓存中清除分支标识与所述第一指令的分支标识相同的信息。
2.根据权利要求1所述的指令清除方法,其特征在于,在所述获取所述第一指令的分支标识之前,还包括:
将所述第一指令的异常信息存储在重排序缓存ROB中;
根据所述异常信息判断所述第一指令为需要立即响应的异常指令。
3.根据权利要求1或2所述的指令清除方法,其特征在于,当所述第一指令为非分支指令时,
在所述根据所述第一指令的分支标识生成掩码之前,还包括:
判断所述第一指令所对应的分支不处于分支队列的队头。
4.根据权利要求3所述的指令清除方法,其特征在于,在所述根据所述掩码从存储有指令发射、执行以及提交过程中所需信息的所有指令队列和指令缓存中清除分支标识与所述第一指令的分支标识相同的信息之后,还包括:
获取第一分支指令的检查点信息;其中,所述第一分支指令的分支标识与所述第一指令的分支标识相同,所述第一分支指令的检查点信息包括所述第一分支指令执行之前超标量处理器的状态信息;
根据所述第一分支指令的检查点信息恢复超标量处理器的状态。
5.根据权利要求4所述的指令清除方法,其特征在于,在所述获取所述第一指令的分支标识之后,还包括:
将所述第一指令的异常信息存储在第一电路中;其中,所述第一电路用于保存执行程序过程中发生异常的指令的异常信息;
在所述根据所述第一分支指令的检查点信息恢复超标量处理器的状态之后,还包括:
从所述第一分支指令开始,重新取指并执行所述程序;
若所述第一指令执行时再次发生异常,判断所述第一指令再次发生的异常为所述第一电路中存储的所述异常信息对应的异常,则不对所述第一指令的异常立即响应。
6.根据权利要求1或2所述的指令清除方法,其特征在于,当所述第一指令为分支指令时,
在所述根据所述掩码从存储有指令发射、执行以及提交过程中所需信息的所有指令队列和指令缓存中清除分支标识与所述第一指令的分支标识相同的信息之后,还包括:
获取所述第一指令的检查点信息;其中,所述第一指令的检测点信息包括所述第一指令执行之前超标量处理器的状态信息;
根据所述第一指令的检查点信息恢复超标量处理器的状态。
7.根据权利要求1、2、4、5中任一项所述的指令清除方法,其特征在于,所述指令队列包括但不限于分支队列、发射队列、加载存储队列或程序计数器列表;所述指令缓存包括但不限于ROB或存储缓存。
8.一种指令清除装置,其特征在于,应用于超标量处理器,包括:
第一获取单元,用于当第一指令执行时发生异常,获取所述第一指令的分支标识;
生成单元,用于根据所述第一获取单元得到的所述第一指令的分支标识生成掩码;
清除单元,用于根据所述生成单元得到的所述掩码从存储有指令发射、执行以及提交过程中所需信息的所有指令队列和指令缓存中清除分支标识与所述第一指令的分支标识相同的信息。
9.根据权利要求8所述的指令清除装置,其特征在于,还包括:
第一存储单元,用于在所述第一获取单元获取所述第一指令的分支标识之前,将所述第一指令的异常信息存储在重排序缓存ROB中;
第一判断单元,用于根据所述第一存储单元存储的所述异常信息判断所述第一指令为需要立即响应的异常指令。
10.根据权利要求8或9所述的指令清除装置,其特征在于,当所述第一指令为非分支指令时,
所述装置还包括:
第二判断单元,用于在所述生成单元根据所述第一指令的分支标识生成掩码之前,判断所述第一指令所对应的分支不处于分支队列的队头。
11.根据权利要求10所述的指令清除装置,其特征在于,还包括:
第二获取单元,用于在所述清除单元根据所述掩码从存储有指令发射、执行以及提交过程中所需信息的所有指令队列和指令缓存中清除分支标识与所述第一指令的分支标识相同的信息之后,获取第一分支指令的检查点信息;其中,所述第一分支指令的分支标识与所述第一指令的分支标识相同,所述第一分支指令的检查点信息包括所述第一分支指令执行之前超标量处理器的状态信息;
第一恢复单元,用于根据所述第二获取单元得到的所述第一分支指令的检查点信息恢复超标量处理器的状态。
12.根据权利要求11所述的指令清除装置,其特征在于,还包括:
第二存储单元,用于在所述第一获取单元获取所述第一指令的分支标识之后,将所述第一指令的异常信息存储在第一电路中;其中,所述第一电路用于保存程序执行过程中发生异常的指令的异常信息;
处理单元,用于在所述第一恢复单元根据所述第一分支指令的检查点信息恢复超标量处理器的状态之后,从所述第一分支指令开始,重新取指并执行所述程序;
第三判断单元,用于若所述第一指令执行时再次发生异常,判断所述第一指令再次发生的异常为所述第一电路中存储的所述异常信息对应的异常,则不对所述第一指令的异常立即响应。
13.根据权利要求8或9所述的指令清除装置,其特征在于,当所述第一指令为分支指令时,
所述装置还包括:
第三获取单元,用于在所述清除单元根据所述掩码从存储有指令发射、执行以及提交过程中所需信息的所有指令队列和指令缓存中清除分支标识与所述第一指令的分支标识相同的信息之后,获取所述第一指令的检查点信息;其中,所述第一指令的检测点信息包括所述第一指令执行之前超标量处理器的状态信息;
第二恢复单元,用于根据所述第三获取单元得到的所述第一指令的检查点信息恢复超标量处理器的状态。
14.根据权利要求8、9、11、12中任一项所述的指令清除装置,其特征在于,所述指令队列包括但不限于分支队列、发射队列、加载存储队列或程序计数器列表;所述指令缓存包括但不限于ROB或存储缓存。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310142721.1A CN104123195B (zh) | 2013-04-23 | 2013-04-23 | 一种指令清除方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310142721.1A CN104123195B (zh) | 2013-04-23 | 2013-04-23 | 一种指令清除方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104123195A CN104123195A (zh) | 2014-10-29 |
CN104123195B true CN104123195B (zh) | 2018-03-13 |
Family
ID=51768616
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310142721.1A Active CN104123195B (zh) | 2013-04-23 | 2013-04-23 | 一种指令清除方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104123195B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109654549B (zh) * | 2019-02-01 | 2024-04-12 | 青岛海尔智能技术研发有限公司 | 燃气灶及用于燃气灶的控制方法 |
CN117539545A (zh) * | 2022-08-02 | 2024-02-09 | 华为技术有限公司 | 指令执行的方法和装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1725175A (zh) * | 2004-07-16 | 2006-01-25 | 三星电子株式会社 | 分支目标缓冲器及其使用方法 |
CN101449238A (zh) * | 2006-06-08 | 2009-06-03 | 国际商业机器公司 | 本地和全局分支预测信息存储 |
CN102968293A (zh) * | 2012-11-28 | 2013-03-13 | 中国人民解放军国防科学技术大学 | 基于指令队列的程序循环代码动态检测及执行方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6535905B1 (en) * | 1999-04-29 | 2003-03-18 | Intel Corporation | Method and apparatus for thread switching within a multithreaded processor |
US7617385B2 (en) * | 2007-02-15 | 2009-11-10 | International Business Machines Corporation | Method and apparatus for measuring pipeline stalls in a microprocessor |
-
2013
- 2013-04-23 CN CN201310142721.1A patent/CN104123195B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1725175A (zh) * | 2004-07-16 | 2006-01-25 | 三星电子株式会社 | 分支目标缓冲器及其使用方法 |
CN101449238A (zh) * | 2006-06-08 | 2009-06-03 | 国际商业机器公司 | 本地和全局分支预测信息存储 |
CN102968293A (zh) * | 2012-11-28 | 2013-03-13 | 中国人民解放军国防科学技术大学 | 基于指令队列的程序循环代码动态检测及执行方法 |
Also Published As
Publication number | Publication date |
---|---|
CN104123195A (zh) | 2014-10-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI497412B (zh) | 用於使用相依矩陣追蹤解除配置之載入指令之方法、處理器及裝置 | |
US11275590B2 (en) | Device and processing architecture for resolving execution pipeline dependencies without requiring no operation instructions in the instruction memory | |
JP5865920B2 (ja) | データ処理装置のトレース | |
US8074060B2 (en) | Out-of-order execution microprocessor that selectively initiates instruction retirement early | |
US8386753B2 (en) | Completion arbitration for more than two threads based on resource limitations | |
US20120066483A1 (en) | Computing Device with Asynchronous Auxiliary Execution Unit | |
EP1855205A1 (en) | Debug supporting device, and program for causing computer to execute debug processing method | |
US20090106533A1 (en) | Data processing apparatus | |
TW200837559A (en) | Method and system for instruction stuffing operations during non-intrusive digital signal processor debugging | |
CN109690497B (zh) | 用于通过输入参数来区分函数性能的系统和方法 | |
US7493473B2 (en) | Method of executing instructions using first and second control units that share a state register | |
CN104216681B (zh) | 一种cpu指令处理方法和处理器 | |
CN104461468B (zh) | 基于处理器指令快速完成的精确异常维护方法及装置 | |
TW201732566A (zh) | 從亂序處理器中的不良儲存-至-負載轉發復原的方法與設備 | |
CN104123195B (zh) | 一种指令清除方法及装置 | |
CN108182082A (zh) | 一种流水处理双发射处理器记分板电路 | |
EP3767462A1 (en) | Detecting a dynamic control flow re-convergence point for conditional branches in hardware | |
CN103294163A (zh) | 信息处理装置、信息处理系统和节能控制方法 | |
WO2018149495A1 (en) | A method and system to fetch multicore instruction traces from a virtual platform emulator to a performance simulation model | |
US8082423B2 (en) | Generating a flush vector from a first execution unit directly to every other execution unit of a plurality of execution units in order to block all register updates | |
US10248426B2 (en) | Direct register restore mechanism for distributed history buffers | |
JP2020510255A (ja) | キャッシュ・ミス・スレッド・バランシング | |
JPH04503582A (ja) | コンピュータの分散型パイプライン制御装置及び方法 | |
CN101681285B (zh) | 同时处理多个线程的运算装置 | |
US9213547B2 (en) | Processor and method for processing instructions using at least one processing pipeline |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |