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

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

double * tmp = new double[size];

问题是,对于AVX,我需要将所有 double 数组都对齐到32字节边界。解决方案是用new(或MSVC中的aligned_alloc)替换所有_aligned_malloc,并用适当的版本替换发布功能。问题是我必须遍历所有代码并找到所有new,希望不要忘记一个,将来每个人都不要忘记使用对齐的定位器。

还有其他办法吗?我曾经考虑过仅对new重载double运算符,但是我不确定这是否是正确的方法,如果是,那么如何正确/安全地执行此操作。

由于某些将数组作为输入参数的外部纯C语言库,因此无法使用自己的对齐定位器切换到std::vector

最佳答案

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

关于c++ - C++-将所有分配的 double 数组对齐为32bytes,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56807870/

10-11 23:12
查看更多