Matt Godbolt's blog16 hours agohttp://xania.org/202512/21-vectorising-floats?utm_source=feed&utm_medium=rssSIMD自动向量化对整数求和效率很高,每次循环迭代处理8个整数,然后通过修正代码将8个部分和相加。由于舍入,浮点加法不满足结合律,因此编译器无法安全地以相同方式重新分组加法,导致即使每次迭代处理8个浮点数,也仍进行标量逐元素加法。解决办法包括使用-Ofast或-funsafe-math-optimizations(全局,有风险)或使用GCC属性为特定函数假设结合律;使用无序执行策略的std::reduce在测试中无效。