可使用该选项先收集并保存执行频率数据,这样便可以在后续运行中使用这些数据以提高性能。只有将优化级别指定为 -xO2 或更高时,该选项才有效。
为编译器提供运行时性能反馈增强了在较高优化级别(如 -xO5)进行编译的功能。为了生成运行时的性能反馈,必须使用 -xprofile=collect 编译,然后针对典型数据集运行可执行文件,最后在最高的优化级别使用 -xprofile=use 重新编译。
对多线程应用程序来讲,配置文件集合是安全的。也就是说,对执行自身多任务 (-mt) 的程序进行文件配置会产生准确的结果。只有将优化级别指定为 -xO2 或更高时,该选项才有效。
p 必须是下列值之一。
collect[:name]
在 –xprofile=use 时优化器收集并保存执行频率,以供将来使用。编译器生成测量语句执行频率的代码。
在 Linux 上生成共享库时,请勿指定 -xprofile=collect。
name 是所分析程序的名称。name 是可选的,如果没有指定,则假定为 a.out。
在运行时,使用 –xprofile=collect:name 编译的程序会创建子目录 name.profile 来保存运行时反馈信息。数据将写入该子目录下的文件 feedback 中。可以使用环境变量 $SUN_PROFDATA 和 $SUN_PROFDATA_DIR 更改反馈信息的位置。有关更多信息,请参见交互 一节。
如果多次运行程序,执行频率数据会累积在 feedback 文件中,也就是说以前运行的输出不会丢失。
如果在不同的步骤中进行编译和链接,应确保使用 -xprofile=collect 编译的任何目标文件也使用 -xprofile=collect 进行链接。
use[:name]
使用执行频率数据优化程序,这些数据是先前执行程序(使用 –xprofile=collect 编译)产生并保存在 feedback 文件中的。
name 是要分析的可执行文件的名称。name 是可选的,如果没有指定,则假定为 a.out。
除了从 -xprofile=collect 更改为 -xprofile=use 的 -xprofile 选项之外,源文件和其他编译器选项必须与用于(创建了之后生成 feedback 文件的编译程序的)编译的源文件和编译器选项完全相同。编译器的相同版本必须既用于收集生成也用于使用生成。如果使用 -xprofile=collect:name 进行了编译,则在优化编译中必须使用相同的程序名称 name: -xprofile=use:name.
目标文件与其配置文件数据之间的关联依据的是使用 -xprofile=collect 编译目标文件时该文件的 UNIX 路径名。在某些情况下,编译器将不会关联目标文件和其配置文件数据:目标文件因以前没有使用 -xprofile=collect 进行编译而没有配置文件数据,未使用-xprofile=collect 在程序中链接目标文件,从未执行过程序。
如果先前使用 -xprofile=collect 在不同目录中编译了目标文件,而该目标文件与使用 -xprofile=collect 编译的其他目标文件共享一个公共基名,但却无法通过它们的包含目录名称进行唯一标识,编译器也会产生混淆。在这种情况下,即使目标文件有配置文件数据,使用 -xprofile=use 重新编译目标文件时,编译器也不能在 feedback 目录中找到该目标文件。
所有这些情况都能使编译器释放目标文件及其文件配置数据之间的关联。因此,如果目标文件有配置文件数据,但在指定了 -xprofile=use 时,编译器无法将其与目标文件的路径名关联,请使用 -xprofile_pathmap 选项标识正确的目录。请参见A.2.164 -xprofile_pathmap
tcov
使用新式 tcov 进行基本块覆盖分析。
此选项是 tcov 的新式基本块文件配置。它的功能与 – xa 选项类似,但可以正确收集在头文件中有源代码或利用 C++ 模板的程序的数据。代码重构与 -xa 选项的代码指令类似,但不再生成 .d 文件。相反却生成单一文件,并且该文件的名称是按照最后的可执行文件命名的。例如,如果程序在 /foo/bar/myprog.profile 之外运行,那么数据文件将存储在 /foo/bar/myprog.profile/myprog.tcovd 中。
运行 tcov 时,必须将其传递给 – x 选项,以强制其使用新式数据。如果未传递 -x,则缺省情况下 tcov 使用原来的 .d 文件,并生成意外的输出。
与 –xa 选项不同,环境变量 TCOVDIR 在编译时无效。不过,在程序运行时可以使用环境变量的值。
–xprofile=tcov 和 - xa 选项在单个可执行程序中兼容。也就是说,可以链接同时包含了用 -xprofile=tcov 编译的某些文件和用 -xa 编译的另外一些文件的程序。您不能同时用这两个选项来编译同一个文件。
如果因使用 -xinline 或 -xO4 而内联函数,那么 -xprofile=tcov 生成的代码覆盖报告不可靠。
可以设置环境变量 $SUN_PROFDATA 和 $SUN_PROFDATA_DIR 控制使用 -xprofile=collect 编译的程序放置配置文件数据的位置。如果未设置这些变量,配置文件数据就写入当前目录中的 name.profile/feedback(name 是可执行文件的名称或在 -xprofile=collect:name 标志中指定的名称)。如果设置了这些变量,-xprofile=collect 数据就写入 $SUN_PROFDATA_DIR/$SUN_PROFDATA。
环境变量 $SUN_PROFDATA 和 $SUN_PROFDATA_DIR 同样控制 tcov 生成的配置文件数据文件的路径和名称。有关更多信息,请参见 tcov(1) 手册页。
如果在不同的步骤中进行编译和链接,则编译命令和链接命令中都必须有相同的 -xprofile 选项。虽然只在一个步骤中包括 -xprofile 而在其他步骤中不包括该项不会影响程序的正确性,但这样将无法进行文件配置。
-xa、tcov(1) 手册页和《程序性能分析工具》。