使用高位循环分析和变换

高位变换是通过诸如交换、融合和展开等技术来专门改进循环性能的优化。

这些循环优化的目标包括:
  • 通过有效使用高速缓存和 address 转换后备缓冲区来降低内存访问成本
  • 通过有效利用硬件提供的数据预取功能,实现重叠计算和内存访问
  • 通过对指令的使用与补充资源需求进行重新排序和平衡,提高微处理器资源的利用率
  • 生成 SIMD 向量指令以在指定 -qsimd=auto 时提供更好的程序性能
  • 生成对向量数学库函数的调用

要启用高阶循环分析和变换,请使用 -qhot 选项,这意味着优化级别为 -O2下表列出了可用于 -qhot的子选项。

表 1。 -qhot 子选项
子选项 行为
level=0 指示编译器执行高阶变换的子集,这些变换通过改善数据局部性来增强性能。 此子选项意味着 -qhot=novector-qhot=noarraypad。 如果使用 -O3进行编译,那么将自动启用此级别。
level=1 如果指定 -qhot 而不指定任何子选项,那么这是缺省子选项。 如果使用 -O4-O5进行编译,那么将自动启用此级别。 这等同于指定 -qhot=vector
level=2 基于 XL 的前端开始当与 -qsmp 一起使用时,指示编译器对 -qhot=level=1 进行转换,并对嵌套循环进行一些附加转换。 生成的循环分析和变换可导致更多高速缓存复用和循环并行化。
向量 当指定为 -qnostrict-qignerrno-O3 或更高优化级别时,指示编译器将某些循环转换为使用MASS库中各种数学函数的优化版本,而不是使用系统版本。 优化版本在准确性和异常处理与性能方面进行了不同的权衡。 如果指定 -qhot 而没有任何子选项,那么缺省情况下会启用此子选项。 此外,将 -qhot=vector-O3 一起指定意味着 -qhot=level=1
阵列板 指示编译器在其推断可能有好处的情况下填充任何数组,并按其选择的任何数量进行填充。