像这个样子分支是不是就不会打乱流水线了?
流水处理器都会预取指令,分支是会打乱流水线的,奔腾处理器的分支预测功能是改进方法之一。
我在http://218.98.38.18/weijiyuanli/chapter4/c1-4-2-1.htm看到
- 另一主要问题是指令流中会有转移指令,转移发生时必须到转移目标处开始取指令、执行指令,指令流水线必须排空并重注入,这会给指令流水线的性能带来严重损失。转移指令的影响及处理技术是指令流水线的特有问题,我们将在4.2.2节予以介绍。
- 三. 改进办法
- 为了使取指段不造成延迟,普遍采用的不是单一的指令缓冲器而是一个FIFO指令预取队列,并且往往是两路,一路用作预取顺序指令,一路用作预取转移目标处的指令序列,如图4.4所示。这些指令预取队列作为附加段变为指令流水线的一部分。
复制代码
有处理器用这种机制吗?这个样子分支是不是打不乱流水线了?请各位讲解一下。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
这里转移目标指令的预取队列应该是指 branch target buffer, 如果是跳转指令可以通过匹配直接获得跳转地址,前提是匹配成功等一些逻辑条件.
量化研究一书对现代体系结构有很多介绍, 国内的资料太老.
谢谢LS,我就是问问这种方法是不是不会打乱流水线。
这种方法MS很费资源。
感觉确实很费资源
因为这不仅仅是“预取指令”的问题
在“确定分支的方向”之前,两个分支上的操作都必须进行。
如果是在流水线的第N级确定跳转地址,那么从预取指令到N-1级的流水线部件都要准备两份。
还有两种方法也可以减少分支损失。1是用新的汇编指令避免使用分支,2是如LS所说,尽量早一点确定分支的方向
谢谢。
也看了你的ELF Loader,学习。:wink:
处理器的设计,人只要想的到的办法都拿去用过了。
这种方法应该也拿来用过,但是确实很费。还是有一些别的手段来解决这一问题的。但是单buffer一旦出现预测错误,损失还是比较大的。
看来避免分支还是必要的,但分支总是不可避免的。