如何解读Intel SIMD Intrinsic的晦涩命名与缩写?
SIMD Intrinsic命名缩写解读指南
Intel SIMD Intrinsic的命名遵循固定规则,掌握后可快速拆解复杂指令名,核心结构为:_mm[256/512]_<操作缩写>_<数据类型后缀>
一、通用结构说明
_mm:对应128位SSE指令集;_mm256对应256位AVX;_mm512对应512位AVX-512<操作缩写>:由单字母或组合缩写构成,描述指令核心操作逻辑<数据类型后缀>:明确指令操作的元素类型及符号属性
二、核心缩写对照表
操作类型缩写
dp:点积(Dot Product)mul:乘法(Multiply)add:加法(Add)madd:乘加(Multiply-Add)mpsadbw:逐块绝对差求和(Mean of Absolute Differences of Blocks, Word-sized)dwuuds:无符号双字-单字无符号点积(Dot Product of Unsigned Doublewords and Unsigned Words, with Saturation)maddubs:无符号字节×有符号字节累加并饱和到有符号16位(Multiply Add Unsigned Byte to Signed Byte, Saturate)s:饱和(Saturate,结果超出范围时截断到边界值)u:无符号(Unsigned,对应有符号的s)p:Packed(批量操作,处理向量所有元素;与标量操作的s对应)ss:单精度浮点数标量操作(Scalar Single)sd:双精度浮点数标量操作(Scalar Double)
数据类型后缀
pd:批量双精度浮点数(Packed Double-precision)ps:批量单精度浮点数(Packed Single-precision)epi8:批量有符号8位整数(Packed Signed 8-bit Integers)epu8:批量无符号8位整数(Packed Unsigned 8-bit Integers)epi16:批量有符号16位整数(Packed Signed 16-bit Integers)epu16:批量无符号16位整数(Packed Unsigned 16-bit Integers)epi32:批量有符号32位整数(Packed Signed 32-bit Integers)epu32:批量无符号32位整数(Packed Unsigned 32-bit Integers)epi64:批量有符号64位整数(Packed Signed 64-bit Integers)epu64:批量无符号64位整数(Packed Unsigned 64-bit Integers)
三、复杂指令名拆解示例
_mm_maddubs_epi16:_mm:128位SSE指令maddubs:无符号字节与有符号字节相乘,结果累加后做饱和处理epi16:输出为批量有符号16位整数
_mm_mpsadbw_epu8:_mm:128位SSE指令mpsadbw:对多块无符号8位数据计算绝对差,求和后得到字(16位)大小的结果epu8:输入为批量无符号8位整数
_mm256_dpwuuds_epi32:_mm256:256位AVX指令dpwuuds:无符号双字(32位)与无符号字(16位)执行点积操作,结果做饱和处理epi32:输出为批量有符号32位整数
内容的提问来源于stack exchange,提问作者user541686
相关产品推荐
相关产品推荐

