在AVX2上将第一行2x4 64b结构加载到256b寄存器的最快方法是什么?

时间:2015-07-02 15:12:55

标签: c++ simd hpc avx2

我有一个结构定义为:

struct HorStruct {
    uint64_t v[2][4];
    typedef uint64_t value_type;
    typedef uint64_t* iterator;
    typedef const uint64_t* const_iterator;
    typedef value_type& reference;
    typedef const value_type& const_reference;
    typedef size_t size_type;
    typedef ptrdiff_t difference_type;
    typedef uint64_t* pointer;
    typedef const uint64_t* const_pointer;
    typedef std::reverse_iterator<iterator> reverse_iterator;
    typedef std::reverse_iterator<const_iterator> const_reverse_iterator;};

我想知道如何在AVX2上将第一行加载到_m256i变量中?

1 个答案:

答案 0 :(得分:4)

使用_mm256_load_si256内在函数。引用Intel Intrinsics Guide

  

__ m256i _mm256_load_si256(__ m256i const * mem_addr)

     

#include "immintrin.h"

     

[...]   描述将256位整数数据从内存加载到dst中。   mem_addr必须在32字节边界或一般保护上对齐   可能会产生异常。

如果对齐要求有问题,您可以使用未对齐版本_mm256_loadu_si256。但请注意,对齐的载荷可能要快得多。