MMX、SSE、AVX等SIMD指令集说明
發(fā)展歷程
SIMD指令集頭文件對應查找表
頭文件?? ?指令集描述
intrin.h?? ?All Architectures
mmintrin.h?? ?MMX
xmmintrin.h?? ?SSE
emmintrin.h?? ?SSE2
pmmintrin.h?? ?SSE3
smmintrin.h?? ?SSE4.1
nmmintrin.h?? ?SSE4.2
immintrin.h?? ?AVX
zmmintrin.h?? ?AVX512
SIMD數(shù)據(jù)類型簡介
SIMD數(shù)據(jù)類型有——
__m64:64位緊縮整數(shù)(MMX)。
__m128:128位緊縮單精度(SSE)。
__m128d:128位緊縮雙精度(SSE2)。
__m128i:128位緊縮整數(shù)(SSE2)。
__m256:256位緊縮單精度(AVX)。
__m256d:256位緊縮雙精度(AVX)。
__m256i:256位緊縮整數(shù)(AVX)。
注:緊縮整數(shù)包括了8位、16位、32位、64位的帶符號和無符號整數(shù)。
每一種類型,從2個下劃線開頭,接一個m,然后是vector的位長度。
如果向量類型是以d結束的,那么向量里面是double類型的數(shù)字。如果沒有后綴,就代表向量只包含float類型的數(shù)字。
整形的向量可以包含各種類型的整形數(shù),例如char,short,unsigned long long。也就是說,__m256i可以包含32個char,16個short類型,8個int類型,4個long類型。這些整形數(shù)可以是有符號類型也可以是無符號類型。
這些數(shù)據(jù)類型與寄存器的對應關系為——
64位MM寄存器(MM0~MM7):__m64。
128位SSE寄存器(XMM0~XMM15):__m128、__m128d、__m128i。
256位AVX寄存器(YMM0~YMM15):__m256、__m256d、__m256i
?
函數(shù)命名約定
_mm<bit_width>_<name>_<data_type>
<bit_width> 表明了向量的位長度,對于128位的向量,這個參數(shù)為空,對于256位的向量,這個參數(shù)為256。
<name>描述了內聯(lián)函數(shù)的算術操作。
<data_type> 標識函數(shù)主參數(shù)的數(shù)據(jù)類型。
ps 包含float類型的向量
pd 包含double類型的向量
epi8/epi16/epi32/epi64 包含8位/16位/32位/64位的有符號整數(shù)
epu8/epu16/epu32/epu64 包含8位/16位/32位/64位的無符號整數(shù)
si128/si256 未指定的128位或者256位向量
m128/m128i/m128d/m256/m256i/m256d 當輸入向量類型與返回向量的類型不同時,標識輸入向量類型
變量命名規(guī)范參考
? ? ? ? 參考匈牙利命名法(Hungarian notation),在變量名前面增加類型前綴。
類型前綴為3個小寫字母,首字母代表寄存器寬度,最后兩個字母代表緊縮數(shù)據(jù)類型。
寄存器寬度(首字母)——
m:64位MM寄存器。對應 __m64
x:128位SSE寄存器。對應 __m128、__m128d、__m128i。
y:256位AVX寄存器。對應 __m256、__m256d、__m256i。
緊縮數(shù)據(jù)類型(兩個字母)——
mb:8位數(shù)據(jù)。用于只知道長度、不知道具體緊縮格式時。(b:Byte)
mw:16位數(shù)據(jù)。(w:Word)
md:32位數(shù)據(jù)。(d:DoubleWord)
mq:64位數(shù)據(jù)。(q:QuadWord)
mo:128位數(shù)據(jù)。(o:OctaWord)
mh:256位數(shù)據(jù)。(h:HexWord)
ub:8位無符號整數(shù)。
uw:16位無符號整數(shù)。
ud:32位無符號整數(shù)。
uq:64位無符號整數(shù)。
ib:8位帶符號整數(shù)。
iw:16位帶符號整數(shù)。
id:32位帶符號整數(shù)。
iq:64位帶符號整數(shù)。
fh:16位浮點數(shù),即半精度浮點數(shù)。(h:Half)
fs:32位浮點數(shù),即單精度浮點數(shù)。(s:Single)
fd:64位浮點數(shù),即雙精度浮點數(shù)。(d:double)
例如——
mub:64位緊縮字節(jié)(64位MMX寄存器,其中存放了8個8位無符號整數(shù))。
xfs:128位緊縮單精度(128位SSE寄存器,其中存放了4個單精度浮點數(shù))。
xid:128位緊縮帶符號字(128位SSE寄存器,其中存放了4個32位帶符號整數(shù))。
yfd:256位緊縮雙精度(256位AVX寄存器,其中存放了4個雙精度浮點數(shù))。
yfh:256位緊縮半精度(256位AVX寄存器,其中存放了16個半精度浮點數(shù))。
相關鏈接:
https://zhuanlan.zhihu.com/p/31271788
https://blog.csdn.net/just_sort/article/details/94393506
https://blog.triplez.cn/avx-avx2-learning-notes/
https://blog.csdn.net/vbskj/article/details/38408213
總結
以上是生活随笔為你收集整理的MMX、SSE、AVX等SIMD指令集说明的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MMX, SSE, SSE2
- 下一篇: MMX指令