硬科技:淺談x86的SIMD指令擴張史(中):SSE2到SSE4

2020.04.07 08:00AM
照片中提到了X4、ХЗ、X2,包含了數、角度、線、點、動畫片

前情提要:淺談x86的SIMD指令擴張史(上)。MMX到SSE有了對應IEEE 754單精確度浮點格式的SSE還是不夠,最起碼,當時的x86處理器還缺了3個重要的關鍵點:

  • 64位元雙倍浮點精確度。
  • 受制於x86指令的編碼,暫存器才少少的8個。
  • x86的雙運算元(A = A + B)格式,會摧毀其中1個暫存器原本的資料(如例子中的A),要保存資料,需事先搬移到其他的暫存器,增加程式碼體積,更讓第二個問題雪上加霜。

SSE2提供IEEE754 64位元雙倍精確度

2001年隨著Pentium 4而問世的144個SSE2指令解決了第一個問題,包含了一系列的快取記憶體控制指令,並順便擴充了MMX,雖然這時候的SSE2已足以完全取代MMX了。

照片中提到了13、New data types for XMM、128 bits: Can be used as:,包含了三角洲飲料、角度、線、點、字形

指令數量之所以會激增,也是為了提供更多樣化的「花式」資料操作。但也請注意,這些指令集也不是每個指令都會進行SIMD運算。

照片中提到了127、SP FP 3、96 95,包含了情節、流式SIMD擴展、x86-64、x86、SIMD

如果應用程式已經使用80x87的80位元延伸精確度格式,轉到SSE2仍會產生數值誤差,所以不可能完全廢棄這古老的包袱,即使微軟的Visual Studio從2012年開始,浮點運算就預設使用SSE2,意思就是微軟已經認定那時候的電腦都有SSE2可用了。。

AMD x86-64倍增資料暫存器

某種意義上來說Intel也是因禍得福,當然他們絕對不會這樣想。

AMD透過刪除INC/DEC指令,擠出空間實作REX prefix,提供在64位元模式新增暫存器的指令編碼空間,讓x86指令編碼中所有可標定暫存器的3位元欄位,都擴展到了4位元,只要指令多出了REX Prefix這1個Byte,64位元x86處理器即可享受到倍增的資料暫存器。不過,程式不一定用到新暫存器,代表REX並非「必備品」,當啟動新暫存器時,REX會無預警增加指令長度,提高最佳化指令解碼器設計的困難度。

照片中提到了REX Prefix、{4xh}、Opcode,包含了圖、產品設計、角度、線、產品

慘劇就發生在Intel Core 2家族(Merom, Penryn)身上,只要是64位元模式,前後相鄰的「比較(Compare)/跳躍(Jump)」合而為單一條件運算的「巨集指令融合(Macro Fusion)機制」就自動人間蒸發。

照片中提到了With Intel's New、Macro-Fusion、Instruction Queue,跟英特爾有關,包含了屏幕截圖、英特爾核心、英特爾酷睿2、中央處理器

AMD發表x86-64時很多人拍手叫好,但實際上因過度重視對32位元的相容性與最低的硬體修改成本(K8是由K7延伸出來的產物),AMD的擴充手段並不乾淨俐落,日後也同時造成所有(實質上也就那兩家)x86處理器廠商的困擾。

在AMD手上「結束」的SSE

在革命性的AVX出現前,Intel仍持之以恆的擴充SSE指令集,像數值轉換、載入長度不同的向量值、如何讓資料「對齊」等細節就姑且在此不談了,重點如下:

  • SSE3:又稱PNI(Prescott New Instructions),追加13個指令,「總算」支援了在AMD 3DNow!已存在的「水平」運算,能對同一個XMM暫存器內的資料進行「橫向」處理,不再只能「向下操作」。

照片中提到了Лекция 3. Векторизация кода (Сode vectorization: SSE, AVX)、4 Clip slide、Intel SSE3 & SSE4,跟薩斯和比迪有關,包含了屏幕截圖、維持療法、屏幕截圖、靶向治療、治療

  • SSSE3:TNI(Tejas New Instructions)或MNI(Merom New Instructions) ,SSE3的「補充包」,因為16個新指令都可操作XMM和MMX暫存器,因此在某些文件也被視為「32個指令」。
  • SSE4.1:Intel在Penryn加入的47個新指令。
  • SSE4.2:Intel在Nehalem加入的7個新指令。
  • SSE4a:AMD在原生四核心的K10「Barcelona」選擇性支援4個SSE4指令和4個初代SSE指令,後來的推土機家族就很乾脆的全部吃下所有的「SSE4」了。

在這裡就不得不提AMD搶先在Intel之前註冊商標的「SSE5」,AMD用全新的Opcode3與DREX欄位徹底取代REX,實現了x86指令集前所未有的「三運算元格式/四運算元語法」與「乘積累加(Multiply Accumulation,A = A x B + C)」指令,彌補自己年輕時所犯下「成功的錯誤」,但還好AMD沒有硬推SSE5,「皈依」更加簡潔有條理的Intel AVX,要不然微軟為首的軟體廠商們又要抓狂了,科科。

照片中提到了2 Bytes、1 byte、1 or 2 bytes,包含了圖、產品設計、角度、線、產品

1 則回應