Oracle Solaris Studio 12.2:C++ 用户指南

A.2.170 –xprofile=p

收集用于配置文件的数据或使用配置文件进行优化。

p 必须为 collect[:profdir]、use[:profdir] 或 tcov[:profdir]。

此选项可在执行期间收集并保存执行频率数据,然后在后续运行中可以使用该数据来改进性能。对多线程应用程序来讲,配置文件集合是安全的。也就是说,对执行自身多任务 (-mt) 的程序进行文件配置会产生准确的结果。只有指定 -xO2 或更高的优化级别时,此选项才有效。如果分别执行编译和链接,则链接步骤和编译步骤中必须都出现同一 -xprofile 选项。

collect[:profdir ]

-xprofile=use 时优化器收集并保存执行频率,以供将来使用。编译器生成可测量语句执行频率的代码。

-xMerge, -ztext,-xprofile=collect 不应同时使用。-xMerge 会强制将静态初始化的数据存储到只读存储器中,-ztext 禁止在只读存储器中进行依赖于位置的符号重定位,而 -xprofile=collect 会在可写存储器中生成静态初始化的、依赖于位置的符号重定位。

配置文件目录名 profdir(如果指定)是包含已进行文件配置的对象代码的程序或共享库在执行时用来存储配置文件数据的目录的路径名。如果 profdir 路径名不是绝对路径,在使用选项 -xprofile=use:profdir 编译程序时将相对于当前工作目录来解释该路径。如果未指定配置文件目录名,配置文件数据将存储在名为 program.profile 的目录中,其中 program 是已进行文件配置的主程序的基本名称。

示例[1]:在生成程序所在的同一目录中的 myprof.profile 目录中收集和使用配置文件数据:


demo: CC -xprofile=collect:myprof.profile -xO5 prog.cc -o prog  
demo: ./prog        
demo: CC -xprofile=use:myprof.profile -xO5 prog.cc -o prog

示例[2]:在目录 /bench/myprof.profile 中收集配置文件数据,然后在优化级别 -xO5 的反馈编译中使用收集的配置文件数据:


demo: CC -xprofile=collect:/bench/myprof.profile
\    -xO5 prog.cc -o prog  
...run prog from multiple locations..
demo: CC -xprofile=use:/bench/myprof.profile 
\    -xO5 prog.cc -o prog

可以设置环境变量 SUN_PROFDATASUN_PROFDATA_DIR 控制使用 -xprofile=collect 编译的程序存储配置文件数据的位置。如果设置了这两个环境变量,-xprofile=collect 数据将写入 $SUN_PROFDATA_DIR/$SUN_PROFDATA

这些环境变量同样控制由 tcov 写入的配置文件数据文件的路径和名称,如 tcov(1) 手册页中所述。如果未设置这些环境变量,配置文件数据就写入当前目录中的目录 profdir .profile,其中 profdir 是可执行文件的名称或在 -xprofile=collect: profdir 标志中指定的名称。如果 profdir 已在 .profile 中结束,-xprofile 不会将 .profile 附加到 profdir 中。如果多次运行程序,那么执行频率数据会累积在 profdir.profile 目录中;也就是说,以前执行的输出不会丢失。

如果在不同的步骤中进行编译和链接,应确保使用 -xprofile=collect 编译的任何目标文件也使用 -xprofile=collect 进行链接。

use[:profdir ]

通过从使用 -xprofile=collect[:profdir] 编译的代码中收集的执行频率数据优化在执行已进行文件配置的代码时执行的工作。profdir 是一个目录的路径名,该目录包含运行用 -xprofile=collect[:profdir] 编译的程序所收集的配置文件数据。

profdir 路径名是可选的。如果未指定 profdir,将使用可执行二进制文件的名称。如果未指定 -o,将使用 a.out。如果未指定 profdir,编译器将查找 profdir.profile/feedbacka.out.profile/feedback。例如:


demo: CC -xprofile=collect -o myexe prog.cc  
demo: CC -xprofile=use:myexe -xO5 -o myexe	prog.cc

程序是使用以前生成并保存在 feedback 文件中的执行频率数据优化的,此数据是先前执行用 -xprofile=collect 编译的程序时写入的。

除了 -xprofile 选项之外,源文件和其他编译器选项必须与用于编译(该编译过程创建了生成 feedback 文件的编译程序)的相应选项完全相同。编译器的相同版本必须同时用于 collect 生成和 use 生成。

如果用 -xprofile=collect:profdir 编译,则必须将相同的配置文件目录名 profdir 用在优化编译中:-xprofile=use: profdir

另请参见 -xprofile_ircache,以了解有关加速 collect 阶段和 use 阶段之间的编译的说明。

tcov[:profdir ]

使用 tcov(1) 校验基本块覆盖率分析的对象文件。

如果指定可选的 profdir 参数,编译器将在指定位置创建配置文件目录。该配置文件目录中存储的数据可通过 tcov(1) 或由编译器通过 -xprofile=use:profdir 来使用。如果省略可选的 profdir 路径名,执行已进行文件配置的程序时将创建配置文件目录。只能通过 tcov(1) 使用该配置文件目录中存储的数据。使用环境变量 SUN_PROFDATASUN_PROFDATA_DIR 可以控制配置文件目录的位置。

如果 profdir 指定的位置不是绝对路径名,则编译时相对于要将当前的对象文件写入到的目录来解释该位置。如果为任何对象文件指定了 profdir,则必须为同一程序中的所有对象文件指定同一位置。由 profdir 指定位置的目录必须在要执行已进行文件配置的程序的所有计算机中都可以访问。除非不再需要配置文件目录中的内容,否则不应删除该目录,因为除非重新编译,否则编译器存储在其中的数据将无法恢复。

示例 [1]:如果用 -xprofile=tcov:/test/profdata 编译一个或多个程序的对象文件,编译器会创建一个名为 /test/profdata.profile 的目录并将其用来存储描述已进行文件配置的对象文件的数据。该同一目录还可在执行时用来存储与已进行文件配置的对象文件关联的执行数据。

示例 [2]:如果名为 myprog 的程序用 -xprofile=tcov 编译并在目录 /home/joe 中执行,将在运行时创建目录 /home/joe/myprog.profile 并将其用来存储运行时配置文件数据。