複製鏈接
請複製以下鏈接發送給好友

AVX指令集

鎖定
AVX指令集是Sandy BridgeLarrabee架構下的新指令集。AVX是在之前的128位擴展到256位的單指令多數據流。而Sandy Bridge的單指令多數據流演算單元擴展到256位的同時數據傳輸也獲得了提升,所以從理論上看CPU內核浮點運算性能提升到了2倍。
Intel AVX指令集,在單指令多數據流計算性能增強的同時也沿用了的MMX/SSE指令集。不過和MMX/SSE的不同點在於增強的AVX指令,從指令的格式上就發生了很大的變化。x86(IA-32/Intel 64)架構的基礎上增加了prefix(Prefix),所以實現了新的命令,也使更加複雜的指令得以實現,從而提升了x86 CPU的性能。
中文名
AVX指令集
外文名
Advanced Vector Extensions
類    型
架構下的指令集

AVX指令集基本信息

Intel的微架構進入了全速發展的時期,在2010年4月結束的IDF峯會上Intel公司就發佈了2010年的RoadMap。2011年1月Intel發佈了處理器微架構Sandy Bridge,其中全新增加的指令集也將帶來CPU性能的提升。
Intel公司將為Sandy Bridge帶來全新的指令擴展集Intel Advanced Vector Extensions (Intel AVX)。
全新指令集Intel AVX概要 全新指令集Intel AVX概要
2倍浮點運算性能 2倍浮點運算性能
Intel全新的發展戰略也表明,從2010年開始軟件和新指令也將有更好的兼容,而單指令多數據流浮點運算(即實數運算)並非決定因素,所以CPU的性能就變得更加困難。而性能增強的同時,單指令多數據流浮點運算在已有編碼的基礎上也必須會有更大的提升空間,特別是scalar整數運算部分。單線程整數運算性能的提升也遇到了瓶頸,本次IDF展會上,確定了這一CPU開發方向的同時也表明了技術的進化趨勢
2008年之後的Intel指令集 2008年之後的Intel指令集
Intel指令集進化圖 Intel指令集進化圖
AVX並不是x86 CPU的擴展指令集,可以實現更高的效率,同時和CPU硬件兼容性也更好,並且也有着足夠的擴展空間,這都和其全新的命令格式系統有關。更加流暢的架構就是AVX發展的方向,換言之,就是擺脱傳統x86的不足,在SSE指令的基礎上AVX也使SSE指令接口更加易用。
針對AVX的最新的命令編碼系統,Intel也給出了更加詳細的介紹,其中包括了大幅度擴充指令集的可能性。比如Sandy Bridge所帶來的融合了乘法的雙指令支持。從而可以更加容易地實現512位和1024位的擴展。而在2008年末到2009年推出的meniikoaCPU“Larrabee(LARAB)”處理器,就會採用AVX指令集。從地位上來看AVX也開始了Intel處理器指令集的新篇章。

AVX指令集指令格式

AVX的256位單指令多數據流擴展支持是其最具革新的設計部分,同時也代表了指令編碼格式的變更。x86(IA-32/Intel 64)指令,在op code之前增加了一個字節的prefix,從而實現了擴展的支持。增強的寄存器也使指令頭部分不斷增加prefix成為了可能。單指令多數據流指令也以SIMDprefix的身份出現,另外Intel 64也增加了8個寄存器從而實現了對於REXprefix的支持。
IA-32/Intel 64的另外一個優勢就是對於prefix的擴展,不過也存在一些不足,比如prefix指令格式變得更加複雜,而指令也更長等。因此IA-32/Intel 64的指令如果要實現decoding將增加難度,而decoding的同時也將帶來電力的消耗。實際上Core Microarchitecture(Core MA)所遇到的最大瓶頸,就是指令的puridekodo和fetch。而prefix的不斷增加也使指令的結尾產生了新的問題。
AVX的指令編碼系統的產生,同時也是SSE指令進化的必然。(IA-32/Intel 64)SIMD指令最初是3個字節,不過對於追加的數據類型在這基礎之上,64-位 增加了8個1字節的Prefix寄存器,並且在命令頭處增加了1字節。Intel的Bob Valentine先生(CPU Architect, Mobility Group)對此進行了説明。
AVX對於變更編碼指令編碼格式方面,也有了解決辦法,其中增加了1個重疊字節的prefix就成為低效率的解決方案,而VEX(Vector Extension)的prefix以及1-2個字節的連續VEX的payload(Payload)系統,也成為相對完美的解決辦法。
VEX編碼的構想,就是壓縮Prefix中包含的信息,在1個字節的payload中全部包括了prefix的內容。並且在今後導入的新的寄存器中,128位或更長的256位的數據,也將在payload中壓縮。

AVX指令集未來指令格式

