AMD官方详解推土机“弹性浮点单元”!
泡泡网CPU频道10月30日 尽管在AMD北京“融聚未来”创新技术大会上,AMD全球服务器首席技术官Don Newell已经深入介绍了推土机、山猫微架构,但是可能还有很多网友还进行更深入的了解。在AMD官方博客上,AMD服务器与工作站产品市场经理John Fruehe今天就推土机架构中的所谓“Flex FP”(弹性浮点单元)做了详细阐述。
AMD官方详解推土机“弹性浮点单元”!
采用了“Flex FP”设计后,Bulldozer将在浮点性能上带来巨大进步,这对于科学、财务等领域的应用来说是一大利好消息。这些领域要求持续性的大量浮点预算,并且现有的架构面临越来越大的性能挑战。
我们已经知道,AMD推土机架构采用了模块化设计,每个模块内有两个整数核心和一个浮点核心,各自搭配专用的调度器,而且浮点核心可为两个整数核心所共享使用。因为有自己的调度器,浮点核心不必依赖整数调度器去安排浮点命令,也无需借助整数资源去执行256位命令。相比之下,Intel的架构中整数和浮点核心共用一个调度器,它必须同时处理整数和浮点命令。
推土机架构会在指令集方面做出大幅度的扩展,加入支持SSSE3、SSE 4.1/4.2、AVX、AES、FMA4、XOP、PCLMULQDQ等等,其中最关键的就是AVX。
AVX指令集可以执行256位浮点指令,但需要澄清的是,并没有什么所谓的“256位命令”。单精度命令都是32位的,双精度则是64位。使用今天标准的128位浮点单元,可以在一个时钟周期内并行执行四个单精度命令或者两个双精度命令。有了AVX效率就可以翻一番,亦即每时钟周期内执行八个32位单精度命令,或者两个64位双精度命令。
当然了,这得要应用程序支持AVX才行,否则的话256位浮点单元只会运行在128位模式下——正因为如此,AMD提出了弹性浮点单元。
如今的典型数据中心负载都以整数运算为主,浮点运算只占很小一部分,所以绝大多数情况下一个庞大的256位浮点单元只会白白消耗内核面积和功耗,坐视整数单元忙得要死。推土机通过在两个整数核心之间共享一个256位浮点单元,既节省了内核面积和功耗,也能灵活满足实际负载需求。
Flex FP弹性浮点单元由两个128位FMAC(乘法累加器)组成,每一个都可以在每时钟周期内执行FMAC、FADD(浮点加法)、FMUL(浮点乘法),而Intel的架构中只能通过单个FADD管线执行FADD指令,FMUL亦然。有了FMAC单元,乘法和加法命令不会像标准FADD、FMUL那样拥堵在一起,两个单元都可以灵活处理这些计算命令。如果一个程序只使用FADD,那么两个FMAC单元都可以全力执行FADD。
这种设计的其他好处还有:支持FMA4指令而实现非破坏性DEST,降低寄存器的压力;消除中间反复步骤,提高精确度。
顺便再说说AES。如果应用程序符合美国商务部FIPS 197加密标准,AES就能为其实现硬件加速。推土机的Flex FP单元也能执行这些一次16个字节的指令,速度为每时钟周期一个,是现有带宽的两倍。
Flex FP的设计理念对降低功耗也大有好处,能让设计人员在同样的功耗指标下放入更多繁忙的整数单元。事实上,Flex FP的设计目标之一就是将其空闲功耗降至峰值功耗的区区2%。
Flex FP的美妙之处在于它既是单个256位浮点单元,又被两个整数核心所共享。每个时钟周期内,每个整数核心都可以通过两个128位指令或者一个256位指令来来操作256位并行数据,或者每个整数核心同时执行128位命令。
这种硬件设计对BIOS、软件编程来说也并不复杂,可以随着每个处理器时钟周期儿变化,以满足特定时刻的需求。以下是每个周期内的四种可能场景:
1、核心1:两个128位AVX或者未编译SSE命令;核心2:无浮点命令
2、核心1:无浮点命令;核心2:两个128位AVX或者未编译SSE命令
3、核心1:128位浮点命令;核心2:128位浮点命令
4、核心1:无浮点命令;核心2:无浮点命令
可以看出,浮点单元的弹性设计使得整个系统都更加灵活,也优化了每个周期内每个核心的性能。
对于应用程序来说,256位AVX指令集需要它们重新编译才能充分利用,这显然需要时间和反复测试,因此AVX的普及也不会是一朝一夕的事情,而灵活的Flex FP浮点单元设计有望加速这一进程。■