-qhot

适用的调用

表 1. 接受给定选项的调用
选项 xlc (编译 C) xlC (编译 C++) xlclang(编译 C) xlclang++(编译 C++)
-qhot
注: 此表中仅列出典型调用。 对于所有基本调用及其等效特殊调用,您可以参阅 编译器调用的完整列表

类别

优化和调整

等效编译指示

表 2。 两个类别的调用的编译指示等效项
xlc/xlC 和其他遗留的调用命令 xlclang/xlclang + + 调用命令
#pragma novector , #pragma nosimd

用途

在优化期间执行高阶回路分析和变换 (HOT)。

-qhot 编译器选项对于手工调优是很有用的选择,提供了优化循环和数组语言的时机。 此编译器选项将始终尝试优化循环,而不考虑您指定的子选项。

基于 XL 的前端开始您可以使用pragma指令来禁用选定代码段的这些转换。基于 XL 的前端端

语法

读取语法图跳过可视语法图  -q nohothot= :noarraypadarraypad=level=102vectornovectorfastmathnofastmath

编译指示语法

读取语法图跳过可视语法图 # pragma novectornosimd

缺省值

  • -qnohot
  • -qhot=noarraypad: level= 0:novector:fastmath (当 -O3 生效时)
  • -qhot=noarraypad:level=1:vector: fastmath 何时 基于 XL 的前端开始-qsmp基于 XL 的前端端-O4 或者 -O5 已生效。
  • 指定不带子选项的 -qhot 等同于 -qhot=noarraypad: level= 1:vector:fastmath

参数

arraypad (仅选项) | noarraypad (仅选项)
允许编译器增加数组的维度(如果这样做可能会提高数组处理循环的效率)。 (由于缓存体系结构的实现,数组维度是 2 的幂会导致缓存利用率降低。) 当您的源包含维度为 2 的幂的大型数组时,指定 -qhot=arraypad 可以减少缓存未命中和页面错误,从而减慢您的数组处理程序。 当第一个维度为 2 的幂时,这可能特别有效。 如果使用这个子选项时不带任何数字,编译器将填充它推断可能有好处的任何数组,并将填充它选择的任何数量。 并非所有数组都必须填充,不同的数组可能填充不同的数量。 如果指定了一个数字,那么编译器将在代码中填充每个数组。
注: 使用 arraypad 可能是不安全的,因为它不会执行任何检查以查找可能导致代码在发生填充时中断的重塑或等效项。
number (仅限选项)
一个正整数值,表示将在源中填充每个数组的元素数。 填充量必须是正整数值。 为了实现更高效的高速缓存利用率,建议填充值为最大数组元素大小的倍数,通常为 4、8 或 16。
level=0 (仅选项)
执行高阶转换的子集,并将缺省值设置为 novector:noarraypad:fastmath
level=1 (仅选项)
执行高阶转换的缺省集合。
level=2 (仅选项)
执行一组缺省高阶变换和一些更激进的循环变换。 此选项可执行主动的循环分析和变换, 提高高速缓存复用率并利用循环并行化机会。
向量 (仅选项) | novector
当使用 -qnostrict-qignerrno -O3 或更高优化级别指定时, vector 会使编译器将在数组的连续元素 (例如,平方根,倒数平方根) 的循环中执行的某些操作转换为对 libxlopt 中的 Mathematical Acceleration Subsystem (MASS) 库中例程的调用。

vector 子选项支持单精度和双精度浮点算术,对于具有重要算术处理需求的应用程序很有用。

novector 会禁止将循环数组操作转换为对 MASS 库例程的调用。

因为向量化会影响程序结果的精度,如果您正在使用 -O3 或更高版本,那么您应该指定 -qhot=novector(如果精度的更改无法接受)。

fastmath (仅选项) | nofastmath (仅选项)
您可以使用此子选项来调整应用程序以使用快速标量版本的数学函数或使用缺省版本。

对于 C/C + + , 必须将此子选项与 -qignerrno一起使用,除非其他选项已启用 -qignerrno

仅当启用了 -qstrict=nolibrary 时, -qhot=fastmath 才允许将来自 XLOPT 库的数学例程替换为可用的数学例程。

-qhot=nofastmath 会禁用由 XLOPT 库执行的数学例程替换。 缺省情况下,如果指定了 -qhot 而不考虑热级别,那么将启用 -qhot=fastmath

使用量

如果在命令行上指定 -qhot 时未同时指定优化级别,那么编译器将采用 -O2

如果你想在使用时覆盖默认级别设置 1 基于 XL 的前端开始-qsmp基于 XL 的前端端-O4 或者 -O5,请务必指定 -qhot=level=0 或者 -qhot=level=2 在其他选项之后

基于 XL 的前端开始pragma指令仅适用于紧接在指令之后的 whiledo whilefor 循环。 它们对指定循环中嵌套的其他循环没有影响。基于 XL 的前端端

可以将 -qreport 选项与 -qhot 或任何暗示 -qhot 的优化选项结合使用,以生成显示如何变换循环的伪C 报告。 如果同时指定了 -qreport基于 XL 的前端开始-qlistfmt基于 XL 的前端端 选项 ,则循环转换将包含在列表报告中。 LOOP TRANSFORMATION SECTION 列表文件还包含有关数据预取插入位置的信息。 此外,使用 -qprefetch=assistthread 生成预取辅助线程时,将显示一条消息Assist thread for data prefetching was generated也会显示在列表文件的 LOOP TRANSFORMATION SECTION 中。 指定 -qprefetch=assistthread 将指导编译器在优化级别 -O3 或更高级别生成主动数据预取。 有关更多信息,请参阅 -qreport

预定义的宏

无。

相关信息