c++ - 中间指针的动态对齐(16 字节)

标签 c++ optimization sse memory-alignment

假设我们有这样的代码:

float *data = (float*)_mm_malloc(N*sizeof(float), 16);//allocate 16-byte aligned array of N elements
const int loop_bound1 = .....;//some value
const int loop_step  = .....;//some value
const int loop_bound2 = ....;//some value
for(auto i=0; i<loop_bound; i+=loop_step)
{
    auto inter_data1 = data + i;//inter_data1 may be not aligned
    for(int j=0; j<loop_bound2; ++j)
    {
        auto inter_data2 = inter_data1 + j;//inter_data2 also may be not aligned
        __m128 a = _mm_loadu_ps(inter_data2);//it's ok, but I want use _mm_load_ps instead
    }
}

调用 _mm_load_ps 而不是 _mm_loadu_ps 需要保持 inter_data1inter_data2 16 字节对齐。 对齐这些指针的最佳(安全且开销最小)方法是什么?我考虑 std::align,但我不确定这是正确的选择。

最佳答案

在 Windows 上使用 _aligned_malloc 或在 Linux 上使用 memalign 分配内存,然后您的指针将在堆栈上对齐。或者,如果您想对齐堆上的内存,则可以使用 #pragma pack

关于c++ - 中间指针的动态对齐(16 字节),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17891412/

相关文章:

c++ - 我应该使用SIMD或 vector 扩展名还是其他?

c++ - 快速将数组 float 到双数组并返回

c++ - 返回值 1.#INF000

c++ - 带相机旋转的 3d 透视投影

python - Scipy Optimize 仅返回 x0,仅完成一次迭代

javascript - 优化。当用户提交表单时,加载对话框不会立即出现

sql - 您最常用的sql优化是什么?

c++ - 模板类内部运算符在该类的不同特化对象之间的特化

c++ - 如何跟踪拖放操作的生命周期?

c++ - 使用 _mm_load_pd 时函数崩溃