Intel的AVX2指令集解讀


原文鏈接:http://blog.csdn.net/vbskj/article/details/38408213

在Intel Sandy Bridge架構中,Intel引入了256位SIMD擴展AVX,這套指令集在兼容原MMX、SSE、SSE2對128位整點SIMD支持的基礎上,把支持的總向量數據寬度擴展成了256位。新增了若干條256位浮點SIMD指令。

昨天(2014年8月5日),Intel剛剛發布了AVX2指令集,這套指令集在AVX基礎上做了擴展,不過要在2013年發布的Haswell處理器上才能支持。參考1給出了AVX2的詳細特性。


AVX2指令集概述

相比AVX,AVX2在如下方面做了擴展。

  • 支持的整點SIMD數據寬度從128位擴展到256位。Sandy Bridge雖然已經將支持的SIMD數據寬度增加到了256位,但僅僅增加了對256位的浮點SIMD支持,整點SIMD數據的寬度還停留在128位上,
  • 增強廣播、置換指令支持的數據元素類型、移位操作對各個數據元素可變移位數的支持、跨距訪存支持。

跨距訪存支持

跨距訪存支持即訪存時,每個SIMD數據的向量數據元素可以來自不相鄰的內存地址。AVX2的跨距訪存指令稱為”gather”指令,該指令的操作數是一個基地址加一個向量寄存器,向量寄存器中存放着SIMD數據中各個元素相對基地址的偏移量是多少。有了這條指令,CPU可以輕松用一條指令實現若干不連續數據”聚集”到一個SIMD寄存器中。這會對編譯器和虛擬機充分利用向量指令帶來很大便利,尤其是自動向量化。另外,參考2中對跨距訪存指令的功能描述中可以看到,當該指令的偏移地址向量寄存器中任何兩個值相同時,都會出GP錯。這意味着編譯器還是需要些特殊處理才能利用好這條指令。

跨距訪存指令

但跨距訪存指令僅僅支持32位整點、64位整點、單精度浮點、雙精度浮點的跨距訪存操作。從參考4可以猜測其實gather指令只是在硬件上分解成若干條32位或64位的微訪存指令實現。這就移位着其實一條32×8的SIMD訪存其實就是8次32位普通數據訪存,其訪存延時和延時不確定性會非常大,聊剩於無。

拓寬原有整點SIMD指令

理論上從128位到256位的成倍SIMD寬度擴展能帶來一倍的加速。

 

從128位擴展到256位的整點SIMD指令

位操作指令支持

這些指令在加速數據庫壓縮、哈希,大數的算術計算方面會有幫助。

 

新增的位訪存操作指令

任意位置的SIMD數據置換支持

這一支持將使編譯器可以更靈活的使用這條指令協助自動向量化。像參考5這類工作就能實施在Intel的芯片中。

 

任意位置數據置換指令支持

向量-向量移位支持

之前Intel上的所有SIMD擴展指令的移位操作僅支持所有SIMD數據同時移位相同的位數,有了向量-向量移位支持,就可以為每個SIMD數據做不同的移位操作。

 

向量-向量移位操作支持

浮點乘法累積操作

之前的X86處理器上的累積操作多數針對整點數據,這次針對浮點數據增加的60條SIMD操作會給Intel跑浮點Benchmark,比如linpack之類的帶來很多加速。

編譯點滴》評論

之前幾乎所有在通用微處理器上的SIMD指令,都傾向於一刀切策略,即所有的SIMD操作都針對SIMD數據實施完全相同的操作,並不存在特性化的指令。比如訪存都是從一塊連續的地址空間直接訪存、移位時所有的數據都移動相同的位數,數據置換指令的支持也是最近才出現在通用CPU中的。AVX2的這些支持再次肯定了個性化的趨勢,CPU中的SIMD支持朝着GPU的方向大踏步前進,並最終趕上並超越向量機。不得不稱贊一下IBM的超前思想。AVX2中的這些特性支持在幾年前的Power處理器中就已經出現了。

雖然AVX號稱可以擴展到512位甚至1024位的SIMD支持,但是所帶來的問題怎么解決,期待AVX3或者AMD的小宇宙爆發,或者威盛的黑馬:

  1. 理論上,增加1倍的向量數據寬度,將帶來2倍的晶體管數量提升。目前,Intel的AVX指令集只實現在片上每個core里,作為core中的一個功能部件,若擴展到1024位,將增加4倍的晶體管。雖然制造工藝也會改進,但功耗還是會很大,怎么解決?
  2. 在自動向量化仍然不好用的前提下,普通程序很難利用到這些功能做加速,白白的浪費這些晶體管嗎?
  3. 這么大的數據計算能力,訪存怎么供數?對齊貌似還是沒有好的方法。還是要程序員自己吭哧吭哧寫向量化代碼,調試嗎?芯片廠商可以每幾年升級一次寬度,但兼容性如何保證,原來有64位、128位、256位分別對應MMX、XMM、YMM寄存器,以后呢?

參考

    1. http://software.intel.com/en-us/blogs/2011/06/13/haswell-new-instruction-descriptions-now-available/
    2. http://software.intel.com/file/36945
    3. http://en.wikipedia.org/wiki/Haswell_%28microarchitecture%29
    4. http://software.intel.com/en-us/forums/showthread.php?t=83459&o=a&s=lr
    5. http://portal.acm.org/citation.cfm?id=1133996


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM