分支延迟槽
来源:互联网 发布:一列数据怎么求和 编辑:程序博客网 时间:2024/05/17 04:27
分支延迟槽
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 和 SPARC 还是作了保留。
分支延迟槽 (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 和 SPARC 还是作了保留。
- 分支延迟槽
- MIPS中的分支延迟槽
- MIPS中的分支延迟槽
- mips的分支延迟槽
- 【转】关于分支延迟槽
- 【转】关于分支延迟槽
- MIPS中的分支延迟槽
- mips分支延迟槽及虚拟地址转换等问题
- MIPS 分支延迟与加载延迟
- 指令调度算法(schedule)及分支延迟技术
- Android 启动页面延迟跳转与第二次启动分支跳转
- 计算机组成原理之指令调度和延迟分支
- MIPS流水线以及分支延迟和加载延迟概念(一)
- 延迟
- 分支
- 分支
- 分支
- 分支
- 利用createPackageContext()方法遇到的问题
- MyEclipse 设置条件断点
- 能做一辈子的工作
- RAC之VIP配置
- 安装win7驱动显示“需要交互式窗口工作站”的若干解决方法
- 分支延迟槽
- 【Linux技巧】应该知道的Linux技巧
- Alert 弹出提示框
- android 4.0 更换鼠标图案
- Android获取其他包的Context实例,然后调用它的方法
- [设计模式]ChainOfResponsibility责任链模式
- Java compiler level 问题解决办法
- LinearLayout加载动态view时显示不全解决办法
- JAVA中代码顺序,静态块 静态变量,加载顺序!