支持16路SIMD指令 支持16路SIMD指令
由於VEX的支持,AVX的長指令可以變得更短,而VEX的payload也有着1字節和2字節兩種,VEXprefix為1字節payload的C5和2字節的C1,以及1字節的payload等情況,同樣的指令和之前的指令格式比較beru的1字節分指令相比也更短。
實際上1字節的payload也並不會全部載入,也有着2個版本的VEX,4字節版本和5字節版本。而對於大部分legacy編碼,即使是64位的指令,也可以支持4字節指令寄存。而1字節指令就變得更加短小了。 而幾個全新的指令也使用了新的寄存器,所以增加了5字節的版本。Valentine先生對VEX進行了相關的介紹。
Intel的Bob Valentine先生 Intel的Bob Valentine先生
VEX編碼格式的另外一個重要點就是有着強大的指令集擴展支持,而對於同樣命令長度的指令也更加容易地實現,這樣就使不斷增長的命令兼容變得更加容易。
其中5字節版的payload
,也專門有着指令擴展的3比特空間,而3位也意味着1000條新指令的支持,全新的ficha和新的寄存器以及vector也都可以更加容易地增加。
除了VEX指令格式外還有着1,024位的SIMD的支持。同時多重prefix的支持和之前的beru比較,全部的指令在格式上都更小,之前的1字節C5通過C4,也可以決定op code的長度。而從硬件上來看的話,指令的puridekodo實現也更加容易。

AVX指令集解決瓶頸

AVX的VEX的編碼系統,從某一側面上也反應了Intel處理器今後的進化趨勢,因為它解決了x86系列CPU在decoding上的不足。Core MA有着4條命令的執行通道,不過front end卻存在着不足,首先L1緩存fetch端口也有着16字節的長度。而fetch的命令次數也被得到了限制。首先IA-32/Intel 64命令的puridekodo也有着先天的瓶頸,而操作數和地址長度的指令prefix“LCP(Length Changing Prefixes),使得puridekodo變得更慢,所以必須要改變長標註的算法。
fetch&puridekodo的最優化設計 fetch&puridekodo的最優化設計
AVX指令集 AVX指令集
Core MA在puridekodo&decoding方面的不足,從根本上來看是IA-32/Intel 64指令集架構本身的問題。IA-32/Intel 64架構為了增強長命令而增設的緩存,使命令fetch的更長,並且更加複雜的命令格式也由此產生。RISC(Reduced Instruction Set Computer)的命令格式也決定了其長度,decoding雖然容易,但x86系CPU也就要以犧牲資源為代價,同時也帶來了電力的額外消耗。
實際上最新的Nehalem也有着類似Core MA的不足,從某種程度上來看也延續了其不足,如果明確了這一問題的話,那麼Nehalem就必須要改進,其中16bytesfetch和puridekodo等方面的改進就勢在必行了。而改進所需要的龐大晶體管增加,也會帶來功耗的增加。
Nehalem結構圖 Nehalem結構圖
Nehalem的fetch&decoding
Nehalem的設計其實存在着疑問,不過從VEX格式來分析的話其意圖就非常明確了。Intel在完善了CPU的puridekodo&decoding硬件設計的同時,必須要改進指令格式本身。fetch的指令變短的同時,指令的標註卻更加複雜了,而解決的唯一辦法就是改進指令格式。
在充分考慮硬件方面設計後,intel做出了VEX格式開始的決策。IDF上Valentine先生也對VEX格式進行了詳細的説明。他是Core MA的front end的fetch開發以及decoding的高級架構師,同時也是IA-32/Intel 64指令編碼器的設計專家。
Core Architecture結構圖 Core Architecture結構圖
從整體來看AVX指令的話,可以看出intel公司都CPU開發的全部脈絡,Intel公司在對比beru的話,產生改進Drastic的指令集的微架構的想法就變得順理成章了,如果分析原因的話,那就是微架構本身的改進了。全新的CPU必然要有更好的性能表現,想要提高CPU的性能,那麼指令集是最行之有效的手段。
AVX擴展指令包含了SSE指令,這也有助於AVX時代的過度。日前的SSEVEX格式也並不需要絕對的轉換過程。Intel公司的Benny Eitan先生也提到,出於整體的考慮,Intel公司對於AVX普及的進行並不會太過迅速,並且也不會立刻停止SSE及MMX時代。
Sandy Bridge也增強了解碼器的支持,和之前的IA-32/Intel 64prefix相比,decoding也有了全新的VEX格式的支持。其中VEX指令對於decoding的命令數的支持上更加強勁,同時VEX在執行效率上也更加出色。不過這些和Sandy Bridge真正到來的時候可能還存在差異。
AMD新推出FMA指令也 是 AVX 指令集中的一部分。
AMD 的FMA 指令是3 operands(操作數)的,被稱為 FMA3,而AMD的FMA是4 operands 的,被稱為 FMA4,AMD認為4 operands 更能提供效率。更加細化!