我使用以下代码使用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
}
但是我收到以下错误
我无法摆脱这个问题。 任何人都可以帮助解决这个问题。 任何帮助将不胜感激。
先谢谢
答案 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字节