使用专家系统分析报告
1. 专家系统
专家系统是Asight Systems中的一个智能分析系统,可以帮助识别常见的性能问题。专家系统分析报告中事件,并提出优化建议,以便能够更有效地进行性能优化。
1.1 从GUI端使用专家系统
GUI中可以从下方tab切换到专家系统页面,如下所示:

规则列表,可以在此选择分析规则。
规则参数配置对话框,可以在此改变当前规则的配置。
当前规则的介绍,以及相关的优化建议。
当前规则的分析结果,可以通过右键菜单导出分析结果。
1.1.1 设置分析区间
可以设置一个时间区间,专家系统只会对该时间区间内的事件进行分析。可以通过以下两种办法进行设置:
通过Timeline View的filter功能指定时间区间。
通过规则参数配置对话框中的NVTX参数,以NVTX range的起点和终点作为时间区间,如下所示:

指定NVTX的格式为:range[@domain][/index],其中:
range为NVTX的名字
domain指定了NVTX属于哪个domain
index指定了如果有重名的NVTX,选择第几个NVTX
1.1.2 跳转至Timeline View
对于部分规则,支持跳转至Timeline View,可以通过右键菜单选择跳转的方式。
1.2 从命令行端使用专家系统
可以通过执行asys analyze子命令,使用asys专家系统对asysrep文件进行分析,生成一系列分析报告。asys analyze子命令的使用方式为:asys analyze [option] <file.asysrep>。
1.2.1 指定报告分析类型
asys analyze支持多种报告分析类型,通过asys analyze --help-rules ALL可查看分析类型的详细说明。通过--rule选项可指定报告分析类型,该选项可以多次指定,也可以使用逗号分隔列表来指定多个分析类型。如果未指定报告分析类型,将使用默认报告分析类型来生成报告。例如:指定使用ppu_gaps和ppu_time_util报告分析类型生成报告:
asys analyze --rule ppu_gaps,ppu_time_util report.asysrep1.2.2 指定报告输出格式
asys analyze支持通过--format选项,指定统计报告输出格式。通过asys analyze --help-formats ALL可查看支持的输出格式和帮助信息。
column:输出到终端的默认格式,按照列表方式打印,易于阅读的输出格式。
csv:输出到文件的默认格式,按照csv表格格式打印,易于导出表格以后续处理。
1.2.3 指定报告输出类型
通过--output选项可指定报告输出的输出类型,目前有3种输出类型: 打印到console控制台,输出到文件,或者输出到命令。不指定默认打印到控制台。通过--output %指定输出类型%表示输出到控制台console,例如:
asys analyze --output % --rule ppu_gaps report.asysrep
通过--output指定输出类型为输出到asysrep报告所在目录,则asys将会根据asysrep报告文件名、指定的报告分析类型和输出格式生成报告输出的文件名,输出文件名格式为:<report_name>_<rule_name>.<format>。例如指定--output在报告所在目录生成report.asysrep的ppu_gaps分析类型的分析报告,本地报告文件名称为report_ppu_gaps.csv:
asys analyze --output . --rule ppu_gaps report.asysrep通过--output @post_command指定输出结果通过post_command进行二次处理,分析报告的内容将通过管道传输到给定的命令。例如:通过grep 1142417匹配结果包含关键字1142417的结果:
asys analyze --output "@grep 1142417" --rule ppu_gaps report.asysrep1.2.4 指定统计时间范围
可通过--filter-time选项指定统计的时间范围,时间格式为开始时间/结束时间,单位为纳秒,时间指从采集开始的偏移时间,其中开始时间或者结束时间可以省略一种。例如指定统计从第10秒到第20秒的跟踪数据:
asys analyze --filter-time 10000000000/20000000000 --rule ppu_gaps report.asysrep可通过--filter-hgtx选项通过HGTX标注指定统计的时间范围,当--filter-hgtx选项被指定时,将忽略--filter-time选项。
使用--filter-hgtx选项可指定匹配的HGTX range的名称、domain和匹配索引,格式为range_name@domain/index,若匹配的HGTX range不存在domain,则@domain可省略,否则@domain需要指定。
默认asys将使用匹配的第一个HGTX range作为统计的时间范围,此时/index部分可省略,若需要指定匹配索引,则通过/index指定,索引从0开始。
例如:使用名称为self_attention的HGTX range指定统计时间范围,无domain,使用首个匹配的HGTX range的时间范围。
asys analyze --filter-hgtx self_attention --rule ppu_gaps report.asysrep
例如:使用名称为pcclGroupEnd的HGTX range指定统计时间范围,domain为NCCL,使用第9个匹配的HGTX range的时间范围(索引为8)。
asys analyze --filter-hgtx "pcclGroupEnd@NCCL/8" --rule ppu_gaps report.asysrep
Tips:
asys analyze输出的时间戳信息可能由于
--rule选项不同而不同。若希望统一时间戳信息,可指定选项--ts-normalize true使能转换时间戳为UTC时间。asys analyze支持通过选项
--ts-shift手动调整时间戳偏移值,此选项可以和--ts-normalize配合使用。
1.3 专家系统规则
1.3.1 PPU长时间空闲分析
功能说明
分析和汇总asysrep报告中PPU长时间空闲的时间段(CPU bubble),并按照空闲时长排序降序输出。
依赖的asys采集选项:--trace hggc
命令行使用方法:
asys analyze --rule ppu_gaps report.asysrep
通过--rule选定ppu_gaps时,可通过拼接多个:option的方式指定分析的相关参数,可通过asys analyze --help-rules ppu_gaps查看具体帮助信息,支持的选项举例如下:
rows=<limit>:限制输出的PPU长时间空闲结果的条数。
gap=<threshold>:设置长时间空闲的时间门限,单位为毫秒。
例如:分析PPU长时间空闲,空闲时间门限为20ms,输出空闲时长最长的前10条结果:
asys analyze --rule ppu_gaps:rows=10:gap=20 report.asysrep
报告结果示例如下:
Row#,Duration,Start,PID,Device ID,
1,1232895501,126020393150,1142419,6,
2,1219910832,126016153086,1142417,4,
3,1219804936,126017799911,1142416,3,
...ppu_gaps表格列说明如下:
Row# : Row number of the PPU gap
Duration [ns] : Duration of the PPU gap
Start [ns] : Start time of the PPU gap
PID : Process identifier
Device ID : PPU device identifier分析规则
当PPU没有下述活动时,视为PPU空闲:
执行kernel
执行memcpy / memset
执行video编解码
按照每进程、每PPU级别,统计PPU空闲时间段。若空闲时间段大于参数gap设置的门限,则此空闲时间段汇入统计结果。统计结果按照空闲时长排序降序输出。
1.3.2 PPU时间利用率分析
功能说明
分析和汇总asysrep报告中PPU时间层面的利用率,并按照时间利用率升序输出。
依赖的asys采集选项:--trace hggc
命令行使用方法:
asys analyze --rule ppu_time_util report.asysrep
通过--rule选定ppu_time_util时,可通过拼接多个:option的方式指定分析的相关参数,可通过asys analyze --help-rules ppu_time_util查看具体帮助信息,支持的选项举例如下:
rows=<limit>:限制输出的PPU低利用率时间段的结果的条数。
threshold=<percent>:设置PPU繁忙占比的百分比门限。
chunks=<number>:PPU整体有活动的时间段的切分个数。
例如:分析PPU时间利用率,利用率门限为60%,时间等分为80段,输出利用率最低的前20条结果:
asys analyze --rule ppu_time_util:rows=20:threshold=60:chunks=80 report.asysrep
报告结果示例如下:
Row#,In-Use,Duration,Start,PID,Device ID,
1,0.000000,12411,124667294244,1142418,5,
2,0.000000,7648,124667369358,1142419,6,
3,0.000000,7648,124667378918,1142419,6,
4,2.425268,7092,124667285970,1142418,5,
5,4.258319,7092,124667278287,1142418,5,
...ppu_time_util表格列说明如下:
Row# : Row number of the chunk
In-Use [%] : Percentage of time the PPU is being used
Duration [ns] : Duration of the chunk
Start [ns] : Start time of the chunk
PID : Process identifier
Device ID : PPU device identifier分析规则
当PPU有下述活动时,视为PPU繁忙:
执行kernel
执行memcpy / memset
执行video编解码
按照每进程、每PPU级别,计算PPU整体有活动的时间:从第一个活动开始到最后一个活动结束。整体有活动的时间按照参数chunks分为等长的时间段,对每个时间段计算PPU在本时间段的时间利用率:繁忙时间/时间段长度。时间利用率低于参数threshold的时间段将汇入统计结果。若多个相邻的时间段利用率均低于参数threshold,这些时间段将被合并计算利用率作为统计结果输出。统计结果按照时间利用率升序输出。
Tips:时间上重叠的kernel/memcpy等活动,重叠部分的时间不会重复计算,每个时间段的时间利用率不会高于100%。
2. 统计系统
统计系统是Asight Systems中的一项重要功能,它对报告中数据的进行统计,可以通过这些统计结果全面了解程序的性能。
2.1 从GUI端使用统计系统
与Function View类似,可以通过下方tab切换到统计系统页面,如下所示:

