Intel, AMD及VIA CPU的微架构(38)

20. AMD Bobcat与Jaguar流水线

Bobcat与Jaguar是低时钟频率、关注低功耗的更小微架构。它通过在大多数时间降低时钟频率,相当进取地节约功耗。我在Bobcat上的测试中,全速仅在数百万行CPU密集代码后看到。在要求更高速度时,可以在BIOS设置中关闭这个节能特性(CoolNQuiet)。

Bobcat有两个核,继承者Jaguar(原文为Bobcat)目前最多有4个核,未来计划有8核的版本。核间不共享执行资源,核不会彼此干扰,除非它们都访问相同的内存地址。

Jaguar支持AVX指令集,但不支持AMD的XOP指令集。AMD 3DNow指令集不再支持,可能视为过时。虽然仍然支持PREFETCH指令。

20.1. AMD Bobcat与Jaguar中的流水线

流水线针对每时钟周期2条指令或μop设计,有两个整数ALU,两个浮点/向量单元,以及两个分别用于读写的AGU。流水线有用于乱序执行的调度器。有两对独立的流水线,一个用于通用整数指令,一个用于浮点与向量指令。通用整数单元有两个整数ALU,读单元与写单元。浮点与向量单元有两条流水线。

设计有两个物理寄存器文件,一个用于整数寄存器,一个用于浮点与向量寄存器。物理寄存器文件的大小,在Bobcat上从64项开始,这可能意味着每个物理寄存器文件有64项可用。临时寄存器值不会在流水线中下移,但保存在物理寄存器文件中,仅物理寄存器的索引或指针保存在流水线里。物理寄存器可以被重命名。

Bobcat有64位物理寄存器,并使用这样两个寄存器来保存一个128位向量。Jaguar支持256位向量的AVX指令。它有128位物理寄存器,并使用两个这样的寄存器来保存一个256位向量。

20.2. ​​​​​​​指令获取

指令获取速度被宣称为“每时钟最多32字节”,但这没有被我的测试所证实,我的测试一直显示,对Bobcat与Jaguar,平均每时钟周期最多16字节。某些报告称,Jaguar有一个循环缓冲,但我没有检测到对微循环的任何性能改善。

20.3. ​​​​​​​指令解码

不像之前的AMD设计,Bobcat与Jaguar不会在代码缓存中标记指令边界。每时钟周期它解码2条指令。对多个前缀或长度改变前缀没有惩罚。没有分支指令的融合。

20.4. ​​​​​​​单、双及复杂指令

大多数常见整数指令仅产生一个μop,包括读-修改-写,push及pop指令。调用指令产生2个μop。

Bobcat有64位执行单元,它把所有128位向量指令分解为至少两个独立的64位μop。Jaguar有128位执行单元,它将所有256位向量指令分解为2个独立的128位μop。(Bobcat不支持256位AVX指令)。产生超过2个μop的指令从微代码ROM生成。

20.5. ​​​​​​​整数执行流水线

对整数μop,有两个带有几乎完全相同ALU的执行流水线。几条指令,包括乘法、除法及某些版本的LEA,仅能由整数流水线0处理,其他指令则可由任一流水线处理。在Bobcat上,整数除法使用具有大额外时延的浮点除法电路。在Jaguar上整数除法要快得多。

有一个读单元与写单元,在Bobcat上宽度都是64位。在Jaguar上是128位。

Bobcat重排缓冲有56项,虽然测量得的重排能力通常小于56个μop。

20.6. ​​​​​​​浮点执行单元

有两个浮点执行流水线,它们也用于整数向量操作。这两个流水线可以处理移动,整数加法与布尔操作。浮点流水线0,这里称为FP0,处理整数乘法与浮点加法。FP1处理浮点乘法与除法。除法电路没有流水线化,也没有早期的特性,因此除法的时延与操作数值无关。

内存读、写操作数使用整数读/写单元,有1或多个时钟周期的额外时延。

在Bobcat上,下溢与次正规操作数的惩罚在150到200时钟周期。Jaguar对次正规数的加法有40时钟周期的惩罚,在乘法给出一个次正规结果或下溢时,是170 ~ 210时钟周期。

虽然对混用256位AVX指令与非AVX的XMM指令,Intel处理器由于模式切换有大的惩罚,但AMD Jaguar没有这样的惩罚。

20.7. ​​​​​​​混用不同时延的指令

在同一流水线上,混用不同时延的μop,很少或者没有可测得的惩罚。

20.8. ​​​​​​​打破依赖指令

将寄存器置零的常见方式是XOR EAX, EAX或SUB EBX, EBX。Bobcat处理器知道某些指令与寄存器的之前值无关,如果两个输入寄存器是同一个。以下指令被视为与输入无关,如果两个操作数都是同一个寄存器:XOR,SUB,SBB(仅依赖进位标记),CMP,PXOR,PANDN,PSUBx,XORPS,PCMPEQx,PCMPGTx, XORPD。指令ANDNPS与ANDNPD在Jaguar上一样,但在Bobcat上不是。

