一种分支预测方法及相关装置制造方法

文档序号:6508536阅读:165来源:国知局
一种分支预测方法及相关装置制造方法
【专利摘要】本发明实施例公开了一种分支预测方法及相关装置,应用于处理器中,上述处理器包括:存储寄存器标识与预测目标跳转地址的一一对应关系信息的第一BTAC,和存储程序计数器的字段与预测目标跳转地址的一一对应关系信息的第二BTAC,其中,一种分支预测方法包括:从指令缓存中读取指令;若确定该指令满足寄存器预测条件,则:根据该指令的寄存器标识,从第一BTAC中获取该指令的预测目标跳转地址;若确定该指令不满足寄存器预测条件,则根据该指令的程序计数器,从第二BTAC中获取该指令的预测目标跳转地址,本发明提供的技术方案能够有效解决在共享BTAC时影响分支预测的准确率的问题。
【专利说明】一种分支预测方法及相关装置

【技术领域】
[0001]本发明涉及计算机系统领域,尤其涉及一种分支预测方法及相关装置。

【背景技术】
[0002]目前的处理器多采用流水线的结构,使得顺序执行的指令流可以并行地执行。这种处理指令的方式在很大程度上提高了处理器的执行效率。在理想情况下,流水线的每个Stage (即流水线层)仅占用一个时钟周期,所以每个时钟周期都可以完成一条指令。但是实际情况并非如此理想,因为指令之间可能存在着相互的依赖关系从而影响指令执行的并行度。比如数据依赖、控制依赖(比如分支指令)、资源竞争、中断等等因素,都会影响指令的并行度。
[0003]实际程序中包括分支指令,分支指令的分支行为往往到等到流水线的后端才能确定,因此,分支指令可能产生控制冒险从而导致流水线停顿,同时,处理器也不能确定从哪个地址开始取下一条指令直到这条分支指令执行完为止。大部分的处理器都采用了不同形式的分支预测机制,让条件分支指令的目标跳转方向和目标跳转地址可以在流水线的前端被预测,使得处理器可以预测性地取指令并执行指令。如果分支预测正确或者正确率较高的话,可以大幅提高处理器的性能和功耗,如果分支预测错误的话,意味着预测取出的指令不能被执行,错误的指令需要从缓冲区中清除,然后从正确的地址处再重新取指令并执行。
[0004]分支目标地址缓存(BTAC, Branch Target Address Cache)用于对间接跳转分支指令的目标跳转地址进行预测。BTAC采用缓存的结构,以指令的程序计数器(PC,ProgramCounter)的一部分作为index (即索引),一部分作为tag (即标签),如以PC的低8位作为index,以PC的高8位作为tag。BTAC的每个Entry (即表项)对应于一个index和一个tag,并且,BTAC的每个Entry都设置一个有效位,用于记录这个Entry是否存放了有效的历史信息(历史信息即为预测的目标跳转地址),其中,Entry存放的目标跳转地址是虚拟地址(VA, Virtual Address)。如果BTAC满了,像Cache—样,也需要根据一定的替换算法决定哪个最近最少使用的Entry中存放的内容可以被替换掉。
[0005]在多线程处理器中,对BTAC的设置有两种方式:
[0006]一种是共享的BTAC,多个线程共享同一块BTAC,每个线程各自用自己的PC去索引BTAC当中存放的内容。这种方式虽然节约了面积,但是由于BTAC的索引地址是每个线程的PC,而不同线程的PC有可能一样,因此,不同线程之间的历史信息存放在同一块BTAC中,将影响分支预测的准确率;
[0007]另一种是独享的BTAC,每个线程各自设置一块BTAC,BTAC为相应的线程提供预测分支目标跳转地址的服务。这种方式虽然相比共享的方法在一定程度上提高了预测准确率,但是极大浪费了硬件资源和面积。
[0008]无论是共享的BTAC还是独享的BTAC,它们有一个共同的特点:只要BTAC不满,就以分支指令的PC作为索引记录所有和分支指令相关的历史信息。但是在实际的程序中,存在如下情况的几率很大:多个不同的分支指令跳转到同样的目标地址,比如类似C++中“Printf”这种标准的库函数,由经过编译之后得到的汇编指令可以看出,不同的分支指令总是跳转到相同的目标地址。那么使用传统的BTAC结构,这些不同的分支指令虽然跳转到同一个目标地址,但是仍将占用BTAC当中的多个Entry来记录其相关历史信息。
[0009]由上可见,在多线程处理器当中,BTAC的资源共享、分支预测的准确率之间的矛盾极为关出。


【发明内容】

