
AscendC 调测 API 指南两行代码看透 CATLASS 样例的 kernel 内部【免费下载链接】pot-desktop一个跨平台的划词翻译和OCR软件 | A cross-platform software for text translation and recognition.项目地址: https://gitcode.com/GitHub_Trending/po/pot-desktop算子真正跑进芯片之后kernel 里的局部变量和中间 Tensor 全部够不着调试经常无从下手。AscendC 算子调测 API 就是干这个的printf让你在核函数内部直接打日志DumpTensor能把指定 Tensor 的内容转储到终端。以 CATLASS 样例00_basic_matmul为例走一遍从插桩、编译、执行到读输出的完整链路。打开 basic_matmul.hpp在两处各插一行打开include/catlass/gemm/kernel/basic_matmul.hpp在核函数operator()AscendC::AIC的实现里加两行。第一行紧跟coreLoops的计算之后——块循环次数是理解整个 kernel 调度规模的基准值得最先看到第二行放在gmA绑定完全局缓冲之后此时输入张量已就绪正适合转储出来核对。// include/catlass/gemm/kernel/basic_matmul.hpp template CATLASS_DEVICE void operator()AscendC::AIC(Params const params) { BlockScheduler matmulBlockScheduler(params.problemShape, MakeCoord(L1TileShape::M, L1TileShape::N)); uint32_t coreLoops matmulBlockScheduler.GetCoreLoops(); AscendC::printf(CoreLoops is %d\n, coreLoops); // 新增先看到调度规模 Arch::ResourceArchTag resource; BlockMmad blockMmad(resource); // gmA / gmB / gmC 的声明与全局缓冲绑定保持原样 AscendC::GlobalTensorElementA gmA; gmA.SetGlobalBuffer((__gm__ ElementA *)params.ptrA); // ... gmB、gmC 同上 ... AscendC::DumpTensor(gmA, coreLoops, 16); // 新增转储 A 张量内容 // 其后进入原有的 blockMmad 计算循环 }除这两行外原代码一律不动。一条命令链跑通编译与执行样例工程若还没初始化先按官方快速上手流程把环境搭好然后跑这条命令链bash scripts/build.sh 00_basic_matmul cd output/bin # 参数顺序可执行文件名 | 矩阵 m 轴 | n 轴 | k 轴 | Device ID可选 ./00_basic_matmul 256 512 1024 0编译产物固定在output/bin下可执行文件名与样例同名。 不用传额外编译选项只要源码里调用过调测接口编译器会自动使能这套能力。逐行读懂终端输出定位数据问题执行后终端会打印类似下面的内容数值只作参照实际输出会随硬件和算子实现而变./00_basic_matmul 256 512 1024 0 opTypedevice_gemm, DumpHead: AIC-0, CoreTypeAIC, block dim24, total_block_num24, block_remain_len1048408, block_initial_space1048576, rsv0, magic5aa5bccd CoreLoops is 4 DumpTensor: desc4, addrc0013000, data_typefloat16, positionGM [3.402344, -1.056641, 2.830078, 2.984375, 4.117188, -3.025391, -1.647461, 2.681641, -2.222656, 0.539551, -0.226074, 1.289062, -1.352539, 0.134033, 4.523438, 4.160156] # 以上信息会在每个 Cube 核上各完整输出一次 Compare success.输出行说明了什么opTypedevice_gemm, DumpHead: AIC-0, ...调测框架的头部信息算子类型、核编号与核类型CoreLoops is 4你插入的printf生效该核共跑 4 次块循环DumpTensor: desc4, addrc0013000, data_typefloat16, positionGM转储元信息数据精度 float16内容取自 GM[3.402344, ...]A 张量前 16 个元素的实际数值Compare success.样例自带校验通过计算结果正确排查建议先核对CoreLoops是否与你的调度预期一致再把那 16 个数和喂给算子的输入逐项比对——哪一处先对不上问题就在哪一侧。动手前确认DumpTensor 的边界⚠️ 转储不是哪儿都能用选位置前先确认目标 buffer 在支持范围内不支持打印L0A、L0B、FixPipe上的数值。在Ascend 950PR、Ascend 950DT上L1上的数值同样无法打印。【免费下载链接】pot-desktop一个跨平台的划词翻译和OCR软件 | A cross-platform software for text translation and recognition.项目地址: https://gitcode.com/GitHub_Trending/po/pot-desktop创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考