我有一个很大的代码,我想通过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/