


本文主要介绍浮点优化。实验环境是CentOS7 + LLVM。
若优化人员想提高浮点数据的运算性能,可以利用LLVM编译器的-ffast-math选项开启较为激进的浮点优化,该选项中包含了多种浮点优化方法,比如浮点数据归约向量化、除法运算优化和忽略浮点数0的正负号等。本节重点介绍针对浮点类型数据的归约优化。

运行命令:
(1)clang ffast.c -fvectorize -O1 -Rpass-missed=loop-vectorize -Rpass=loop-vectorize
(2)clang ffast.c -fvectorize -O1 -ffast-math -Rpass-missed=loop-vectorize -Rpass=loop-vectorize
通过添加-ffast-math选项可以打开浮点数据的归约优化。

之后通过如下命令来分析数据预取优化前后程序的执行时间。
(3)clang ffast.c -fvectorize -O1 -o ffast-before
(4)./ffast-before
(5)clang ffast.c -fvectorize -O1 -ffast-math -o ffast-after
(6)./ffast-after

可以看出,对浮点数据进行归约优化前后,得到的计算结果都是一样的,但是对浮点数据进行归约优化后,程序的执行时间明显要比优化前的执行时间短,达到了优化的效果。
之后通过如下命令,可以查看对浮点数据进行归约优化前后程序生成的中间代码。
(7)clang ffast.c -fvectorize -O1 -S -emit-llvm -o ffast-before.ll
(8)clang ffast.c -fvectorize -O1 -ffast-math -S -emit-llvm -o ffast-after.ll

3. 总结
优化人员如果想要提高浮点数据的运算性能,可以利用LLVM编译器的-ffast-math选项开启较为激进的浮点优化,该选项中包含了多种浮点优化方法,比如浮点数据归约向量化、除法运算优化和忽略浮点数0的正负号等。
(1)C++优化笔记: -O2/-O3/-ffast-math/SIMD - 流了个火 - 博客园 (cnblogs.com)
(2)浮点优化选项 -ffast-math:极大地提高浮点运算速度【转】 - Sky&Zhang - 博客园 (cnblogs.com)


