上板时间戳打点功能
功能介绍
算子NPU上板调测时支持时间戳(当前系统cycle数)打点,以获取算子调试各阶段耗时信息。
- 该功能仅在NPU上板调测场景下开启,其他场景不支持,可以与Profiling数据采集功能配套使用。
- 系统cycle数指系统最小的计时单位,它由系统主时钟频率决定,而系统主时钟频率是指每秒钟的cycle数。若换算成时间需要按照50MHz的频率,时间单位为us,换算公式为:time = (cycle数/50) us 。
- 该功能仅在如下产品支持:
使用方法(命令行)
使用方法(API)
- 按需调用AscendCTimeStamp自定义打点标识,接口说明参见表2,样例如下:
AscendC::AscendCTimeStamp(200000000);
- 调用算子NPU编译及运行接口,对应options配置为dump_mode='time_stamp'。
# 调用编译接口 compile_npu_options = ascendebug.CompileNpuOptions(dump_mode='time_stamp') name, kernel_file, extern = op_executor.compile_custom_npu(customize_path, tiling_info.tiling_key, compile_npu_options) # 调用运行接口 run_npu_options = ascendebug.RunNpuOptions() npu_compile_info = ascendebug.NpuCompileInfo(syncall=extern['cross_core_sync'], task_ration=extern['task_ration'], dump_mode='time_stamp') op_executor.run_npu(kernel_file, run_npu_options, npu_compile_info=npu_compile_info, tiling_info=tiling_info)
- 查看结果文件,详细说明参见产物说明。
产物说明
时间戳打点信息存放在${root}/${work_dir}/npu路径下,其中${root}表示当前操作路径,${work_dir}表示调测工作空间,默认为/debug_workspace/${op_type}目录,${op_type}为算子名。目录结构示例如下:
├ ${op_type} // 算子名 ├── npu │ ├── dump │ ├── PARSER_${timestamp} │ ├── dump_data │ ├──0 // core number │ ├──time_stamp_core_0.csv // 时间戳打点落盘文件 │ ├──1 │ ├──time_stamp_core_1.csv │ ├── parser.log // 调测过程中的log文件
log文件记录了运行过程中的日志信息,示例如下:
[INFO]: ================ block.0 begin ============== [INFO]: [Meta Info] block num: 10, core type: VEC, isMix: False [INFO]: ================ block.0 end ================ [INFO]: ================ block.1 begin ============== [INFO]: [Meta Info] block num: 10, core type: VEC, isMix: False [INFO]: ================ block.1 end ================ [INFO]: ================ block.2 begin ============== [INFO]: [Meta Info] block num: 10, core type: VEC, isMix: False [INFO]: ================ block.2 end ================ [INFO]: ..........
csv文件记录了内置时间戳打点和用户自定义的200000000时间戳打点信息,样例如表1所示。
打点标识 |
Cycle |
Cycle间隔 |
---|---|---|
TIME_STAMP_WRAP_FIRST |
278333927352610 |
278333927352610 |
TIME_STAMP_WRAP_INIT_DUMP |
278333927352682 |
72 |
TIME_STAMP_TPIPE |
278333927352703 |
21 |
200000000 |
278333927352707 |
4 |
TIME_STAMP_BUFFER |
278333927352725 |
18 |
TIME_STAMP_BUFFER |
278333927352733 |
8 |
TIME_STAMP_BUFFER |
278333927352739 |
6 |
接口说明
函数原型 |
__aicore__ inline void AscendCTimeStamp(uint32_t descId); |
|
函数功能 |
用于打印上板时间戳。 |
|
参数(IN) |
descId |
当前时间戳的唯一标识号,系统内部使用0x000-0xfff范围内的数字标识内部打点(详见表3),用户自定义的打点标识必须大于0xfff。 |
参数(OUT) |
NA |
- |
返回值 |
NA |
- |
使用约束 |
仅在NPU上板场景使用,其他场景不支持。 |
|
调用示例 |
AscendC::AscendCTimeStamp(200000000); |
DESC_ID |
数值 |
说明 |
---|---|---|
TIME_STAMP_WRAP_FIRST |
0x000 |
kernel wrap函数入口打点位置。 |
TIME_STAMP_WRAP_MC2_CTX |
0x001 |
kernel wrap函数中设置MC2相关参数的打点位置。 |
TIME_STAMP_WRAP_INIT_DUMP |
0x002 |
初始化dump空间后的打点位置。 |
TIME_STAMP_WRAP_FFTS_ADDR |
0x003 |
设置ffts的addr信息后的打点位置。 |
TIME_STAMP_WRAP_CLEAR_WK_SPAC |
0x004 |
workspace清理后的打点位置。 |
TIME_STAMP_TPIPE |
0x030 |
AscendC::Tpipe构造函数后的打点位置。 |
TIME_STAMP_BUFFER |
0x031 |
AscendC::IniBuffer后的打点位置。 |
TIME_STAMP_MATMUL_SERVER |
0x060 |
注册matmul时调用server后的打点位置。 |
TIME_STAMP_MATMUL_SERVER_INIT |
0x061 |
注册matmul时初始化server后的打点位置。 |
TIME_STAMP_MATMUL_SERVER_OBJ |
0x062 |
注册matmul时matmul server构造obj后的打点位置。 |
TIME_STAMP_MATMUL_MATRIX_KFC |
0x063 |
注册matmul时kfc调用后的打点位置。 |
TIME_STAMP_MATMUL_CLIENT_KFC |
0x064 |
注册matmul时client kfc调用后的打点位置。 |
TIME_STAMP_MATMUL_WAIT_EVE |
0x065 |
注册matmul时waitevent后的打点位置。 |
TIME_STAMP_MATMUL_OBJ |
0x066 |
注册matmul时获取obj后的打点位置。 |
TIME_STAMP_TILING_DATA |
0x090 |
GET_TILING_DATA后的打点位置。 |
TIME_STAMP_TILING_DATA_STRUCT |
0x091 |
GET_TILING_DATA_WITH_STRUCT后的打点位置。 |
TIME_STAMP_TILING_DATA_MEMBER |
0x092 |
GET_TILING_DATA_MEMBER后的打点位置。 |
TIME_STAMP_MAX |
0xfff |
内部定义最大值。 |