-qpdf1, -qpdf2

适用的调用

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

类别

优化和调整

等效编译指示

无。

用途

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

将根据对执行分支的频率和代码块的运行 方式的分析结果,针对典型的使用方案 对应用程序进行优化。

语法

读取语法图跳过可视语法图 -q nopdf1nopdf2pdf1=exenamepdfname=file_pathdefnamelevel=012uniquenouniquepdf2=exenamepdfname=file_pathdefname

缺省值

未指定 -qpdf1 时为 -qnopdf1 ; 未指定 -qpdf2 时为 -qnopdf2

指定 -qpdf1=exename-qpdf1 不带子选项; 指定 -qpdf2=exename-qpdf2 不带子选项。

参数

exename
将生成的 PDF 文件命名为 .<output_name>_pdf,其中 <output_name> 是使用 -qpdf1编译程序时生成的输出文件的名称。
pdfname=file_path
指定 PDF 文件和任何现有 PDF 映射文件的目录和名称。 如果设置了 PDFDIR 环境变量,那么编译器会将 PDF 和 PDF 映射文件放置在 PDFDIR 指定的目录中; 否则,编译器会将这些文件放置在当前工作目录中。 如果设置了 PDFDIR 环境变量,但是 指定的目录不存在, 那么编译 器会发出警告消息。 PDF 映射文件的名称跟在 PDF 文件的名称后面 如果未指定 -qpdf1=unique 选项。 例如,如果指定 -qpdf1=pdfname=/home/joe/func 选项,那么生成的 PDF 文件称为 func, PDF 映射文件称为 func_map。 这两个文件都放置在 /home/joe 目录中。 您可以使用 pdfname 子选项通过使用同一目录来同时运行多个可执行应用程序。 当您使用 PDF 调整动态库时,此方法特别有用。
defname
将生成的 PDF 文件命名为 ._pdf
level=0 | 1 | 2
指定要由生成的应用程序生成的不同级别的概要分析信息。 下表显示了每个级别上支持的概要分析信息的类型。 加号 (+) 指示支持概要分析类型。
表 2。 每个 -qpdf1 级别上支持的概要分析类型
概要分析类型 级别
0 1 2
块计数器概要分析 + + +
调用计数器概要分析 + + +
值概要分析   + +
高速缓存-不命中概要分析     +

-qpdf1=level=1 是缺省级别。 它等同于 -qpdf1。 更高 PDF 级别的概要文件具有更多优化机会, 但是开销会更大。

备注信息:
  • 一次只能在特定处理器上运行一个使用 -qpdf1=level=2 选项编译的应用程序。
  • pSeries 系统上启用了高速缓存不命中概要分析,并且仅在 POWER5 处理器或更高版本上可用。
  • 高速缓存不命中概要分析信息具有多个级别。 因此,如果要收集不同级别的高速缓存不命中概要分析信息,请将 PDF_PM_EVENT 环境变量设置为 L1MISS, L2MISS或 L3MISS (如果适用)。 一次只能检测一个级别的高速缓存不命中概要分析信息。 L2 高速缓存不命中概要分析是缺省级别。
  • 如果要将应用程序绑定到指定的处理器以进行高速缓存不命中概要分析,请将 PDF_BIND_PROCESSOR 环境变量 设置为等于处理器号
唯一 | nounique
当多个进程在 PDF 训练步骤中写入同一个 PDF 文件时,可以使用 -qpdf1=unique 选项来避免锁定单个 PDF 文件。 此选项指定在运行时期间是否为每个进程创建唯一的 PDF 文件。 PDF 文件名为 <pdf_file_name>.<pid><pdf_file_name> 是下列其中一个名称:
  • 缺省情况下为 .<output_name>_pdf
  • 此子选项生效时由 pdfname 指定的名称。
  • defname 子选项生效时的 ._pdf
<pid> 是 PDF 训练步骤中正在运行的进程的标识。 例如,如果指定 -qpdf1=unique:pdfname=abc 选项,并且有两个进程用于标识为 12345678 和 87654321 的 PDF 训练,那么将生成两个 PDF 文件 abc.12345678abc.87654321
注: 指定 -qpdf1=unique 时,将生成多个以进程标识作为后缀的 PDF 文件。 在执行 PDF 训练步骤之后,必须使用 mergepdf 程序将所有这些 PDF 文件合并为一个文件。

使用量

PDF 过程由以下三个步骤组成:

  1. 使用 -qpdf1 选项和最低优化级别 -O2编译 您的程序 。 缺省情况下,将生成 名为 .<output_name>_pdf_map 的 PDF 映射文件以及生成的应用程序。
  2. 使用典型数据集运行生成的应用程序。 缺省情况下,概要分析信息将写入名为 .<output_name>_pdf 的 PDF 文件。 将此步骤称为 PDF 训练步骤。
  3. 使用 -qpdf2 选项和与 -qpdf1 选项配合使用的优化级别重新编译并链接或重新链接 程序-qpdf2 进程根据运行生成的应用程序时收集的概要分析信息对优化进行微调。

