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

技术编号:11175454 阅读:83 留言:0更新日期:2015-03-20 04:34
本发明专利技术实施例公开了一种分支预测方法及相关装置,应用于处理器中,上述处理器包括:存储寄存器标识与预测目标跳转地址的一一对应关系信息的第一BTAC,和存储程序计数器的字段与预测目标跳转地址的一一对应关系信息的第二BTAC,其中,一种分支预测方法包括:从指令缓存中读取指令;若确定该指令满足寄存器预测条件,则:根据该指令的寄存器标识,从第一BTAC中获取该指令的预测目标跳转地址;若确定该指令不满足寄存器预测条件,则根据该指令的程序计数器,从第二BTAC中获取该指令的预测目标跳转地址,本发明专利技术提供的技术方案能够有效解决在共享BTAC时影响分支预测的准确率的问题。

【技术实现步骤摘要】
一种分支预测方法及相关装置
本专利技术涉及计算机系统领域,尤其涉及一种分支预测方法及相关装置。
技术介绍
目前的处理器多采用流水线的结构,使得顺序执行的指令流可以并行地执行。这种处理指令的方式在很大程度上提高了处理器的执行效率。在理想情况下,流水线的每个Stage (即流水线层)仅占用一个时钟周期,所以每个时钟周期都可以完成一条指令。但是实际情况并非如此理想,因为指令之间可能存在着相互的依赖关系从而影响指令执行的并行度。比如数据依赖、控制依赖(比如分支指令)、资源竞争、中断等等因素,都会影响指令的并行度。 实际程序中包括分支指令,分支指令的分支行为往往到等到流水线的后端才能确定,因此,分支指令可能产生控制冒险从而导致流水线停顿,同时,处理器也不能确定从哪个地址开始取下一条指令直到这条分支指令执行完为止。大部分的处理器都采用了不同形式的分支预测机制,让条件分支指令的目标跳转方向和目标跳转地址可以在流水线的前端被预测,使得处理器可以预测性地取指令并执行指令。如果分支预测正确或者正确率较高的话,可以大幅提高处理器的性能和功耗,如果分支预测错误的话,意味着预测取出的指令不能被执行,错误的指令需要从缓冲区中清除,然后从正确的地址处再重新取指令并执行。 分支目标地址缓存(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中存放的内容可以被替换掉。 在多线程处理器中,对BTAC的设置有两种方式: 一种是共享的BTAC,多个线程共享同一块BTAC,每个线程各自用自己的PC去索引BTAC当中存放的内容。这种方式虽然节约了面积,但是由于BTAC的索引地址是每个线程的PC,而不同线程的PC有可能一样,因此,不同线程之间的历史信息存放在同一块BTAC中,将影响分支预测的准确率; 另一种是独享的BTAC,每个线程各自设置一块BTAC,BTAC为相应的线程提供预测分支目标跳转地址的服务。这种方式虽然相比共享的方法在一定程度上提高了预测准确率,但是极大浪费了硬件资源和面积。 无论是共享的BTAC还是独享的BTAC,它们有一个共同的特点:只要BTAC不满,就以分支指令的PC作为索引记录所有和分支指令相关的历史信息。但是在实际的程序中,存在如下情况的几率很大:多个不同的分支指令跳转到同样的目标地址,比如类似C++中“Printf”这种标准的库函数,由经过编译之后得到的汇编指令可以看出,不同的分支指令总是跳转到相同的目标地址。那么使用传统的BTAC结构,这些不同的分支指令虽然跳转到同一个目标地址,但是仍将占用BTAC当中的多个Entry来记录其相关历史信息。 由上可见,在多线程处理器当中,BTAC的资源共享、分支预测的准确率之间的矛盾极为关出。
技术实现思路
本专利技术各个方面提供了一种分支预测方法及相关装置,用于解决在共享BTAC时影响分支预测的准确率的问题。 为解决上述技术问题,提供以下技术方案: 本专利技术第一方面提供了一种分支预测方法,应用于处理器中,上述处理器包括:第一分支目标地址预测缓存器和第二分支目标地址预测缓存器,上述第一分支目标地址预测缓存器存储着:寄存器标识与预测目标跳转地址的一一对应关系信息,上述第二分支目标地址预测缓存器存储着:程序计数器的字段与预测目标跳转地址的一一对应关系信息,其中,上述分支预测方法,包括:从指令缓存中读取指令; 若确定读取的上述指令满足寄存器预测条件,则: 根据读取的上述指令的寄存器标识,从上述第一分支目标地址预测缓存器中获取读取的上述指令的预测目标跳转地址; 若确定读取的上述指令不满足上述寄存器预测条件,则: 则根据读取的上述指令的程序计数器,从上述第二分支目标地址预测缓存器中获取读取的上述指令的预测目标跳转地址; 其中,上述寄存器预测条件包括:指令的类型为无条件间接跳转分支指令。 基于第一方面,在第一种可能的实现方式中,上述寄存器预测条件还包括:指令中的寄存器标识为特定的寄存器标识; 上述确定读取的上述指令满足寄存器预测条件,具体为: 当上述指令的类型为无条件间接跳转分支指令,且上述指令中的寄存器标识为特定的寄存器标识时,确定读取的上述指令满足寄存器预测条件; 上述确定读取的上述指令不满足上述寄存器预测条件,具体为: 当上述指令的类型不为无条件间接跳转分支指令,或者,上述指令中的寄存器标识不为特定的寄存器标识时,确定读取的上述指令不满足寄存器预测条件。 基于第一方面,或者第一方面的第一种可能的实现方式,在第二种可能的实现方式中,上述从上述指令缓存中读取指令之前包括: 对待读取的指令进行预译码,得到上述待读取的指令的类型信息; 上述读取指令之后包括:根据上述得到的指令的类型信息,判定当前读取的指令的类型是否为无条件间接跳转分支指令。 基于第一方面,或者第一方面的第一种可能的实现方式,或者第一方面的第二种可能的实现方式,在第三种可能的实现方式中,在上述读取指令之前,若对高级语言进行编译时调用的函数为标准库函数,则,将编译后的指令的类型指定为无条件间接跳转分支指令。 本专利技术第二方面提供了一种分支预测装置,应用于处理器中,上述处理器包括:第一分支目标地址预测缓存器和第二分支目标地址预测缓存器,上述第一分支目标地址预测缓存器存储着:寄存器标识与预测目标跳转地址的一一对应关系信息,上述第二分支目标地址预测缓存器存储着:程序计数器的部分字段与预测目标跳转地址的一一对应关系信息,或者,程序计数器的全部字段与预测目标跳转地址的一一对应关系信息,其中,上述分支预测装置,包括: 读取单元,用于从指令缓存中读取指令; 预测获取单元,用于当确定上述读取单元读取的指令满足寄存器预测条件时,根据上述读取单元读取的上述指令的寄存器标识,从上述第一分支目标地址预测缓存器中获取上述读取单元读取的上述指令的预测目标跳转地址;当确定上述读取单元读取的指令不满足上述寄存器预测条件时,根据上述读取单元读取的上述指令的程序计数器,从上述第二分支目标地址预测缓存器中获取上述读取单元读取的上述指令的预测目标跳转地址; 其中,上述寄存器预测条件包括:指令的类型为无条件间接跳转分支指令。 基于本专利技术第二方面,在第一种可能的实现方式中,上述寄存器预测条件还包括:指令中的寄存器标识为特定的寄存器标识; 上述分支预测装置还包括: 确定单元,用于当上述读取单元读取的指令的类型为无条件间接跳转分支指令,且上述读取单元读取的本文档来自技高网
...
一种分支预测方法及相关装置

【技术保护点】
一种分支预测方法,其特征在于,应用于处理器中,所述处理器包括:第一分支目标地址预测缓存器和第二分支目标地址预测缓存器,所述第一分支目标地址预测缓存器存储着:寄存器标识与预测目标跳转地址的一一对应关系信息,所述第二分支目标地址预测缓存器存储着:程序计数器的字段与预测目标跳转地址的一一对应关系信息,其中,所述分支预测方法,包括:从指令缓存中读取指令;若确定读取的所述指令满足寄存器预测条件,则:根据读取的所述指令的寄存器标识,从所述第一分支目标地址预测缓存器中获取读取的所述指令的预测目标跳转地址;若确定读取的所述指令不满足所述寄存器预测条件,则:则根据读取的所述指令的程序计数器,从所述第二分支目标地址预测缓存器中获取读取的所述指令的预测目标跳转地址;其中,所述寄存器预测条件包括:指令的类型为无条件间接跳转分支指令。

【技术特征摘要】
1.一种分支预测方法,其特征在于,应用于处理器中,所述处理器包括:第一分支目标地址预测缓存器和第二分支目标地址预测缓存器,所述第一分支目标地址预测缓存器存储着:寄存器标识与预测目标跳转地址的一一对应关系信息,所述第二分支目标地址预测缓存器存储着:程序计数器的字段与预测目标跳转地址的一一对应关系信息,其中,所述分支预测方法,包括: 从指令缓存中读取指令; 若确定读取的所述指令满足寄存器预测条件,则: 根据读取的所述指令的寄存器标识,从所述第一分支目标地址预测缓存器中获取读取的所述指令的预测目标跳转地址; 若确定读取的所述指令不满足所述寄存器预测条件,则: 则根据读取的所述指令的程序计数器,从所述第二分支目标地址预测缓存器中获取读取的所述指令的预测目标跳转地址; 其中,所述寄存器预测条件包括:指令的类型为无条件间接跳转分支指令。2.根据权利要求1所述的方法,其特征在于, 所述寄存器预测条件还包括:指令中的寄存器标识为特定的寄存器标识; 所述确定读取的所述指令满足寄存器预测条件,具体为: 当所述指令的类型为无条件间接跳转分支指令,且所述指令中的寄存器标识为特定的寄存器标识时,确定读取的所述指令满足寄存器预测条件; 所述确定读取的所述指令不满足所述寄存器预测条件,具体为: 当所述指令的类型不为无条件间接跳转分支指令,或者,所述指令中的寄存器标识不为特定的寄存器标识时,确定读取的所述指令不满足寄存器预测条件。3.根据权利要求1或2所述的方法,其特征在于, 所述从所述指令缓存中读取指令之前包括: 对待读取的指令进行预译码,得到所述待读取的指令的类型信息; 所述读取指令之后包括:根据所述得到的指令的类型信息,判定当前读取的指令的类型是否为无条件间接跳转分支指令。4.根据权利要求1至3任一项所述的方法,其特征在于, 在所述读取指令之前,若对高级语言进行编译时调用的函数为标准库函数,则,将编译后的指令的类型指定为无条件间接跳转分支指令。5.一种分支预测装置,其特征在于,应用于处理器中,所述处理器包括:第一分支目标地址预测缓存器和第二分支目标地址预测缓存器,所述第一分支目标地址预...

【专利技术属性】
技术研发人员:侯锐冯煜晶郭旭斌张乾龙
申请(专利权)人:华为技术有限公司中国科学院计算技术研究所
类型:发明
国别省市:广东;44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1