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

发展历程

preview

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值