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指令
