Oracle® Solaris Studio 12.4:Fortran 用户指南

退出打印视图

更新时间: 2014 年 12 月
 
 

3.4.169 –xprofile=p

收集用于分析的数据或使用分析进行优化。

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

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

collect[:profdir]

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

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

分析目录名 profdir(如果指定)是包含已分析的对象代码的程序或共享库在执行时用来存储分析数据的目录路径名。如果 profdir 路径名不是绝对路径,在使用选项 -xprofile=use:profdir 编译程序时将相对于当前工作目录来解释该路径。

如果未使用 —xprofile=collect: prof_dir—xprofile=tcov: prof_dir 指定任何分析目录名,则分析数据在运行时将存储在名为 program.profile 的目录中,其中 program 是已分析进程的主程序的根基名称。在此情况下,环境变量 SUN_PROFDATASUN_PROFDATA_DIR 可用于控制在运行时将分析数据存储在何处。如果已设置,分析数据将写入 $SUN_PROFDATA_DIR/$SUN_PROFDATA 指定的目录。如果在编译时指定了分析目录名,则 SUN_PROFDATA_DIRSUN_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] 或 —xprofile=tcov[: profdir] 编译的代码中收集的执行频率数据针对在执行已分析代码时执行的工作进行优化。profdir 是某个目录的路径名,该目录包含通过运行使用 —xprofile=collect[: profdir] 或 —xprofile=tcov[: profdir] 编译的程序收集的分析数据。

要生成 tcov—xprofile=use[:profdir] 都能使用的数据,必须在编译时使用 —xprofile=tcov[:profdir] 选项指定一个分析目录。必须在 —xprofile=tcov: profdir—xprofile=use: profdir 中指定相同的分析目录。为最大限度地减少混淆情况,请将 profdir 指定为绝对路径名。

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

demo% f95 -xprofile=collect -o myexe prog.f95 		 
demo% f95 -xprofile=use:myexe -xO5 -o myexe prog.f95

程序是使用以前生成并保存在 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 并将其用来存储运行时分析数据。