随机访问与SSE对齐的内存

时间:2014-03-14 19:55:37

标签: c++ c sse simd

我尝试写一个int数组中的随机位置。 为了确保我可以在随机位置访问内存,我试图对齐整个内存块。

int * array = memalign(16384*2,16384*sizeof(short));

后来我在这样的矢量中写道:

__m128i * index = (__m128i *) &array[RANDOMNUMBER];
_mm_store_si128(index+, ...) 

此指令导致访问不良。如果我使用_mm_storeu_si128指令,我就无法得到它。 有人可以解释一下为什么这不起作用吗?

1 个答案:

答案 0 :(得分:2)

_mm_store_si128的参数必须是16字节对齐的。随机选择的int数组元素只是sizeof(int)-aligned(即使数组本身是16字节对齐的)。因此,您必须确保数组中的索引是(16/sizeof(int))的倍数,例如像这样:

__m128i * index = (__m128i *) &array[(RANDOMNUMBER / (16/sizeof(int))) * (16/sizeof(int))];

这将保证写入正确对齐。这是否是您的代码真正需要做的另一个问题......