MyException - 我的异常网
当前位置:我的异常网» 软件架构设计 » 处理器之Trace Cache浅析

处理器之Trace Cache浅析

www.MyException.Cn  网友分享于:2014-08-06  浏览:0次
微处理器之Trace Cache浅析

问题背景是这样的:随着处理器内流水线越来越长,主频越来越高,分支问题带来的性能损失就越来越明显了。根据统计,分支指令占指令总数的10%(静态),15%(动态)。也就是说平均每处理6~7条指令就出现一条条件转移指令。比如流水线的深度为25,当出现条件转移时,整个流水线都需要被刷新,这个性能损失是难以容忍的。尽管可以采用分支预测等手段来减缓条件转移带来的开销,但并不能彻底解决问题。

我们首先来研究一下分支指令的执行速度:

ExecTime = PredictTime + FailRate * FailPenalty

其中,ExecTime是执行分支指令的速度,PredictTime是预测成功情况下,指令的执行速度。FailRate是预测失败的概率,FailPenalty是分支预测失败时恢复流水线所耗费的时间。FailRate的降低主要依靠提升分支预测的准确率,可以通过在程序里添加一些信息告知编译器那个分支的概率更高点,但是想进一步提高就很困难了。Trace Cache的出现可以降低PredictTime和FailPenalty.

对于X86指令集,译码的时间是非常长的。流水线的大部分工作都是在执行译码,如果能把这部分时间去除或者大幅降低将大幅提高指令的执行速度。从这个角度出发,我们再接着考察实际的程序。事实上,处理器在执行程序的时候总是会处理循环的。这是因为现代处理器可以在1秒内轻易处理10GB以上条指令,如果没有循环,那么这一秒内的程序文件将达到10GB以上,而实际上可执行程序的大小通常是10KB~20MB,也就是说程序中的平均每条指令都需要执行1000次~1000,000次。根据这个观察的结果,如果我们能将1次的译码时间分摊在1000条甚至1000,000条指令上将大幅提升指令的执行速度。

Trace Cache正是基于这个理念实现的,如果把一个窗口内的指令集译码完毕后保存到一个缓冲区中,如果下次再需要执行时,直接从这个缓冲区中读取,不再进行译码将有效降低分支指令预测失败带来的开销。这有两个原因:第一个是可以降低FailPenalty。我们可以宏观的将处理器流水线分为两部分:取指译码部分和执行部分。如果分支预测失败,也只需要将执行部分的流水线清空,而不需要将取指译码部分的流水线清空。第二个原因是降低了PredictTime。这是因为如果分支预测成功了,可以直接从Trace Cache中加载译码之后产生的微操作(uOp),相当于消除了条件指令在译码流水线上耗费的时间。考虑到条件指令占总指令数量的15%左右,这个提升还是非常可观的。

Trace Cache还能带来其他的好处:

  • 消除指令预取要求的字节对齐。为了充分利用16字节对齐的指令预取要求,函数和循环的入口地址通常需要按照16字节对齐。而Trace Cache中直接加载微操作,这个要求就不需要了。
  • 可以消除译码配对问题。处理器通常将简单指令和复杂指令在不同的部件上执行,为了在执行微操作时充分实现部件之间的全并行,编译器在优化时需要按照一定的模式对译码后的微操作进行配对。而Trace Cache中直接加载的就是微操作,不需要再进行配对。
Trace Cache虽然有很多优点,但是其最大的缺点就是缓冲区耗费的空间比较大。占用较多的芯片面积,随着集成技术的进步,这个问题将会慢慢有所改观。
参考:http://memcache.drivehq.com/memparam/Bench/Other/TraceCache.htm

文章评论

团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
那些争议最大的编程观点
那些争议最大的编程观点
我是如何打败拖延症的
我是如何打败拖延症的
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
Java程序员必看电影
Java程序员必看电影
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
为什么程序员都是夜猫子
为什么程序员都是夜猫子
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
旅行,写作,编程
旅行,写作,编程
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
10个调试和排错的小建议
10个调试和排错的小建议
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
编程语言是女人
编程语言是女人
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
程序员必看的十大电影
程序员必看的十大电影
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
代码女神横空出世
代码女神横空出世
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
程序员应该关注的一些事儿
程序员应该关注的一些事儿
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
程序员的鄙视链
程序员的鄙视链
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
一个程序员的时间管理
一个程序员的时间管理
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
漫画:程序员的工作
漫画:程序员的工作
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
程序员和编码员之间的区别
程序员和编码员之间的区别
程序员都该阅读的书
程序员都该阅读的书
 程序员的样子
程序员的样子
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
中美印日四国程序员比较
中美印日四国程序员比较
鲜为人知的编程真相
鲜为人知的编程真相
如何成为一名黑客
如何成为一名黑客
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有