返回上一页  首页 | cnbeta报时: 00:29:23
后藤弘茂:AMD Bulldozer处理器解码宽度将拓展为每时钟周期四条MacroOP
发布日期:2009-12-21 12:08:32  稿源:
根据AMD官方发布的Bulldozer架构资料,我们可以清楚地看到Bulldozer内部的整数执行单元将被划分为两组,分别对应一个线程,而浮点单 元则只有一组,而指令取和指令解码部分则采用共享式的设计。尽管AMD并没有详细说明Bulldozer的指令解码部分相对旧款K7/K8/K10作出了 什么改进,但我们可以根据这些官方的展示内容,推断出Bulldozer的指令解码宽度将从K7/K8/K10的每时钟周期三条MacroOP提升为四条 MacroOP,以下便是我们推论的过程:



 
据我们估计,Bulldozer架构的指令解码/发射机构是在旧有架构的基础上发展而来的。在AMD旧有的K7/K8/K10架构中,x86指令的解码工作可以分为两个阶段(如果算上前面的predecode预解码,那么便是三个阶段):


1-当预解码完成之后,K7/K8/K10的取指令机构会从一级指令缓存中将预解码后的指令取出。并将指令解码为MacroOP宏操作(即包含微操作的指令).这便是解码的第一阶段工作;

2-之后这些解码得到的MarocOP宏指令会在指令调度器(ICU)那里被进一步分解成uOP微操作,这是解码的第二阶段工作。

为什么要将解码分成MacroOP和uOP两个阶段进行?

之所以需要把解码工作分为两个阶段来进行,这是由于X86指令集的特性所决定的。x86指令集本身属于CISC复杂指令集,顾名明思意,与RISC精简指令集有所不同,复杂指令集的指令并不仅限于对单个寄存器的操作指令,还可能包含有对多个寄存器,甚至直接对内存单元的操作指令。

这样,如果二级缓存中并不包含所需的内存数据,那么指令便将被迫进入长达数十个周期的等待状态,为了避免出现这种停等现象,就必须在指令解码的同时预先将所需的数据取出。

为此,在使用x86指令集的AMD/Intel处理器中,必须分开设立一个专门负责执行指令的执行管线,以及一个负责读写内存的载入/储存管线,只有执行所需的数据已经由载入/储存管线取来之后,才安排这些指令的执行,这样便能保证内存的读写和指令的执行不会出现冲突。与此对应的是,处理器中的uOP微操作也因此被分成两种类型,一种是载入/存储类微操作,另一类则是执行类微操作。其中前者被发射到载入/存储管线执行,而后者则会被发送到执行管线执行。

AMD K7/K8/K10的MacroOP宏指令解说:

将X86指令转换为uOP微操作(在K6的官方技术文档中,AMD将这种微操作称为RISC86),在过去AMD K6和Intel Netburst处理器的时代,是在解码阶段直接一次完成的。不过,这种设计方式也存在一些问题,比如由于将指令分成执行类uOP和载入/存储类uOP,因此解码器所需处理的指令类型条数极多,而CPU的解码器也将因为需要解码的uOP指令种类太多而显得过于复杂。


后来,从AMD K7和Intel Core架构时代起,X86处理器中加入了AMD称为宏操作(MacroOP)/Intel称为微操作融合(Fused uOP)的设计,这种设计可以将执行类uOP和载入/存储类uOP合并在一起组成一条MacroOP或Fused OP指令发射到ICU。


采用这种技术之后,每个解码周期内,x86指令最多可以被解码器分解成3条K7/K8/K10中的MacroOP操作,这些操作随后被送往ICU指令控制单元,然后再由ICU内部的保留站Reservation Station(即所谓的指令调度器)进行处理,进一步分解为更小的操作单位微操作uOP,保留站将负责把这些uOP送到不同的执行管线中执行。

K7/K8/K10中,整数执行单元部分由负责整数运算的ALU单元和负责地址计算的AGU地址生成单元两部分配对组成,一共有三个这样的ALU+AGU的配对单元,正好符合前面每周期最多解码三条MacroOP操作的数量。

在K7/K8/K10中,这种结构的整数执行单元每周期可以最多处理6条uOP,假设所有的MacroOP都被分解成两条uOP,这样每周期能够执行的MacroOP便正好是三条。纵观AMD处理器流水线的各个阶段,都是以每时钟周期处理三条MacroOP的能力进行设计的。

Bulldozer中将把指令解码宽度增加到每周期四条MacroOP:


那么,在Bulldozer架构内部,又对K7/K8/K10的解码部分进行了那些改进呢?

Bulldozer的指令解码部分,按照上面的分析,并根据AMD目前公开的Bulldozer资料,我们可以推测出Bulldozer将采取四路解码设计,也就是说每时钟周期Bulldozer所能解码出的MacroOP数量将由K7/K8/K10中的三条增加到四条。我们有两个证据可以支持这个推测,首先一条证据是AMD发布的US20090006814专利,这个专利中介绍了一种四路解码技术;另外一条证据则是根据AMD公布的Bulldozer执行单元的内部结构,我们可以看到负责整数运算的整数执行单元和负责地址计算的载入/存储单元一共有四组(每单元两组),这样根据我们上面有关K7/K8/K10的说明,我们便可以推断Bulldozer将采取每时钟周期可解码四条MacroOP的设计。


这样,在K7/K8/K10中的ICU单元在Bulldozer中可被拆分为三个部分。假设Bulldozer中仍然采用MacroOP的设计,那么这些MacroOP在解码后会被发送到三个ICU单元中,分别是两个整数调度器和一个浮点调度器。属于两个不同线程的MacroOP将分为两个周期分别发送到执行单元中去,前一个周期属于线程A的四条MacroOP分解出的uOP会被发送到整数执行单元1,而后一个周期属于线程B的四条MacroOP分解出的uOP则会被发送到整数执行单元2.





这样,虽然对应每个整数执行单元的整数调度器每隔一个时钟周期都会出现一个空闲周期.不过如果假设这四条MacroOP每一条都可以被分解为两条uOP,那么每时钟周期这些调度器都可以发送四条uOP到执行单元,正好分为两个时钟周期发送完,这样执行单元便完全不会出现空闲的状况。

CNBeta编译
原文:
pcwatch
我们在FebBox(https://www.febbox.com/cnbeta) 开通了新的频道,更好阅读体验,更及时更新提醒,欢迎前来阅览和打赏。

返回上一页  首页 | cnbeta报时: 00:29:23

文字版  标准版  电脑端

© 2003-2025