[轉]SIMD、MMX、SSE、AVX、3D Now!、NEON

轉載來源《【整理】SIMD、MMX、SSE、AVX、3D Now!、neon》緩存

本文摘取部份內容,詳細請看原文。架構

SIMD

NEON是通用的SIMD(單指令多數據)引擎。性能

對於SISD,每一個指令只能處理一個數據,而SIMD一個指令能夠處理多個數據,由於多個數據的處理是平行的,所以從時間來講,一個指令執行的時間,SISD和SIMD是差很少的。因爲SIMD一次能夠處理N個數據,因此它的處理的時間也就縮短到SISD的1/N。須要指出一點,NEON是須要 硬件支持的,須要有一塊寄存器放到硬件上來處理這個的。SIMD、MMX、SSE、AVX、3D Now!、NEON
 
SIMD單指令流多數據流( SingleInstruction Multiple Data, SIMD)是一種採用一個控制器來控制多個處理器,同時對一組數據(又稱「數據向量」)中的每個分別執行 相同的操做從而實現空間上的並行性的技術。在微處理器中,單指令流多數據流技術則是一個控制器控制多個平行的處理微元,例如Intel的MMX或SSE以及AMD的3D Now!技術。

MMX

由英特爾開發的一種SIMD多媒體指令集,共57條指令。於1996年集成在英特爾奔騰 (Pentium) MMX處理器上,以提升其多媒體數據的處理能力。優化

 

優勢:編碼

增長了處理器關於多媒體方面的處理能力。.net

缺點:64位MMX寄存器實際上就是浮點數寄存器的別名,所以MMX指令佔用浮點數寄存器進行計算,與浮點數操做互斥。MMX和浮點數模式切換須要時間,經過減小模式切換來節約時間。blog

後來英特爾在此基礎上發展出SSE指令集;AMD在此基礎上發展出3DNow!指令集。如今新開發的程序再也不僅使用MMX來優化軟件執行效能,而是改使用如SSE、3DNOW!等更容易優化效能的新一代多媒體指令集,不過目前的處理器仍能夠執行鍼對MMX優化的較早期軟件。ip

SSE

繼 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

SSE2是 Intel在Pentium 4處理器的最第一版本中引入的,可是AMD後來在Opteron 和Athlon64處理器中也加入了SSE2的支持。SSE2指令集添加了對64位雙精度浮點數的支持,以及對整型數據的支持,也就是說這個指令集中全部的MMX指令都是多餘的了,同時也避免了佔用浮點數寄存器。這個指令集還增長了對CPU快取的控制指令。AMD對它的擴展增長了8個XMM寄存器,可是須要切換到64位 模式(x86-64/AMD64)纔可使用這些寄存器。Intel後來在其Intel 64架構中也增長了對x86-64的支持。

AVX(Advanced Vector Extensions)

Intel的SSE延伸架構,如IA16至IA32般的把緩存器XMM 128bit提高至YMM 256bit,以增長一倍的運算效率。此架構支持了三運算指令(3-Operand Instructions),減小在編碼上須要先複製才能運算的動做。在微碼部分使用了LES LDS這兩少用的指令做爲延伸指令Prefix。

FMA

FMA是Intel的AVX擴充指令集,如名稱上熔合乘法累積(Fused Multiply Accumulate)的意思同樣。

3DNow!

3DNow!(據稱是「3D No Waiting!」的縮寫)是由AMD開發的一套SIMD多媒體指令集,支持單精度浮點數的矢量運算,用於加強x86架構的計算機在三維圖像處理上的性能。

相關文章
相關標籤/搜索