[0010]本发明各个方面提供了一种分支预测方法及相关装置,用于解决在共享BTAC时影响分支预测的准确率的问题。
[0011]为解决上述技术问题,提供以下技术方案:
[0012]本发明第一方面提供了一种分支预测方法,应用于处理器中,上述处理器包括:第一分支目标地址预测缓存器和第二分支目标地址预测缓存器,上述第一分支目标地址预测缓存器存储着:寄存器标识与预测目标跳转地址的一一对应关系信息,上述第二分支目标地址预测缓存器存储着:程序计数器的字段与预测目标跳转地址的一一对应关系信息,其中,上述分支预测方法,包括:从指令缓存中读取指令;
[0013]若确定读取的上述指令满足寄存器预测条件,则:
[0014]根据读取的上述指令的寄存器标识,从上述第一分支目标地址预测缓存器中获取读取的上述指令的预测目标跳转地址;
[0015]若确定读取的上述指令不满足上述寄存器预测条件,则:
[0016]则根据读取的上述指令的程序计数器,从上述第二分支目标地址预测缓存器中获取读取的上述指令的预测目标跳转地址;
[0017]其中,上述寄存器预测条件包括:指令的类型为无条件间接跳转分支指令。
[0018]基于第一方面,在第一种可能的实现方式中,上述寄存器预测条件还包括:指令中的寄存器标识为特定的寄存器标识;
[0019]上述确定读取的上述指令满足寄存器预测条件,具体为:
[0020]当上述指令的类型为无条件间接跳转分支指令,且上述指令中的寄存器标识为特定的寄存器标识时,确定读取的上述指令满足寄存器预测条件;
[0021]上述确定读取的上述指令不满足上述寄存器预测条件,具体为:
[0022]当上述指令的类型不为无条件间接跳转分支指令,或者,上述指令中的寄存器标识不为特定的寄存器标识时,确定读取的上述指令不满足寄存器预测条件。
[0023]基于第一方面,或者第一方面的第一种可能的实现方式,在第二种可能的实现方式中,上述从上述指令缓存中读取指令之前包括:
[0024]对待读取的指令进行预译码,得到上述待读取的指令的类型信息;
[0025]上述读取指令之后包括:根据上述得到的指令的类型信息,判定当前读取的指令的类型是否为无条件间接跳转分支指令。
[0026]基于第一方面,或者第一方面的第一种可能的实现方式,或者第一方面的第二种可能的实现方式,在第三种可能的实现方式中,在上述读取指令之前,若对高级语言进行编译时调用的函数为标准库函数,则,将编译后的指令的类型指定为无条件间接跳转分支指令。
[0027]本发明第二方面提供了一种分支预测装置,应用于处理器中,上述处理器包括:第一分支目标地址预测缓存器和第二分支目标地址预测缓存器,上述第一分支目标地址预测缓存器存储着:寄存器标识与预测目标跳转地址的一一对应关系信息,上述第二分支目标地址预测缓存器存储着:程序计数器的部分字段与预测目标跳转地址的一一对应关系信息,或者,程序计数器的全部字段与预测目标跳转地址的一一对应关系信息,其中,上述分支预测装置,包括:
[0028]读取单元,用于从指令缓存中读取指令;
[0029]预测获取单元,用于当确定上述读取单元读取的指令满足寄存器预测条件时,根据上述读取单元读取的上述指令的寄存器标识,从上述第一分支目标地址预测缓存器中获取上述读取单元读取的上述指令的预测目标跳转地址;当确定上述读取单元读取的指令不满足上述寄存器预测条件时,根据上述读取单元读取的上述指令的程序计数器,从上述第二分支目标地址预测缓存器中获取上述读取单元读取的上述指令的预测目标跳转地址;
[0030]其中,上述寄存器预测条件包括:指令的类型为无条件间接跳转分支指令。
[0031]基于本发明第二方面,在第一种可能的实现方式中,上述寄存器预测条件还包括:指令中的寄存器标识为特定的寄存器标识;
[0032]上述分支预测装置还包括:
[0033]确定单元,用于当上述读取单元读取的指令的类型为无条件间接跳转分支指令,且上述读取单元读取的指令中的寄存器标识为特定的寄存器标识时,确定上述读取单元读取的指令满足寄存器预测条件;当上述读取单元读取的指令的类型不为无条件间接跳转分支指令,或者,上述读取单元读取的指令中的寄存器标识不为特定的寄存器标识时,确定读取的上述指令不满足寄存器预测条件。
[0034]基于本发明第二方面,或者本发明第二方面的第一种可能的实现方式,在第二种可能的实现方式中,上述分支预测装置还包括:
[0035]预译码单元,用于对上述读取单元待读取的指令进行预译码,得到上述读取单元待读取的指令的类型信息;
[0036]判定单元,用于在上述读取单元读取上述指令后,根据上述预译码单元得到的指令的类型信息,判定上述读取单元当前读取的指令的类型是否为无条件间接跳转分支指令。
[0037]基于本发明第二方面,或者本发明第二方面的第一种可能的实现方式,在第三种可能的实现方式中,上述分支预测装置还包括:
[0038]编译单元,用于对高级语言进行编译;
[0039]指定单元,用于当上述编译单元对高级语言进行编译时调用的函数为标准库函数时,将编译后的指令的类型指定为无条件间接跳转分支指令。
[0040]由上可见,本发明实施例中设置第一 BTAC和第二 BTAC,第一 BTAC中使用寄存器标识作为索引(即在第一 BTAC中存储寄存器标识与预测目标跳转地址的一一对应关系信息),第二 BTAC中使用PC作为索引(即在第二 BTAC中存储程序计数器的部分字段与预测目标跳转地址的一一对应关系信息),当读取的指令满足寄存器预测条件时,使用第一BTAC进行分支预测,否则,使用第二 BTAC进行分支预测。由于寄存器标识相同的无条件间接跳转分支指令的目标跳转地址必然相同,因此,即使将目标跳转地址相同的多个无条件间接跳转分支指令的历史信息存储在第一 BTAC的同一个Entry中,也不会影响分支预测的准确率,换言之,本发明提供的技术方案能够在共享第一 BTAC时不对分支预测的准确率产生影响,从而使得在保证分支预测的准确率的前提下实现BTAC的资源共享成为可能。

