在CATLASS样例工程使用AscendC算子调测API
在CATLASS样例工程使用AscendC算子调测API【免费下载链接】catlass本项目是CANN的算子模板库提供NPU上高性能矩阵乘及其相关融合类算子模板样例。项目地址: https://gitcode.com/cann/catlassAscendC算子调测API是AscendC提供的调试能力可进行kernel内部的打印(printf)、Tensor内容的查看(DumpTensor)。使用示例下面以00_basic_matmul为例演示基于AscendC算子调测API的测试过程。插入调试代码在想进行调试的层级增加调测API调用如在include/catlass/gemm/kernel/basic_matmul.hpp的核函数中添加下述代码。// 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); // Represent the full gm AscendC::GlobalTensorElementA gmA; gmA.SetGlobalBuffer((__gm__ ElementA *)params.ptrA); AscendC::GlobalTensorElementB gmB; gmB.SetGlobalBuffer((__gm__ ElementB *)params.ptrB); AscendC::GlobalTensorElementC gmC; gmC.SetGlobalBuffer((__gm__ ElementC *)params.ptrC); AscendC::DumpTensor(gmA, coreLoops, 16); for (uint32_t loopIdx AscendC::GetBlockIdx(); loopIdx coreLoops; loopIdx AscendC::GetBlockNum()) { // Compute block location GemmCoord blockCoord matmulBlockScheduler.GetBlockCoord(loopIdx); GemmCoord actualBlockShape matmulBlockScheduler.GetActualBlockShape(blockCoord); // Compute initial location in logical coordinates MatrixCoord offsetA{blockCoord.m() * L1TileShape::M, blockCoord.k() * L1TileShape::K}; MatrixCoord offsetB{blockCoord.k() * L1TileShape::K, blockCoord.n() * L1TileShape::N}; MatrixCoord offsetC{blockCoord.m() * L1TileShape::M, blockCoord.n() * L1TileShape::N}; int64_t gmOffsetA params.layoutA.GetOffset(offsetA); int64_t gmOffsetB params.layoutB.GetOffset(offsetB); int64_t gmOffsetC params.layoutC.GetOffset(offsetC); // Compute block-scoped matrix multiply-add blockMmad(gmA[gmOffsetA], params.layoutA, gmB[gmOffsetB], params.layoutB, gmC[gmOffsetC], params.layoutC, actualBlockShape); } }编译运行参考快速上手编译算子样例。当前版本无需传入额外编译选项若代码中调用调试接口编译器将自动使能。bash scripts/build.sh 00_basic_matmul切换到可执行文件的编译目录output/bin下直接执行算子样例程序。cd output/bin # 可执行文件名 |矩阵m轴|n轴|k轴|Device ID可选 ./00_basic_matmul 256 512 1024 0⚠ 注意事项目前DumpTensor不支持打印L0A、L0B、FixPipe上的数值。特别地在Ascend 950PR/Ascend 950DT上额外不支持打印L1上的数值。输出示例仅为示例实际输出可能因硬件和算子实现不同而有所差异./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.【免费下载链接】catlass本项目是CANN的算子模板库提供NPU上高性能矩阵乘及其相关融合类算子模板样例。项目地址: https://gitcode.com/cann/catlass创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2598527.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!