轉載來源《【整理】SIMD、MMX、SSE、AVX、3D Now!、neon》緩存
本文摘取部份內容,詳細請看原文。架構
NEON是通用的SIMD(單指令多數據)引擎。性能
由英特爾開發的一種SIMD多媒體指令集,共57條指令。於1996年集成在英特爾奔騰 (Pentium) MMX處理器上,以提升其多媒體數據的處理能力。優化
優勢:編碼
增長了處理器關於多媒體方面的處理能力。.net
缺點:64位MMX寄存器實際上就是浮點數寄存器的別名,所以MMX指令佔用浮點數寄存器進行計算,與浮點數操做互斥。MMX和浮點數模式切換須要時間,經過減小模式切換來節約時間。blog
後來英特爾在此基礎上發展出SSE指令集;AMD在此基礎上發展出3DNow!指令集。如今新開發的程序再也不僅使用MMX來優化軟件執行效能,而是改使用如SSE、3DNOW!等更容易優化效能的新一代多媒體指令集,不過目前的處理器仍能夠執行鍼對MMX優化的較早期軟件。ip
繼 MMX技術以後,Intel又於1999年在Pentium-III處理器上推出SSE技術,引入了新的128比特寬的寄存器集 (register file),稱做XMM0到XMM7。這些XMM寄存器用於4個單精度浮點數運算的SIMD執行,並能夠與MMX整數運算或x87浮點運算混合執行。 2001年在Pentium 4上引入了SSE2技術,進一步擴展了指令集,使得XMM寄存器上能夠執行8/16/32位寬的整數SIMD運算或雙精度浮點數的SIMD運算。這使得 SIMD技術基本完善。開發
SSE(Streaming SIMD Extensions)是英特爾在AMD的3DNow!發佈一年以後,在其計算機芯片Pentium III中引入的指令集,是繼MMX的擴充指令集。SSE 指令集提供了 70 條新指令。AMD後來在Athlon XP中加入了對這個新指令集的支持。get
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 緩存器一塊兒執行。
SSE2是 Intel在Pentium 4處理器的最第一版本中引入的,可是AMD後來在Opteron 和Athlon64處理器中也加入了SSE2的支持。SSE2指令集添加了對64位雙精度浮點數的支持,以及對整型數據的支持,也就是說這個指令集中全部的MMX指令都是多餘的了,同時也避免了佔用浮點數寄存器。這個指令集還增長了對CPU快取的控制指令。AMD對它的擴展增長了8個XMM寄存器,可是須要切換到64位 模式(x86-64/AMD64)纔可使用這些寄存器。Intel後來在其Intel 64架構中也增長了對x86-64的支持。
Intel的SSE延伸架構,如IA16至IA32般的把緩存器XMM 128bit提高至YMM 256bit,以增長一倍的運算效率。此架構支持了三運算指令(3-Operand Instructions),減小在編碼上須要先複製才能運算的動做。在微碼部分使用了LES LDS這兩少用的指令做爲延伸指令Prefix。
FMA是Intel的AVX擴充指令集,如名稱上熔合乘法累積(Fused Multiply Accumulate)的意思同樣。
3DNow!(據稱是「3D No Waiting!」的縮寫)是由AMD開發的一套SIMD多媒體指令集,支持單精度浮點數的矢量運算,用於加強x86架構的計算機在三維圖像處理上的性能。