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

上一篇:octomap, slam, 路径规划: 如何协同工作?


下一篇:【SLAM学习】环境搭建