查看 AVX2 内在文档,收集了加载指令,例如VPGATHERDD
:
__m128i _mm_i32gather_epi32 (int const * base, __m128i index, const int scale);
从文档中我不清楚的是计算的加载地址是 元素地址还是字节地址,即 element 的加载地址i
:
load_addr = base + index[i] * scale; // (1) element addressing ?
或者:
load_addr = (char *)base + index[i] * scale; // (2) byte addressing ?
从英特尔文档看来,它可能是 (2),但考虑到收集负载的最小元素大小是 32 位,这没有多大意义 - 为什么要从未对齐的地址加载(即使用 scale < 4 ) ?