基本信息
Intel的微架構進入了全速發展的時期,在2010年4月結束的IDF峰會上Intel公司就發布了2010年的RoadMap。2011年1月Intel發布了處理器微架構
Sandy Bridge,其中全新增加的
指令集也將帶來CPU性能的提升。
Intel公司將為Sandy Bridge帶來全新的指令擴展集Intel Advanced Vector Extensions (Intel AVX)。
Intel全新的發展戰略也表明,從2010年開始軟體和新指令也將有更好的兼容,而單指令多數據流
浮點運算(即實數運算)並非決定因素,所以CPU的性能就變得更加困難。而性能增強的同時,單指令多數據流浮點運算在已有編碼的基礎上也必須會有更大的提升空間,特別是scalar整數運算部分。目前
單執行緒整數運算性能的提升也遇到了瓶頸,本次IDF展會上,確定了這一CPU開發方向的同時也表明了技術的進化趨勢。
AVX並不是x86 CPU的
擴展指令集,可以實現更高的效率,同時和CPU硬體兼容性也更好,並且也有著足夠的擴展空間,這都和其全新的命令格式系統有關。更加流暢的架構就是AVX發展的方向,換言之,就是擺脫傳統x86的不足,在SSE指令的基礎上AVX也使SSE指令接口更加易用。
針對AVX的最新的命令編碼系統,Intel也給出了更加詳細的介紹,其中包括了大幅度擴充指令集的可能性。比如Sandy Bridge所帶來的融合了乘法的雙指令支持。從而可以更加容易地實現512位和1024位的擴展。而在2008年末到2009年推出的meniikoaCPU“Larrabee(LARAB)”處理器,就會採用AVX指令集。從地位上來看AVX也開始了Intel處理器指令集的新篇章。
指令格式
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中壓縮。
未來指令格式
由於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進行了相關的介紹。
VEX編碼格式的另外一個重要點就是有著強大的指令集擴展支持,而對於同樣命令長度的指令也更加容易地實現,這樣就使不斷增長的命令兼容變得更加容易。
其中5位元組版的payload
,也專門有著指令擴展的3比特空間,而3位也意味著1000條新指令的支持,全新的ficha和新的暫存器以及vector也都可以更加容易地增加。
除了VEX
指令格式外還有著1,024位的SIMD的支持。同時多重prefix的支持和之前的beru比較,全部的指令在格式上都更小,之前的1位元組C5通過C4,也可以決定op code的長度。而從硬體上來看的話,指令的puridekodo實現也更加容易。
解決瓶頸
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變得更慢,所以必須要改變長標註的算法。
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的fetch&decoding
Nehalem的設計其實存在著疑問,不過從VEX格式來分析的話其意圖就非常明確了。Intel在完善了CPU的puridekodo&decoding硬體設計的同時,必須要改進
指令格式本身。fetch的指令變短的同時,指令的標註卻更加複雜了,而解決的唯一辦法就是改進指令格式。
在充分考慮硬體方面設計後,intel做出了VEX格式開始的決策。IDF上Valentine先生也對VEX格式進行了詳細的說明。他是Core MA的front end的fetch開發以及decoding的高級架構師,同時也是IA-32/Intel 64指令編碼器的設計專家。
從整體來看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 指令集中的一部分。
Intel 的FMA 指令是3 operands(
運算元)的,被稱為 FMA3,而AMD的FMA是4 operands 的,被稱為 FMA4,AMD認為4 operands 更能提供效率。更加細化!