预定义的宏

无。

示例

示例 1
此示例使用 -qpdf1=level=0 选项来减少可能的运行时检测开销。
  1. 使用 -qpdf1=level=0编译所有文件。
    xlc -qpdf1=level=0 -O3 file1.c file2.c file3.c
    
  2. 使用一组输入数据运行。
    ./a.out < sample.data 
  3. 使用 -qpdf2重新编译所有文件。
    xlc -qpdf2 -O3 file1.c file2.c file3.c
    
如果样本数据是典型的,那么该程序可以比没有 PDF 过程更快地运行。

示例 2

以下示例使用 -qpdf1=level=1 选项。
  1. 使用 -qpdf1编译所有文件。
    xlc -qpdf1 -O3 file1.c file2.c file3.c
    
  2. 使用一组输入数据运行。
    
    ./a.out < sample.data 
  3. 使用 -qpdf2重新编译所有文件。
    xlc -qpdf2 -O3 file1.c file2.c file3.c
    
如果样本数据是典型的,那么该程序现在可以比没有 PDF 过程更快地运行。

示例 3

以下示例使用 -qpdf1=level=2 选项来收集高速缓存不命中概要分析信息。
  1. 使用 -qpdf1=level=2编译所有文件。
    xlc -qpdf1=level=2 -O3 file1.c file2.c file3.c
    
  2. 设置 PM_EVENT=L2MISS 以收集 L2 高速缓存不命中概要分析信息。
    export PDF_PM_EVENT=L2MISS
  3. 使用一组输入数据运行。
    ./a.out < sample.data 
  4. 使用 -qpdf2重新编译所有文件。
    xlc -qpdf2 -O3 file1.c file2.c file3.c
    
如果样本数据是典型的,那么该程序现在可以比没有 PDF 过程更快地运行。

示例 4

此示例演示了 -qpdf[1|2]=exename 选项的用法。
  1. 使用 -qpdf1=exename编译所有文件。
    xlc -qpdf1=exename -O3 -o final file1.c file2.c file3.c
    
  2. 使用样本输入数据运行可执行文件。
    ./final < typical.data
  3. 列出目录的内容。
    >ls -lrta
    -rw-r--r-- 1 user staff 50 Dec 05 13:18 file1.c
     -rw-r--r-- 1 user staff 50 Dec 05 13:18 file2.c
     -rw-r--r-- 1 user staff 50 Dec 05 13:18 file3.c
     -rwxr-xr-x 1 user staff 12243 Dec 05 17:00 final
     -rwxr-Sr-- 1 user staff 762 Dec 05 17:03 .final_pdf
  4. 使用 -qpdf2=exename重新编译所有文件。
    xlc -qpdf2=exename -O3 -o final file1.c file2.c file3.c
    
现在使用 PDF 信息对程序进行了优化。

示例 5

以下示例演示了 -qpdf[1|2]=pdfname 选项的用法。
  1. 使用 -qpdf1=pdfname编译所有文件。 静态概要分析信息记录在名为 final_map的文件中。
    xlc -qpdf1=pdfname=final -O3 file1.c file2.c file3.c
    
  2. 使用样本输入数据运行可执行文件。 概要分析信息记录在名为 final的文件中。
    
    ./a.out < typical.data 
  3. 列出目录的内容。
    >ls -lrta
    -rw-r--r-- 1 user staff 50 Dec 05 13:18 file1.c
     -rw-r--r-- 1 user staff 50 Dec 05 13:18 file2.c
     -rw-r--r-- 1 user staff 50 Dec 05 13:18 file3.c
     -rwxr-xr-x 1 user staff 12243 Dec 05 18:30 a.out
     -rwxr-Sr-- 1 user staff 762 Dec 05 18:32 final
    
  4. 使用 -qpdf2=pdfname重新编译所有文件。
    xlc -qpdf2=pdfname=final -O3 file1.c file2.c file3.c
    
现在使用 PDF 信息对程序进行了优化。

示例 6

以下示例演示了如何使用 PDF_BIND_PROCESSOR 环境变量。
  1. 使用 -qpdf1=level=1编译所有文件。
    xlc -qpdf1=level=1 -O3 file1.c file2.c file3.c
    
  2. 设置 PDF_BIND_PROCESSOR 环境变量,以便在处理器 1 上运行此可执行文件的所有进程。
    
    export PDF_BIND_PROCESSOR=1
  3. 使用样本输入数据运行可执行文件。
    ./a.out < sample.data
  4. 使用 -qpdf2重新编译所有文件。
    xlc -qpdf2 -O3 file1.c file2.c file3.c
    
如果样本数据是典型的,那么该程序现在可以比没有 PDF 过程更快地运行。

相关信息