使用过程间分析

过程间分析 (IPA) 使编译器能够跨不同文件进行优化(整个程序分析),并且可以显著提高性能。

您可以仅在 编译 步骤上指定过程间分析,也可以同时在整个程序方式下的 编译 和链接步骤上指定过程间分析。 整个程序模式将优化的范围扩大到整个程序单元,它可以是可执行文件或共享对象。 由于 IPA 可显着增加编译时间,因此应将使用 IPA 限制在开发的最终性能调整阶段。

在保存 IPA 信息的同时可通过指定 -r -qipa=relink 来生成可重新链接的对象。 这将生成一个包含所有对象文件的不可执行软件包。 通过使用此子选项,可以将链接推迟到最后一个阶段。

如果要在生成不可执行包时使用自己的归档文件,那么可以使用 ar 工具并将 XL_AR 环境变量设置为指向 ar 工具。 有关详细信息,请参阅 XL C/C++ Compiler Reference-qipa 部分。

您可以通过指定 -qipa 选项来启用 IPA。 下表描述了最常用的子选项及其效果。 -qipa 中描述了完整的子选项和语法集。

使用 IPA 的步骤如下:
  1. 在使用 -qipa 选项进行编译之前,请执行初步性能分析和调整,因为 IPA 分析使用两通机制来增加 编译 时间和链接时间。 您可以使用 -qipa=noobject 选项来减少某些 编译 和链接开销。
  2. 编译 和整个应用程序的链接步骤上或尽可能多地指定 -qipa 选项。 使用子选项来指示要对 使用 -qipa编译的程序部分进行的假设。
表 1. 常用 -qipa 子选项
子选项 行为
level=0 程序分区和简单的过程间优化,包括:
  • 自动识别标准库。
  • 静态绑定变量和过程的本地化。
  • 根据过程的调用关系对过程进行分区和布局。 (频繁相互调用的过程在内存中位于更接近的位置。)
  • 扩展了某些优化的作用域,尤其是寄存器分配。
level=1 直接插入和全局数据映射。 我们特别探讨了以下问题:
  • 过程直接插入。
  • 根据参考亲缘关系对静态数据进行分区和布局。 (经常一起引用的数据将在内存中更靠近一起。)
如果未使用 -qipa 选项指定任何子选项,那么这是缺省级别。
level=2 全局别名分析,专业化,过程间数据流:
  • 整个程序别名分析。 此级别包括对指针取消引用和间接函数调用进行消岐,以及改进有关函数调用的副作用的信息。
  • 强化程序内优化。 这可以采取值编号,代码传播和简化,将代码移入条件或退出循环以及消除冗余等形式。
  • 程序间常量传播,死代码消除,指针分析,跨函数的代码运动以及程序间强度降低。
  • 过程特殊化 (克隆)。
  • 整个程序数据重组。
inline=子选项 提供对功能直接插入的精确控制。
微调 -qipa 的其他值提供了指定库代码行为,调整程序分区,从文件读取命令等功能。
重新链接 创建包含所有对象文件的不可执行包,同时保留 IPA 信息。
备注信息:
  • XL C/C++ 和 XL Fortran 提供了与先前编译器版本创建的 IPA 对象的向后兼容性。 如果通过较早版本来链接使用更新版本的编译器编译的 IPA 对象文件,将在链接步骤期间发生错误。 例如,如果 IPA 对象文件 a.o 由 XL C/C++ 13.1.3 编译,并且要与由 XL Fortran V15.1.0编译的 IPA 对象文件 b.o 链接,那么必须使用版本为 XL C/C++ 13.1.3 或更高版本的编译器。
  • XL C/C++ for AIX 16.1 和 XL Fortran for AIX V16.1 生成匹配的 IPA 级别信息。 可以将具有匹配的 IPA 级别信息的 IPA 对象文件链接在一起。

    有关编译器产品发布日期的更多信息,请访问支持生命周期网站: https://www.ibm.com/support/lifecycle/

    如果您的编译器版本在支持生命周期 Web 站点上有两个发行版日期,请根据您的产品标识确定日期。