【2023·CANN训练营第一季】TIK C++算子开发

TIK C++算子开发

本文旨在浅析在TIK C++算子开发过程中的一些步骤

TIK C++矢量算子动态shape输入的实现

回顾固定shape算子

固定shape的输入

当算子shape固定时,开发者使用不同shape时需要重新对算子进行编译,带来大量的算子二进制文件。 动态shape的算子可以将形状通过核函数的入参传入核函数内,参与内部逻辑计算,从而符合不同shape下的使用场景。

区分固定shape动态shape
使用场景输入shape固定不变的场景输入shape频繁变动的场景
实现难度低,只需要考虑该shape的逻辑处理高,需考虑shape带来的不同逻辑分支处理
优化难度低,AI编译器可以进行更多优化高,AI编译器对于未知数据采取保守策略

固定shape和动态shape对比

CPU模式下的算子功能调试

TIK C++提供孪生调试技术,即在CPU模式下进行运算实际上会创建一个NPU的模型并模拟它的计算行为,以此进行业务功能的调试。相同的算子代码可以在CPU模式下进行精度调试,并无缝切换到NPU模式下运行。

1. 使用GDB进行调试

source /usr/local/Ascend/ascend-toolkit/setenv.sh
gdb --args add_tik2_cpu
set follow-fork-rode child
break add_tik2.cpp:45
run
list
backtrace
print i
break add_tik2.cpp:56
continue
display xLocal
quit

GBD调试

命令功能
step执行下一行语句,如语句为函数调用,进入函数中
next执行下一行语句,如语句为函数调用,不进入函数中
continue从当前位置继续运行程序
run从头开始运行程序
quit退出程序
print输出变量值、调用函数、通过表达式改变变量值
list查看当前位置代码
backtrace查看各级堆栈的函数调用及参数
break N在第N行上设置断点
display每次停下来时,显示设置的变量var的值

GDB常用api

2. 使用printf或者std::cout

CPU代码侧直接插入C/C++的打印命令,如printfstd::cout,但注意NPU模式下不支持打印语句,所以需要添加內置宏 __CCE_KT_TEST__ 予以区分

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值