提问人:Fedor 提问时间:3/28/2023 最后编辑:phuclvFedor 更新时间:7/5/2023 访问量:178
Clang 融合乘加取决于表达式参数的恒定性
Clang fused multiply-add depends on constancy of expression arguments
问:
如 clang 14.0.0 浮点优化的答案中所示,从版本 14 开始,Clang 应用融合乘加 (FMA) 指令,即使对于在编译时执行的常量计算也是如此。
同时,可以观察到结果取决于表达式参数的形式恒定性:
#include <stdio.h>
int main() {
const float A = 2.1f;
const float B = 0.1f;
float C = 0.1f;
float V = A * B - A * B;
float W = A * C - A * C;
printf( "%g %g", V, W );
}
在 Clang 中,程序打印,在线演示:https://godbolt.org/z/a3fcYG7ob0 1.49011e-10
从汇编代码中可以看出,两者都是在编译时计算的。是否有一些规则规定只能使用 FMA 指令进行评估?V
W
W
添加用于禁用 FMA 指令的命令行选项不会更改结果中的任何内容。-mno-fma
答: 暂无答案
评论