我有一个相当大的代码,我想通过 AVX 指令优化一些操作。根据我的测试,改进应该高达 4 倍。
但是,代码使用带有 new 运算符的普通旧数组(无 std::vector)。
double * tmp = new double[size];
问题是,对于 AVX,我需要所有 double 组与 32 字节边界对齐。解决办法就是全部替换new
与 aligned_alloc
(或 MSVC 中的 _aligned_malloc
),并用适当的函数替换发布函数。问题是我必须遍历所有代码并找到所有 new
,希望不要忘记一个,以后大家一定不要忘记使用对齐分配器。
还有别的办法吗?我想到了过载new
运算符仅适用于 double
但我不确定这是否是正确的方法,如果是,如何正确/安全地执行此操作。
我无法切换到std::vector
使用自己的对齐分配器,因为一些外部纯 C 库将数组作为输入参数。
最佳答案
还有别的办法吗?是的,_mm_loadu_*
和 _mm_storeu_*
,其中 u
代表未对齐。
关于C++ - 将所有分配的 double 组对齐到 32 字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56807870/