SSE
维基百科,自由的百科全书
SSE(Streaming SIMD Extensions)是英特尔在AMD的3D Now!发布一年之后,在其计算机芯片Pentium III中引入的指令集,是繼MMX的擴充指令集。SSE 指令集提供了 70 條新指令。AMD后来在Athlon XP中加入了对这个新指令集的支持。
目录 |
[编辑] SSE 的暫存器
SSE 加入新的 8 個 128 位元暫存器(XMM0~XMM7)。而 AMD 發表的 x86-64 延伸架構《又稱 AMD64》再加入額外 8 個暫存器。除此之外還有一個新的 32 位元的控制/狀態暫存器(MXCSR)。不過只能在 64 位元的模式下才能使用額外 8 個暫存器。
每個暫存器可以容納 4 個 32 位元單精度浮點數,或是 2 個 64 位元雙精度浮點數,或是 4 個 32 位元整數,或是 8 個 16 位元短整數,或是 16 個字元。整數運算能夠使用正負號運算。而整數 SIMD 運算可能仍然要與 8 個 64 位元 MMX 暫存器一起執行。
因為作業系統必須要在進程切換的時候保護這些 128 位元的暫存器狀態,除非作業系統去啟動這些暫存器,否則預設值是不會去啟用的。這表示作業系統必須要知道如何使用 FXSAVE 與 FXRSTOR 指令才能儲存 x87 與 SSE 暫存器的狀態。而在當時 IA-32 的主流作業系統很快的都加入了此功能。
由於 SSE 加入了浮點支援,SSE 就比 MMX 更加常用。而 SSE2 加入了整數運算支援之後讓 SSE 更加的有彈性,當 MMX 變成是多餘的指令集,SSE 指令集甚至可以與 MMX 並行運作,在某些時候可以提供額外的性能增進。
第一個支援 SSE 的 CPU 是 Pentium III,在 FPU 與 SSE 之間共用執行支援。當編譯出來的軟體能夠交叉的同時以 FPU 與 SSE 運作,Pentium III 並無法在同一個周期中同時執行 FPU 與 SSE。這個限制降低了指令管線的有效性,不過 XMM 暫存器能夠讓 SIMD 與純量浮點運算混合執行,而不會因為切換 MMX/浮點模式而產生性能的折損。
[编辑] SSE 指令表
SSE 提供純量與包裹式(packed)浮點指令。
浮點指令
- 記憶體到暫存器/暫存器到記憶體/暫存器之間的資料搬移
- 純量 – MOVSS
- 包裹式 – MOVAPS, MOVUPS, MOVLPS, MOVHPS, MOVLHPS, MOVHLPS
- 數學運算
- 純量 – ADDSS, SUBSS, MULSS, DIVSS, RCPSS, SQRTSS, MAXSS, MINSS, RSQRTSS
- 包裹式 – ADDPS, SUBPS, MULPS, DIVPS, RCPPS, SQRTPS, MAXPS, MINPS, RSQRTPS
- 比較
- 純量 – CMPSS, COMISS, UCOMISS
- 包裹式 – CMPPS
- 資料拆包(unpack)與隨機搬移(shuffle)
- 包裹式 – SHUFPS, UNPCKHPS, UNPCKLPS
- 資料型態轉換
- 純量 – CVTSI2SS, CVTSS2SI, CVTTSS2SI
- 包裹式 – CVTPI2PS, CVTPS2PI, CVTTPS2PI
- 逐位邏輯運算
- 包裹式 – ANDPS, ORPS, XORPS, ANDNPS
整數指令
- 數學運算
- PMULHUW, PSADBW, PAVGB, PAVGW, PMAXUB, PMINUB, PMAXSW, PMINSW
- 資料搬移
- PEXTRW, PINSRW
- 其他
- PMOVMSKB, PSHUFW
其他指令
- MXCSR 管理
- LDMXCSR, STMXCSR
- 快取與記憶體管理
- MOVNTQ, MOVNTPS, MASKMOVQ, PREFETCH0, PREFETCH1, PREFETCH2, PREFETCHNTA, SFENCE
[编辑] 後續版本
- SSE2是Intel在Pentium 4處理器的最初版本中引入的,但是AMD后来在Opteron 和Athlon 64處理器中也加入了SSE2的支持。SSE2指令集添加了对64位双精度浮点数的支持,以及对整型数据的支持,也就是说这个指令集中所有的MMX指令都是多余的了,同时也避免了占用浮点数寄存器。这个指令集还增加了对CPU快取的控制指令。AMD对它的扩展增加了8个XMM寄存器,但是需要切换到64位模式(AMD64)才可以使用这些寄存器。Intel后来在其EM64T架构中也增加了对AMD64的支持。
- 詳見:SSE2
- SSE3是Intel在Pentium 4處理器的 Prescott 核心中引入的第三代SIMD指令集,AMD在Athlon 64的第五个版本,Venice核心中也加入了SSE3的支持。这个指令集扩展的指令包含寄存器的局部位之间的运算,例如高位和低位之间的加减运算;浮点数到整数的转换,以及对超執行緒技术的支持。
- 詳見:SSE3
- SSSE3是Intel針對SSE3指令集的一次額外擴充,最早內建於Core 2 Duo處理器中。
- 詳見:SSSE3
- SSE4是Intel在Penryn核心的Core 2 Duo與Core 2 Solo處理器時,新增的47條新多媒體指令集,並且現在更新至SSE4.2。AMD也開發了屬於自己的SSE4a多媒體指令集,並內建在Phenom與Opteron等K10架構處理器中,不過無法與Intel的SSE4系列指令集相容。
- SSE5是AMD為了打破Intel壟斷在處理器指令集的獨霸地位所提出的,SSE5初期規劃將加入超過100條新指令,其中最引人注目的就是三運算元指令(3-Operand Instructions)及熔合乘法累積(Fused Multiply Accumulate)。其中,三運算元指令(3-Operand Instructions)讓處理器可將一個數學或邏輯函式庫,套用到運算元或輸入資料。藉由增加運算元的數量,一個 x86 指令能處理二至三筆資料, SSE5 允許將多個簡單指令匯整成一個指令,達到更有效率的指令處理模式。提升為三運算指令的運算能力,是少數 RISC 架構的水平。熔合乘法累積(Fused Multiply Accumulate)讓允許建立新的指令,有效率地執行各種複雜的運算。熔合乘法累積可結合乘法與加法運算,透過單一指令執行多筆重複計算。透過簡化程式碼,讓系統能迅速執行繪圖著色、快速相片著色、音場音效,以及複雜向量演算等效能密集的應用作業。
SSE5最快將內建於AMD下一代Bulldozer核心。
- 詳見:SSE5
- AVX是Intel的SSE延伸架構,如IA16至IA32般的把暫存器XMM 128bit提升至YMM 256bit,以增加一倍的運算效率。此架構支持了三運算指令(3-Operand Instructions),減少在編碼上需要先複製才能運算的動作。在微碼部分使用了LES LDS這兩少用的指令作為延伸指令Prefix。
- 詳見:AVX
- 詳見:FMA
[编辑] 參見
|
|
|
|---|---|
| 人物 | 高登·摩爾 · 安迪·葛洛夫 · 羅伯特·諾宜斯 · 克雷格·貝瑞特 · 保羅·歐德寧 |
| 平台 | 迅馳(Centrino) · 欢悦(Viiv) · 博锐(VPro) · 奔腾(Pentium) · 酷睿(Core) · 安騰(Itanium) |
| Pentium系列 | Pentium · Pentium Pro · Pentium II · Celeron · Pentium III · Pentium 4 · Pentium 4 Extreme Edition · Pentium M · Celeron D · Pentium D · Pentium Extreme Edition |
| Core系列 | Core Duo/Core Solo · Core 2 Duo/Core 2 Extreme/Core 2 Quad |
| Xeon系列 | Pentium II Xeon · Pentium III Xeon · Xeon |
| 技術 | Extreme Graphics · GMA |
| 斜體字代表已經停產的系列 | |

