[发明专利]一种分支预测方法及相关装置有效
申请号: | 201310367653.9 | 申请日: | 2013-08-21 |
公开(公告)号: | CN104423929B | 公开(公告)日: | 2017-07-14 |
发明(设计)人: | 侯锐;冯煜晶;郭旭斌;张乾龙 | 申请(专利权)人: | 华为技术有限公司;中国科学院计算技术研究所 |
主分类号: | G06F9/38 | 分类号: | G06F9/38 |
代理公司: | 深圳市深佳知识产权代理事务所(普通合伙)44285 | 代理人: | 唐华明 |
地址: | 518129 广东*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 分支 预测 方法 相关 装置 | ||
技术领域
本发明涉及计算机系统领域,尤其涉及一种分支预测方法及相关装置。
背景技术
目前的处理器多采用流水线的结构,使得顺序执行的指令流可以并行地执行。这种处理指令的方式在很大程度上提高了处理器的执行效率。在理想情况下,流水线的每个Stage(即流水线层)仅占用一个时钟周期,所以每个时钟周期都可以完成一条指令。但是实际情况并非如此理想,因为指令之间可能存在着相互的依赖关系从而影响指令执行的并行度。比如数据依赖、控制依赖(比如分支指令)、资源竞争、中断等等因素,都会影响指令的并行度。
实际程序中包括分支指令,分支指令的分支行为往往到等到流水线的后端才能确定,因此,分支指令可能产生控制冒险从而导致流水线停顿,同时,处理器也不能确定从哪个地址开始取下一条指令直到这条分支指令执行完为止。大部分的处理器都采用了不同形式的分支预测机制,让条件分支指令的目标跳转方向和目标跳转地址可以在流水线的前端被预测,使得处理器可以预测性地取指令并执行指令。如果分支预测正确或者正确率较高的话,可以大幅提高处理器的性能和功耗,如果分支预测错误的话,意味着预测取出的指令不能被执行,错误的指令需要从缓冲区中清除,然后从正确的地址处再重新取指令并执行。
分支目标地址缓存(BTAC,Branch Target Address Cache)用于对间接跳转分支指令的目标跳转地址进行预测。BTAC采用缓存的结构,以指令的程序计数器(PC,Program Counter)的一部分作为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时影响分支预测的准确率的问题。
为解决上述技术问题,提供以下技术方案:
本发明第一方面提供了一种分支预测方法,应用于处理器中,上述处理器包括:第一分支目标地址预测缓存器和第二分支目标地址预测缓存器,上述第一分支目标地址预测缓存器存储着:寄存器标识与预测目标跳转地址的一一对应关系信息,上述第二分支目标地址预测缓存器存储着:程序计数器的字段与预测目标跳转地址的一一对应关系信息,其中,上述分支预测方法,包括:从指令缓存中读取指令;
若确定读取的上述指令满足寄存器预测条件,则:
根据读取的上述指令的寄存器标识,从上述第一分支目标地址预测缓存器中获取读取的上述指令的预测目标跳转地址;
若确定读取的上述指令不满足上述寄存器预测条件,则:
则根据读取的上述指令的程序计数器,从上述第二分支目标地址预测缓存器中获取读取的上述指令的预测目标跳转地址;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于华为技术有限公司;中国科学院计算技术研究所,未经华为技术有限公司;中国科学院计算技术研究所许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201310367653.9/2.html,转载请声明来源钻瓜专利网。