【专利附图】

【附图说明】
[0041]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0042]图1为本发明提供的一种分支预测方法一个实施例流程示意图;
[0043]图2为本发明提供的一种分支预测方法另一个实施例流程示意图;
[0044]图3为本发明提供的一种分支预测方法再一个实施例流程示意图;
[0045]图4为本发明提供的一种分支预测装置一个实施例结构示意图;
[0046]图5为本发明提供的一种分支预测装置另一个实施例结构示意图。

【具体实施方式】
[0047]本发明实施例提供了一种分支预测方法及相关装置。
[0048]为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而非全部实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的各个其他实施例,都属于本发明保护的范围。
[0049]下面对本发明实施例提供的一种分支预测方法进行描述,本发明实施例中的分支预测方法应用于处理器中,上述处理器包括:第一 BTAC和第二 BTAC,上述第一 BTAC存储着:寄存器标识与预测目标跳转地址的一一对应关系信息,上述第二 BTAC存储着:PC的字段与预测目标跳转地址的一一对应关系信息,可选地,在上述第二 BTAC中存储PC的部分字段与预测目标跳转地址的一一对应关系信息,或者,在上述第二 BTAC中存储PC的全部字段与预测目标跳转地址的一一对应关系信息。请参阅图1,本发明实施例中的分支预测方法,包括:
[0050]101、从指令缓存中读取指令;
[0051]在本发明实施例中,步骤101读取的指令有可能为分支指令,也有可能为非分支指令。通常,分支指令可以有如下两种划分方式:一种是针对跳转条件,将分支指令的类型划分为条件分支指令和无条件分支指令,其中,条件分支指令在满足一定条件时才执行分支跳转,无条件分支指令则不需要满足任何条件,总是执行分支跳转;另一种是针对目标跳转地址,将分支指令的类型划分为直接跳转分支指令和间接跳转分支指令,其中,直接跳转分支指示的目标跳转地址的偏移量直接在指令当中用立即数(即,在立即寻址方式指令中给出的数)指定,目标跳转地址就是用分支指令本身的PC加上立即数的偏移量计算得到,而间接跳转分支指令的目标跳转地址是在寄存器当中指定的。
[0052]一条指令在从二级缓存或者内存取到指令缓存之前,需要对指令进行预译码,以便将指令的部分预译码结果作为分支预测的指导。比如,当分支指令在从二级缓存或者内存取到指令缓存之前,需要通过预译码阶段识别出该分支指令的类型(如是否为条件分支指令、是否为间接跳转分支指令等),以便根据分支指令的类型执行相应地分支预测。在预译码之后,预译码结果(如指令的类型信息)和指令会被一同保存在指令缓存中。需要说明的是,上述对指令的预译码操作可以由分支预测装置执行,或者,也可以由其它装置执行,此处不作限定。
[0053]其中,上述寄存器预测条件包括:指令的类型为无条件间接跳转分支指令。
[0054]102、当读取的指令满足寄存器预测条件时,根据上述读取的指令中的寄存器标识,从第一 BTAC中获取上述读取的指令的预测目标跳转地址。
[0055]103、当读取的指令不满足寄存器预测条件时,根据上述读取的指令中的程序计数器,从第二 BTAC中获取上述读取的指令的预测目标跳转地址。
[0056]本发明实施例在处理器中设置第一 BTAC,为便于描述,下面将第一 BTAC描述为SBTAC,将第二 BTAC简称为BTAC。SBTAC的硬件构造与BTAC相类似,不同的是,BTAC是以PC的一部分字段或者全部字段作为索引,而SBTAC是以寄存器标识作为索引。由于SBTAC中存储着寄存器标识与预测目标跳转地址的一一对应关系信息,因此,分支预测装置能够根据上述指令中的寄存器标识,从SBTAC中找到与该寄存器标识相对应的预测目标跳转地址。
[0057]在一种应用场景中,在步骤101之前,若对高级语言进行编译时调用的函数为标准库函数,则,分支预测装置将编译后的指令的类型指定为无条件间接跳转分支指令,如将编译后的指令的类型指定为分支与链接寄存器(BLR, Branch and Link Register)指令,BLR指令为一条无条件间接跳转分支指令,它为一个子程序调用或者函数调用引起且一定会返回,返回的地址存放在Link Register (即链接寄存器)中。需要说明的是,本发明实施例中的高级语言主要是相对于汇编语言而言,它是较接近自然语言和数学公式的编程,基本脱离了机器的硬件系统,用人们更易理解的方式编写程序。本发明实施例中的高级语言并不特指某一种具体的语言,可以包括很多编程语言,如java, c, c++, C#,pascal, python,lisp, prolog, FoxPro, VC,易语言等等,本发明实施例中的标准库函数是指由一些按照高级语言标准预先编写的基本函数组成的库。
[0058]需要说明的是,本发明实施例中的寄存器标识可以为寄存器号,或者,寄存器标识也可以是其它能够用于指示寄存器的代码或者符号等,本发明实施例中的分支预测方法可以应用于多线程处理器中,也可以应用于单线程处理器中,此处不作限定。
[0059]由上可见,本发明实施例中设置第一 BTAC和第二 BTAC,第一 BTAC中使用寄存器标识作为索引(即在第一 BTAC中存储寄存器标识与预测目标跳转地址的一一对应关系信息),第二 BTAC中使用PC作为索引(即在第二 BTAC中存储程序计数器的部分字段与预测目标跳转地址的一一对应关系信息),当读取的指令满足寄存器预测条件时,使用第一BTAC进行分支预测,否则,使用第二 BTAC进行分支预测。由于寄存器标识相同的无条件间接跳转分支指令的目标跳转地址必然相同,因此,目标跳转地址相同的多个无条件间接跳转分支指令的历史信息能够存储在第一 BTAC的同一个Entry而不影响分支预测的准确率,从而能够在保证分支预测的准确率的前提下实现BTAC的资源共享。
[0060]上述实施例中使用全部寄存器的寄存器标识作为SBTAC中的预测目标跳转地址的索引,本发明实施例也可以只使用部分寄存器的寄存器标识作为SBTAC中的预测目标跳转地址的索引,则上述寄存器预测条件还包括:指令中的寄存器标识为特定的寄存器标识,在当读取的指令的类型为无条件间接跳转分支指令,且读取指令中的寄存器标识为特定的寄存器标识时,确定读取的指令满足寄存器预测条件,当读取的指令的类型不为无条件间接跳转分支指令,或者,读取的指令中的寄存器标识不为特定的寄存器标识时,确定读取的指令不满足寄存器预测条件。如图2所示,本发明实施例中的分支预测方法,包括:
[0061]201、从指令缓存中读取指令;
[0062]一条指令在从二级缓存或者内存取到指令缓存之前,需要对指令进行预译码,以便将指令的部分预译码结果作为分支预测的指导。比如,当分支指令在从二级缓存或者内存取到指令缓存之前,需要通过预译码阶段识别出该分支指令的类型(如是否为条件分支指令、是否为间接跳转分支指令等),以便根据分支指令的类型执行相应地分支预测。在预译码之后,预译码结果和指令会被一同保存在指令缓存中。需要说明的是,上述对指令的预译码操作可以由分支预测装置执行,或者,也可以由其它装置执行,此处不作限定。
[0063]202、当读取的指令的类型为无条件间接跳转分支指令时,判断上述读取的指令中的寄存器标识是否为特定的寄存器标识;
[0064]若分支预测装置判断出上述读取的指令中的寄存器标识为特定的寄存器标识,则执行步骤203,若分支预测装置判断出上述读取的指令中的寄存器标识不为特定的寄存器标识,则执行步骤204。
[0065]203、根据上述读取的指令中的寄存器标识,从第一 BTAC中获取上述读取的指令的预测目标跳转地址;
[0066]其中,上述第一 BTAC中存储着:寄存器标识与预测目标跳转地址的一一对应关系信息。
[0067]204、当读取的指令的类型不为无条件间接跳转分支指令时,根据上述读取的指令中的程序计数器,从第二 BTAC中获取上述读取的指令的预测目标跳转地址。
[0068]在一种应用场景中,在步骤201之前,若对高级语言进行编译时调用的函数为标准库函数,则,分支预测装置将编译后的指令的类型指定为无条件间接跳转分支指令,如将编译后的指令的类型指定为BLR指令。BLR指令为一条无条件间接跳转分支指令,它为一个子程序调用或者函数调用引起且一定会返回,返回的地址存放在Link Register (即链接寄存器)中。需要说明的是,本发明实施例中的高级语言主要是相对于汇编语言而言,它是较接近自然语言和数学公式的编程,基本脱离了机器的硬件系统,用人们更易理解的方式编写程序。本发明实施例中的高级语言并不特指某一种具体的语言,可以包括很多编程语言,如 java, c, c++, C#, pascal, python, lisp, prolog, FoxPro, VC,易语言等等,本发明实施例中的标准库函数是指由一些按照高级语言标准预先编写的基本函数组成的库。
[0069]需要说明的是,本发明实施例中的寄存器标识可以为寄存器号,或者,寄存器标识也可以是其它能够用于指示寄存器的代码或者符号等,本发明实施例中的分支预测方法可以应用于多线程处理器中,也可以应用于单线程处理器中,此处不作限定。
[0070]由上可见,本发明实施例中设置第一 BTAC和第二 BTAC,第一 BTAC中使用寄存器标识作为索引(即在第一 BTAC中存储寄存器标识与预测目标跳转地址的一一对应关系信息),第二 BTAC中使用PC作为索引(即在第二 BTAC中存储程序计数器的部分字段与预测目标跳转地址的一一对应关系信息),当读取的指令满足寄存器预测条件时,使用第一BTAC进行分支预测,否则,使用第二 BTAC进行分支预测。由于寄存器标识相同的无条件间接跳转分支指令的目标跳转地址必然相同,因此,即使将目标跳转地址相同的多个无条件间接跳转分支指令的历史信息存储在第一 BTAC的同一个Entry中,也不会影响分支预测的准确率,换言之,本发明提供的技术方案能够在共享第一 BTAC时不对分支预测的准确率产生影响,从而使得在保证分支预测的准确率的前提下实现BTAC的资源共享成为可能。
[0071]对于标准库函数下的分支指令,分支指令的目标跳转地址通常不会改变,因此,为了保证SBTAC的内容不会因为软件进程的切换而出现更新或者无效的操作,本发明实施例中对标准库函数下的分支指令使用SBTAC进行分支预测,如图3所示,本发明实施例中的分支预测方法,包括:
[0072]301、对闻级语目进打编译。
[0073]302、判断是否调用标准库函数;
[0074]在编译过程中可以确定是否调用标准库函数,若没有调用标准库函数,则执行步骤303,若调用了标准库函数,则执行步骤304。
[0075]303、将编译后的指令的类型指定为其它指令存储在二级缓存或者内存中。
[0076]304、将编译后的指令的类型指定为BLR指令存储在二级缓存或者内存中。
[0077]步骤305?308与图2所示实施例中的步骤201?204类似,其具体实现方式可以参照相应步骤中的描述,此处不再赘述。
[0078]需要说明的是,本发明实施例中的寄存器标识可以为寄存器号,或者,寄存器标识也可以是其它能够用于指示寄存器的代码或者符号等,本发明实施例中的分支预测方法可以应用于多线程处理器中,也可以应用于单线程处理器中,此处不作限定。
[0079]由上可见,本发明实施例中设置第一 BTAC和第二 BTAC,第一 BTAC中使用寄存器标识作为索引(即在第一 BTAC中存储寄存器标识与预测目标跳转地址的一一对应关系信息),第二 BTAC中使用PC作为索引(即在第二 BTAC中存储程序计数器的部分字段与预测目标跳转地址的一一对应关系信息),当读取的指令满足寄存器预测条件时,使用第一BTAC进行分支预测,否则,使用第二 BTAC进行分支预测。由于寄存器标识相同的无条件间接跳转分支指令的目标跳转地址必然相同,因此,即使将目标跳转地址相同的多个无条件间接跳转分支指令的历史信息存储在第一 BTAC的同一个Entry中,也不会影响分支预测的准确率,换言之,本发明提供的技术方案能够在共享第一 BTAC时不对分支预测的准确率产生影响,从而使得在保证分支预测的准确率的前提下实现BTAC的资源共享成为可能。
[0080]本发明实施例还提供了一种分支预测装置,应用于处理器中,上述处理器包括:第一 BTAC和第二 BTAC,上述第一 BTAC存储着:寄存器标识与预测目标跳转地址的一一对应关系信息,上述第二 BTAC存储着:PC的字段与预测目标跳转地址的一一对应关系信息,可选地,在上述第二 BTAC中存储PC的部分字段与预测目标跳转地址的一一对应关系信息,或者,在上述第二 BTAC中存储PC的全部字段与预测目标跳转地址的一一对应关系信息,如图4所示,本发明实施例中的分支预测装置400,包括:
[0081]读取单元401,用于从指令缓存中读取指令;
[0082]一条指令在从二级缓存或者内存取到指令缓存之前,需要对指令进行预译码,以便将指令的部分预译码结果作为分支预测的指导。比如,当分支指令在从二级缓存或者内存取到指令缓存之前,需要通过预译码阶段识别出该分支指令的类型(如是否为条件分支指令、是否为间接跳转分支指令等),以便根据分支指令的类型执行相应地分支预测。在预译码之后,预译码结果(如指令的类型信息)和指令会被一同保存在指令缓存中。在一种实现方式中,上述对指令的预译码操作可以由分支预测装置执行,则本发明实施例中的分支预测装置还可以包括:预译码单元,用于对读取单元401待读取的指令进行预译码,得到上述待读取的指令的类型信息;判定单元,用于在读取单元401读取指令后,根据预译码单元得到的该指令的类型信息,判定该指令的类型是否为无条件间接跳转分支指令。当然,上述对读取单元401待读取的指令的预译码操作也可以由其它装置执行,此处不作限定。
[0083]预测获取单元402,用于当确定读取单元401读取的指令满足寄存器预测条件时,根据读取单元401读取的指令中的寄存器标识,从第一 BTAC中获取读取单元401读取的指令的预测目标跳转地址。当确定读取单元401读取的指令不满足上述寄存器预测条件时,根据读取单元401读取的指令的PC,从第二 BTAC中获取读取单元401读取的指令的预测目标跳转地址;其中,上述寄存器预测条件包括:指令的类型为无条件间接跳转分支指令。
[0084]可选地,上述寄存器预测条件还包括:指令中的寄存器标识为特定的寄存器标识。则分支预测装置400还包括:确定单元,用于当读取单元401读取的指令的类型为无条件间接跳转分支指令,且读取单元401读取的指令中的寄存器标识为特定的寄存器标识时,确定读取单元401读取的指令满足寄存器预测条件;当读取单元401读取的指令的类型不为无条件间接跳转分支指令,或者,读取单元401读取的指令中的寄存器标识不为特定的寄存器标识时,确定读取的指令不满足寄存器预测条件。
[0085]在一种应用场景中,在对高级语言进行编译时,若对高级语言进行编译时调用的函数为标准库函数,则,分支预测装置将编译后的指令的类型指定为BLR。则在图4所示的分支预测装置的基础上,分支预测装置还可以包括:编译单元,用于对高级语言进行编译;指定单元,用于当上述编译单元对高级语言进行编译时调用的函数为标准库函数时,将编译后的指令的类型指定为无条件间接跳转分支指令,如将编译后的指令的类型指定为BLR指令。需要说明的是,本发明实施例中的高级语言主要是相对于汇编语言而言,它是较接近自然语言和数学公式的编程,基本脱离了机器的硬件系统,用人们更易理解的方式编写程序。本发明实施例中的高级语言并不特指某一种具体的语言,可以包括很多编程语言,如java, c, c++, C#, pascal, python, lisp, prolog, FoxPro, VC,易语言等等,本发明实施例中的标准库函数是指由一些按照高级语言标准预先编写的基本函数组成的库。
[0086]需要说明的是,本发明实施例中的寄存器标识可以为寄存器号,或者,寄存器标识也可以是其它能够用于指示寄存器的代码或者符号等,本发明实施例中的分支预测方法可以应用于多线程处理器中,也可以应用于单线程处理器中,此处不作限定。
[0087]需要说明的是,本发明实施例中的分支预测装置可以如上述方法实施例中的分支预测装置,可以用于实现上述方法实施例中的全部技术方案,其各个功能模块的功能可以根据上述方法实施例中的方法具体实现,其具体实现过程可参照上述方法实施例中的相关描述,此处不再赘述。
[0088]由上可见,本发明实施例中设置第一 BTAC和第二 BTAC,第一 BTAC中使用寄存器标识作为索引(即在第一 BTAC中存储寄存器标识与预测目标跳转地址的一一对应关系信息),第二 BTAC中使用PC作为索引(即在第二 BTAC中存储程序计数器的部分字段与预测目标跳转地址的一一对应关系信息),当读取的指令满足寄存器预测条件时,使用第一BTAC进行分支预测,否则,使用第二 BTAC进行分支预测。由于寄存器标识相同的无条件间接跳转分支指令的目标跳转地址必然相同,因此,即使将目标跳转地址相同的多个无条件间接跳转分支指令的历史信息存储在第一 BTAC的同一个Entry中,也不会影响分支预测的准确率,换言之,本发明提供的技术方案能够在共享第一 BTAC时不对分支预测的准确率产生影响,从而使得在保证分支预测的准确率的前提下实现BTAC的资源共享成为可能。
[0089]本发明实施例还提供一种计算机存储介质,其中,该计算机存储介质存储有程序,该程序执行包括上述方法实施例中记载的在一种分支预测方法和分支预测装置的部分或全部布置。
[0090]本发明实施例提供另一个分支预测装置,如图5所示,本发明实施例中的分支预测装置500,包括:
[0091]输入装置501、输出装置502、存储器503以及处理器504(分支预测装置的处理器的数量可以是一个或者多个,图5以一个处理器为例)。在本发明的一些实施例中,输入装置501、输出装置502、存储器503以及处理器504可以通过总线或其它方式连接,如图5所示以通过总线连接为例。存储器503中用来储存从输入装置502输入的数据,且还可以储存处理器504处理数据的必要文件等信息;输入装置501和输出装置502可以包括分支预测装置500与其他设备通信的端口,且还可以包括分支预测装置500外接的输出设备比如显示器、键盘、鼠标和打印机等,具体地输入装置502可以包括鼠标和键盘等,而输出装置501包括显示器等。
[0092]其中,处理器504包括:第一 BTAC和第二 BTAC,上述第一 BTAC存储着:寄存器标识与预测目标跳转地址的一一对应关系信息,上述第二 BTAC存储着:PC的字段与预测目标跳转地址的一一对应关系信息,可选地,在上述第二BTAC中存储PC的部分字段与预测目标跳转地址的一一对应关系信息,或者,在上述第二 BTAC中存储PC的全部字段与预测目标跳转地址的一一对应关系信息。
[0093]处理器504执行如下步骤:
[0094]从指令缓存中读取指令;
[0095]若确定读取的上述指令满足寄存器预测条件,则:
[0096]根据读取的上述指令的寄存器标识,从上述第一分支目标地址预测缓存器中获取读取的上述指令的预测目标跳转地址;
[0097]若确定读取的上述指令不满足上述寄存器预测条件,则:
[0098]则根据读取的上述指令的程序计数器,从上述第二分支目标地址预测缓存器中获取读取的上述指令的预测目标跳转地址;
[0099]其中,上述寄存器预测条件包括:指令的类型为无条件间接跳转分支指令。
[0100]可选地,上述寄存器预测条件还包括:指令中的寄存器标识为特定的寄存器标识。
[0101]需要说明的是,本发明实施例中的寄存器标识可以为寄存器号,或者,寄存器标识也可以是其它能够用于指示寄存器的代码或者符号等,本发明实施例中的分支预测方法可以应用于多线程处理器中,也可以应用于单线程处理器中,此处不作限定。
[0102]需要说明的是,本发明实施例中的分支预测装置可以如上述方法实施例中的分支预测装置,可以用于实现上述方法实施例中的全部技术方案,其各个功能模块的功能可以根据上述方法实施例中的方法具体实现,其具体实现过程可参照上述方法实施例中的相关描述,此处不再赘述。
[0103]由上可见,本发明实施例中设置第一 BTAC和第二 BTAC,第一 BTAC中使用寄存器标识作为索引(即在第一 BTAC中存储寄存器标识与预测目标跳转地址的一一对应关系信息),第二 BTAC中使用PC作为索引(即在第二 BTAC中存储程序计数器的部分字段与预测目标跳转地址的一一对应关系信息),当读取的指令满足寄存器预测条件时,使用第一BTAC进行分支预测,否则,使用第二 BTAC进行分支预测。由于寄存器标识相同的无条件间接跳转分支指令的目标跳转地址必然相同,因此,即使将目标跳转地址相同的多个无条件间接跳转分支指令的历史信息存储在第一 BTAC的同一个Entry中,也不会影响分支预测的准确率,换言之,本发明提供的技术方案能够在共享第一 BTAC时不对分支预测的准确率产生影响,从而使得在保证分支预测的准确率的前提下实现BTAC的资源共享成为可能。
[0104]需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本发明所必须的。
[0105]在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
[0106]本领域普通技术人员可以理解上述实施例中的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质例如可以包括:只读存储器、随机存储器、磁盘或光盘等。
[0107]以上对本发明所提供的一种分支预测方法及相关装置进行了详细介绍,对于本领域的一般技术人员,依据本发明实施例的思想,在【具体实施方式】及应用范围上均会有改变之处,本说明书内容不应理解为对本发明的限制。
【权利要求】
1.一种分支预测方法,其特征在于,应用于处理器中,所述处理器包括:第一分支目标地址预测缓存器和第二分支目标地址预测缓存器,所述第一分支目标地址预测缓存器存储着:寄存器标识与预测目标跳转地址的一一对应关系信息,所述第二分支目标地址预测缓存器存储着:程序计数器的字段与预测目标跳转地址的一一对应关系信息,其中,所述分支预测方法,包括: 从指令缓存中读取指令; 若确定读取的所述指令满足寄存器预测条件,则: 根据读取的所述指令的寄存器标识,从所述第一分支目标地址预测缓存器中获取读取的所述指令的预测目标跳转地址; 若确定读取的所述指令不满足所述寄存器预测条件,则: 则根据读取的所述指令的程序计数器,从所述第二分支目标地址预测缓存器中获取读取的所述指令的预测目标跳转地址; 其中,所述寄存器预测条件包括:指令的类型为无条件间接跳转分支指令。
2.根据权利要求1所述的方法,其特征在于, 所述寄存器预测条件还包括:指令中的寄存器标识为特定的寄存器标识; 所述确定读取的所述指令满足寄存器预测条件,具体为: 当所述指令的类型为无条件间接跳转分支指令,且所述指令中的寄存器标识为特定的寄存器标识时,确定读取的所述指令满足寄存器预测条件; 所述确定读取的所述指令不满足所述寄存器预测条件,具体为: 当所述指令的类型不为无条件间接跳转分支指令,或者,所述指令中的寄存器标识不为特定的寄存器标识时,确定读取的所述指令不满足寄存器预测条件。
3.根据权利要求1或2所述的方法,其特征在于, 所述从所述指令缓存中读取指令之前包括: 对待读取的指令进行预译码,得到所述待读取的指令的类型信息; 所述读取指令之后包括:根据所述得到的指令的类型信息,判定当前读取的指令的类型是否为无条件间接跳转分支指令。
4.根据权利要求1至3任一项所述的方法,其特征在于, 在所述读取指令之前,若对高级语言进行编译时调用的函数为标准库函数,则,将编译后的指令的类型指定为无条件间接跳转分支指令。
5.一种分支预测装置,其特征在于,应用于处理器中,所述处理器包括:第一分支目标地址预测缓存器和第二分支目标地址预测缓存器,所述第一分支目标地址预测缓存器存储着:寄存器标识与预测目标跳转地址的一一对应关系信息,所述第二分支目标地址预测缓存器存储着:程序计数器的部分字段与预测目标跳转地址的一一对应关系信息,或者,程序计数器的全部字段与预测目标跳转地址的一一对应关系信息,其中,所述分支预测装置,包括: 读取单元,用于从指令缓存中读取指令; 预测获取单元,用于当确定所述读取单元读取的指令满足寄存器预测条件时,根据所述读取单元读取的所述指令的寄存器标识,从所述第一分支目标地址预测缓存器中获取所述读取单元读取的所述指令的预测目标跳转地址;当确定所述读取单元读取的指令不满足所述寄存器预测条件时,根据所述读取单元读取的所述指令的程序计数器,从所述第二分支目标地址预测缓存器中获取所述读取单元读取的所述指令的预测目标跳转地址; 其中,所述寄存器预测条件包括:指令的类型为无条件间接跳转分支指令。
6.根据权利要求5所述的分支预测装置,其特征在于, 所述寄存器预测条件还包括:指令中的寄存器标识为特定的寄存器标识; 所述分支预测装置还包括: 确定单元,用于当所述读取单元读取的指令的类型为无条件间接跳转分支指令,且所述读取单元读取的指令中的寄存器标识为特定的寄存器标识时,确定所述读取单元读取的指令满足寄存器预测条件;当所述读取单元读取的指令的类型不为无条件间接跳转分支指令,或者,所述读取单元读取的指令中的寄存器标识不为特定的寄存器标识时,确定读取的所述指令不满足寄存器预测条件。
7.根据权利要求5或6所述的分支预测装置,其特征在于, 所述分支预测装置还包括: 预译码单元,用于对所述读取单元待读取的指令进行预译码,得到所述读取单元待读取的指令的类型信息; 判定单元,用于在所述读取单元读取所述指令后,根据所述预译码单元得到的指令的类型信息,判定所述读取单元当前读取的指令的类型是否为无条件间接跳转分支指令。
8.根据权利要求5或6所述的分支预测装置,其特征在于, 所述分支预测装置还包括: 编译单元,用于对高级语言进行编译; 指定单元,用于当所述编译单元对高级语言进行编译时调用的函数为标准库函数时,将编译后的指令的类型指定为无条件间接跳转分支指令。
【文档编号】G06F9/38GK104423929SQ201310367653
【公开日】2015年3月18日 申请日期:2013年8月21日 优先权日:2013年8月21日
【发明者】侯锐, 冯煜晶, 郭旭斌, 张乾龙 申请人:华为技术有限公司, 中国科学院计算技术研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1