新的诊断报告

新的诊断报告可以帮助您确定改进代码性能的时机。

XML 格式的编译器报告

现在,可获取有关下列内容的 XML 格式的信息:编译器之前能够执行的优化以及未执行的优化。此信息可用来在调整应用程序时减少编程工作量,对于高性能应用程序更是如此。

来自编译器的信息以 XML 1.0 格式生成。该报告通过 XML 模式进行定义,由您创建的用于读取和分析结果的工具能够轻易使用该报告。提供了一个样式表 xlstyle.xsl 以使报告显示为可读的格式,以便具有支持 XSLT 的浏览器的任何用户都可以读取。

在此发行版中,报告中提供了下列四个优化类别:
  • 内联
  • 循环变换
  • 数据重组
  • 概要定向反馈信息
可以使用新的 -qlistfmt 选项及其相关联子选项来生成新的 XML 1.0 报告。

有关此报告以及如何进行使用的详细信息,请参阅 XL C/C++ Optimization and Programming Guide 中的 Using reports to diagnose optimization opportunities

对概要分析报告的增强

对列表文件增加了新节以帮助对程序进行分析。将 -qreport 选项与 -qpdf2 选项配合使用时,可以将下列各节添加至列表文件中标题为 PDF Report 的节中:
循环迭代计数
对于程序中大多数循环,会计算给定的一组输入数据的最频繁循环迭代计数和平均迭代计数。仅当在优化级别为 -O5 时编译该程序,此信息才可用。
块和调用计数
报告的此部分包括程序的调用结构以及每个所调用函数的相应执行次数。它还包括每个函数的块信息。对于非用户定义的函数,仅提供执行次数。块和调用覆盖总计数以及用户函数列表(按执行次数递减顺序排序)显示在此报告部分的末尾。此外,块计数信息显示在列表文件中每个伪码块的开头。
高速缓存不命中
报告的此部分显示在单个表中。它报告某些函数的高速缓存不命中数目以及有关这些函数的其他信息,例如:高速缓存级别、高速缓存不命中率、行号、文件名和内存引用。
注: 必须使用 -qpdf1=level=2 选项来获取此报告。
还可通过在运行时期间使用 PDF_PM_EVENT 环境变量来选择要进行概要分析的高速缓存级别。

有关概要文件定向反馈的详细信息,请参阅 XL C/C++ Optimization and Programming Guide 中的 Using profile-directed feedback

有关列表文件的其他信息,请参阅 XL C/C++ Compiler Reference 中的 Compiler listings

数据重组报告

编译器可以在列表文件中生成下列信息:
  • 数据重组(有关编译器如何重组程序变量数据的摘要)
  • 编译器插入的数据预取指令的位置
要生成数据重组信息,请随 -qreport 指定优化级别 -qipa=level=2-O5。在 IPA 链接传递期间,程序变量数据的数据重组消息被添加至列表文件的数据重组部分(标签为 DATA REORGANIZATION SECTION)。重组包括以下各项:
  • 数组分割
  • 数组转置
  • 内存分配合并
  • 数组交叉
  • 数组结合

要生成有关数据预取插入位置的信息,请使用优化级别 -qhot 或任何其他表示随 -qreport 使用 -qhot 的选项。此信息出现在列表文件的 LOOP TRANSFORMATION SECTION中。

其他循环分析

新的子选项已添加至 -qhot 以添加更为主动的循环分析。随 -qsmp-qreport 使用 -qhot=level=2 会添加有关循环嵌套的信息,在这些嵌套循环上,已对列表文件的 LOOP TRANSFORMATION SECTION 执行主动的循环分析。此信息还可出现在使用 -qlistfmt 选项创建的 XML 列表文件中。

新增和增强的诊断选项

下表中的条目描述新增或已更改的编译器选项和伪指令,它们使您可以对编译器列表进行控制。

此处提供的信息是一个简短的概述。有关这些编译器选项以及其他与性能相关的编译器选项的详细信息,请参阅 XL C/C++ Compiler Reference 中的 Listings, messages and compiler information

表 1. 与列表相关的编译器选项和伪指令
选项/伪指令 描述
-qlistfmt 生成 XML 1.0 格式的报告,该报告包含有关下列方面的信息:编译器执行的优化以及未执行的优化。该报告包含有关内联、循环变换、数据重组和概要文件定向反馈的信息。
-qreport 当与 -qpdf2 配合使用时,列表现在包含 PDF 报告部分。当与 -qipa=level=2-O5 配合使用时,列表文件中的另一个新部分是数据重组
-qskipsrc 确定编译器跳过的源代码语句是否显示在列表文件的 SOURCE 部分中。