SIMD加载索引和收集指令

时间:2017-12-26 20:44:29

标签: c++ vectorization simd

我试图将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()这样的指令。

0 个答案:

没有答案