AVX2指令
作者:互联网
一、数据类型
SSE指令有3种数据类型,分别为__m256、__m256i、__m256d。每一种类型都以"__"+"m"+“vector的位长度”构成。
-
__m256
包含8个float类型数据的向量
-
__m256i
包含若干个整型数据的向量,如char、short、int、unsigned long long等。例如256位的vector可以32个char、16个short、8个int,这些整型既可以是有符号的也可以是无符号的。
-
__m256d
包含4个double类型数据的向量。
二、函数命名约定
_mm256_<name>_<data_type>
- <name>:描述了内联函数的算术操作。
- <data_type>:标识函数主要参数的数据类型
三、指令
3.1 初始化函数
3.1.1 从内存中加载数据
-
__m256i _mm256_loadu_si256 (__m256i const * mem_addr):
从内存中读入一个256位的整型数据放到dst中(32字节地址无需对齐)。
dst[255:0] := MEM[mem_addr+255:mem_addr]
dst[MAX:256] := 0
-
__m256i _mm256_load_si256 (__m256i const * mem_addr):
从内存中读入一个256位的整型数据放到dst中(32字节地址必需对齐)。
dst[255:0] := MEM[mem_addr+255:mem_addr]
dst[MAX:256] := 0
-
__m256 _mm256_load_ps (float const * mem_addr):
从内存中读入8个float型数据放入dst(32字节地址必需对齐)。
dst[255:0] := MEM[mem_addr+255:mem_addr]
dst[MAX:256] := 0
-
__m128 _mm_maskload_ps (float const * mem_addr, __m128i mask) :
从内存中读入128位(4个float),根据mask的真假赋值。
FOR j := 0 to 3
i := j*32
IF mask[i+31]
dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
ELSE
dst[i+31:i] := 0
FI
ENDFOR
dst[MAX:128] := 0
-
__m256 _mm256_maskload_ps (float const * mem_addr, __m256i mask):
根据掩码载入8个float数据
FOR j := 0 to 7
i := j*32
IF mask[i+31]
dst[i+31:i] := MEM[mem_addr+i+31:mem_addr+i]
ELSE
dst[i+31:i] := 0
FI
ENDFOR
dst[MAX:256] := 0
标签:__,AVX2,addr,mem,dst,float,指令,31 来源: https://blog.csdn.net/fyire/article/details/120826881