SSE指令给出错误

时间:2012-12-11 12:39:39

标签: visual-c++ sse

我使用以下代码使用SSE将所有int数组元素除以常数因子。

void sse_div(int *arr,int num_shift,int N) // devide all array elements by 2
{
         num_shift=1;
     int nb_iters = N / 4;    
     __declspec(align(32))int *a1=arr;

      __m128i* l = (__m128i*)a1;  
     for (int i = 0; i < nb_iters; ++i, ++l)
          _mm_store_si128( l, _mm_srai_epi32(*l,num_shift)); //Error line

}

但是我收到以下错误

enter image description here

我无法摆脱这个问题。 任何人都可以帮助解决这个问题。 任何帮助将不胜感激。

先谢谢

1 个答案:

答案 0 :(得分:2)

由于您的输入数组显然未对齐,您可以使用未对齐的加载/存储,例如:

void sse_div(int *arr, int N)     // divide all array elements by 2
{
    for (int i = 0; i < nb_iters; i += 4)
    {
        __m128i v = _mm_loadu_si128(&arr[i]);
        v = _mm_srai_epi32(v, 1);
        _mm_storeu_si128(&arr[i], v);
    }
}

请注意,使用未对齐的加载/存储可能会显着影响性能(取决于您运行的CPU),因此如果可能,您应该在分配内存时使arr数组对齐16字节