llvm-profdata命令详解

概要

llvm-profdata command [args…]

描述

llvm-profdata 工具是用于配置数据文件的小工具。

命令

  • merge
  • show
  • overlap

merge命令

概要

llvm-profdata merge [options] [filename …]

描述

llvm-profdata merge 接收由PGO检测生成的多个配置文件数据文件,并将它们合并为一个索引配置文件数据文件。

默认情况下,无需修改即可合并配置文件数据 这意味着每个输入文件的相对重要性与其包含的样本数或计数成比例。通常,较长训练运行的输入将被解释为比较短的运行相对更重要。根据训练运行的性质,使用-weighted-input选项调整给定每个输入文件的权重可能很有用。

通过-weighted-input-input-files或通过位置参数传递的配置文件在每次看到时都会被处理一次。

选项

  • -help

    打印命令行选项的摘要

  • -output=output, -o=output

    指定输出文件名。 输出不能是-因为生成的索引配置文件数据无法写入标准输出。

  • -weighted-input=weight,filename

    指定输入文件名和权重。提供的配置文件计数filename将按提供的值进行缩放(乘以) weight,其中,weight十进制整数> = 1.不使用此选项指定的输入文件的默认权重为1.

  • -input-files=path, -f=path

    指定包含要合并的文件列表的文件。此文件中的条目是换行符分隔的。以’#’开头的行将被跳过。条目的格式可以是

  • -remapping-file=path, -r=path

    指定一个文件,其中包含从输入配置文件中的符号名称到应在输出配置文件中使用的符号名称的重新映射。该文件应包含表单的行 。跳过以空白行和#开头的行。

    llvm-cxxmap工具可以用来生成符号重新映射文件。

  • -instr(default)

    指出输入配置文件是基于检测的配置文件

  • sample

    指定输入配置文件是基于样本的配置文件。

    生成的文件格式可以通过以下三种方式之一生成:

    • -binary(default)

      使用二进制编码发出配置文件。对于基于检测的配置文件,输出格式是索引的二进制格式。

    • text

      在文本模式下发出配置文件。此选项还可以与基于样本的配置文件和基于检测的配置文件一起使用。使用此选项时,配置文件将以配置文件阅读器可解析的文本格式转储。

    • gcc

      使用GCC的gcov格式发送配置文件(尚不支持)

  • -sparse=[true|false]

    不要发出执行计数的函数记录。只能与-instr一起使用。默认为false,因为它可以在PGO期间禁止编译器优化

  • -num-threads=N,-J=N

    使用N个线程执行配置文件合并。当N = 0时,llvm-profdata自动检测要使用的适当数量的线程。这是默认值。

示例

基本应用

合并3个配置文件:

llvm-profdata merge foo.profdata bar.profdata baz.profdata -output merged.profdata
加权输入

输入文件foo.profdata特别重要,将其计数乘以10:

llvm-profdata merge -weighted-input=10,foo.profdata bar.profdata baz.profdata -output merged.profdata

完全等同于先前的调用(显式形式;对程序调用很有用):

llvm-profdata merge -weighted-input=10,foo.profdata -weighted-input=1,bar.profdata -weighted-input=1,baz.profdata -output merged.profdata

show命令

概要

llvm-profdata show [options] [filename]

描述

llvm-profdata show获取配置文件数据文件,并显示有关此文件和任何指定功能的配置文件计数器的信息。

如果省略filename或是 -,则llvm-profdata show从标准输入读取其输入。

选项

  • -all-functions :打印每个功能的详细信息。
  • -counts:打印已显示的计数器值
  • -function=string :如果函数名称包含给定字符串,则打印函数的详细信息。
  • -help : 打印命令行选项的摘要
  • -output=output, -o=output: 指定输出文件名。如果是-或未指定,则输出将发送到标准输出。
  • -instr(default):指定输入配置文件是基于检测的配置文件
  • -text:指示配置文件转储程序以基于检测的配置文件数据表示的文本格式显示配置文件计数。默认情况下,配置文件信息以带有注释的更易于阅读的形式(也在文本中)转储。
  • -topn=n:指示配置文件转储器n在摘要部分中显示具有最热基本块的顶部函数。默认情况下,不会转储topn函数。
  • -sample:指定输入配置文件是基于样本的配置文件
  • -memop-sizes: 显示所显示函数的内存固有调用的配置文件大小
  • -value-cutoff=n: 仅显示最大计数值大于或等于的函数n。默认情况下,value-cutoff设置为0。
  • -list-below-cutoff:仅输出最大计数值低于截止值的函数的名称
  • -shows:仅显示上下文敏感的配置文件计 默认设置是过滤所有上下文相关的配置文件计数。

overlap命令

概要

llvm-profdata overlap [options] [base profile file] [test profile file]

描述

llvm-profdata overlap 要两个配置文件数据文件,并显示整个文件之间以及任何指定函数之间的计数器分配的 overlap

在此命令中,overlap 定义如下:假设基本配置文件具有以下计数:{c1_1,c1_2,...,c1_n,c1_u_1,c2_u_2,...,c2_u_s},并且测试配置文件具有{c2_1,c2_2,...,c2_n ,c2_v_1,c2_v_2,...,c2_v_t}。这里C{1|2} _i(I = 1 ... n)被匹配计数器和c1_u_i(I = 1 .. S)和c2_v_i(I = 1 .. V)所无法比拟的计数器(或计数器只存在于) 碱配置文件和测试配置文件。设sum_1 = c1_1 + c1_2 + … + c1_n + c1_u_1 + c2_u_2 + … + c2_u_s,sum_2 = c2_1 + c2_2 + … + c2_n + c2_v_1 + c2_v_2 + … + c2_v_t。 overlap = min(c1_1 / sum_1,c2_1 / sum_2)+ min(c1_2 / sum_1,c2_2 / sum_2)+ … + min(c1_n / sum_1,c2_n / sum_2)。

结果重叠分布是百分数,范围从0.0%到100.0%,其中0.0%表示没有重叠,100.0%表示完美重叠。

下面是一个示例,如果基本配置文件的计数为{400,600},并且 测试配置文件的匹配计数为{60000,40000}。的重叠为80%。

选项

  • -function=string :如果函数名称包含给定字符串,则打印函数的详细信息
  • -help:打印命令行选项的摘要
  • -o=output, -o output: 指定输出文件名。如果是-或未指定,则输出将发送到标准输出。
  • -value-cutoff=n: 仅显示最大计数值大于或等于的函数n。默认情况下,value-cutoff设置为unsigned long long的最大值。
  • cs:仅显示上下文敏感的配置文件计数的重叠。默认设置是显示非上下文敏感的配置文件计数。

退出

如果命令被省略或无效,如果它无法读取输入文件,或者它们的数据之间不匹配,llvm-profdata返回1。