一种指令乱序执行方法与流程

文档序号:32952931发布日期:2023-01-14 14:33阅读:52来源:国知局
1.本技术涉及处理器
技术领域
:,尤其是一种指令乱序执行方法。
背景技术
::2.计算机处理器以经典的冯诺依曼架构为基础,其处理器流水线从指令存储器中取得指令,对指令进行译码后、分派到各类执行部件中执行。处理器执行的指令所描述的运算以结构寄存器中的值作为源操作数,其结果存放在目的结构寄存器中,后续的指令可以利用存放在目的结构寄存器中的结果进行后续的计算。将所有的指令按照原始顺序进行顺序的执行,可以自然维护前后指令之间形成的“生产-消费”关系,保证程序执行的正确性,但是这种顺序执行指令的处理器性能较低,已经逐渐不再使用。3.现代的高性能处理器大多采用乱序执行的方法,通过引入计分牌、重排序缓冲等结构设计,在前后指令不存在“生产-消费”关系时,允许后面的指令提前执行,从而在保证程序执行的正确性的基础上提高处理器性能。这其中,tomasulo算法是实现乱序执行的经典算法,其实现过程如下:对于获取到的每一条待分派的指令,将该指令所使用的结构寄存器重新映射到硬件中的物理寄存器,然后将该指令的相关信息记录在指令对应通路的保留站中形成一条保留站条目。保留站条目记录的指令的相关信息包括该指令执行的操作类型、执行所需的源操作数的物理寄存器以及指示该物理寄存器中的内容是否已经就绪的状态标识。对于任意一条指令,当检测到状态标识指示该指令所需的源操作数的物理寄存器中的内容已经就绪,则该将指令分派到对应的执行部件中进行执行,否则继续等待。对于任意一条由执行部件执行完成的指令,在周期结束时会将该指令的执行结果写回到所有保留站中以及相应的结构寄存器中。如果保留站中有指令正在等待该执行结果作为源操作数,则将该执行结果填入相应的保留站条目中,并将状态标识修改为内容已经就绪,以便再发射后续的指令。同时将执行结果写回相应的结构寄存器中,后续的指令如果需要该结构寄存器的值,可以从结构寄存器中直接读取。4.但是利用tomasulo算法实现乱序执行存在以下缺点:需要将指令的执行结果保存到所有保留站中,以便所有源操作数就绪的指令可以直接从保留站分派到执行部件,所以对保留站的存储容量有一定要求,会带来较大的硬件资源开销。而且并不是所有指令的执行结果都会在执行部件的最后一个时钟周期完整得到,对于一些需要数个甚至数百个时钟周期才可以完整得到执行结果的指令,将其执行结果写回保留站的做法更加不可行。技术实现要素:5.本技术人针对上述问题及技术需求,提出了一种指令乱序执行方法,本技术的技术方案如下:一种指令乱序执行方法,该指令乱序执行方法包括:对于依次获取到的每条待分派指令,根据寄存器映射表确定用于存储待分派指令的源操作数的源结构寄存器对应的源物理寄存器,根据物理寄存器状态表确定空闲状态的目标物理寄存器,将用于存储待分派指令的执行结果的目标结构寄存器映射到目标物理寄存器并更新寄存器映射表;将待分派指令的目标物理寄存器、各个源物理寄存器及其数据就绪标识保存在保留站中,并根据待分派指令更新物理寄存器状态表;对于保留站中的待分派指令,将源物理寄存器的数据就绪标识均指示数据就绪的待分派指令分派到对应的执行部件中执行,并根据执行结果更新保留站中其他待分派指令的源物理寄存器的数据就绪标识以及更新物理寄存器状态表;其中,物理寄存器状态表用于记载尚未执行完成的待分派指令对各个物理寄存器中的数据的依赖情况。6.本技术的有益技术效果是:本技术公开了一种指令乱序执行方法,该指令乱序执行方法在保留站中以简单的数据就绪标识记录物理寄存器的数据就绪状态,并结合物理寄存器状态表所记载的尚未完成的待分派指令对物理寄存器中的数据的依赖情况,可以实现准确高效的乱序执行,由于无需将结构寄存器中的数据回写到保留站中,因此对保留站的硬件资源要求较高,减小了硬件开销,而且即便需要多个时钟周期才能得到执行结果也可以适用,该指令乱序执行方法可以以很小的硬件面积实现较高的流水线的执行效率,有利于优化处理器性能。7.而且该指令乱序执行方法可以适用于专用指令集,弥补了专用指令集的乱序执行领域的技术空缺。使得运行专用指令集的协处理器也可以采用乱序执行,不仅可以提升协处理器的运算效率,还可以提高主流水线的乱序执行效率,从而可以大大优化众核处理器的性能,具有重要的实用价值。8.该指令乱序执行方法采用动态的结构寄存器到物理寄存器的映射,并且在待分派指令完成执行后继续保持映射,直到该映射失效,以此解决了传统乱序发射部件中的数据搬运开销,同时该机制允许实现性能优化和面积优化的各类硬件实现配置。9.物理寄存器状态表中记录各个物理寄存器的消费者数量以及过期标识,以此可以高效的实现空闲状态的物理寄存器的回收。且该指令乱序执行方法可以通过配置物理寄存器数量大于结构寄存器数量以进一步优化处理器性能,或者通过配置结构寄存器数量大于物理寄存器数量以进一步节约硬件开销,以根据实际需要更优化其中一方面的性能,适应不同应用场景的使用需要。附图说明10.图1是本技术一个实施例中的指令乱序执行方法的信息流示意图。具体实施方式11.下面结合附图对本技术的具体实施方式做进一步说明。12.本技术公开了一种指令乱序执行方法,该指令乱序执行方法在实现时同样会依次获取各条待分派指令进行调度执行。在一个实施例中,依次获取到的待分派指令包括专用指令集中的指令以及通用指令集中的指令中的至少一种,也即该指令乱序执行方法既可以兼容处理通用指令集中的指令,也可以适用于诸如riscv指令集之类的专用指令集中的指令,都可以提高乱序执行的效率和性能。13.而且在实际应用时,该指令乱序执行方法用于处理专用指令集中的指令的情况是更具有实用意义的。因为对于专用指令集来说,其与通用指令集有较大区别且复杂度更高,比如riscv指令集在标准的运算指令之外还内包含向量指令。另外,专用指令集使用结构寄存器的数据容量往往较大,且通常需要数个甚至数百个时钟周期才可以得到指令的计算结果。这些特点都导致目前诸如tomasulo算法之类的调度机制都无法针对专用指令集,所以该指令乱序执行方法可以弥补目前专用指令集无法实现乱序执行的技术空缺。14.基于专用指令集的这种特殊性,目前对于众核处理器,只能在运行通用指令集的主处理中采用乱序执行,而在运行专用指令集的协处理器中采用顺序执行,这不仅导致协处理器的运算效率低,而且因为协处理器要求指令顺序执行而限制了主流水线的乱序执行效率。因此在采用本技术的指令乱序执行方法实现对专用指令集的乱序执行后,不仅可以提升协处理器的运算效率,还可以提高主流水线的乱序执行效率,从而可以大大优化众核处理器的性能。15.请结合图1的流程示意图,该指令乱序执行方法包括如下过程:获取到的每条待分派指令用于指示对一个或多个结构寄存器(archreg)中的源操作数执行相应的操作得到执行结果后存入所需的结构寄存器中,为了区分说明,本技术将用于存储待分派指令的源操作数的结构寄存器称为该待分派指令的源结构寄存器ar_s,将用于存储待分派指令的执行结果的结构寄存器称为该待分派指令的目标结构寄存器ar_t。一条待分派指令可以有一个或多个源结构寄存器ar_s、一般只有一个目标结构寄存器ar_t。16.比如获取到的待分派指令1为“addv0,v2,v3”,该待分派指令表示对结构寄存器v2中的源操作数和结构寄存器v3中的源操作数执行加法操作得到执行结构并存入结构寄存器v0中。则结构寄存器v2和结构寄存器v3都属于该待分派指令的源结构寄存器,结构寄存器v0属于该待分派指令的目标结构寄存器。17.每个结构寄存器一般以结构寄存器编号来表示,每个结构寄存器编号可以唯一标识一个结构寄存器,上述举例中的v0、v2、v3即为结构寄存器编号。结构寄存器编号相同的结构寄存器相同,结构寄存器编号不同的结构寄存器不同。一条待分派指令的目标结构寄存器可以与其中一个源结构寄存器相同,也可以不同。同一个结构寄存器可以用于存储一条或多条待分派指令的相关数据,且既可以作为源结构寄存器也可以作为目标结构寄存器。比如获取到的另一条待分派指令2为“addv1,v0,v2”,则结构寄存器v2既属于待分派指令1的源结构寄存器也属于待分派指令2的源结构寄存器,而结构寄存器v0既属于待分派指令1的目标结构寄存器也属于待分派指令2的源结构寄存器。18.本技术的指令乱序执行方法在正常执行时,始终使用物理寄存器进行运算和数据传递,因此对于获取到的每一条待分派指令,首先确定该待分派指令的源物理寄存器pr_s和目标物理寄存器pr_t:(1)确定待分派指令的源物理寄存器pr_s的方法包括:根据寄存器映射表(archregmappingtable)确定该待分派指令的源结构寄存器ar_s对应的源物理寄存器pr_s,确定得到的源物理寄存器pr_s与源结构寄存器ar_s是一一映射的关系,因此当待分派指令包括多个源结构寄存器ar_s时,该步骤分别确定得到多个源物理寄存器pr_s。19.寄存器映射表(archregmappingtable)中记载了存在映射关系的结构寄存器与物理寄存器之间的对应关系,与结构寄存器类似,物理寄存器也通常以物理寄存器编号来表示,每个物理寄存器编号可以唯一标识一个物理寄存器,比如在一个实例中,维护的寄存器映射表的形式和部分内容如下,p37、p38、p2、p3均为物理寄存器编号。20.当发生异常等特殊行为时,可以通过外部逻辑根据寄存器映射表读出各个结构寄存器的现场值。21.(2)确定待分派指令的目标物理寄存器pr_t的方法包括:根据物理寄存器状态表(phyregmappingtable)确定空闲状态的物理寄存器(phyreg)作为该待分派指令的目标物理寄存器pr_t。22.物理寄存器状态表用于记载该指令乱序执行方法使用到的所有物理寄存器的状态信息,比如在一个实例中,该指令乱序执行方法一共使用到40个物理寄存器,则物理寄存器状态表分别记载物理寄存器编号p0~p39的共40个物理寄存器的状态信息。物理寄存器状态表记载的每个物理寄存器的状态信息用于指示尚未执行完成的待分派指令对该物理寄存器中的数据的依赖情况,以及用于指示该物理寄存器是否处于空闲状态,还可以根据实际需要指示物理寄存器的其他信息。23.在一个实施例中,物理寄存器状态表记载的每个物理寄存器的状态信息包括物理寄存器的消费者数量(consumer),消费者数量是保留站的所有待分派指令中依赖该物理寄存器中的数据作为源操作数的待分派指令的数量,从而通过消费者数量可以确定尚未执行完成的待分派指令对该物理寄存器中的数据的依赖情况。当消费者数量为0时,表示保留站中没有待分派指令依赖该物理寄存器中的数据;当消费者数量为1时,表示保留站中有一条待分派指令依赖该物理寄存器中的数据,其他情况依次类推。24.在另一个实施例中,物理寄存器状态表记载的每个物理寄存器的状态信息还包括该物理寄存器的过期标识(expired)。对于任意一个物理寄存器,当寄存器映射表中不存在该物理寄存器的映射关系时,也即该物理寄存器目前未与任意结构寄存器建立映射关系时,该物理寄存器的过期标识指示过期失效。当寄存器映射表中存在物理寄存器的映射关系时,该物理寄存器的过期标识指示未过期失效,表示该物理寄存器目前与结构寄存器建立有映射关系。25.在另一个实施例中,物理寄存器状态表记载的每个物理寄存器的状态信息还包括该物理寄存器的有效位标识(valid)。对于任意一个物理寄存器,当该物理寄存器中存在有效的数据内容时,该物理寄存器的有效位标识指示该物理寄存器数据就绪。当该物理寄存器中的数据未就绪时,比如正在被之前的某条执行的指令装填时,该物理寄存器的有效位标识指示内容无效。26.基于上述各个实施例的介绍,在一个实例中,维护的物理寄存器状态表的形式和部分内容如下,其中过期标识以y表示过期失效、以n表示未过期失效,有效位标识以y表示数据就绪、以n表示数据未就绪。27.在上述举例中,比如对于物理寄存器p37,即表示保留站中没有待分派指令依赖该物理寄存器p37中的数据,同时该物理寄存器p37中未过期失效且存在有效的数据内容。28.每个物理寄存器的过期标识和消费者数量共同指示该物理寄存器是否处于空闲状态,因此根据物理寄存器状态表中各个物理寄存器的过期标识和消费者数量来确定空闲状态的物理寄存器作为待分派指令的目标物理寄存器。29.在一个实施例中,确定过期标识指示过期失效且消费者数量为0的物理寄存器处于空闲状态,选择其中一个处于空闲状态的物理寄存器作为待分派指令的目标物理寄存器pr_t。在该实施例中,可以随机选取一个处于空闲状态的物理寄存器作为目标物理寄存器pr_t,或者自定义选取的方式。比如在上述实例中,物理寄存器p36的过期标识为y过期失效且消费者数量为0,因此处于空闲状态,可以选择物理寄存器p36作为待分派指令的目标物理寄存器pr_t。30.在另一个实施例中,为了进一步提高运算效率,处理器还维护有空闲物理寄存器表(freephyregtable),该空闲物理寄存器表中记载所有处于空闲状态的物理寄存器,按照处于空闲状态的先后顺序依次将处于空闲状态的物理寄存器写入该空闲物理寄存器表中,则直接从该空闲物理寄存器表中就能选取处于空闲状态的物理寄存器作为待分派指令的目标物理寄存器pr_t,而无需每次都查询物理寄存器状态表。一种做法是,可以从空闲物理寄存器表中随机选择一个物理寄存器作为待分派指令的目标物理寄存器pr_t。或者另一种做法是,按照先入先出的原则从空闲物理寄存器表中选择物理寄存器作为待分派指令的目标物理寄存器,这样在硬件实现上会比较简单,资源开销更小。31.在本技术中,各个物理寄存器的状态信息是动态变化的,物理寄存器状态表是动态更新的,相应的,空闲物理寄存器表中的内容也是动态更新的:在更新物理寄存器状态表的过程中,当确定有新的物理寄存器变为空闲状态时,将更新达到过期标识指示过期失效且消费者数量为0的空闲状态的物理寄存器依次写入空闲物理寄存器表中。当一个物理寄存器被作为待分派指令的目标物理寄存器后,该物理寄存器即从空闲物理寄存器表中删除。32.比如在一个实例中,维护的空闲物理寄存器表的形式和部分内容如下,物理寄存器p36首先处于空闲状态并写入该空闲物理寄存器表,然后物理寄存器p35处于空闲状态并写入该空闲物理寄存器表。则对于获取到的一条待分派指令,查询此时的空闲物理寄存器表如下表所示,则选择物理寄存器p36作为其目标物理寄存器pr_t,然后将物理寄存器p36从空闲物理寄存器表删除。当获取到下一条待分派指令时,会依次选择下一个也即物理寄存器p35作为目标物理寄存器pr_t,依次类推。另外结合上述举例的物理寄存器状态表,物理寄存器p39过期失效,则当物理寄存器状态表的动态更新过程中,当物理寄存器p39的消费者数量动态更新变为0时,物理寄存器p39也达到过期标识指示过期失效且消费者数量为0的状态、也即达到空闲状态,则将物理寄存器p39写入空闲物理寄存器表中。33.当确定得到待分派指令的目标物理寄存器pr_t后,将待分派指令的目标结构寄存器ar_t映射到确定得到的该目标物理寄存器pr_t并更新寄存器映射表,也即将目标结构寄存器ar_t和目标物理寄存器pr_t的对应关系更新记载到寄存器映射表中,因此本技术中的寄存器映射表记载的映射关系也不是固定不变的,而是动态维护更新的。34.如上所述,物理寄存器状态表记载有各个物理寄存器的过期标识,则该步骤除了需要更新寄存器映射表之外,还需要更新物理寄存器状态表中相应的物理寄存器的过期标识。在将目标结构寄存器ar_t和目标物理寄存器pr_t的对应关系更新记载到寄存器映射表中时,包含两种情况:情况一、寄存器映射表中未记载该目标结构寄存器ar_t与其他的物理寄存器之间的映射关系。在这种情况中直接将目标结构寄存器ar_t与目标物理寄存器pr_t的映射关系添加更新到寄存器映射表中,并将物理寄存器状态表中记载的该目标物理寄存器pr_t的过期标识更新为未过期失效。35.情况二、寄存器映射表中已经记载目标结构寄存器ar_t与历史物理寄存器pr_old之间的映射关系。在这种情况中,将目标结构寄存器ar_t与历史物理寄存器pr_old之间的映射关系替换更新为目标结构寄存器ar_t与目标物理寄存器pr_t之间的映射关系。并将物理寄存器状态表中记载的历史物理寄存器pr_old的过期标识更新为过期失效、将目标物理寄存器pr_t的过期标识更新为未过期失效。36.比如在一个实例中,在获取到待分派指令1为“addv0,v2,v3”后,确定待分派指令1的目标物理寄存器pr_t为物理寄存器p39,将结构寄存器v0与物理寄存器p39之间的映射关系添加更新到寄存器映射表中。在后续接收到待分派指令3为“mulv0,v2,v3”后,确定待分派指令3的目标物理寄存器pr_t为物理寄存器p37,由于寄存器映射表中已经存在结构寄存器v0与物理寄存器p39之间的映射关系,此时物理寄存器p39即为历史物理寄存器pr_old,则在理寄存器状态表中将物理寄存器p39的过期标识更新为过期失效y、将物理寄存器p37的过期标识更新为未过期失效n,如上述举例的物理寄存器状态表中的内容所示。并将结构寄存器v0与物理寄存器p37之间的映射关系替换更新到寄存器映射表中作为最新的映射关系。37.在确定待分派指令的源物理寄存器pr_s和目标物理寄存器pr_t后,将该待分派指令的目标物理寄存器、各个源物理寄存器及其数据就绪标识保存在保留站中。在另一个实施例中,保留站中还保存每条待分派指令的指令内容。在另一个实施例中,保留站中还记载每条待分派指令的执行状态,执行状态用于指示待分派指令正在执行或未在执行。38.比如在一个实例中,以每条待分派指令均对应两个源物理寄存器为例,数据就绪标识1是源物理寄存器1的数据就绪标识,数据就绪标识2是源物理寄存器2的数据就绪标识。假设数据就绪标识为y表示数据就绪、数据就绪标识为n表示数据未就绪,执行状态为y表示正在执行、执行状态为n表示未在执行,则保留站保存的部分内容如下表所示:如上所述,物理寄存器状态表记载保留站中的尚未执行完成的待分派指令对各个物理寄存器中的数据的依赖情况,因此除了将获取到的待分派指令保存在保留站中之外,还根据待分派指令更新物理寄存器状态表。则基于上述记载的物理寄存器状态表的形式,该步骤也即更新物理寄存器状态表记载的相应的物理寄存器的消费者数量。在根据获取到的每条待分派指令更新物理寄存器状态表时,增加该待分派指令的源物理寄存器的消费者数量。比如在上述举例中,对于获取到的待分派指令1“addv0,v2,v3”,在物理寄存器状态表中将作为其源物理寄存器的物理寄存器p2和p3的消费者数量分别加1。39.按照本技术上述实施例介绍的指令乱序执行方法可以依次将获取的各条待分派指令保存在保留站中,并不断更新维护各个数据表。对于已经保存在保留站中的待分派指令,将源物理寄存器的数据就绪标识均指示数据就绪的待分派指令分派到对应的执行部件中执行,还存在源物理寄存器的数据就绪标识指示数据未就绪的待分派指令继续在保留站中等待。40.比如基于上述举例的保留站的内容,待分派指令1“addv0,v2,v3”的两个源物理寄存器的数据就绪标识均指示数据就绪。待分派指令3“mulv0,v2,v3”的两个源物理寄存器的数据就绪标识也均指示数据就绪。而待分派指令2“addv1,v0,v2”的源物理寄存器1的数据就绪标识1指示物理寄存器p39的数据未就绪。则将待分派指令1和待分派指令3均发射到对应的执行部件中执行,而待分派指令2继续等待。41.对于任意一条发射到执行部件中完成执行并得到执行结果的待分派指令,根据该待分派指令的执行结果更新保留站中其他待分派指令的源物理寄存器的数据就绪标识。在更新保留站中其他待分派指令的源物理寄存器的数据就绪标识时:对于保留站中与执行完成的待分派指令的目标物理寄存器属于同一个物理寄存器的源物理寄存器,将该源物理寄存器对应的数据就绪标识更新为指示数据就绪。比如基于上述举例的保留站的内容,待分派指令1的目标物理寄存器为物理寄存器p39,待分派指令2的源物理寄存器1为物理寄存器p39,两者属于同一个物理寄存器。则在执行完成待分派指令1得到其执行结果后,将待分派指令2的源物理寄存器1的数据就绪标识1更新为指示数据就绪。则更新完成后,待分派指令2的所有源物理寄存器的数据就绪标识均指示数据就绪,也可以分派到对应的执行部件中执行。42.如上所述,物理寄存器状态表记载各个物理寄存器的状态信息,尤其是记载保留站中的待分派指令对各个物理寄存器的依赖情况,而保留站中的待分派指令在分派到执行部件去执行后,该待分派指令一般就从保留站中删除了。因此除了需要根据执行完成的待分派指令的执行结果更新保留站中其他待分派指令的源物理寄存器的数据就绪标识之外,还根据执行完成的待分派指令的执行结果更新物理寄存器状态表所记载的对各个物理寄存器的数据的依赖情况。基于上述实施例记载的物理寄存器状态表的格式,即更新物理寄存器状态表记载的相应的物理寄存器的消费者数量:在根据每条待分派指令的执行结果更新物理寄存器状态表时,减少完成执行的每条待分派指令的源物理寄存器的消费者数量。43.比如基于上述举例的保留站的内容,待分派指令1在执行完成后,将物理寄存器状态表记载的作为其源物理寄存器的物理寄存器p2和物理寄存器p3的消费者数量分别减1,则执行完成待分派指令1后,上述示出的物理寄存器状态表中物理寄存器p2和物理寄存器p3的消费者数量均由目前示出的2更新变为1。44.本技术的指令乱序执行方法采用动态的结构寄存器到物理寄存器的映射,该指令乱序执行方法使用到的结构寄存器的总数超过或不超过使用到的物理寄存器的总数都可以。当使用到的结构寄存器的总数不超过物理寄存器的总数时,可以进一步提高处理器的性能。而当使用到的结构寄存器的总数超过物理寄存器的总数时,可以进一步节约硬件开销。由此该指令乱序执行方法的灵活性也较高,可以根据实际需要配置结构寄存器和物理寄存器的数量,以根据实际需要更优化其中一方面的性能,适应不同应用场景的使用需要。45.以上所述的仅是本技术的优选实施方式,本技术不限于以上实施例。可以理解,本领域技术人员在不脱离本技术的精神和构思的前提下直接导出或联想到的其他改进和变化,均应认为包含在本技术的保护范围之内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1