使用高位循环分析和变换
高位变换是通过诸如交换、融合和展开等技术来专门改进循环性能的优化。
这些循环优化的目标包括:
- 通过有效使用高速缓存和 address 转换后备缓冲区来降低内存访问成本
- 通过有效利用硬件提供的数据预取功能,实现重叠计算和内存访问
- 通过对指令的使用与补充资源需求进行重新排序和平衡,提高微处理器资源的利用率
- 生成 SIMD 向量指令以在指定 -qsimd=auto 时提供更好的程序性能
- 生成对向量数学库函数的调用
要启用高阶循环分析和变换,请使用 -qhot 选项,这意味着优化级别为 -O2。 下表列出了可用于 -qhot的子选项。
| 子选项 | 行为 |
|---|---|
| level=0 | 指示编译器执行高阶变换的子集,这些变换通过改善数据局部性来增强性能。 此子选项意味着 -qhot=novector 和 -qhot=noarraypad。 如果使用 -O3进行编译,那么将自动启用此级别。 |
| level=1 | 如果指定 -qhot 而不指定任何子选项,那么这是缺省子选项。 如果使用 -O4 或 -O5进行编译,那么将自动启用此级别。 这等同于指定 -qhot=vector。 |
| level=2 | 当与 -qsmp 一起使用时,指示编译器对 -qhot=level=1 进行转换,并对嵌套循环进行一些附加转换。 生成的循环分析和变换可导致更多高速缓存复用和循环并行化。 |
| 向量 | 当指定为 -qnostrict 和 -qignerrno 或 -O3 或更高优化级别时,指示编译器将某些循环转换为使用MASS库中各种数学函数的优化版本,而不是使用系统版本。 优化版本在准确性和异常处理与性能方面进行了不同的权衡。 如果指定 -qhot 而没有任何子选项,那么缺省情况下会启用此子选项。 此外,将 -qhot=vector 与 -O3 一起指定意味着 -qhot=level=1。 |
| 阵列板 | 指示编译器在其推断可能有好处的情况下填充任何数组,并按其选择的任何数量进行填充。 |
当与