Intel 内部指令 |
您所在的位置:网站首页 › add是什么指令类型的函数 › Intel 内部指令 |
AVX编程基础
数据类型
数据类型描述__m128包含4个float类型数字的向量__m128d包含2个double类型数字的向量__m128i包含若干个整型数字的向量__m256包含8个float类型数字的向量__m256d包含4个double类型数字的向量__m256i包含若干个整型数字的向量
每一种类型,从2个下划线开头,接一个m,然后是vector的位长度。如果向量类型是以d结束的,那么向量里面是double类型的数字。如果没有后缀,就代表向量只包含float类型的数字。整形的向量可以包含各种类型的整形数,例如char,short,unsigned long long。也就是说,__m256i可以包含32个char,16个short类型,8个int类型,4个long类型。这些整形数可以是有符号类型也可以是无符号类型。
函数命名约定
_mm__ 表明了向量的位长度,对于128位的向量,这个参数为空,对于256位的向量,这个参数为256。描述了内联函数的算术操作。 标识函数主参数的数据类型。-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 当输入向量类型与返回向量的类型不同时,标识输入向量类型 初始化函数 用标量值初始化 数据类型描述_mm256_setzero_ps/pd返回一个全0的float类型的向量_mm256_setzero_si256返回一个全0的整形向量_mm256_set1_ps/pd用一个float类型的数填充向量_mm256_set1_epi8/epi16/epi32/epi64x用整形数填充向量_mm256_set_ps/pd用8个float或者4个double类型数字初始化向量_mm256_set_epi8/epi16/epi32/epi64x用一个整形数初始化向量_mm256_set_m128/m128d/m128i用2个128位的向量初始化一个256位向量_mm256_setr_ps/pd用8个float或者4个double的转置顺序初始化向量_mm256_setr_epi8/epi16/epi32/epi64x用若干个整形数的转置顺序初始化向量 从内存中加载数据 数据类型描述_mm256_load_ps/pd从对齐的内存地址加载浮点向量_mm256_load_si256从对齐的内存地址加载整形向量_mm256_loadu_ps/pd从未对齐的内存地址加载浮点向量_mm256_loadu_si256从未对齐的内存地址加载整形向量_mm_maskload_ps/pd根据掩码加载128位浮点向量的部分_mm256_maskload_ps/pd根据掩码加载256位浮点向量的部分(2)_mm_maskload_epi32/64根据掩码加载128位整形向量的部分(2)_mm256_maskload_epi32/64根据掩码加载256位整形向量的部分最后2个函数前面有一个(2),代表这两个函数只在AVX2中支持。 算术本质 加减法 数据类型描述_mm256_add_ps/pd对两个浮点向量做加法_mm256_sub_ps/pd对两个浮点向量做减法(2)_mm256_add_epi8/16/32/64对两个整形向量做加法(2)_mm256_sub_epi8/16/32/64对两个整形向量做减法(2)_mm256_adds_epi8/16 (2)_mm256_adds_epu8/16两个整数向量相加且考虑内存饱和问题(2)_mm256_subs_epi8/16 (2)_mm256_subs_epu8/16两个整数向量相减且考虑内存饱和问题_mm256_hadd_ps/pd水平方向上对两个float类型向量做加法_mm256_hsub_ps/pd垂直方向上最两个float类型向量做减法(2)_mm256_hadd_epi16/32水平方向上对两个整形向量做加法(2)_mm256_hsub_epi16/32水平方向上最两个整形向量做减法(2)_mm256_hadds_epi16对两个包含short类型的向量做加法且考虑内存饱和的问题(2)_mm256_hsubs_epi16对两个包含short类型的向量做减法且考虑内存饱和的问题_mm256_addsub_ps/pd加上和减去两个float类型的向量将饱和度考虑在内的函数将结果钳制到可以存储的最小/最大值。没有饱和的函数在饱和发生时忽略内存问题。 而在水平方向上做加减法的意思如下图: 对于_mm256_shuffle_pd,只使用控制值的高4位。如果输入向量包含int或float,则使用所有控制位。对于_mm256_shuffle_ps,前两对位从第一个矢量中选择元素,第二对位从第二个矢量中选择元素。 https://blog.triplez.cn/avx-avx2-learning-notes/ |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |