自编教材实操课程分享:第五章—浮点优化
先进编译实验室
2024年04月23日 08:00
收录于文集
共28篇


本文主要介绍浮点优化。实验环境是CentOS7 + LLVM。

1. 优化方法简述

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

2. 示例分析

运行命令:

(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的正负号等。

4. 参考资料

(1)C++优化笔记: -O2/-O3/-ffast-math/SIMD - 流了个火 - 博客园 (cnblogs.com)

(2)浮点优化选项 -ffast-math:极大地提高浮点运算速度【转】 - Sky&Zhang - 博客园 (cnblogs.com)