|
原帖由 Edison 于 2006-8-29 17:46 发表
所有和主题无关的贴都会被删除,请各位发言注意。
再来一个和主题无直接关系的(这次不算), 不负责任
-----------------------------
若合理对照以前的标准
2006年一种处理器的普通ALU指令(SUB EAX,EBX)的“基本”流水线可分为如下14级STAGE:
1 STAGE:Fetch1 取指1
2 STAGE:Fetch2/Fetch buffer 取指2
3 STAGE:Predecode1 预译码1
4 STAGE:Predecode2/Rot 预译码2
5 STAGE:Predecode queue 预译码队列
6 STAGE:Dec1 译码1
7 STAGE:Dec2 译码2
8 STAGE:Dec3/uop buffer 译码3
9 STAGE:Rat/Alloc 寄存器换名/资源分配
10 STAGE:Alloc/Rob1 再定序缓冲区1
11 STAGE:Rob2 再定序缓冲区2
12 STAGE:Sch 调度
13 STAGE:Disp 派指
14 STAGE:Exec 执行
(解释:“基本”流水线指不包括BTB和RETIRE等部分。这里一级STAGE的任务可能需要多个时钟周期完成,也或者多级STAGE是在一个时钟周期内完成)
各级说明:
第一、二级Fetch1和Fetch2为取指阶段从指令缓存中取出指令,并存入指令缓冲(Fetch Buffer)--
指令缓存中的X86指令块经取指阶段(Fetch1、2)进入取指缓冲区Fetch buffer
第三、四、五级Predecode1、Predecode2和Predecode queue为预译码阶段,获取指令长度等信息,并把指令块旋转(Rot)对齐放入预译码队列--
X86指令块从取指缓冲区中读出,经过预译码器(Predecode1)得到指令长度、指令类别等信息,X86指令块旋转对齐(Predecode2/Rot)后放入预译码队列(Predecode queue)
第六、七、八级Dec1、2、3为译码阶段,把X86指令翻译转换为微指令uop后,存入微指令缓冲区(uop buffer)--
X86指令再经过译码阶段(Dec1、2)产生微指令uop,存入微指令缓冲区(uop buffer)。4个译码器都可以做宏指令融合, 可实现对分支指令融合。宏指令融合和微指令融合的概念区别是:宏指令融合是把多条X86指令融合为一条微指令, 而微指令融合是把同一条X86指令中含有的多个微指令融合为一条微指令。
而各译码器也都可以进行微指令融合,原来一条X86指令可能含有2个微指令, 现在是把一条X86指令直接翻译为一个融合微指令(fusion uop)。Store指令、读修改类指令等可生成融合微指令:例如sub eax,[ebx+esi]指令原来译码器是产生Load tmp,[ebx+esi]; Sub eax,tmp两条微指令,现在译码器直接把sub eax,[ebx+esi]翻译成一条融合微指令Load&Sub eax,[ebx+esi],一条融合微指令可以有3个源寄存器操作数,而以前的一条微指令只能有两个源寄存器操作数。
第九级Rat为寄存器换名阶段,把微操作uop中的寄存器做重命名操作,把逻辑寄存器映射为实际的物理寄存器。资源分配阶段(Alloc)给微操作uop分配再定序缓冲区(ROB)和保留站(RS)以及发射端口等--
微指令中的逻辑寄存器操作数通过Rat单元,映射为实际的物理寄存器,而资源分配单元(Alloc)给微指令分配再定序缓冲区(ROB)和保留站(RS)以及发射端口等
第10、11级为再定序缓冲区阶段(Rob1、Rob2),从ROB中的物理寄存器读计算数据,写到保留站(RS)的寄存器中--
微指令被放入再定序缓冲区ROB,从ROB内的物理寄存器读取计算数据,写到保留站(RS)里。 这里的再定序缓冲区ROB实际是一种先入先出(FIFO)的顺序存储单元,而物理寄存器也在ROB里
第12级Sch为调度阶段,调度器/保留站(RS)单元对微操作进行乱序执行调度。第13级Disp为派发阶段,从发射端口派发微操作指令和保留站(RS)中的寄存器数据到计算单元(例如加法器、移位器等)。第14级Exec为执行阶段, 在计算单元中执行微操作--
微指令在保留站(RS)中得到乱序调度(Sch), 当所有操作数和其它相关资源就绪后, 可被派发(Disp)到计算单元中执行(Exec)
流程:
从指令缓存中取出指令(Fetch1/Fetch2),对指令进行预译码(Predecode1,2)和译码(Dec1,2,3)转化为处理器可执行的微操作指令uop并存入微操作队列;然后利用寄存器换名单元对微操作uop中的寄存器做重命名操作,把微指令中的逻辑寄存器映射为实际的物理寄存器(Rat基本作用是破解uop微指令之间的寄存器伪相关,便于后续的乱序执行提高指令级并行性能), 处理器还将为微指令分配(Alloc)执行资源(这里主要是指:明确微指令该放到ROB中什么位置和RS中什么位置以及哪个派发端口等)。微指令经过寄存器换名和资源分配后,放入再定序缓冲区(ROB)。微指令从再定序缓冲区(ROB)的物理寄存器中读出运算数据,然后写入到调度器(即保留站RS)里;微指令在调度器内进行乱序调度(Sch),不必按原代码顺序执行,只要调度器检测发现各操作数、端口和计算单元就绪,即可派发(Disp)微指令到相应的计算单元执行(Exec)。
取指,预译码,译码,寄存器换名,资源分配 到 进入再定序缓冲区ROB-- 为按序执行阶段;调度和执行阶段--为乱序执行阶段。
普通LOAD指令的“基本”流水线可分为如下16级STAGE:
1 STAGE:Fetch1
2 STAGE:Fetch2/Fetch buffer
3 STAGE:Predecode1
4 STAGE:Predecode2/Rot
5 STAGE:Predecode queue
6 STAGE:Dec1
7 STAGE:Dec2
8 STAGE:Dec3/uop buffer
9 STAGE:Rat/Alloc
10 STAGE:Alloc/Rob1
11 STAGE:Rob2
12 STAGE:Sch
13 STAGE:Disp
14 STAGE:AGU Load地址计算
15 STAGE:DCU1 缓存单元流水线1
16 STAGE:DCU2 缓存单元流水线2
第14级为地址计算而不是ALU计算,并多了第15、16级 两级L1数据缓存单元流水线。L1D的延迟:Load to use延迟为3。
2003年一种处理器的“基本”流水线可分为如下12级STAGE:
1 STAGE:Fetch1
2 STAGE:Fetch2/Fetch buffer
3 STAGE:Predecode1
4 STAGE:Predecode2/Rot
5 STAGE:Predecode queue
6 STAGE:Dec1
7 STAGE:Dec2/uop buffer
8 STAGE:Rat/Alloc
9 STAGE:Rob
10 STAGE:Sch
11 STAGE:Disp
12 STAGE:Exec
1999年一种处理器的“基本”流水线可分为如下10级STAGE:
1 STAGE:Fetch1
2 STAGE:Fetch2
3 STAGE:Decode1
4 STAGE:Decode2
5 STAGE:Decode3
6 STAGE:Rat/Alloc
7 STAGE:Rob
8 STAGE:Sch
9 STAGE:Disp
10 STAGE:Exec |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|