在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 4776|回复: 2

请教一下延迟槽和分支预测的问题

[复制链接]
发表于 2013-10-31 20:26:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
请问现在的MIPS处理器设计中,延迟槽和分支预测是怎样的关系呢?
是提高流水线利用率的完全不相干的两种技术还是说延迟槽是早期用来提高性能的技术,现在已经很少用了呢?
发表于 2013-11-2 07:55:15 | 显示全部楼层
转:
1. 概述
分支延迟槽 (Branch delay slot),简单地说就是位于分支指令后面的一条指令,不管分支发生与否其总是被执行,而且位于分支延迟槽中的指令先于分支指令提交 (commit)。
看这个代码片段 (MIPS Linux kernel 2.6.17):
801ea9d4:     02202021     move   a0,s1
801ea9d8:     27a50014     addiu   a1,sp,20
801ea9dc:     0c0ce551     jal   80339544 <pcibios_resource_to_bus>
801ea9e0:     02403021     move   a2,s2
801ea9e4:     8e240010     lw     a0,16(s1)

MIPS ABI 规定,a0, a1, a2, a3 用于过程调用的前四个参数,则 move a2, s2 是置第 3 个参数,但是其位于函数调用指令 jal 80339544(分支指令)之后,这个 move a2, s2 所在地即为一个分支延迟槽。
分支延迟槽在 DSP 和历史较悠久的 RISC 上比较常见,如 MIPS,  SPARC 等。PowerPC 和 ARM 上则没有这个概念。x86 亦没有。
2. 缘起
引入分支延迟槽的目的主要是为了提高流水线的效率。
流水线中,分支指令执行时因为确定下一条指令的目标地址(紧随其后 or 跳转目标处?)一般要到第 2 级以后,在目标确定前流水线的取指级是不能工作的,即整个流水线就“浪费”(阻塞)了一个时间片,为了利用这个时间片,在体系结构的层面上规定跳转指令后 面的一个时间片为分支延迟槽(branch delay slot)。位于分支延迟槽中的指令总是被执行,与分支发生与否没有关系。这样就有效利用了一个时间片,消除了流水线的一个“气泡”。
这种技术手段主要用在早期没有分支预测的流水线 RISC 上,现代 RISC 实现早就可以在流水线的第 2 级利用分支预测确定跳转的目标,分支延迟槽也就失去了原来的价值,但为了软件上的兼容性 MIPS 和 PowerPC 还是作了保留。
发表于 2021-9-7 20:18:57 | 显示全部楼层
有没有一些好的预测的原理介绍和预测实现用来study的?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-29 16:50 , Processed in 0.020835 second(s), 10 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表