正文内容 评论(0)
高度共享,弹性浮点单元解析
前文提到的性能提升80%是有条件的,运算是整数型的才可能有如此幅度的提升,虽然浮点运算只占20%左右,一旦遇到技术与商业领域中常用到的浮点计算,一组浮点单如何满足性能需要也成了关键,对此AMD给出的解决方式是增强浮点单元的弹性,运算指令可拆分可合并以适应不同情况。
Bulldozer的Flex FP浮点单元为两个整数单元所共享使用
按照AMD官方博客指出的那样,Bulldozer的Flex FP虽然为两组整数单元共享,但是它拥有独立的浮点调度器,并不依赖整数单元的调度器来分配指令,同时也不占用整数单元的资源来排定256位的执行方式。相比之下,Intel的CPU架构中整数单元和浮点单元共用一组调度器,需要同时分配整数和浮点运算的指令。
Bulldozer的Flex FP单元也会支持SSE3、SSE4.1/4.2、AES、AVX以及AMD演化自SSE5的FMA4、XOP和PCLMULQDQ等多种指令,前面的几种早已得到支持,AVX则是最新的指令集,Intel也只是在刚刚发布的SNB架构CPU上首次使用。
Intel改进了SNB的浮点单元,将16个XMM寄存器改为256位的YMM寄存器,并去掉了现有架构中只能载入/储存128位指令的限制,因此每周期可以执行一个256位FP ADD(浮点加)或者FP Multiply(浮点乘)指令,同时配以更大的缓冲器(Buffer)以匹配位宽提升。
Bulldozer同样支持256位AVX指令,但是支持方式与SNB有所不同。它的浮点单元由两个128位FMAC(Fused Multiply-accumulate )单元组成,这个浮点单元通用性很强,每周期可以执行任意一个FAMC(Floating-Point Multiply-Accumulators,浮点累积乘)、FADD(Floationg Point Addition,浮点加)或者FMUL(Floationg Point Multiplication,浮点乘)计算,相比之下Intel的浮点单元功能较为专一,FADD和FMUL计算需要专用的FADD及FMUL管线。AMD的浮点单元的好处是针对不同的浮点计算有充足的弹性空间,如果指令是256位的,那么两个FAMC单元可以合并为一个256位浮点单元计算,如果指令不是256位的而是128位的,那么FAMC单元可以同时执行两个同样的FADD或FMUL指令。
对于另一个AES(Advanced Encryption Standard,高密度加速标准)指令,只要是符合FIPS 197标准的,Flex FP也能提供硬件加速,而且每周期可以操作16B指令。AES加速功能主要针对商用市场,现有的八核Xeon至强处理器拥有8个浮点单元,Bulldozer的的服务器版Interlagos最多会有16个Flex FP单元,其运算带宽会两倍于现有产品。
Flex FP浮点单元拥有高弹性、高通用性的优点,Bulldozer因此可以少设计一组浮点单元,这样不仅减少了核心面积,同时也降低了功耗,因为在不执行256位AVX指令的时候(目前支持AVX指令的应用尚且不多)大多只用到一个128位FMAC单元,其空闲功耗可以降至峰值功耗的2%。