规则列表,可以在此选择统计规则。
规则参数配置对话框,可以在此改变当前统计规则的配置。
当前规则的介绍,以及相关的优化建议。
统计结果表格,显示当前规则的分析结果,可以通过右键菜单导出分析结果。
2.1.1 设置统计区间
可以设置一个时间区间,统计系统只会对该时间区间内的事件进行统计。可以通过以下两种办法进行设置:
通过Timeline View的filter功能指定时间区间。
通过规则参数配置对话框中的NVTX参数,以NVTX range的起点和终点作为时间区间,如下所示:

指定NVTX的格式为:range[@domain][/index],其中:
range为NVTX的名字
domain指定了NVTX属于哪个domain
index指定了如果有重名的NVTX,选择第几个NVTX
2.1.2 跳转至Timeline View
对于部分规则,支持跳转至Timeline View,可以通过右键菜单选择跳转的方式。
2.2 从命令行端使用统计系统
在命令行端,可以通过执行asys stats命令,对指定报告进行统计分析,提供高效的统计功能和跟踪导出功能,分析结果支持输出到控制台、文件或命令管道,方便用户对数据进行查阅和二次处理。部分统计和分析功能也可通过Asight Systems GUI查看结果。stats子命令的使用方式为:asys stats [option] <file.asysrep>
2.2.1 指定统计报告类型
asys stats支持多种统计报告类型,通过asys stats --help-reports ALL可查看统计报告类型的详细说明。
通过--report选项可指定统计报告类型,该选项可以多次指定,也可以使用逗号分隔列表来指定多个统计报告类型。若未指定统计报告类型,将使用默认统计报告类型来生成报告。
例如:指定使用hggc_ppu_kern_sum和device_memory_usage_summary统计报告类型生成报告:
asys stats --report hggc_ppu_kern_sum,device_memory_usage_summary report.asysrep
2.2.2 指定统计报告格式
asys stats支持通过--format选项,指定统计报告输出格式。通过asys stats --help-formats ALL可查看支持的输出格式和帮助信息。
column:输出到终端的默认格式,按照列表方式打印,易于阅读的输出格式。
csv:输出到文件的默认格式,按照csv表格格式打印,易于导出表格以后续处理。
2.2.3 指定统计报告输出类型
通过--output选项可指定报告输出的输出类型,目前有3种输出类型: 打印到console控制台,输出到文件,或者输出到命令。不指定默认打印到控制台。
通过--output %指定输出类型%表示输出到控制台console,例如:
asys stats --output % --report hgtx_sum report.asysrep
通过--output .指定输出类型为输出到asysrep报告所在目录,则asys将会根据asysrep报告文件名、指定的统计报告类型和输出格式生成报告输出的文件名,输出文件名格式为:<file_name>_<report_name>.<format>。例如指定--output在报告所在目录生成report.asysrep的hggc_api_sum类型的统计报告,本地报告文件名称为report_hggc_api_sum.csv:
asys stats --output . --report hggc_api_sum report.asysrep
通过--output @post_command指定输出结果通过post_command进行二次处理,统计报告的内容将通过管道传输到给定的命令。例如:通过grep 1142417匹配结果包含关键字1142417的结果:
asys stats --output "@grep 1142417" --report device_memory_usage_summary report.asysrep
2.2.4 指定统计时间范围
可通过--filter-time选项指定统计的时间范围,时间格式为开始时间/结束时间,单位为纳秒,时间指从采集开始的偏移时间,其中开始时间或者结束时间可以省略一种。例如指定统计从第10秒到第20秒的跟踪数据:
asys stats --filter-time 10000000000/20000000000 --report device_memory_usage_summary report.asysrep
可通过--filter-hgtx选项通过HGTX标注指定统计的时间范围,当--filter-hgtx选项被指定时,将忽略--filter-time选项。使用--filter-hgtx选项可指定匹配的HGTX range的名称、domain和匹配索引,格式为range_name@domain/index,若匹配的HGTX range不存在domain,则@domain可省略,否则@domain需要指定。默认asys将使用匹配的第一个HGTX range作为统计的时间范围,此时/index部分可省略,若需要指定匹配索引,则通过/index指定,索引从0开始。例如:使用名称为self_attention的HGTX range指定统计时间范围,无domain,使用首个匹配的HGTX range的时间范围。
asys stats --filter-hgtx self_attention --report device_memory_usage_summary report.asysrep
例如:使用名称为pcclGroupEnd的HGTX range指定统计时间范围,domain为NCCL,使用第9个匹配的HGTX range的时间范围(索引为8)。
asys stats --filter-hgtx "pcclGroupEnd@NCCL/8" --report device_memory_usage_summary report.asysrep
Tips:
asys stats输出的时间戳信息可能由于
--report选项不同而不同。若希望统一时间戳信息,可指定选项--ts-normalize true使能转换时间戳为UTC时间。asys stats支持通过选项
--ts-shift手动调整时间戳偏移值,此选项可以和--ts-normalize配合使用。
2.3 统计系统规则
2.3.1 设备内存使用分组汇总
功能说明
分析和汇总asysrep报告中已申请且没有释放的PPU设备内存使用记录,按照分组(如算子库、框架)统计内存使用量,输出各个分组的内存使用汇总和详细信息。
依赖的asys采集选项:--hggc-memory-usage true
命令行使用方法:可通过--callstack-group-config选项添加分组规则,通过--report指定分组统计报告,举例如下:
asys stats -r device_memory_usage_summary --callstack-group-config "acompute=(libacblas|libacdnn)" --callstack-group-config "launch_kernel=libtorch/LaunchKernel" report.asysrep
-r device_memory_usage_summary:指定设备内存使用汇总报告。--callstack-group-config "acompute=(libacblas|libacdnn)":创建分组名称acompute。
匹配的正则表达式(libacblas|libacdnn):匹配调用栈包含libacblas或者libacdnn关键字的内存使用。
--callstack-group-config "launch_kernel=libtorch/LaunchKernel":创建分组名称launch_kernel。
匹配的正则表达式libtorch/LaunchKernel:匹配调用栈层级关系:父函数所在帧包含关键字libtorch,且子函数所在帧包含关键字LaunchKernel的内存使用。
匹配的父、子函数所在的调用栈帧之间允许存在未匹配的调用栈帧。
分组的统计结果输出示例如下,按照CSV格式输出,可通过--output指定输出到csv文件等处理。
PID,Device ID,Group List,Memory Usage,
1873,0,launch_kernel,213174,
1873,0,others,48674898730,
1873,0,acompute,1610624066,报告内容提供了分组acompute、launch_kernel的已申请且未释放的内存汇总,单位字节。
不归属于用户指定组的内存使用,汇总到缺省的others分组。
device_memory_usage_summary表格列说明如下:
Row# : Row number of the device memory usage
PID : Process identifier
Device ID : PPU device identifier
Group List : Memory usage belonged group list, splited by '/'
Memory Usage [bytes] : Device memory usage设备内存使用分组统计功能提供下述两种报告类型,可通过--report指定单个或者多个报告:
device_memory_usage_summary:输出每进程、每设备、每分组的已申请且未释放的内存汇总。
device_memory_usage_detail:输出每笔申请且未释放的内存使用记录,以及所属的分组。
具体设备内存使用分组统计功能的描述信息,可通过--help-reports选项查询,包含功能描述,输出格式说明等,例如执行asys stats --help-report device_memory_usage_summary,输出结果示例如下:
root@eb4c64fd3401:~# asys stats --help-report device_memory_usage_summary
device_memory_usage_summary -- Device Memory Usage Summary
Options:
Use --filter-time / --filter-hgtx to specify report time range.
Use --callstack-group-config to create report group configuration.
Try 'asys stats --help' for more information.
Output:
Row# : Row number of the device memory usage
PID : Process identifier
Device ID : PPU device identifier
Group List : Memory usage belonged group list, splited by '/'
Memory Usage [bytes] : Device memory usage
Group and statistic allocated but not freed device memory usage,
display per process / per PPU device / per group device memory usage summary.当内存使用记录同时匹配多个分组时,报告输出的分组信息将显示记录归属的所有分组,通过/间隔,例如:
acompute/launch_kernel
内存使用同时归属于acompute和launch_kernel分组。
分组的排列顺序取决于命令行选项
--callstack-group-config的创建分组顺序。
通过选项--callstack-group-config可创建分组并通过正则表达式指定匹配规则,格式为group_name=frame_filters,其中frame_filters可指定多个帧的匹配正则表达式,格式为:frame_regex/frame_regex...,帧匹配正则表达式之间通过/间隔,帧的排列方向为从父函数到子函数方向排列。分组的匹配规则说明如下:
帧的匹配方式为:若正则表达式可部分匹配调用栈的库名称或者函数签名,则判定帧匹配。
调用栈的匹配方式为:若调用栈中匹配的帧的层级关系,符合frame_filters中指定的层级关系,则判定分组匹配。
选项--callstack-group-config举例如下,通过多次使用--callstack-group-config创建多个分组,每个分组指定匹配多个帧的规则:
--callstack-group-config "torch=libtorch" --callstack-group-config "acompute=(libacblas|libacdnn)" --callstack-group-config "buffer_init=_to_copy/empty_strided"Tips:
若没有通过
--callstack-group-config添加分组规则,将会使用默认内置的分组规则。当多个
--callstack-group-config创建的分组名称相同时,匹配任一分组规则的内存使用记录,将被归属到本分组。
统计规则
按照每进程、每PPU级别,汇总已申请且没有释放的PPU设备内存使用记录。对于每个申请且没有释放的内存使用记录,根据内存申请时的调用栈信息(帧的排列顺序,每帧匹配的关键字),匹配分组规则。内存使用记录可能匹配到多个分组,输出的分组信息将显示记录归属的所有分组,通过/间隔。汇总每种分组组合的内存使用量,结果按照内存使用量汇总降序排列。
2.3.2 PCCL传输各阶段汇总
功能说明
分析和汇总asysrep报告中PCCL传输各阶段耗时,按照阶段总耗时降序输出。
依赖的asys采集选项:--trace pccl
命令行使用方法:
asys stats --report pccl_stage_sum report.asysrep
可通过asys stats --help-report pccl_stage_sum查看具体帮助信息。
报告结果示例如下:
Row#,PID,Device ID,TID,Channel ID,Channel Type,Name,Total Time,Instances,Avg,Med,Min,Max,Stdev,
1,631660,0,631712,1,RX,RecvWait,305528068,24,12730336,13761981,9669723,18509164,2407844,
2,631660,1,631711,1,TX,GPUWait,299988851,24,12499535,12786840,9625474,16580086,2217489,
3,631660,0,631712,1,TX,GPUWait,297674072,24,12403086,12579239,9570100,17151019,2208876,
...pccl_stage_sum表格列说明如下:
Row# : Row number of the stage summary
PID : Process identifier
Device ID : PPU device identifier
TID : Thread identifier
Channel ID : PCCL channel identifier
Channel Type : PCCL channel type
Name : Stage name
Total Time [ns] : Stage total time
Instances : Number of this stage
Avg [ns] : Average of stage duration
Med [ns] : Median of stage duration
Min [ns] : Minimum of stage duration
Max [ns] : Maximum of stage duration
Stdev [ns] : Standard deviation of stage duration统计规则
按照每线程、每channel、每方向、每传输阶段,统计传输阶段的耗时(平均值、最大值、最小值等)、出现次数等指标,按照传输阶段总耗时降序输出。
2.3.3 OSRT API汇总
功能说明
汇总asysrep报告中操作系统API(OS runtime API)的耗时,按照API总耗时降序输出。
依赖的asys采集选项:--trace osrt
命令行使用方法:
asys stats -r osrt_sum report.asysrep
可通过asys stats --help-report osrt_sum查看具体帮助信息。
报告结果示例如下:
Row#,Time (%),Total Time (ns),Num Calls,Avg (ns),Med (ns),Min (ns),Max (ns),StdDev (ns),Name,
1,85.6,8901500720,255,34907845,4994783,1095,348667026,63811239,"pthread_cond_wait",
2,6.9,721563692,1105,652998,1055069,52083,1072141,485233,"nanosleep",
3,6.7,700892565,7,100127509,100123388,100121020,100143853,8411,"poll",
...osrt_sum表格列说明如下:
Row# : Row number of the OS runtime summary
Time [%] : Percentage of 'Total Time'
Total Time [ns] : Total time used by all executions of this function
Num Calls : Number of calls to this function
Avg [ns] : Average execution time of this function
Med [ns] : Median execution time of this function
Min [ns] : Smallest execution time of this function
Max [ns] : Largest execution time of this function
StdDev [ns] : Standard deviation of the time of this function
Name : Name of the function统计规则
按照每OSRT API名称级别进行统计,累加相同名称API的耗时时间,按照API总耗时降序输出。
2.3.4 HGGC API汇总
功能说明
汇总asysrep报告中HGGC API的耗时,按照API总耗时降序输出。
依赖的asys采集选项:--trace hggc
命令行使用方法:
asys stats -r hggc_api_sum report.asysrep
可通过asys stats --help-report hggc_api_sum查看具体帮助信息。
报告结果示例如下:
Row#,Time (%),Total Time (ns),Num Calls,Avg (ns),Med (ns),Min (ns),Max (ns),StdDev (ns),Name,
1,84.9,393100090,342,1149415,98746,3981,11001565,2011747,"hgMemcpyHtoDAsync_v2",
2,4.3,19851112,1297,15305,5351,2893,3860175,147778,"hgLaunchKernel",
3,2.9,13492044,1486,9079,2861,613,3707197,108998,"hgEventQuery",
4,2.9,13487638,1495,9021,6027,3191,222379,14733,"hggcLaunchKernel",
...hggc_api_sum表格列说明如下:
Row# : Row number of the HGGC API summary
Time [%] : Percentage of 'Total Time'
Total Time [ns] : Total time used by all executions of this function
Num Calls : Number of calls to this function
Avg [ns] : Average execution time of this function
Med [ns] : Median execution time of this function
Min [ns] : Smallest execution time of this function
Max [ns] : Largest execution time of this function
StdDev [ns] : Standard deviation of the time of this function
Name : Name of the function统计规则
按照每HGGC API名称级别进行统计,累加相同名称API的耗时时间,按照API总耗时降序输出。
2.3.5 HGGC API跟踪
导出asysrep报告中的HGGC API跟踪数据,按照API执行时间升序输出。
依赖的asys采集选项:--trace hggc
命令行使用方法:
asys stats -r hggc_api_trace report.asysrep
可通过asys stats --help-report hggc_api_trace查看具体帮助信息。
报告结果示例如下:
Row#,Start (ns),Duration (ns),Name,CorrID,Pid,Tid,Thread Name,
1,41550,12737,"cudaProfilerStart",0,104699,104699,"python",
2,938476,28340,"cudaLaunchKernel",130170,104699,104699,"python",
3,999414,9382,"cudaLaunchKernel",130171,104699,104699,"python",
...hggc_api_trace表格列说明如下:
Row# : Row number of the HGGC API trace
Start [ns] : Timestamp when API call was made
Duration [ns] : Length of API calls
Name : API function name
CorrID : Correlation used to map to other HGGC traces
Pid : Process ID that made the call
Tid : Thread ID that made the call
Thread Name : Name of thread that called API function统计规则
每HGGC API调用导出一行数据,按照API执行时间升序输出。
2.3.6 HGGC Kernel执行跟踪
功能说明
导出asysrep报告中的HGGC kernel通过API launch启动到Kernel实际执行的跟踪数据,根据本kernel的launch API的起始时间升序输出。
依赖的asys采集选项:--trace hggc
命令行使用方法:
asys stats -r hggc_kern_exec_trace report.asysrep
可通过asys stats --help-report hggc_kern_exec_trace查看具体帮助信息,支持的选项列举如下:
base:导出kernel的短名称(仅函数名,不包含参数)
mangled:导出kernel的mangled名称
默认导出HGGC Kernel的名称为demangle之后的名称。
报告结果示例如下:
Row#,API Start (ns),API Dur (ns),Queue Start (ns),Queue Dur (ns),Kernel Start (ns),Kernel Dur (ns),Total Dur (ns),PID,TID,DevId,API Function,GridXYZ,BlockXYZ,Kernel Name,
1,504935256,20348911,525284167,21237024,526172280,357034784,378271808,631660,631660,0,"hggcLaunchKernel","2 1 1","512 1 1","pcclKernel_AllReduce_RING_LL_Sum_int8_t(pcclWorkElem)",
2,845563829,20332834,865896663,20934656,866498485,17898735,38833391,631660,631660,1,"hggcLaunchKernel","2 1 1","512 1 1","pcclKernel_AllReduce_RING_LL_Sum_int8_t(pcclWorkElem)",
3,884469702,40488,884510190,627234,885096936,16944871,17572105,631660,631660,0,"hggcLaunchKernel","2 1 1","512 1 1","pcclKernel_AllReduce_RING_LL_Sum_int8_t(pcclWorkElem)",
...hggc_kern_exec_trace表格列说明如下:
Row# : Row number of the kernel trace
API Start [ns] : Start timestamp of HGGC API launch call
API Dur [ns] : Duration of HGGC API launch call
Queue Start [ns] : Start timestamp of queue wait time, if it exists
Queue Dur [ns] : Duration of queue wait time, if it exists
Kernel Start [ns] : Start timestamp of HGGC kernel
Kernel Dur [ns] : Duration of HGGC kernel
Total Dur [ns] : Duration from API start to kernel end
PID : Process ID that made kernel launch call
TID : Thread ID that made kernel launch call
DevId : HGGC Device ID that executed kernel (which PPU)
API Function : Name of HGGC API call used to launch kernel
GridXYZ : Grid dimensions for kernel launch call
BlockXYZ : Block dimensions for kernel launch call
Kernel Name : Name of HGGC Kernel统计规则
导出结果组织如下:每Kernel执行信息导出一行数据,根据本Kernel的launch API的起始时间升序输出。对于HGGC Graph等单个HGGC API关联多个Kernel的场景,每个Kernel导出一行数据。Kernel Launch后的等待时间相关列(Queue Start / Queue Dur)的计算方式如下:
认为Kernel存在等待时间:Kernel实际执行开始时间 > 执行HGGC API结束时间。
等待时间计算:Kernel实际执行开始时间 - 执行HGGC API结束时间。
若Kernel在HGGC API执行结束前即开始执行,则Queue Start / Queue Dur列标记为无效值"-"。
2.3.7 HGGC PPU跟踪
功能说明
导出asysrep报告中的PPU执行HGGC Kernel / Memcpy / Memset的跟踪数据,根据执行的开始时间升序输出。
依赖的asys采集选项:--trace hggc
命令行使用方法:
asys stats -r hggc_ppu_trace report.asysrep
可通过asys stats --help-report hggc_ppu_trace查看具体帮助信息,支持的选项列举如下:
base:导出kernel的短名称(仅函数名,不包含参数)。
mangled:导出kernel的mangled名称。
默认导出HGGC Kernel的名称为demangle之后的名称。报告结果示例如下,不适用的单元格被标记为无效值"-":
Row#,Start (ns),Duration (ns),CorrId,GrdX,GrdY,GrdZ,BlkX,BlkY,BlkZ,Reg/Trd,StcSMem (bytes),DymSMem (bytes),Bytes (bytes),Throughput (B/s),SrcMemKd,DstMemKd,Device,Ctx,Strm,Name,
1,193282492,3009,5,"-","-","-","-","-","-","-","-","-",256,85078016,"Device","-","",1,1,"Memset",
2,193329286,1332,6,"-","-","-","-","-","-","-","-","-",256,192192000,"Pageable","Device","",1,1,"Memcpy HtoD (device)",
3,193380562,3415,7,"-","-","-","-","-","-","-","-","-",256,74963200,"Pageable","Device","",1,1,"Memcpy HtoD (device)",
4,231829389,4562345,8,64,1,1,1,1,1,32,0,0,"-","-","-","-","",1,1,"add(int*, int*, int*)",hggc_ppu_trace表格列说明如下:
Row# : Row number of the PPU trace
Start [ns] : Timestamp of start time
Duration [ns] : Length of event
CorrId : Correlation ID
GrdX : Grid X values
GrdY : Grid Y values
GrdZ : Grid Z values
BlkX : Block X values
BlkY : Block Y values
BlkZ : Block Z values
Reg/Trd : Registers per thread
StcSMem [bytes] : Size of Static Shared Memory
DymSMem [bytes] : Size of Dynamic Shared Memory
Bytes [bytes] : Size of memory operation
Throughput [B/s] : Memory throughput
SrcMemKd : Memcpy source memory kind or memset memory kind
DstMemKd : Memcpy destination memory kind
Device : PPU device name and ID
Ctx : Context ID
Strm : Stream ID
Name : Trace event name统计规则
导出结果组织如下:每Kernel/Memcpy/Memset执行信息导出一行数据,根据执行的开始时间升序输出。
由于导出结果的列包含Kernel/Memcpy/Memset的信息,对于导出的每一行数据,不适用的单元格被标记为无效值"-"。
2.3.8 HGGC PPU kernel汇总
功能说明
汇总asysrep报告中HGGC kernel的耗时,按照HGGC kernel总耗时降序输出。
依赖的asys采集选项:--trace hggc
命令行使用方法:
asys stats -r hggc_ppu_kern_sum report.asysrep
可通过asys stats --help-report hggc_ppu_kern_sum查看具体帮助信息,支持的选项列举如下:
base:使用kernel的短名称(仅函数名,不包含参数)进行统计和输出。
mangled:使用kernel的mangled名称进行统计和输出。
报告结果示例如下:
Row#,Time (%),Total Time (ns),Instances,Avg (ns),Med (ns),Min (ns),Max (ns),StdDev (ns),Name,
1,81.6,826473830,28,29516922,17075623,16812011,357034784,64193935,"_Z39pcclKernel_AllReduce_RING_LL_Sum_int8_t12ncclWorkElem",
2,13.9,141273640,4,35318410,34326818,31248932,41371071,4288359,"_Z9deltaKernIaLi256EEvPvS0_mPd",
3,2.3,23263744,4,5815936,5866699,4743763,6786583,1087875,"_Z14InitDataKernelIaEvPT_mii",
4,2.2,22033972,4,5508493,5461251,4528464,6583005,1031905,"_Z20InitDataReduceKernelIaXadL_Z9ncclOpSumIaET_S1_S1_EEEvPS1_mmii",hggc_ppu_kern_sum表格列说明如下:
Row# : Row number of the kernel summary
Time [%] : Percentage of 'Total Time'
Total Time [ns] : Total time used by all executions of this kernel
Instances : Number of calls to this kernel
Avg [ns] : Average execution time of this kernel
Med [ns] : Median execution time of this kernel
Min [ns] : Smallest execution time of this kernel
Max [ns] : Largest execution time of this kernel
StdDev [ns] : Standard deviation of the time of this kernel
Name : Name of the kernel统计规则
按照每HGGC kernel名称进行统计,HGGC kernel名称取决于base / mangled选项是否设置,默认为demangle后kernel名称(包含函数参数列表),按照HGGC kernel总耗时降序输出。
2.3.9 HGTX range汇总
功能说明
汇总asysrep报告中HGTX range的耗时,按照range总耗时降序输出。
依赖的asys采集选项:--trace hgtx
命令行使用方法:
asys stats -r hgtx_sum report.asysrep
可通过asys stats --help-report hgtx_sum查看具体帮助信息。支持的选项列举如下:
rows=<limit>:限制输出的HGTX range的条数。
process=<pid_list>:指定统计的进程的PID列表,多个PID之间通过/分割。若不指定,默认统计所有进程。
thread=<tid_list>:指定统计的线程的TID列表,多个TID之间通过/分割。若不指定,默认统计所有线程。
报告结果示例如下:
Row#,Time (%),Total Time (ns),Instances,Avg (ns),Med (ns),Min (ns),Max (ns),StdDev (ns),Style,Range,
1,25.7,181837947,1,181837947,181837947,181837947,181837947,0,"PushPop","[prof_range]: iter 6",
2,25.1,177622641,1,177622641,177622641,177622641,177622641,0,"PushPop","[prof_range]: iter 9",
3,25.1,177254919,1,177254919,177254919,177254919,177254919,0,"PushPop","[prof_range]: iter 7",
4,24.1,170843422,1,170843422,170843422,170843422,170843422,0,"PushPop","[prof_range]: iter 8",
...hgtx_sum表格列说明如下:
Row# : Row number of the HGTX range summary
Time [%] : Percentage of 'Total Time'
Total Time [ns] : Total time used by all instances of this range
Instances : Number of instances of this range
Avg [ns] : Average execution time of this range
Med [ns] : Median execution time of this range
Min [ns] : Smallest execution time of this range
Max [ns] : Largest execution time of this range
StdDev [ns] : Standard deviation of the time of this range
Style : Range style; Start/End or Push/Pop
Range : Name of the range统计规则
按照每HGTX range domain和名称级别进行统计,累加相同domain和名称的HGTX range的耗时时间,若HGTX range包含domain,输出的HGTX range名称格式为domain:range,按照range总耗时降序输出。若通过process/thread选项指定统计范围,线程匹配thread过滤条件或者所属进程匹配process过滤条件,均参与统计。
2.3.10 HGTX关联kernel跟踪
功能说明
建立关联HGTX和HGGC kernel的关联关系,并按照每HGTX range,每HGGC kernel级别导出关联关系。
依赖的asys采集选项:--trace hgtx,hggc
命令行使用方法:
asys stats -r hgtx_kern_trace report.asysrep
可通过asys stats --help-report hgtx_kern_trace查看具体帮助信息,支持的选项列举如下:
base:导出kernel的短名称(仅函数名,不包含参数)。
mangled:导出kernel的mangled名称。
standalone:导出结果包含未关联任何HGTX range的HGGC kernel。
报告结果示例如下:
Row#,Range name,Style,PID,TID,Device ID,HGTX range ID,Kernel exec ID,Kernel Start (ns),Kernel duration (ns),API Start (ns),API duration (ns),GridXYZ,BlockXYZ,Kernel name,
1,"profile","PushPop",3588556,3588556,0,6,20,257324264,4562345,218889819,37829255,"64 1 1","1 1 1","add(int*, int*, int*)",
2,"profile","PushPop",3588556,3588556,0,6,40,291234962,3474616,290293060,17365,"64 1 1","1 1 1","add(int*, int*, int*)",
3,"Loop1","PushPop",3588556,3588556,0,7,20,257324264,4562345,218889819,37829255,"64 1 1","1 1 1","add(int*, int*, int*)",
...hgtx_kern_trace表格列说明如下:
Row# : Row number of the HGTX range kernel trace
Range name : Name of the HGTX range
Style : Range style; Start/End or Push/Pop
PID : Process identifier
TID : Thread identifier
Device ID : PPU device identifier
Context ID : Context identifier
Stream ID : Stream identifier
HGTX range ID : HGTX range identifier
Kernel exec ID : Kernel execution identifier
Kernel Start [ns] : Start timestamp of HGGC kernel
Kernel duration [ns] : Duration of HGGC kernel
API Start [ns] : Start timestamp of API call
API duration [ns] : Duration of API call
GridXYZ : Grid dimensions for kernel launch call
BlockXYZ : Block dimensions for kernel launch call
Kernel name : Name of the kernel统计规则
判断HGTX range和HGGC kernel的原则为:HGTX range持续时间范围内,相同线程的HGGC API触发的HGGC kernel,认为和此HGTX range关联。
导出结果组织如下:每HGTX range,每HGGC kernel导出一行数据,若选项standalone使能,未关联HGTX range的HGGC kernel行中的HGTX range信息将标记为无效符号"-"。
导出顺序:
HGGC kernel按照PPU开始执行时间升序排序。
相同HGGC kernel关联的各个HGTX range行按照HGTX range的开始时间升序排序。
2.3.11 HGTX关联kernel汇总
功能说明
统计asysrep报告中HGTX range和关联的HGGC Kernel跟踪数据,输出每HGTX range名称,每Kernel名称的统计信息。
依赖的asys采集选项:--trace hgtx,hggc
命令行使用方法:
asys stats -r hgtx_kern_sum report.asysrep
可通过asys stats --help-report hgtx_kern_sum查看具体帮助信息,支持的选项列举如下:
base:导出kernel的短名称(仅函数名,不包含参数)。
mangled:导出kernel的mangled名称。
standalone:导出结果包含未关联任何HGTX range的HGGC kernel。
报告结果示例如下:
Row#,HGTX Range,Style,PID,TID,HGTX Inst,Kern Inst,Total Time (ns),Avg (ns),Med (ns),Min (ns),Max (ns),StdDev (ns),Kernel Name,
1,"DoProcess","PushPop",3588556,3588556,2,2,8036961,4018480,4018480,3474616,4562345,543864,"add(int*, int*, int*)",
2,"Loop1","PushPop",3588556,3588556,1,1,4562345,4562345,4562345,4562345,4562345,0,"add(int*, int*, int*)",
3,"Loop2","PushPop",3588556,3588556,1,1,3474616,3474616,3474616,3474616,3474616,0,"add(int*, int*, int*)",
4,"profile","PushPop",3588556,3588556,1,2,8036961,4018480,4018480,3474616,4562345,543864,"add(int*, int*, int*)",hgtx_kern_sum表格列说明如下:
Row# : Row number of the HGTX range kernel summary
HGTX Range : Name of the range
Style : Range style; Start/End or Push/Pop
PID : Process ID for this set of ranges and kernels
TID : Thread ID for this set of ranges and kernels
HGTX Inst : Number of HGTX range instances
Kern Inst : Number of HGGC kernel instances
Total Time [ns] : Total time used by all kernel instances of this range
Avg [ns] : Average execution time of this kernel
Med [ns] : Median execution time of this kernel
Min [ns] : Smallest execution time of this kernel
Max [ns] : Largest execution time of this kernel
StdDev [ns] : Standard deviation of the time of this kernel
Kernel Name : Name of the kernel统计规则
判断HGTX range和HGGC kernel的原则为:HGTX range持续时间范围内,相同线程的HGGC API触发的HGGC kernel,认为和此HGTX range关联。
统计方式:
对每进程、每线程,将相同HGTX range名称且相同Kernel名称的Kernel执行信息进行汇总:Kernel执行时间、同名HGTX出现次数、同名Kernel出现次数等。
统计结果组织如下:每线程,每HGTX range名称,每HGGC kernel名称导出一行数据,若选项standalone使能,未关联HGTX range的HGGC kernel所在行的HGTX相关信息将标记为无效符号-。统计结果排序方式如下:
按照HGTX range名称、进程ID和线程ID升序排列。
相同线程相同HGTX range名称的Kernel按照Total Time列降序排列。
2.3.12 HGTX向PPU投影跟踪
功能说明
将asysrep报告中的CPU侧HGTX range向PPU侧投影,以展示CPU侧HGTX range在PPU侧实际活跃的时间,并导出HGTX的堆栈信息。
依赖的asys采集选项:--trace hgtx,hggc
命令行使用方法:
asys stats -r hgtx_ppu_proj_trace report.asysrep
可通过asys stats --help-report hgtx_ppu_proj_trace查看具体帮助信息。
报告结果示例如下:
Row#,Name,Projected Start (ns),Projected Duration (ns),Orig Start (ns),Orig Duration (ns),Style,PID,TID,NumPPUOps,Lvl,NumChild,RangeId,ParentId,RangeStack,
1,"profile",193282492,75939861,190531194,79865797,"PushPop",3588556,3588556,10,0,2,6,"-",":6",
2,"Loop1",193282492,43122023,190588819,74067469,"PushPop",3588556,3588556,5,1,1,7,6,":6:7",
3,"DoProcess",193282492,43122023,190594879,72971893,"PushPop",3588556,3588556,5,2,0,8,7,":6:7:8",
...hgtx_ppu_proj_trace表格列说明如下:
Row# : Row number of the HGTX PPU projection trace
Name : Name of the HGTX range
Projected Start [ns] : Projected range start timestamp
Projected Duration [ns] : Projected range duration
Orig Start [ns] : Original HGTX range start timestamp
Orig Duration [ns] : Original HGTX range duration
Style : Range style; Start/End or Push/Pop
PID : Process identifier
TID : Thread identifier
NumPPUOps : Number of enclosed PPU operations
Lvl : Stack level, starts at 0
NumChild : Number of children ranges
RangeId : Arbitrary ID for range
ParentId : Range ID of the enclosing range
RangeStack : Range IDs that make up the push/pop stack统计规则
判断HGTX range和HGGC kernel的原则为:HGTX range持续时间范围内,相同线程的HGGC API触发的HGGC kernel,认为和此HGTX range关联。
CPU侧HGTX range向PPU侧投影的方式为:HGTX range在PPU侧的活跃时间,从本HGTX关联的最早的PPU活动开始,到最晚的PPU活动结束。PPU活动包括:HGGC Kernel / memcpy / memset 相关执行信息。
导出结果组织如下:每HGTX range导出一行数据,结果按照Projected Start升序输出。
2.3.13 HGGC Kernel Grid Block汇总
功能说明
统计asysrep报告中HGGC kernel grid block等信息,输出每kernel名称,每grid size,每block size的统计信息。
依赖的asys采集选项:--trace hgtx,hggc
命令行使用方法:
asys stats -r hggc_ppu_kern_gb_sum report.asysrep
可通过asys stats --help-report hggc_ppu_kern_gb_sum查看具体帮助信息,支持的选项列举如下:
hgtx-name:kernel名字前通过/拼接最接近kernel launch的HGTX range名称。
base:使用kernel的短名称(仅函数名,不包含参数)进行统计和输出。
mangled:使用kernel的mangled名称进行统计和输出。
报告结果示例如下:
Row#,Time (%),Total Time (ns),Instances,Avg (ns),Med (ns),Min (ns),Max (ns),StdDev (ns),GridXYZ,BlockXYZ,Name,
1,6.7,16337781,65,251350,260801,115520,277681,39767,"960 1 64","256 1 1","[prof_range]: iter 9/_ZN5acdnn4cuda9transposeILNS0_8LoopModeE0ELi32ELi8ELb0ELb0EN7",
2,3.1,7415267,20,370763,370601,366482,374162,1936,"2048 1 1","512 1 1","[prof_range]: iter 8/_ZL35batch_norm_bwd_single_vector_accessILb0EN5acdnn16identity",
3,3.0,7348069,20,367403,366401,361281,375921,3885,"122880 1 1","128 1 1","_ZN2at6native29vectorized_elementwise_kernelILi4EZZZNS0_12",hggc_ppu_kern_gb_sum表格列说明如下:
Row# : Row number of the kernel summary
Time [%] : Percentage of 'Total Time'
Total Time [ns] : Total time used by all executions of this kernel
Instances : Number of calls to this kernel
Avg [ns] : Average execution time of this kernel
Med [ns] : Median execution time of this kernel
Min [ns] : Smallest execution time of this kernel
Max [ns] : Largest execution time of this kernel
StdDev [ns] : Standard deviation of the time of this kernel
GridXYZ : Grid dimensions for kernel launch call
BlockXYZ : Block dimensions for kernel launch call
Name : Name of the kernel统计规则
统计方式:
将相同kernel名称且相同grid size且相同block size的Kernel执行信息进行汇总:Kernel执行时间,出现次数等。
若使能hgtx-name选项,kernel名称包含拼接的HGTX range名称。
统计结果组织如下:每kernel名称,每grid size,每block size导出一行数据,结果按照Total Time列降序输出。
2.3.14 HGGC Kernel Grid Block跟踪
功能说明
导出asysrep报告中的HGGC kernel执行的跟踪数据,以及grid size / block size等信息,根据执行的开始时间升序输出。
依赖的asys采集选项:--trace hgtx,hggc
命令行使用方法:
asys stats -r hggc_ppu_kern_gb_trace report.asysrep
可通过asys stats --help-report hggc_ppu_kern_gb_trace查看具体帮助信息,支持的选项列举如下:
hgtx-name:kernel名字前通过/拼接最接近kernel launch的HGTX range名称。
base:使用kernel的短名称(仅函数名,不包含参数)进行统计和输出。
mangled:使用kernel的mangled名称进行统计和输出。
报告结果示例如下:
Row#,Start (ns),Duration (ns),PID,Device ID,Context ID,Stream ID,GridXYZ,BlockXYZ,Name,
1,970508,6240,104699,0,1,1,"3 1 1","128 1 1","[prof_range]: iter 5/unrolled_elementwise_kernel",
2,1014188,44480,104699,0,1,1,"15360 1 1","128 1 1","[prof_range]: iter 5/unrolled_elementwise_kernel",
3,1158469,98480,104699,0,1,1,"960 1 64","256 1 1","[prof_range]: iter 5/transpose",
4,1257269,1880,104699,0,1,1,"1 1 32","256 1 1","[prof_range]: iter 5/transpose",hggc_ppu_kern_gb_trace表格列说明如下:
Row# : Row number of the kernel trace
Start [ns] : Timestamp of start time
Duration [ns] : Length of event
PID : Process identifier
Device ID : PPU device identifier
Context ID : Context identifier
Stream ID : Stream identifier
GridXYZ : Grid dimensions for kernel launch call
BlockXYZ : Block dimensions for kernel launch call
Name : Name of the kernel统计规则
导出结果组织如下:每Kernel执行信息导出一行数据,根据本kernel的执行起始时间升序输出。