算子代码热点图
通过msprof op或msprof op simulator生成的visualize_data.bin文件可通过MindStudio Insight进行可视化呈现。界面支持查看算子源码与指令集的映射关系、耗时情况等功能,可协助开发者识别热点代码分布,并分析热点函数优化的可行性。
- 若要使用MindStudio Insight进行查看时,需要单独安装MindStudio Insight软件包,具体下载链接请参见“安装与卸载”。
- 将visualize_data.bin文件导入MindStudio Insight的具体操作请参考导入性能数据。
- MindStudio Insight具体操作和详细字段解释请参考源码(Source)。
- 添加-g编译选项会在生成的二进制文件中附带调试信息,建议限制带有调试信息的用户程序的访问权限,确保只有授权人员可以访问该二进制文件。
- 算子程序编译时需要包含-g,否则msprof不会展示热点图,也不调用llvm-symbolizer组件的相关功能实现代码-PC映射。
- msprof op算子代码热点图功能不适用于
Atlas 推理系列产品 。 - MC2算子和LCCL算子均不支持生成算子代码热点图。
msprof op热点图
- 在界面顶部,可切换计算单元和核函数文件。
- 在左侧界面,提供算子核函数各行代码模拟L2Cache命中率、与GM有关的数据搬运量及对应的指令数,帮助开发者快速定位瓶颈代码行。
- 在右侧界面,提供具体的指令维度模拟L2Cache命中率、与GM有关的数据搬运量、执行次数及与代码相关联,帮助开发者进一步分析代码耗时长的原因。
- MindStudio Insight时间线和详情页面中L2Cache命中率的差异请参见表1。
查看与GM有关的数据搬运量(Process Bytes)时,不涉及GM单元的情况都显示为NA。
- msprof op具体特性支持情况请参见表2。
|
列名 |
|
|
|
Atlas 350 加速卡 |
说明 |
|---|---|---|---|---|---|
|
源码 |
支持 |
支持 |
不支持 |
支持 |
- |
|
指令PC地址 |
支持 |
支持 |
不支持 |
支持 |
- |
|
PIPE |
支持 |
支持 |
不支持 |
支持 |
- |
|
执行次数 |
支持 |
支持 |
不支持 |
支持 |
查看算子源码与指令的执行次数。 |
|
GPR Count |
不支持 |
不支持 |
不支持 |
支持 |
查看寄存器使用情况。
说明:
不支持使用TRACE_START和TRACE_STOP接口查看部分算子的寄存器使用情况。 |
|
L2Cache命中率 |
支持 |
支持 |
不支持 |
不支持 |
模拟代码行和指令维度。 |
|
Process Bytes |
支持 |
支持 |
不支持 |
支持 |
查看与GM有关的数据搬运量。 |
|
Stall_Cycles(nop阻塞) |
不支持 |
不支持 |
不支持 |
支持 |
展示“预期阻塞”与“实际阻塞”对比的比例图。这里的“阻塞”指的是指令在执行过程中,由于资源冲突、数据依赖等原因而产生的等待时间。 |
|
Stall_Divergence_Stack_Spill(Divergence栈溢出阻塞) |
不支持 |
不支持 |
不支持 |
支持 |
指在执行分支指令时,由于栈空间不足或分支路径导致的预测与实际执行路径不一致,从而引发的流水线阻塞周期。 |
|
Stall_IBuf_Empty(IBuf空阻塞) |
不支持 |
不支持 |
不支持 |
支持 |
指IBuf为空时,因无法获取下一条指令而导致的流水线阻塞周期。 |
|
Stall_Others(其他阻塞) |
不支持 |
不支持 |
不支持 |
支持 |
指除已明确分类的阻塞原因外,由其他异常或控制逻辑触发的流水线暂停周期。 |
|
Stall_Register_bank_conflict(寄存器冲突阻塞) |
不支持 |
不支持 |
不支持 |
支持 |
指由于指令访问同一组寄存器时发生冲突,导致流水线暂停以避免数据错误的阻塞周期。 |
|
Stall_Resource_conflict(资源冲突阻塞) |
不支持 |
不支持 |
不支持 |
支持 |
指由于多个指令同时竞争同一硬件资源而无法并行执行,导致流水线暂停的阻塞周期。 |
|
Stall_Scoreboard_Not_Ready(ScoreBoard未准备阻塞) |
不支持 |
不支持 |
不支持 |
支持 |
指由于ScoreBoard状态尚未就绪(如前序指令仍在占用相关资源或寄存器),当前指令无法继续执行而导致的流水线阻塞。 |
|
Stall_Warp_Level_Sync(Warp Level同步阻塞) |
不支持 |
不支持 |
不支持 |
支持 |
指在多线程执行中,为确保同Warp内线程的同步与一致性,在未满足同步条件时对指令执行进行的阻塞。 |
msprof op simulator热点图
- 在界面顶部,可切换计算单元和核函数文件。
- 在左侧界面,提供算子核函数各行代码对应的耗时、寄存器使用情况、Vector计算类指令在UB Bank上读和写的冲突情况、Vector计算单元利用率、与GM有关的数据搬运量及对应的指令数,帮助开发者快速定位瓶颈代码行。
- 在右侧界面,提供具体的指令耗时、寄存器使用情况、与GM有关的数据搬运量、Vector计算类指令在UB Bank上读和写的冲突情况、Vector计算单元利用率、执行次数及与代码相关联,帮助开发者进一步分析代码耗时长的原因。
- 通用寄存器的最大数量为32,当寄存器的使用数量达到32时,仿真过程需等到使用中的寄存器释放后才能运行。
- 不支持使用TRACE_START和TRACE_STOP接口查看部分算子的寄存器使用情况。
- 查看与GM有关的数据搬运量(Process Bytes)时,不涉及GM单元的情况都显示为NA。
- msprof op simulator具体特性支持情况请参见表3。
|
列名 |
|
|
|
Atlas 350 加速卡 |
说明 |
|---|---|---|---|---|---|
|
源码 |
支持 |
支持 |
支持 |
支持 |
- |
|
指令PC地址 |
支持 |
支持 |
支持 |
支持 |
- |
|
PIPE |
支持 |
支持 |
支持 |
支持 |
- |
|
耗时cycle |
支持 |
支持 |
支持 |
支持 |
查看算子源码与指令的耗时情况。 |
|
执行次数 |
支持 |
支持 |
支持 |
支持 |
查看算子源码与指令的执行次数。 |
|
GPR Count |
支持 |
支持 |
支持 |
不支持 |
查看寄存器使用情况。
说明:
不支持使用TRACE_START和TRACE_STOP接口查看部分算子的寄存器使用情况。 |
|
UB Bank冲突 |
支持 |
支持 |
支持 |
不支持 |
- |
|
vec计算单元利用率 |
支持 |
支持 |
支持 |
不支持 |
- |
|
Process Bytes |
支持 |
支持 |
不支持 |
不支持 |
查看与GM有关的数据搬运量。 |
|
Stall_Cycles(nop阻塞) |
不支持 |
不支持 |
不支持 |
支持 |
展示“预期阻塞”与“实际阻塞”对比的比例图。这里的“阻塞”指的是指令在执行过程中,由于资源冲突、数据依赖等原因而产生的等待时间。 |