我试图将4(整数)索引加载到寄存器中,然后使用收集指令加载相应的向量值。我想使用像loadu和AVX2这样的“未对齐”指令。
void func(double* val, size_t* rowptr,int* index, double *x, double *ret, int size)
{
for (int i = 0; i < size; ++i)
{
int start = rowptr[i]; int end = rowptr[i+1];
__m256d tmp = _mm256_setzero_pd();
int j;
for (j = start; j < end; j += 4)
{
__m128i vind = _mm_loadu_epi64(&index[j]); <- how can I do that
__m256d data = _mm256_loadu_pd(&val[j]);
__m256d xval = _mm256_i64gather_pd(x, vind, 1);
tmp = _mm256_add_pd(tmp, _mm256_mul_pd(data,xval));
}
我需要一条指令将4个整数索引存储到__m128i寄存器中,因为收集指令需要它:
extern __m256d _mm256_mask_i64gather_pd(double const * base, __m128i vindex, const int scale);
然而,我无法找到像_mm_loadu_epi6()这样的指令。