下载
中文
注册

调用Ascend CL单算子

  1. 完成自定义算子的开发部署后,通过单算子API执行的方式调用,添加使用-O0 -g编译选项重新编译算子并部署,并导入算子动态加载路径,最后用msDebug工具加载算子可执行文件进行上板调试。

    单算子API执行的详细内容请参考单算子API调用

  2. 参考创建算子工程完成算子工程的创建。
  3. 参考算子开发完成算子开发。
  4. 参考算子编译部署完成算子的编译部署。

    编辑op_kernel/CMakeLists.txt文件,增加编译选项-O0 -g。

    add_ops_compile_options(ALL OPTIONS -O0 -g )
  5. 单击LINK,获取验证代码的样例工程。
    下载代码样例时,需执行以下命令指定分支版本。
    git clone https://gitee.com/ascend/samples.git -b 8.0.RC3
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    ├──input                                                 // 存放脚本生成的输入数据目录
    ├──output                                                // 存放算子运行输出数据和真值数据的目录
    ├── inc                           // 头文件目录 
       ├── common.h                 // 声明公共方法类,用于读取二进制文件 
       ├── operator_desc.h          // 算子描述声明文件,包含算子输入/输出,算子类型以及输入描述与输出描述 
       ├── op_runner.h              // 算子运行相关信息声明文件,包含算子输入/输出个数,输入/输出大小等 
    ├── src 
       ├── CMakeLists.txt    // 编译规则文件
       ├── common.cpp         // 公共函数,读取二进制文件函数的实现文件
       ├── main.cpp    // 单算子调用应用的入口
       ├── operator_desc.cpp     // 构造算子的输入与输出描述 
       ├── op_runner.cpp   // 单算子调用主体流程实现文件
    ├── scripts
       ├── verify_result.py    // 真值对比文件
       ├── gen_data.py    // 输入数据和真值数据生成脚本文件
       ├── acl.json    // acl配置文件
    
  6. 编译单算子调用应用并得到可执行文件execute_add_op

    AddCustom自定义算子调用为例,可参考单算子API调用,编写算子调用的代码逻辑,并完成编译。

  7. 导入算子动态加载路径。

    将自定义算子工程编译后输出在build_out目录下kernel侧的.o文件路径导入环境变量。

    export LAUNCH_KERNEL_PATH=/{path_to_kernel}/kernel_name.o  //{path_to_kernel}表示对算子kernel侧实现编译后生成的算子二进制文件*.o所在路径,请根据实际情况进行替换

    算子的多个dtype在Kernel侧可能会编译出多个.o文件,请选择步骤4示例中所调用的.o文件进行导入。

  8. 使用msDebug工具加载步骤6中得到的单算子可执行文件execute_add_op。
    1
    2
    3
    4
    5
    cd AclNNInvocation/output
    msdebug execute_add_op
    (msdebug) target create "execute_add_op"
    Current executable set to '/home/AclNNInvocation/output/execute_add_op' (aarch64).
    (msdebug)
    
  9. 断点设置。
    b add_custom.cpp:55
  10. 运行算子程序,等待直到命中断点。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    (msdebug) r
    Process 1385976 launched: '$home/shelltest/test/samples/operator/AddCustomSample/FrameworkLaunch/AclNNInvocationNaive/build/execute_add_op' (aarch64)
    [Launch of Kernel anonymous on Device 0]
    Process 1385976 stopped
    [Switching to focus on Kernel anonymous, CoreId 24, Type aiv]
    * thread #1, name = 'execute_add_op', stop reason = breakpoint 1.1
        frame #0: 0x0000000000001564 AddCustom_1e04ee05ab491cc5ae9c3d5c9ee8950b.o`KernelAdd::Compute(this=0x000000000028f8a8, progress=0) (.vector) at add_custom.cpp:55:19
       52  	        LocalTensor<DTYPE_Y> yLocal = inQueueY.DeQue<DTYPE_Y>();
       53  	        LocalTensor<DTYPE_Z> zLocal = outQueueZ.AllocTensor<DTYPE_Z>();
       54  	        Add(zLocal, xLocal, yLocal, this->tileLength);
    -> 55  	        outQueueZ.EnQue<DTYPE_Z>(zLocal);
       56  	        inQueueX.FreeTensor(xLocal);
       57  	        inQueueY.FreeTensor(yLocal);
       58  	    }
    (msdebug) 
    

    后续调试过程可参考导入调试信息内存与变量打印核切换等,与其操作一致。