c++ - 随机存取与 SSE 对齐的内存

标签 c++ c sse simd

我尝试在 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/

相关文章:

c++ - 我的长方体哪里出了问题?

c++ - push_back 用于将临时容器添加到另一个容器

c++ -++iter = iter 期间发生了什么?

c++ - 在 CUDA 中混合自定义内存管理和 Thrust

iphone - 如何使用 iPhone OpenGL ES 绘制抗锯齿圆圈

c - 错误: conflicting types for ‘yylval’ extern YYSTYPE yylval

c - 排序指向结构的指针数组 qsort

assembly - 如何将 128 位立即数移至 XMM 寄存器

c - 二维半字节矩阵的高效转置?

c++ - 如何在 SSE 中使用 imm8?