日前的AMD北京創新技術大會上,AMD全球服務器首席技術官Don Newell介紹了推土機、山貓微架構的諸多新特性,不過此前我們都已經做過深入報導。 為了滿足技術愛好者的胃口,AMD服務器與工作站產品市場經理John Fruehe今天又在官方博客上放出一篇深度技術文章,詳細闡述了推土機架構中的所謂“Flex FP”(彈性浮點單元)。
我們已經知道,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浮點單元設計有望加速這一進程。
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浮點單元設計有望加速這一進程。
Bulldozer似乎在指令集的部分強化了不少,但讓小弟我好奇的是,指令集對於一般軟體或是遊戲的使用上,會有很大的影響嗎??? 比較常看到的數據都是快取,時脈跟核心數影響較大的說~