Jaguar可以消除来自一个已经以这个方式置零的128位寄存器的移动,例如:

; Example 20.1. Propagation of zero on Jaguar

pxor xmm0, xmm0                            ; set to zero

movdqa xmm1, xmm0                      ; move eliminated

movdqa xmm2, xmm1                      ; move eliminated

movdqa xmm3, xmm2                      ; move eliminated

不支持其他情形的移动消除。

20.9. ​​​​​​​不同类型指令间的数据时延

当来自一条整数向量指令的输出用作一个浮点向量指令的输入时,有额外1时钟周期的时延,反之亦然。例如,与整数向量指令一起使用MOVAPS,或与浮点指令一起使用MOVDQA,有惩罚。

在一个浮点计算的输出是不同精度的一个浮点计算的输入时,例如,如果一个双精度浮点加法的输出是一个单精度加法的输出,有40时钟周期的惩罚。这几乎没有现实重要性,因为这样一个序列极有可能是一个编程错误,但它说明处理器在一个XMM寄存器的128比特外保存关于浮点值的额外信息。

20.10. ​​​​​​​寄存器的局部访问

处理器总是把小于128位的寄存器的各部分保持在一起。例如,乱序执行机制不将AL与AH视为独立的。但在Bobcat上,一个128位寄存器的高64位与低64位被处理为独立的,在Jaguar上,一个256位寄存器的高128位与低128位被处理为独立的。

20.11. ​​​​​​​缓存

核有独立的1级缓存。在Bobcat上,2级缓存是独立的,但在Jaguar上,在最多4个核间共享。将来8核的Jaguar处理器预期有两个2级缓存,每个由4个核共享。

缓存

Bobcat

Jaguar

1级代码

每核32 kB2路,每行64 B,时延3

每核32 kB2路,每行64 B,时延3

1级数据

 

每核32 kB8路,每行64 B,时延3

每核32 kB8路,每行64 B,时延3

2

每核512 kB16路,每行64 B,时钟频率一半。

最多2 MB16路,每行64 B,时钟频率一半,时延264核间共享

表20.1. Bobcat与Jaguar上的缓存大小

带宽是每时钟周期到1级数据缓存一次读与一次写。在Bobcat上,读与写最多64位,在Jaguar上是128位。

对跨16字节边界的非对齐内存读或写,通常有3时钟周期的惩罚。

20.12. ​​​​​​​写转发暂停

从一个内存写转发数据到一个后续读,在读体量不大于这个写时,工作良好,除非它跨越了16字节边界。

读与后续写的组合时延,对整数寄存器至少是8时钟周期,对向量寄存器是11时钟周期。对失败写转发的惩罚是4 ~ 11时钟周期。

在Jaguar上,对32位及64位通用寄存器,写转发特别快。

寄存器大小

Bobcat

Jaguar

8

8

8

16

8

8

32

8

3

64 g.p

8

3

64 mmx

11

7

128

12

7

256

n.a.

7

表20.2. 在Bobcat与Jaguar上写转发时间,值是最好情形下的时钟周期

20.13. ​​​​​​​Bobcat与Jaguar中的瓶颈

Bobcat与Jaguar有均衡良好的流水线设计,除了低功耗设计显然的瓶颈,没有其他明显的瓶颈。

在Bobcat上,降低功耗相当激进,因此全速率仅在CPU重负载时才能获得。最大吞吐率是每时钟周期2条指令,类似于Intel Atom与VIA Nano处理器。

1级代码缓存仅有2路相关性。这会拖慢非连续代码。在Bobcat上整数除法比浮点除法慢。在Bobcat上,内存写转发有些慢,但在Jaguar上要高得多。在Jaguar上,对通用寄存器,写转发时间仅是3时钟周期,比AMD与Intel更大的处理器都要快。

由于更大的内部寄存器(参考手册4:指令表),在Jaguar上整数向量指令通常比Bobcat上快。在Bobcat上所有128位指令被分解为两个64位μop,得到一半的吞吐率。类似的,在Jaguar上所有256位指令被分解为两个128位μop。

MASKMOVQ与MASKMOVDQU非常慢,部分是由于这些指令要求非缓存写。带有一个内存源操作数的VMASKMOVPS指令在Jaguar上,在掩码为零时,需要超过300时钟周期,这时指令不做任何事。这看起来是一个设计缺陷。

在Bobcat上,PALIGNR指令相当慢。这条指令用在memcpy(内存拷贝)函数的许多实现中。

在Jaguar上预取指令非常慢,但在Bobcat上不是。

20.14. ​​​​​​​文献:

Brad Burgess, et. al.: Bobcat: AMD's Low-Power x86 Processor. IEEE Micro, March/April 2011, pp. 16-25.

Anand Lal Shimpi: AMD’s Jaguar Architecture: The CPU Powering Xbox One, PlayStation 4, Kabini & Temash. May 2013. www.anandtech.com

猜你喜欢

转载自blog.csdn.net/wuhui_gdnt/article/details/88737344
今日推荐