CPU孪生调试功能
=========

#### 功能介绍

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/d/v3/dkoQK0usQCW_C5vQdjJh1g/note_3.0-zh-cn.png?HW-CC-KV=V1&HW-CC-Date=20260612T073659Z&HW-CC-Expire=86400&HW-CC-Sign=2000341F238087E48C0963D0147CA30BA2DE0DFB06B9D9A89832D20F1EE53096)

*   当开发者需要快速进行代码逻辑调试，可优先选择算子CPU调测。使用通用的打印、gdb调测手段，快速定位代码问题。
    
*   在NPU板端上板运行之前，可优先选择算子CPU调测初步定位算子精度问题，提高算子NPU上板成功率。
    

CPU孪生调试主要基于开发者输入生成编译所需的二进制bin文件，然后自动执行算子编译和运行，该阶段支持的调测项如表1所示。

**表1** CPU调测功能列表

| 功能名称 | 功能说明 |
| :-- | :-- |
| 自动精度比对 | 若开发者配置了标杆数据（golden数据），工具会自动将实际调测运行结果与标杆数据进行精度比对。 |
| printf/PRINTF功能 | 支持屏显打印Scalar数据，如常量、字符串等信息，具体参考[printf/PRINTF功能](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/cannkit-commissioning-function-printf)。 |
| DumpTensor功能 | 支持dump Tensor数据，功能和产物与NPU上板dump功能类似，具体参考[DumpTensor功能](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/cannkit-commissioning-function-dumptensor)。 |
| DumpAccChkPoint功能 | 支持dump偏移位置的Tensor数据，具体参考[DumpAccChkPoint功能](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/cannkit-commissioning-function-dumpaccchkpoint)。 |
| assert功能 | 支持屏显打印断言，具体参考[assert功能](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/cannkit-commissioning-function-assert)。 |
| CCE指令流打印 | 默认开启，CCE指令流文件参见[产物说明](#产物说明)。 |
| gdb调试 | 可使用gdb单步调试算子计算精度。具体参考[gdb调试](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/cannkit-gdb)。 |

#### 使用方法（命令行）

通过命令行进行CPU调测的关键步骤如下。

1.  完成环境搭建，并准备好输入/标杆数据文件。
    
2.  执行如下命令进行CPU调测，这里仅提供关键参数项示例，其他参数请参考[CPU调测参数](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/cannkit-cli-parameters#cpu调测参数)按需设置。
    
    ascendebug kernel --backend cpu --chip-version ${chip\_version} --repo-type customize --json-file ${op\_config\_json\_file} --core-type ${core\_type} --work-dir ${work\_dir} ... {其他参数}
    
    CPU调测涉及的所有参数可通过**ascendebug kernel -h**或**ascendebug kernel --help**查看。
    
3.  查看结果文件，详细说明参见[产物说明](#产物说明)。
    

#### 产物说明

CPU调测结果存放在${root}/${work\_dir}/cpu路径下，其中${root}表示当前操作路径，${work\_dir}表示调测工作空间，默认为/debug\_workspace/${op\_type}目录，${op\_type}为算子名。目录结构示例如下。

├ ${op\_type} // 算子名
├── cpu
│   ├── build // 存放CPU编译生成的中间文件
│   │   ├── cceprint // 存放cce 指令流输出文件的目录
│   │   │   └── auto\_gen\_add\_custom\_kernel\_0\_0\_mix.cce // cce指令流文件
│       ├── xxx\_cpu // CPU编译生成的算子可执行程序
│   ├── output // 存放CPU编译运行的输出文件及精度比对结果
│       ├── y.bin // 运行输出原始数据
│       ├── y.txt // 精度比对结果文件
│   ├── src // 存放CPU编译生成的临时代码文件
│       ├── CMakeLists.txt
│       ├── data\_definition.txt
│       ├── add\_custom\_main.cpp
│       ├── add\_custom\_tiling.h
│       ├── \_gen\_kernel\_${op\_type}.cpp
│   ├── dump // dump文件落盘目录
│       ├── PARSER\_${timestamp}
│           ├── dump\_data
│               ├──0 // 核心编号
│                   ├──index\_1 // index是dump接口的desc唯一标识值
│                       ├──core\_0\_index\_1\_loop\_0.bin
│                       ├──core\_0\_index\_1\_loop\_0.txt

*   **查看精度比对结果**
    
    1.  在output目录下，查看是否生成输出文件(bin)和精度比对文件(txt)。
        
    2.  根据精度比对文件(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
        
        **表2** 精度比对结果说明
        
        | 信息项 | 说明 |
        | :-- | :-- |
        | 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功能](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/cannkit-commissioning-function-dumptensor)或[DumpAccChkPoint功能](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/cannkit-commissioning-function-dumpaccchkpoint)，结果文件存放在dump目录下，结果目录具体介绍参见[产物说明](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/cannkit-commissioning-function-dumptensor#产物说明)。