像这个样子分支是不是就不会打乱流水线了?

发布于 2022-09-26 13:24:12 字数 639 浏览 10 评论 0

流水处理器都会预取指令,分支是会打乱流水线的,奔腾处理器的分支预测功能是改进方法之一。

我在http://218.98.38.18/weijiyuanli/chapter4/c1-4-2-1.htm看到

  1. 另一主要问题是指令流中会有转移指令,转移发生时必须到转移目标处开始取指令、执行指令,指令流水线必须排空并重注入,这会给指令流水线的性能带来严重损失。转移指令的影响及处理技术是指令流水线的特有问题,我们将在4.2.2节予以介绍。
  2.   三. 改进办法
  3.   为了使取指段不造成延迟,普遍采用的不是单一的指令缓冲器而是一个FIFO指令预取队列,并且往往是两路,一路用作预取顺序指令,一路用作预取转移目标处的指令序列,如图4.4所示。这些指令预取队列作为附加段变为指令流水线的一部分。

复制代码

有处理器用这种机制吗?这个样子分支是不是打不乱流水线了?请各位讲解一下。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

偷得浮生 2022-10-03 13:24:12

这里转移目标指令的预取队列应该是指 branch target buffer, 如果是跳转指令可以通过匹配直接获得跳转地址,前提是匹配成功等一些逻辑条件.
量化研究一书对现代体系结构有很多介绍,  国内的资料太老.

羁绊已千年 2022-10-03 13:24:12

谢谢LS,我就是问问这种方法是不是不会打乱流水线。
这种方法MS很费资源。

云淡月浅 2022-10-03 13:24:12

感觉确实很费资源

因为这不仅仅是“预取指令”的问题
在“确定分支的方向”之前,两个分支上的操作都必须进行。
如果是在流水线的第N级确定跳转地址,那么从预取指令到N-1级的流水线部件都要准备两份。

还有两种方法也可以减少分支损失。1是用新的汇编指令避免使用分支,2是如LS所说,尽量早一点确定分支的方向

无远思近则忧 2022-10-03 13:24:12

谢谢。
也看了你的ELF Loader,学习。:wink:

-柠檬树下少年和吉他 2022-10-03 13:24:12

处理器的设计,人只要想的到的办法都拿去用过了。
这种方法应该也拿来用过,但是确实很费。还是有一些别的手段来解决这一问题的。但是单buffer一旦出现预测错误,损失还是比较大的。

你怎么这么可爱啊 2022-10-03 13:24:12

看来避免分支还是必要的,但分支总是不可避免的。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文