/**
* 计算机体系结构(8)
* 在指令执行时设计的四个步骤
* 1、发射,从指令队列获得一条指令
* 2、执行,如果还有一个或多个操作数不可用,则在等待计算寄存器的同时监控CDB 总线
* 3、写结果,当结果可用时,将它写在CDB上(还有指令发射时的ROB标签),
* 并从CDB写到ROB并写到任何一个需要此结果的保留战
* 4、提交,将结果保留下来。
*
* @基本的VLIM方法
* 使用多个独立的功能单元,将多个操作包含在一个非常长的指令中
* 使用流水线的同时不要忘记更新和优化流水线,导致高效稳定的同事替换腐朽的组件
*
* 推测的代价
* @优势能够发现流水线运行时的缺陷,不至于导致流水线停顿,比如缓存缺失——————提高生产力
* 推测不是免费的,需要时间和空间占据在总的生产里中——减低总体效率的一部分
*
* 有限的分支然评估方案——概率。最优
* 多核和多线程提升吞吐量!
*
* @英特尔 I7 core 架构
* @指令提取
* 处理器使用一个多级分支目标缓冲区,在速度和预测准确度之间达成平衡
* 还有一个返回地址栈,用于加速函数返回。
* @错误预测会损失大约15个时钟周期
* 利用预测地址,指令提取单元从指令缓存中提取16个字节
*
* @16个字节被放在预译码指令缓冲区中——在这一步会执行一个名为微指令融合的进程
* 微融合指令接收指令组合(先对比后分支)然后将组合融合为一个操作。
* 这个预译码过程还会将16个字节分解为独立的x86指令
* 由于x86指令的长度在1-17中任意一个长度,所以译码至关重要
* 译码器必须查看很多字节之后才能知道指令的长度
* 然后将x86指令放到包含18项指令队列中
*
* @微指令译码
* 各个x86指令被转换为微指令,微指令类似于MIPS的简单指令,可由流水线直接执行。
* MIPS 单字长定点指令平均执行速度
* 这种方法是将x86指令集转换为更方便执行的一种简单操作
* 对于复杂的x86指令,译码器使用引擎生成微指令序列
* 可以在每个时钟周期生成4个微指令
*
* @微指令缓冲区执行循环流检测和微融合
* 如果存在一个循环的小指令序列(不满长度 28个指令或者 256个字节)
* 循环流检测器就会找到这个循环,直接从缓冲区中发射微指令,不在需要指令的提取和译码过程。
* @微整合
* @合并指令对
* 比如载入/ALU运算,ALU运算/存储、并发送到保留站——在保留站仍然可独立发射这些微指令
* 从而提高缓冲的利用率
*
* @执行基本指令发射
* 在寄存器表中查看寄存器位置
* 对寄存器进行重命名,分配重排序缓存区项,从寄存器或重排序缓存区项进行提取任意结果,然后向保留站发送微指令
*
* @包含36项的集中保留站
* 提供6个功能单元共享。每个时钟周期可以向这些功能单元分发6个微指令
*
* @微指令由各个功能单元执行
* 然后将结果发送给任何等待的保留站以及寄存器退回单元。一旦知道指令不在进行推测之后,将在这里更新寄存器状态。
* 重排序缓冲区中与该指令相对应的数目被标记完成
*
* @当重排序缓冲区头部的一个或多个指令被标记完成,则执行寄存器回退单元的为未完成写入操作。
* 并将这些指令从重排序指令缓冲区删除。
*/
09-17
444
07-04
4626