通过命令行进行性能仿真的关键步骤如下。
完成环境搭建,并准备好输入/标杆数据文件。
执行如下命令进行CAModel性能仿真,仅提供关键参数项示例,其他参数请参考Simulator仿真参数按需设置。
ascendebug kernel --backend simulator --repo-type customize --json-file ${op_config_json_file} --core-type ${core_type} --chip-version ${chip_version} --work-dir ${work_dir} --block-num 1 --timeout 1200 ... {其他参数} 一般情况下,CAModel仿真时运行比较慢,--timeout一般设置为1200秒,--block-num一般设置为1,开发者需按实际情况设置。
查看性能仿真结果,详细说明参见产物说明。
CAModel仿真结果存放在${root}/${work_dir}/simulator路径下,其中${root}表示当前操作路径,${work_dir}表示调测工作空间,默认为/debug_workspace/${op_type}目录,${op_type}为算子名。目录结构示例如下。
├ ${op_type} // 算子名
├── simulator
│ ├── build // 存放NPU编译生成的中间文件
│ │ ├── launch_args.so
│ │ └── run_Makefile_0.sh
│ ├── dump
│ │ ├── camodel
│ │ │ ├── log // model执行日志
│ │ └── dump_data
│ │ ├── 0 // 核心编号
│ │ │ └── index_0 // index是dump接口的desc唯一标识值
│ │ └── index_dtype.json
│ ├── output // 存放NPU编译运行的输出文件
│ │ ├── z.bin // 运行输出原始数据
│ │ └── z.txt // 精度比对结果文件
│ └── src // 存放NPU编译生成的临时代码文件
│ └── _gen_args_${op_type}.cpp 查看性能仿真数据
block finish -> block_idx: 0 total tick: 4153
查看精度比对结果
在output目录下,查看是否生成输出文件(bin)和精度比对文件(txt)。
根据精度比对文件(txt),确认算子精度比对结果。
精度比对结果输出样例如下,主要展示两份数据的均值、部分误差对比以及成功/失败的最终比对结论。若结果是失败,会将最大误差的部分数据展示出来。
data_cmp mean is -1.41e-05 data_gd mean is -1.41e-05 split_count:2359296.0; max_diff_hd:0.1; --------------------------------------------------------------------------------------- Loop ExpectOut RealOut FpDiff RateDiff --------------------------------------------------------------------------------------- 00000001 0.0395813 0.0395813 0.0000000 0.0000000 00000002 0.0160980 0.0160980 0.0000000 0.0000000 00000003 -0.0443420 -0.0443420 0.0000000 0.0000000 00000004 -0.0847778 -0.0847778 0.0000000 0.0000000 00000005 -0.0066605 -0.0066605 0.0000000 0.0000000 00000006 0.0880737 0.0880737 0.0000000 0.0000000 00000007 0.0848389 0.0848389 0.0000000 0.0000000 00000008 0.1083374 0.1083374 0.0000000 0.0000000 00000009 0.0838623 0.0838623 0.0000000 0.0000000 00000010 0.0887451 0.0887451 0.0000000 0.0000000 00000011 0.0572205 0.0572205 0.0000000 0.0000000 00000012 0.0741577 0.0741577 0.0000000 0.0000000 00000013 -0.0762329 -0.0762329 0.0000000 0.0000000 00000014 -0.0957642 -0.0957642 0.0000000 0.0000000 00000015 0.0102234 0.0102234 0.0000000 0.0000000 ... ... ... ... ... --------------------------------------------------------------------------------------- DiffThd PctThd PctRlt Result --------------------------------------------------------------------------------------- 0.0050 99.50% 100.000000% Pass Success Success Success Success Success
表1 精度比对结果说明
| 信息项 | 说明 |
|---|---|
| data_cmp mean | 运行输出数据的均值信息。 |
| data_gd mean | 标杆数据的均值信息。 |
| split_count | 统计输出数据的个数。 |
| max_diff_hd | 输出数据和golden数据的最大误差值阈值。 |
| 详细对比数据展示(部分) | Loop(数据位置)、ExpectOut(期望输出值)、RealOut(实际输出值)、FpDiff (绝对误差值)、RateDiff(相对误差值)。 |
| 整体对比结果展示 | DiffThd(相对误差值阈值)、PctThd (精度达标数据占比阈值)、PctRlt(实际精度达标数据占比)、Result(对比结果)。 |
| Error Line展示项 | 若精度比对结果为Failed,会追加展示部分误差较大的数据的详细信息。 |
(可选)查看dump结果
若开启DumpTensor功能或DumpAccChkPoint功能,结果文件存放在dump目录下,详细结果介绍参见产物说明。
算子进行CAModel仿真时,可对算子任意运行阶段进行打点,从而分析不同指令的流水图,以便进一步性能调优。
Kirin9020/Kirin9030/KirinX90暂不支持使用该方法进行调优。
TRACE_START接口说明如下。
函数原型: #define TRACE_START(apid)
函数功能: 起始位置打点。
参数(IN): apid,当前预留了十个开发者自定义的类型:
参数(OUT): NA
返回值: NA
使用约束:
调用示例:
TRACE_START(0x2); Add(zLocal, xLocal, yLocal, dataSize); TRACE_STOP(0x2);
TRACE_STOP接口说明如下。
函数原型: #define TRACE_STOP(apid)
函数功能: 终止位置打点
参数(IN): apid,取值需与TRACE_START接口参数取值保持一致,否则影响打点结果。
参数(OUT): None
返回值: NA
使用约束:
调用示例:
TRACE_START(0x2); Add(zLocal, xLocal, yLocal, dataSize); TRACE_STOP(0x2);