Какой самый быстрый способ загрузить первый ряд структуры 2×4 64b в регистр 256b на 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;};

Мне интересно, как я могу загрузить его первую строку в переменную _m256i на AVX2?

1

Решение

Использовать _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, Однако обратите внимание, что выровненные нагрузки могут быть значительно быстрее.

4

Другие решения


По вопросам рекламы [email protected]