我尝试在 int 数组中的随机位置上写入。 为了确保我可以在随机位置访问内存,我尝试对齐整个内存块。
int * array = memalign(16384*2,16384*sizeof(short));
后来我在 vector 中这样写:
__m128i * index = (__m128i *) &array[RANDOMNUMBER];
_mm_store_si128(index+, ...)
该指令会导致访问错误。如果我使用 _mm_storeu_si128
指令,我不会明白。
有人可以解释一下为什么这不起作用吗?
最佳答案
_mm_store_si128
的参数必须是 16 字节对齐。 int 数组中随机选择的元素将仅是 sizeof(int) 对齐的(即使数组本身是 16 字节对齐的)。因此,您必须确保数组的索引是 (16/sizeof(int))
的倍数,例如像这样:
__m128i * index = (__m128i *) &array[(RANDOMNUMBER / (16/sizeof(int))) * (16/sizeof(int))];
这将保证写入正确对齐。这是否是您的代码真正需要做的事情是另一个问题......
关于c++ - 随机存取与 SSE 对齐的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22414558/