В документации по внутреннему интерфейсу AVX2 собраны команды загрузки, такие как VPGATHERDD
:
__m128i _mm_i32gather_epi32 (int const * base, __m128i index, const int scale);
Что мне не понятно из документации, является ли вычисляемый адрес нагрузки адресом элемента или байтовым адресом, то есть адресом загрузки для элемента i
:
load_addr = base + index[i] * scale; // (1) element addressing ?
или
load_addr = (char *)base + index[i] * scale; // (2) byte addressing ?
Из Intel docs это выглядит так, как будто это может быть (2), но это не имеет большого смысла, учитывая, что наименьший размер элемента для собранных нагрузок составляет 32 бит - зачем вы хотите загружать из неправильно настроенных адресов (например, использовать шкалу < 4)?