发明内容
本发明各个方面提供了一种分支预测方法及相关装置,用于解决在共享BTAC时影响分支预测的准确率的问题。
为解决上述技术问题,提供以下技术方案:
本发明第一方面提供了一种分支预测方法,应用于处理器中,上述处理器包括:第一分支目标地址预测缓存器和第二分支目标地址预测缓存器,上述第一分支目标地址预测缓存器存储着:寄存器标识与预测目标跳转地址的一一对应关系信息,上述第二分支目标地址预测缓存器存储着:程序计数器的字段与预测目标跳转地址的一一对应关系信息,其中,上述分支预测方法,包括:从指令缓存中读取指令;
若确定读取的上述指令满足寄存器预测条件,则:
根据读取的上述指令的寄存器标识,从上述第一分支目标地址预测缓存器中获取读取的上述指令的预测目标跳转地址;
若确定读取的上述指令不满足上述寄存器预测条件,则:
则根据读取的上述指令的程序计数器,从上述第二分支目标地址预测缓存器中获取读取的上述指令的预测目标跳转地址;
其中,上述寄存器预测条件包括:指令的类型为无条件间接跳转分支指令。
基于第一方面,在第一种可能的实现方式中,上述寄存器预测条件还包括:指令中的寄存器标识为特定的寄存器标识;
上述确定读取的上述指令满足寄存器预测条件,具体为:
当上述指令的类型为无条件间接跳转分支指令,且上述指令中的寄存器标识为特定的寄存器标识时,确定读取的上述指令满足寄存器预测条件;
上述确定读取的上述指令不满足上述寄存器预测条件,具体为:
当上述指令的类型不为无条件间接跳转分支指令,或者,上述指令中的寄存器标识不为特定的寄存器标识时,确定读取的上述指令不满足寄存器预测条件。
基于第一方面,或者第一方面的第一种可能的实现方式,在第二种可能的实现方式中,上述从上述指令缓存中读取指令之前包括:
对待读取的指令进行预译码,得到上述待读取的指令的类型信息;
上述读取指令之后包括:根据上述得到的指令的类型信息,判定当前读取的指令的类型是否为无条件间接跳转分支指令。
基于第一方面,或者第一方面的第一种可能的实现方式,或者第一方面的第二种可能的实现方式,在第三种可能的实现方式中,在上述读取指令之前,若对高级语言进行编译时调用的函数为标准库函数,则,将编译后的指令的类型指定为无条件间接跳转分支指令。
本发明第二方面提供了一种分支预测装置,应用于处理器中,上述处理器包括:第一分支目标地址预测缓存器和第二分支目标地址预测缓存器,上述第一分支目标地址预测缓存器存储着:寄存器标识与预测目标跳转地址的一一对应关系信息,上述第二分支目标地址预测缓存器存储着:程序计数器的部分字段与预测目标跳转地址的一一对应关系信息,或者,程序计数器的全部字段与预测目标跳转地址的一一对应关系信息,其中,上述分支预测装置,包括:
读取单元,用于从指令缓存中读取指令;
预测获取单元,用于当确定上述读取单元读取的指令满足寄存器预测条件时,根据上述读取单元读取的上述指令的寄存器标识,从上述第一分支目标地址预测缓存器中获取上述读取单元读取的上述指令的预测目标跳转地址;当确定上述读取单元读取的指令不满足上述寄存器预测条件时,根据上述读取单元读取的上述指令的程序计数器,从上述第二分支目标地址预测缓存器中获取上述读取单元读取的上述指令的预测目标跳转地址;
其中,上述寄存器预测条件包括:指令的类型为无条件间接跳转分支指令。
基于本发明第二方面,在第一种可能的实现方式中,上述寄存器预测条件还包括:指令中的寄存器标识为特定的寄存器标识;
上述分支预测装置还包括:
确定单元,用于当上述读取单元读取的指令的类型为无条件间接跳转分支指令,且上述读取单元读取的指令中的寄存器标识为特定的寄存器标识时,确定上述读取单元读取的指令满足寄存器预测条件;当上述读取单元读取的指令的类型不为无条件间接跳转分支指令,或者,上述读取单元读取的指令中的寄存器标识不为特定的寄存器标识时,确定读取的上述指令不满足寄存器预测条件。
基于本发明第二方面,或者本发明第二方面的第一种可能的实现方式,在第二种可能的实现方式中,上述分支预测装置还包括:
预译码单元,用于对上述读取单元待读取的指令进行预译码,得到上述读取单元待读取的指令的类型信息;
判定单元,用于在上述读取单元读取上述指令后,根据上述预译码单元得到的指令的类型信息,判定上述读取单元当前读取的指令的类型是否为无条件间接跳转分支指令。
基于本发明第二方面,或者本发明第二方面的第一种可能的实现方式,在第三种可能的实现方式中,上述分支预测装置还包括:
编译单元,用于对高级语言进行编译;
指定单元,用于当上述编译单元对高级语言进行编译时调用的函数为标准库函数时,将编译后的指令的类型指定为无条件间接跳转分支指令。
由上可见,本发明实施例中设置第一BTAC和第二BTAC,第一BTAC中使用寄存器标识作为索引(即在第一BTAC中存储寄存器标识与预测目标跳转地址的一一对应关系信息),第二BTAC中使用PC作为索引(即在第二BTAC中存储程序计数器的部分字段与预测目标跳转地址的一一对应关系信息),当读取的指令满足寄存器预测条件时,使用第一BTAC进行分支预测,否则,使用第二BTAC进行分支预测。由于寄存器标识相同的无条件间接跳转分支指令的目标跳转地址必然相同,因此,即使将目标跳转地址相同的多个无条件间接跳转分支指令的历史信息存储在第一BTAC的同一个Entry中,也不会影响分支预测的准确率,换言之,本发明提供的技术方案能够在共享第一BTAC时不对分支预测的准确率产生影响,从而使得在保证分支预测的准确率的前提下实现BTAC的资源共享成为可能。
具体实施方式
本发明实施例提供了一种分支预测方法及相关装置。
为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而非全部实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的各个其他实施例,都属于本发明保护的范围。
下面对本发明实施例提供的一种分支预测方法进行描述,本发明实施例中的分支预测方法应用于处理器中,上述处理器包括:第一BTAC和第二BTAC,上述第一BTAC存储着:寄存器标识与预测目标跳转地址的一一对应关系信息,上述第二BTAC存储着:PC的字段与预测目标跳转地址的一一对应关系信息,可选地,在上述第二BTAC中存储PC的部分字段与预测目标跳转地址的一一对应关系信息,或者,在上述第二BTAC中存储PC的全部字段与预测目标跳转地址的一一对应关系信息。请参阅图1,本发明实施例中的分支预测方法,包括:
101、从指令缓存中读取指令;
在本发明实施例中,步骤101读取的指令有可能为分支指令,也有可能为非分支指令。通常,分支指令可以有如下两种划分方式:一种是针对跳转条件,将分支指令的类型划分为条件分支指令和无条件分支指令,其中,条件分支指令在满足一定条件时才执行分支跳转,无条件分支指令则不需要满足任何条件,总是执行分支跳转;另一种是针对目标跳转地址,将分支指令的类型划分为直接跳转分支指令和间接跳转分支指令,其中,直接跳转分支指示的目标跳转地址的偏移量直接在指令当中用立即数(即,在立即寻址方式指令中给出的数)指定,目标跳转地址就是用分支指令本身的PC加上立即数的偏移量计算得到,而间接跳转分支指令的目标跳转地址是在寄存器当中指定的。
一条指令在从二级缓存或者内存取到指令缓存之前,需要对指令进行预译码,以便将指令的部分预译码结果作为分支预测的指导。比如,当分支指令在从二级缓存或者内存取到指令缓存之前,需要通过预译码阶段识别出该分支指令的类型(如是否为条件分支指令、是否为间接跳转分支指令等),以便根据分支指令的类型执行相应地分支预测。在预译码之后,预译码结果(如指令的类型信息)和指令会被一同保存在指令缓存中。需要说明的是,上述对指令的预译码操作可以由分支预测装置执行,或者,也可以由其它装置执行,此处不作限定。
其中,上述寄存器预测条件包括:指令的类型为无条件间接跳转分支指令。
102、当读取的指令满足寄存器预测条件时,根据上述读取的指令中的寄存器标识,从第一BTAC中获取上述读取的指令的预测目标跳转地址。
103、当读取的指令不满足寄存器预测条件时,根据上述读取的指令中的程序计数器,从第二BTAC中获取上述读取的指令的预测目标跳转地址。
本发明实施例在处理器中设置第一BTAC,为便于描述,下面将第一BTAC描述为SBTAC,将第二BTAC简称为BTAC。SBTAC的硬件构造与BTAC相类似,不同的是,BTAC是以PC的一部分字段或者全部字段作为索引,而SBTAC是以寄存器标识作为索引。由于SBTAC中存储着寄存器标识与预测目标跳转地址的一一对应关系信息,因此,分支预测装置能够根据上述指令中的寄存器标识,从SBTAC中找到与该寄存器标识相对应的预测目标跳转地址。
在一种应用场景中,在步骤101之前,若对高级语言进行编译时调用的函数为标准库函数,则,分支预测装置将编译后的指令的类型指定为无条件间接跳转分支指令,如将编译后的指令的类型指定为分支与链接寄存器(BLR,Branch and Link Register)指令,BLR指令为一条无条件间接跳转分支指令,它为一个子程序调用或者函数调用引起且一定会返回,返回的地址存放在Link Register(即链接寄存器)中。需要说明的是,本发明实施例中的高级语言主要是相对于汇编语言而言,它是较接近自然语言和数学公式的编程,基本脱离了机器的硬件系统,用人们更易理解的方式编写程序。本发明实施例中的高级语言并不特指某一种具体的语言,可以包括很多编程语言,如java,c,c++,C#,pascal,python,lisp,prolog,FoxPro,VC,易语言等等,本发明实施例中的标准库函数是指由一些按照高级语言标准预先编写的基本函数组成的库。
需要说明的是,本发明实施例中的寄存器标识可以为寄存器号,或者,寄存器标识也可以是其它能够用于指示寄存器的代码或者符号等,本发明实施例中的分支预测方法可以应用于多线程处理器中,也可以应用于单线程处理器中,此处不作限定。
由上可见,本发明实施例中设置第一BTAC和第二BTAC,第一BTAC中使用寄存器标识作为索引(即在第一BTAC中存储寄存器标识与预测目标跳转地址的一一对应关系信息),第二BTAC中使用PC作为索引(即在第二BTAC中存储程序计数器的部分字段与预测目标跳转地址的一一对应关系信息),当读取的指令满足寄存器预测条件时,使用第一BTAC进行分支预测,否则,使用第二BTAC进行分支预测。由于寄存器标识相同的无条件间接跳转分支指令的目标跳转地址必然相同,因此,目标跳转地址相同的多个无条件间接跳转分支指令的历史信息能够存储在第一BTAC的同一个Entry而不影响分支预测的准确率,从而能够在保证分支预测的准确率的前提下实现BTAC的资源共享。
上述实施例中使用全部寄存器的寄存器标识作为SBTAC中的预测目标跳转地址的索引,本发明实施例也可以只使用部分寄存器的寄存器标识作为SBTAC中的预测目标跳转地址的索引,则上述寄存器预测条件还包括:指令中的寄存器标识为特定的寄存器标识,在当读取的指令的类型为无条件间接跳转分支指令,且读取指令中的寄存器标识为特定的寄存器标识时,确定读取的指令满足寄存器预测条件,当读取的指令的类型不为无条件间接跳转分支指令,或者,读取的指令中的寄存器标识不为特定的寄存器标识时,确定读取的指令不满足寄存器预测条件。如图2所示,本发明实施例中的分支预测方法,包括:
201、从指令缓存中读取指令;
一条指令在从二级缓存或者内存取到指令缓存之前,需要对指令进行预译码,以便将指令的部分预译码结果作为分支预测的指导。比如,当分支指令在从二级缓存或者内存取到指令缓存之前,需要通过预译码阶段识别出该分支指令的类型(如是否为条件分支指令、是否为间接跳转分支指令等),以便根据分支指令的类型执行相应地分支预测。在预译码之后,预译码结果和指令会被一同保存在指令缓存中。需要说明的是,上述对指令的预译码操作可以由分支预测装置执行,或者,也可以由其它装置执行,此处不作限定。
202、当读取的指令的类型为无条件间接跳转分支指令时,判断上述读取的指令中的寄存器标识是否为特定的寄存器标识;
若分支预测装置判断出上述读取的指令中的寄存器标识为特定的寄存器标识,则执行步骤203,若分支预测装置判断出上述读取的指令中的寄存器标识不为特定的寄存器标识,则执行步骤204。
203、根据上述读取的指令中的寄存器标识,从第一BTAC中获取上述读取的指令的预测目标跳转地址;
其中,上述第一BTAC中存储着:寄存器标识与预测目标跳转地址的一一对应关系信息。
204、当读取的指令的类型不为无条件间接跳转分支指令时,根据上述读取的指令中的程序计数器,从第二BTAC中获取上述读取的指令的预测目标跳转地址。
在一种应用场景中,在步骤201之前,若对高级语言进行编译时调用的函数为标准库函数,则,分支预测装置将编译后的指令的类型指定为无条件间接跳转分支指令,如将编译后的指令的类型指定为BLR指令。BLR指令为一条无条件间接跳转分支指令,它为一个子程序调用或者函数调用引起且一定会返回,返回的地址存放在Link Register(即链接寄存器)中。需要说明的是,本发明实施例中的高级语言主要是相对于汇编语言而言,它是较接近自然语言和数学公式的编程,基本脱离了机器的硬件系统,用人们更易理解的方式编写程序。本发明实施例中的高级语言并不特指某一种具体的语言,可以包括很多编程语言,如java,c,c++,C#,pascal,python,lisp,prolog,FoxPro,VC,易语言等等,本发明实施例中的标准库函数是指由一些按照高级语言标准预先编写的基本函数组成的库。
需要说明的是,本发明实施例中的寄存器标识可以为寄存器号,或者,寄存器标识也可以是其它能够用于指示寄存器的代码或者符号等,本发明实施例中的分支预测方法可以应用于多线程处理器中,也可以应用于单线程处理器中,此处不作限定。
由上可见,本发明实施例中设置第一BTAC和第二BTAC,第一BTAC中使用寄存器标识作为索引(即在第一BTAC中存储寄存器标识与预测目标跳转地址的一一对应关系信息),第二BTAC中使用PC作为索引(即在第二BTAC中存储程序计数器的部分字段与预测目标跳转地址的一一对应关系信息),当读取的指令满足寄存器预测条件时,使用第一BTAC进行分支预测,否则,使用第二BTAC进行分支预测。由于寄存器标识相同的无条件间接跳转分支指令的目标跳转地址必然相同,因此,即使将目标跳转地址相同的多个无条件间接跳转分支指令的历史信息存储在第一BTAC的同一个Entry中,也不会影响分支预测的准确率,换言之,本发明提供的技术方案能够在共享第一BTAC时不对分支预测的准确率产生影响,从而使得在保证分支预测的准确率的前提下实现BTAC的资源共享成为可能。
对于标准库函数下的分支指令,分支指令的目标跳转地址通常不会改变,因此,为了保证SBTAC的内容不会因为软件进程的切换而出现更新或者无效的操作,本发明实施例中对标准库函数下的分支指令使用SBTAC进行分支预测,如图3所示,本发明实施例中的分支预测方法,包括:
301、对高级语言进行编译。
302、判断是否调用标准库函数;
在编译过程中可以确定是否调用标准库函数,若没有调用标准库函数,则执行步骤303,若调用了标准库函数,则执行步骤304。
303、将编译后的指令的类型指定为其它指令存储在二级缓存或者内存中。
304、将编译后的指令的类型指定为BLR指令存储在二级缓存或者内存中。
步骤305~308与图2所示实施例中的步骤201~204类似,其具体实现方式可以参照相应步骤中的描述,此处不再赘述。
需要说明的是,本发明实施例中的寄存器标识可以为寄存器号,或者,寄存器标识也可以是其它能够用于指示寄存器的代码或者符号等,本发明实施例中的分支预测方法可以应用于多线程处理器中,也可以应用于单线程处理器中,此处不作限定。
由上可见,本发明实施例中设置第一BTAC和第二BTAC,第一BTAC中使用寄存器标识作为索引(即在第一BTAC中存储寄存器标识与预测目标跳转地址的一一对应关系信息),第二BTAC中使用PC作为索引(即在第二BTAC中存储程序计数器的部分字段与预测目标跳转地址的一一对应关系信息),当读取的指令满足寄存器预测条件时,使用第一BTAC进行分支预测,否则,使用第二BTAC进行分支预测。由于寄存器标识相同的无条件间接跳转分支指令的目标跳转地址必然相同,因此,即使将目标跳转地址相同的多个无条件间接跳转分支指令的历史信息存储在第一BTAC的同一个Entry中,也不会影响分支预测的准确率,换言之,本发明提供的技术方案能够在共享第一BTAC时不对分支预测的准确率产生影响,从而使得在保证分支预测的准确率的前提下实现BTAC的资源共享成为可能。
本发明实施例还提供了一种分支预测装置,应用于处理器中,上述处理器包括:第一BTAC和第二BTAC,上述第一BTAC存储着:寄存器标识与预测目标跳转地址的一一对应关系信息,上述第二BTAC存储着:PC的字段与预测目标跳转地址的一一对应关系信息,可选地,在上述第二BTAC中存储PC的部分字段与预测目标跳转地址的一一对应关系信息,或者,在上述第二BTAC中存储PC的全部字段与预测目标跳转地址的一一对应关系信息,如图4所示,本发明实施例中的分支预测装置400,包括:
读取单元401,用于从指令缓存中读取指令;
一条指令在从二级缓存或者内存取到指令缓存之前,需要对指令进行预译码,以便将指令的部分预译码结果作为分支预测的指导。比如,当分支指令在从二级缓存或者内存取到指令缓存之前,需要通过预译码阶段识别出该分支指令的类型(如是否为条件分支指令、是否为间接跳转分支指令等),以便根据分支指令的类型执行相应地分支预测。在预译码之后,预译码结果(如指令的类型信息)和指令会被一同保存在指令缓存中。在一种实现方式中,上述对指令的预译码操作可以由分支预测装置执行,则本发明实施例中的分支预测装置还可以包括:预译码单元,用于对读取单元401待读取的指令进行预译码,得到上述待读取的指令的类型信息;判定单元,用于在读取单元401读取指令后,根据预译码单元得到的该指令的类型信息,判定该指令的类型是否为无条件间接跳转分支指令。当然,上述对读取单元401待读取的指令的预译码操作也可以由其它装置执行,此处不作限定。
预测获取单元402,用于当确定读取单元401读取的指令满足寄存器预测条件时,根据读取单元401读取的指令中的寄存器标识,从第一BTAC中获取读取单元401读取的指令的预测目标跳转地址。当确定读取单元401读取的指令不满足上述寄存器预测条件时,根据读取单元401读取的指令的PC,从第二BTAC中获取读取单元401读取的指令的预测目标跳转地址;其中,上述寄存器预测条件包括:指令的类型为无条件间接跳转分支指令。
可选地,上述寄存器预测条件还包括:指令中的寄存器标识为特定的寄存器标识。则分支预测装置400还包括:确定单元,用于当读取单元401读取的指令的类型为无条件间接跳转分支指令,且读取单元401读取的指令中的寄存器标识为特定的寄存器标识时,确定读取单元401读取的指令满足寄存器预测条件;当读取单元401读取的指令的类型不为无条件间接跳转分支指令,或者,读取单元401读取的指令中的寄存器标识不为特定的寄存器标识时,确定读取的指令不满足寄存器预测条件。
在一种应用场景中,在对高级语言进行编译时,若对高级语言进行编译时调用的函数为标准库函数,则,分支预测装置将编译后的指令的类型指定为BLR。则在图4所示的分支预测装置的基础上,分支预测装置还可以包括:编译单元,用于对高级语言进行编译;指定单元,用于当上述编译单元对高级语言进行编译时调用的函数为标准库函数时,将编译后的指令的类型指定为无条件间接跳转分支指令,如将编译后的指令的类型指定为BLR指令。需要说明的是,本发明实施例中的高级语言主要是相对于汇编语言而言,它是较接近自然语言和数学公式的编程,基本脱离了机器的硬件系统,用人们更易理解的方式编写程序。本发明实施例中的高级语言并不特指某一种具体的语言,可以包括很多编程语言,如java,c,c++,C#,pascal,python,lisp,prolog,FoxPro,VC,易语言等等,本发明实施例中的标准库函数是指由一些按照高级语言标准预先编写的基本函数组成的库。
需要说明的是,本发明实施例中的寄存器标识可以为寄存器号,或者,寄存器标识也可以是其它能够用于指示寄存器的代码或者符号等,本发明实施例中的分支预测方法可以应用于多线程处理器中,也可以应用于单线程处理器中,此处不作限定。
需要说明的是,本发明实施例中的分支预测装置可以如上述方法实施例中的分支预测装置,可以用于实现上述方法实施例中的全部技术方案,其各个功能模块的功能可以根据上述方法实施例中的方法具体实现,其具体实现过程可参照上述方法实施例中的相关描述,此处不再赘述。
由上可见,本发明实施例中设置第一BTAC和第二BTAC,第一BTAC中使用寄存器标识作为索引(即在第一BTAC中存储寄存器标识与预测目标跳转地址的一一对应关系信息),第二BTAC中使用PC作为索引(即在第二BTAC中存储程序计数器的部分字段与预测目标跳转地址的一一对应关系信息),当读取的指令满足寄存器预测条件时,使用第一BTAC进行分支预测,否则,使用第二BTAC进行分支预测。由于寄存器标识相同的无条件间接跳转分支指令的目标跳转地址必然相同,因此,即使将目标跳转地址相同的多个无条件间接跳转分支指令的历史信息存储在第一BTAC的同一个Entry中,也不会影响分支预测的准确率,换言之,本发明提供的技术方案能够在共享第一BTAC时不对分支预测的准确率产生影响,从而使得在保证分支预测的准确率的前提下实现BTAC的资源共享成为可能。
本发明实施例还提供一种计算机存储介质,其中,该计算机存储介质存储有程序,该程序执行包括上述方法实施例中记载的在一种分支预测方法和分支预测装置的部分或全部布置。
本发明实施例提供另一个分支预测装置,如图5所示,本发明实施例中的分支预测装置500,包括:
输入装置501、输出装置502、存储器503以及处理器504(分支预测装置的处理器的数量可以是一个或者多个,图5以一个处理器为例)。在本发明的一些实施例中,输入装置501、输出装置502、存储器503以及处理器504可以通过总线或其它方式连接,如图5所示以通过总线连接为例。存储器503中用来储存从输入装置502输入的数据,且还可以储存处理器504处理数据的必要文件等信息;输入装置501和输出装置502可以包括分支预测装置500与其他设备通信的端口,且还可以包括分支预测装置500外接的输出设备比如显示器、键盘、鼠标和打印机等,具体地输入装置502可以包括鼠标和键盘等,而输出装置501包括显示器等。
其中,处理器504包括:第一BTAC和第二BTAC,上述第一BTAC存储着:寄存器标识与预测目标跳转地址的一一对应关系信息,上述第二BTAC存储着:PC的字段与预测目标跳转地址的一一对应关系信息,可选地,在上述第二BTAC中存储PC的部分字段与预测目标跳转地址的一一对应关系信息,或者,在上述第二BTAC中存储PC的全部字段与预测目标跳转地址的一一对应关系信息。
处理器504执行如下步骤:
从指令缓存中读取指令;
若确定读取的上述指令满足寄存器预测条件,则:
根据读取的上述指令的寄存器标识,从上述第一分支目标地址预测缓存器中获取读取的上述指令的预测目标跳转地址;
若确定读取的上述指令不满足上述寄存器预测条件,则:
则根据读取的上述指令的程序计数器,从上述第二分支目标地址预测缓存器中获取读取的上述指令的预测目标跳转地址;
其中,上述寄存器预测条件包括:指令的类型为无条件间接跳转分支指令。
可选地,上述寄存器预测条件还包括:指令中的寄存器标识为特定的寄存器标识。
需要说明的是,本发明实施例中的寄存器标识可以为寄存器号,或者,寄存器标识也可以是其它能够用于指示寄存器的代码或者符号等,本发明实施例中的分支预测方法可以应用于多线程处理器中,也可以应用于单线程处理器中,此处不作限定。
需要说明的是,本发明实施例中的分支预测装置可以如上述方法实施例中的分支预测装置,可以用于实现上述方法实施例中的全部技术方案,其各个功能模块的功能可以根据上述方法实施例中的方法具体实现,其具体实现过程可参照上述方法实施例中的相关描述,此处不再赘述。
由上可见,本发明实施例中设置第一BTAC和第二BTAC,第一BTAC中使用寄存器标识作为索引(即在第一BTAC中存储寄存器标识与预测目标跳转地址的一一对应关系信息),第二BTAC中使用PC作为索引(即在第二BTAC中存储程序计数器的部分字段与预测目标跳转地址的一一对应关系信息),当读取的指令满足寄存器预测条件时,使用第一BTAC进行分支预测,否则,使用第二BTAC进行分支预测。由于寄存器标识相同的无条件间接跳转分支指令的目标跳转地址必然相同,因此,即使将目标跳转地址相同的多个无条件间接跳转分支指令的历史信息存储在第一BTAC的同一个Entry中,也不会影响分支预测的准确率,换言之,本发明提供的技术方案能够在共享第一BTAC时不对分支预测的准确率产生影响,从而使得在保证分支预测的准确率的前提下实现BTAC的资源共享成为可能。
需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本发明所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
本领域普通技术人员可以理解上述实施例中的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质例如可以包括:只读存储器、随机存储器、磁盘或光盘等。
以上对本发明所提供的一种分支预测方法及相关装置进行了详细介绍,对于本领域的一般技术人员,依据本发明实施例的思想,在具体实施方式及应用范围上均会有改变之处,本说明书内容不应理解为对本发明的限制。