许多 er_print 命令都使用度量关键字的列表。列表的语法如下:
metric-keyword-1[:metric-keyword2…] |
对于动态度量(它们基于度量的数据),度量关键字包含以下三部分:度量类型字符串、度量可见性字符串和度量名称字符串。这些字符串连接在一起且没有空格,如下所示。
flavorvisibilityname |
对于静态度量-它们基于实验中装入对象的静态属性(名称、地址和大小),度量关键字包含度量名称和可选的前置度量可见性字符串,两者连接在一起且没有空格:
[visibility]name |
度量 flavor 和度量 visibility 字符串由类型和可见性字符组成。
表 5–1 中列出了允许的度量类型字符。包含多个类型字符的度量关键字可扩展为一系列度量关键字。例如,ie.user 可扩展为 i.user:e.user。
表 5–1 度量类型字符
字符 |
说明 |
---|---|
e |
显示独占度量值 |
i |
显示包含度量值 |
a |
显示归属度量值(仅适用于调用方-被调用方度量) |
d |
显示数据空间度量值(仅适用于数据派生的度量) |
表 5–2 中列出了允许的度量可见性字符。可见性字符串中可见性字符的顺序无关紧要:它不影响对应度量的显示顺序。例如,i%.user 和 i.%user 都解释为 i.use:i%user。
仅可见性不同的度量始终按标准顺序一起显示。如果仅可见性不同的两个度量关键字由某些其他关键字分隔,则度量按标准顺序出现在两个度量中第一个度量的位置。
表 5–2 度量可见性字符
字符 |
说明 |
---|---|
. |
将度量显示为时间。适用于计时度量以及度量循环计数的硬件计数器度量。其他度量解释为 "+"。 |
% |
将度量显示为总程序度量的百分比。对于调用方-被调用方列表中的归属度量,将度量显示为所选函数的非独占度量的百分比。 |
+ |
将度量显示为绝对值。对于硬件计数器,该值是事件计数。计时度量解释为 "."。 |
! |
不显示任何度量值。不能与其他可见性字符组合使用。 |
当类型字符串和可见性字符串都具有多个字符时,首先扩展类型。因此,将 ie.%user 扩展为 i.%user:e.%user,然后将其解释为 i.user:i%user:e.user:e%user。
对于静态度量,句点 (.)、加号 (+) 和百分号 (%) 这三种可见性字符在用于定义排序顺序时是等效的。因此,sort i%user、sort i.user 和 sort i+user 均表示只要包含用户 CPU 时间以任一形式可见,分析器就应该按它排序;而 sort i!user 则表示不管包含用户 CPU 时间是否可见,分析器都应该按它排序。
对于每种度量类型,可以使用叹号 (!) 可见性字符覆盖内置可见性缺省值。
如果同一度量在度量列表中出现多次,则仅处理第一次出现的该度量,而忽略随后出现的该度量。如果指定的度量不在列表中,则将它附加到列表中。
表 5–3 列出了 计时度量、同步延迟度量、内存分配度量、MPI 跟踪度量以及两个常见的硬件计数器度量的可用 er_print 度量名称字符串。对于其他硬件计数器度量,度量名称字符串与计数器名称相同。通过 metric_list 命令,可以获取已装入实验的所有可用度量名称字符串的列表。通过使用不带参数的 collect 命令,可以获取计数器名称的列表。有关硬件计数器的更多信息,请参见硬件计数器溢出分析数据。
表 5–3 度量名称字符串
类别 |
字符串 |
说明 |
---|---|---|
计时度量 |
user |
用户 CPU 时间 |
wall |
挂钟时间 |
|
total |
总 LWP 时间 |
|
system |
系统 CPU 时间 |
|
wait |
CPU 等待时间 |
|
ulock |
用户锁定时间 |
|
text |
文本缺页时间 |
|
data |
数据缺页时间 |
|
owait |
其他等待时间 |
|
基于时钟的分析度量 |
mpiwork |
在 MPI 运行时内执行工作(如处理请求或消息)所用的时间 |
mpiwait |
在 MPI 运行时内等待事件、缓冲区或消息所用的时间 |
|
ompwork |
以串行或并行方式执行工作所用的时间 |
|
ompwait |
OpenMP 运行时等待同步时所用的时间 |
|
同步延迟度量 |
sync |
同步等待时间 |
syncn |
同步等待计数 |
|
MPI 跟踪度量 |
mpitime |
MPI 调用所用的时间 |
mpisend |
已启动 MPI 点对点发送数 |
|
mpibytessent |
“MPI 发送”中的字节数 |
|
mpireceive |
已完成 MPI 点对点接收数 |
|
mpibytesrecv |
“MPI 接收”中的字节数 |
|
mpiother |
对其他 MPI 函数的调用数 |
|
内存分配度量 |
alloc |
分配的数量 |
balloc |
分配的字节 |
|
leak |
泄漏的数量 |
|
bleak |
泄漏的字节 |
|
硬件计数器溢出度量 |
cycles |
CPU 周期 |
insts |
发出的指令 |
|
线程分析器度量 |
raccesses |
数据争用访问 |
deadlocks |
死锁 |
除了表 5–3 中列出的名称字符串外,还有两个只能在缺省度量列表中使用的名称字符串。这两个名称字符串是 hwc(它与任何硬件计数器名称匹配)和 any(它与任何度量名称字符串匹配)。另请注意,cycles 和 insts 对于 SPARC 平台和 x86 平台是通用的,但是还存在特定于体系结构的其他类型的名称字符串。要列出所有可用的计数器,请使用不带参数的 collect 命令。
要查看在已装入的实验中可用的度量,请使用 metric_list 命令。