日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MMX、SSE、AVX等SIMD指令集说明

發布時間:2023/12/3 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MMX、SSE、AVX等SIMD指令集说明 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

發展歷程

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數據類型簡介

SIMD數據類型有——
__m64:64位緊縮整數(MMX)。
__m128:128位緊縮單精度(SSE)。
__m128d:128位緊縮雙精度(SSE2)。
__m128i:128位緊縮整數(SSE2)。
__m256:256位緊縮單精度(AVX)。
__m256d:256位緊縮雙精度(AVX)。
__m256i:256位緊縮整數(AVX)。
注:緊縮整數包括了8位、16位、32位、64位的帶符號和無符號整數。

每一種類型,從2個下劃線開頭,接一個m,然后是vector的位長度。
如果向量類型是以d結束的,那么向量里面是double類型的數字。如果沒有后綴,就代表向量只包含float類型的數字。
整形的向量可以包含各種類型的整形數,例如char,short,unsigned long long。也就是說,__m256i可以包含32個char,16個short類型,8個int類型,4個long類型。這些整形數可以是有符號類型也可以是無符號類型。

這些數據類型與寄存器的對應關系為——
64位MM寄存器(MM0~MM7):__m64。
128位SSE寄存器(XMM0~XMM15):__m128、__m128d、__m128i。
256位AVX寄存器(YMM0~YMM15):__m256、__m256d、__m256i

?

函數命名約定


_mm<bit_width>_<name>_<data_type>

<bit_width> 表明了向量的位長度,對于128位的向量,這個參數為空,對于256位的向量,這個參數為256。
<name>描述了內聯函數的算術操作。
<data_type> 標識函數主參數的數據類型。

ps 包含float類型的向量
pd 包含double類型的向量
epi8/epi16/epi32/epi64 包含8位/16位/32位/64位的有符號整數
epu8/epu16/epu32/epu64 包含8位/16位/32位/64位的無符號整數
si128/si256 未指定的128位或者256位向量
m128/m128i/m128d/m256/m256i/m256d 當輸入向量類型與返回向量的類型不同時,標識輸入向量類型

變量命名規范參考

? ? ? ? 參考匈牙利命名法(Hungarian notation),在變量名前面增加類型前綴。
  類型前綴為3個小寫字母,首字母代表寄存器寬度,最后兩個字母代表緊縮數據類型。

  寄存器寬度(首字母)——
m:64位MM寄存器。對應 __m64
x:128位SSE寄存器。對應 __m128、__m128d、__m128i。
y:256位AVX寄存器。對應 __m256、__m256d、__m256i。

  緊縮數據類型(兩個字母)——
mb:8位數據。用于只知道長度、不知道具體緊縮格式時。(b:Byte)
mw:16位數據。(w:Word)
md:32位數據。(d:DoubleWord)
mq:64位數據。(q:QuadWord)
mo:128位數據。(o:OctaWord)
mh:256位數據。(h:HexWord)
ub:8位無符號整數。
uw:16位無符號整數。
ud:32位無符號整數。
uq:64位無符號整數。
ib:8位帶符號整數。
iw:16位帶符號整數。
id:32位帶符號整數。
iq:64位帶符號整數。
fh:16位浮點數,即半精度浮點數。(h:Half)
fs:32位浮點數,即單精度浮點數。(s:Single)
fd:64位浮點數,即雙精度浮點數。(d:double)

  例如——
mub:64位緊縮字節(64位MMX寄存器,其中存放了8個8位無符號整數)。
xfs:128位緊縮單精度(128位SSE寄存器,其中存放了4個單精度浮點數)。
xid:128位緊縮帶符號字(128位SSE寄存器,其中存放了4個32位帶符號整數)。
yfd:256位緊縮雙精度(256位AVX寄存器,其中存放了4個雙精度浮點數)。
yfh:256位緊縮半精度(256位AVX寄存器,其中存放了16個半精度浮點數)。

相關鏈接:

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指令集说明的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。