C++ - 将所有分配的双精度数组对齐到 32 字节

C++ - align all allocated double arrays to 32bytes

我有一个相当大的代码,我想通过 AVX 指令优化一些操作。根据我的测试,改进应该高达 4 倍。

但是,代码使用带有新运算符的普通旧数组(没有 std::vector)。

double * tmp = new double[size];

问题是,对于 AVX,我需要将所有双精度数组对齐到 32 字节边界。解决方案是将所有 new 替换为 aligned_alloc(或 MSVC 中的 _aligned_malloc),并将发布功能替换为足够的功能。这个问题是我必须遍历所有代码并找到所有代码 new,希望不要忘记一个并且将来每个人都不能忘记使用对齐分配器。

还有其他办法吗?我想过重载 new 运算符只用于 double 但我不确定这是否是正确的方法,如果是这样,如何正确/安全地执行此操作。

我无法使用自己的对齐分配器切换到 std::vector,因为一些外部 C-only 库将数组作为输入参数。

还有其他办法吗?是的,_mm_loadu_*_mm_storeu_*,其中 u 代表未对齐。