У меня есть структура определяется как:Каков самый быстрый способ загрузить первую строку структуры 2x4 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?
Могу ли я использовать его как: _m256i loc = _mm256_load_si256 (Horstruct.v [0])? –
@ user1979163 Вам, вероятно, понадобится указать указатель для его компиляции: '__m256i loc = _mm256_load_si256 (reinterpret_cast <__ m256i const *> (hs.v));'. – ComicSansMS
В последнем Intel HW, если адрес * * выровнен, 'movdqu' будет иметь такую же задержку, что и' movdqa'. Кроме того, до тех пор, пока нагрузка не разделяет кешлю (или, что еще хуже, границу страницы), почти не будет штрафа за невыложенные нагрузки. –