登录

数据类型

描述

__m128

包含4个float类型数字的向量

__m128d

包含2个double类型数字的向量

__m128i

包含若干个整型数字的向量

__m256

包含8个float类型数字的向量

__m256d

包含4个double类型数字的向量

__m256i

包含若干个整型数字的向量

数据类型

描述

_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位整形向量的部分

数据类型

描述

_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_mul_ps/pd

对两个float类型的向量进行相乘

(2)_mm256_mul_epi32 (2)_mm256_mul_epu32

将包含32位整数的向量的最低四个元素相乘

(2)_mm256_mullo_epi16/32

整数相乘,低位存储

(2)_mm256_mulhi_epi16 (2)_mm256_mulhi_epu16

整数相乘,高位存储

(2)_mm256_mulhrs_epi16

16位数相乘得到32位数

_mm256_div_ps/pd

对两个float类型的向量进行相除

数据类型

描述

(2)_mm_fmadd_ps/pd/ (2)_mm256_fmadd_ps/pd

将两个向量相乘,再将积加上第三个。(res=a*b+c)

(2)_mm_fmsub_ps/pd/ (2)_mm256_fmsub_ps/pd

将两个向量相乘,然后从乘积中减去一个向量。(res=a*b-c)

(2)_mm_fmadd_ss/sd

将向量中最低的元素相乘并相加(res[0]=a[0]*b[0]+c[0])

(2)_mm_fmsub_ss/sd

将向量中最低的元素相乘并相减(res[0]=a[0]*b[0]-c[0])

(2)_mm_fnmadd_ps/pd (2)_mm256_fnmadd_ps/pd

将两个向量相乘,并将负积加到第三个。(res = -(a * b) + c)

(2)_mm_fnmsub_ps/pd/ (2)_mm256_fnmsub_ps/pd

将两个向量相乘,并将负积加到第三个 (res = -(a * b) - c)

(2)_mm_fnmadd_ss/sd

将两个向量的低位相乘,并将负积加到第三个向量的低位。(res[0] = -(a[0] * b[0]) + c[0])

(2)_mm_fnmsub_ss/sd

将最低的元素相乘,并从求反的积中减去第三个向量的最低元素。(res[0] = -(a[0] * b[0]) - c[0])

(2)_mm_fmaddsub_ps/pd/ (2)_mm256_fmaddsub_ps/pd

将两个矢量相乘,然后从乘积中交替加上和减去(res=a*b+/-c)

(2)_mm_fmsubadd_ps/pd/ (2)_mmf256_fmsubadd_ps/pd

将两个向量相乘,然后从乘积中交替地进行减法和加法(res=a*b-/+c)(奇数次方,偶数次方)

数据类型

描述

_mm_permute_ps/pd _mm256_permute_ps/pd

根据8位控制值从输入向量中选择元素

(2)_mm256_permute4x64_pd/ (2)_mm256_permute4x64_epi64

根据8位控制值从输入向量中选择64位元素

_mm256_permute2f128_ps/pd

基于8位控制值从两个输入向量中选择128位块

_mm256_permute2f128_si256

基于8位控制值从两个输入向量中选择128位块

_mm_permutevar_ps/pd _mm256_permutevar_ps/pd

根据整数向量中的位从输入向量中选择元素

(2)_mm256_permutevar8x32_ps (2)_mm256_permutevar8x32_epi32

使用整数向量中的索引选择32位元素(浮点数和整数)

数据类型

描述

_mm256_shuffle_ps/pd

根据8位值选择浮点元素

_mm256_shuffle_epi8/ _mm256_shuffle_epi32

根据8位值选择整数元素

(2)_mm256_shufflelo_epi16/ (2)_mm256_shufflehi_epi16

基于8位控制值从两个输入向量中选择128位块

分辨率

优化

循环次数

速度

4032x3024

原始实现

100

34.87ms

分辨率

优化

循环次数

速度

4032x3024

原始实现

100

34.87ms

4032x3024

第一版优化

100

23.10ms

分辨率

优化

循环次数

速度

4032x3024

原始实现

100

34.87ms

4032x3024

第一版优化

100

23.10ms

4032x3024

第二版优化

100

17.76ms