优化和调优

此类别中的选项允许您控制优化和调整过程,这可以提高应用程序在运行时的性能。

请记住,并非所有选项都有益于所有应用程序。 有时会在增加编译时间,降低调试能力以及优化可提供的改进之间进行权衡。

您还可以使用 option_override 编译指示来控制其中某些选项,例如 -qoptimize-qcompact-qstrict

除了本部分中的选项描述外,请参阅 XL C/C++ Optimization and Programming Guide 以获取有关优化和调整过程以及编写优化友好源代码的详细信息。
表 1. 优化和调整选项
选项名称 等效编译指示名称 描述
-qaggrcopy 无。

对结构和联合体启用破坏性复制操作。

-qalias (-fstrict-aliasing) 无。

指示程序是否包含特定类别的别名判别或不符合 C/C++ 标准别名判别规则。 如果同一存储位置可能存在多个不同的别名,那么编译器会限制某些优化的作用域。

.
-qarch (-mcpu) 无。

指定应为其生成代码(指令)的处理器体系结构。

-qcache 无。

指定特定执行机器的高速缓存配置。

-qcompact 基于 XL 的前端开始#pragma选项 紧凑

基于 Clang 的前端开始没有。

避免那些会增加代码大小的优化。

-qdataimported、-qdatalocal 和 -qtocdata 无。

将数据标记为本地或已导入。

-qdirectstorage 无。

通知编译器,给定编译单元可能引用了已启用直写或已禁止高速缓存的存储器。

-qfdpr 无。

为对象文件提供 IBM® 反馈定向程序重构 (FDPR ®) 性能调整实用程序优化生成的可执行文件所需的信息。

-qhot 基于 XL 的前端开始#pragma nosimd, #pragma novector

基于 Clang 的前端开始没有。

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

-qignerrno 基于 XL 的前端开始#pragma选项ignerrno

基于 Clang 的前端开始没有。

允许编译器进行优化,就像调用系统不会对 errno 进行修改一样。

-qinline (-finline-functions) 无。

尝试内联 函数 ,而不是生成对那些 函数的调用,以提高性能。

-qipa 无。

启用或定制“过程间分析”(IPA) 优化类型。

基于 XL 的前端开始
-qisolated_call
#pragma 选项隔离调用, #pragma 隔离调用

指定源文件中无任何副作用(其参数隐含的副作用除外)的函数。

-qlargepage 无。

针对设计为在大页面内存环境中执行的应用程序,使用在 POWER4 和更高版本的系统上提供的大页面。

-qlibansi 基于 XL 的前端开始#pragma options libansi

基于 Clang 的前端开始没有。

假定与 ANSI C 库函数同名的所有函数实际上都是系统函数。

-qlibmpi 无。

假定与消息传递接口 (MPI) 同名的所有函数实际上都是 MPI 函数,而不是具有不同语义的用户函数。

-qmaxmem 基于 XL 的前端开始#pragma选项maxmem

基于 Clang 的前端开始无。

限制编译器在对指定千字节数执行特定的内存密集型优化时分配的内存量。

-qminimaltoc 无。

控制编译器为可执行文件创建的目录 (TOC) 的生成。

-O 和 -qoptimize 基于 XL 的前端开始#pragma选项优化

基于 Clang 的前端开始无。

指定在编译期间是否优化代码,如果执行优化,请指定优化级别。

-p、-pg 和 -qprofile 无。

准备由编译器生成的对象文件以用于概要分析。

-qpdf1, -qpdf2 无。

通过概要分析定向反馈 (PDF) 来调整优化,这会使用来自样本程序执行的结果在条件转移附近以及在频繁执行的代码段中改进优化。

-qprefetch 无。

自动在可以提高代码性能的位置插入预取指令。

-qprocimported、-qproclocal 和 -qprocunknown 基于 XL 的前端开始#pragma options procimported, #pragma options proclocal, #pragma options procunkown

基于 Clang 的前端开始没有。

将函数标记为 "本地" , "已导入" 或 "未知"。

基于 XL 的前端开始-qrestrict 无。

指定此选项相当于将 restrict 关键字添加到 指定的 函数中的指针参数,但您不需要修改源文件。

-qshowpdf 无。

在编译和链接步骤中与 -qpdf1 和最低优化级别 -O2 配合使用时,将创建一个 PDF 映射文件,其中包含应用程序中所有过程的其他概要分析信息。

-qsimd 基于 XL 的前端开始#pragma nosimd

基于 Clang 的前端开始没有。

控制编译器是否可以自动利用支持向量指令的处理器的向量指令。

-qsmallstack 无。

尽可能地减少堆栈使用。 禁用可增大堆栈帧大小的优化。

基于 XL 的前端开始-QSMP 无。

启用程序代码的并行化。

-qspeculateabsolutes 无。

使用 -qtocmerge -bl:file (针对非 IPA 链接) 和 -bl:file (针对 IPA 链接) 来禁用绝对地址的猜测。

-qstrict 基于 XL 的前端开始#pragma options strict, #pragma option_override (function_name, "opt (suboption_list) ")

基于 Clang 的前端开始#pragma option_override (function_name, "opt (suboption_list) ")

确保缺省情况下在 -O3 和更高优化级别以及 (可选) 在 -O2上执行的优化不会更改 程序的语义

-qstrict_induction 无。

防止编译器执行归纳(循环计数器)变量优化。 当发生涉及归纳变量的整数溢出操作时,此类优化可能出现问题。

-qtocmerge 无。

支持 TOC 合并以减少 TOC 指针负载并改善外部负载的调度。

-qtune (-mtune) 基于 XL 的前端开始#pragma选项调整

基于 Clang 的前端开始没有。

调整指令选择、调度以及其他依赖于体系结构的性能增强, 以便在特定硬件体系结构上以最佳方式运行。 允许指定目标 SMT 方式以指导优化,以便在该方式下获得最佳性能。

-qunroll (-funroll-loop) , -qunroll=yes (-funroll-all-loop) 基于 XL 的前端开始#pragma选项展开,#pragma展开

基于 Clang 的前端开始没有。

控制循环展开以提高性能。

-qunwind 无。

指定是否可通过代码来展开调用堆栈以浏览该堆栈上保存的寄存器。

-qvisibility (-fvisibility) #pragma GCC visibility push 和 #pragma GCC visibility pop

指定对象文件中的外部链接实体的可视性属性。 如果外部链接实体未从 pragma 伪指令,显式指定的属性或传播规则获取可视性属性,那么这些实体具有 -qvisibility 选项指定的可视性属性。

XL C/C++ 支持以下选项以实现 GCC 兼容性。 有关这些选项的详细信息,请参阅 GNU Compiler Collection 在线文档,网址为 http://gcc.gnu.org/onlinedocs/请注意,这些 GCC 选项仅在 IBM XL C/C++ for AIX® 16.1(由 xlclang/xlclang + +调用) 的基于 Clang 的前端中受支持。

  • --sysroot
  • -ffast-math
  • -finline-functions
  • -f语义-交互位置
  • -fstrict-aliasing
  • -funroll-loops
  • -funroll-all-loops
  • -fvisibility
  • -isysroot
  • -isystem
  • -mcpu
  • -mtune