
编码红线与解决方案【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills本仓算子编码中明确禁止的红线。每条红线均为「违反 检视不通过」的硬约束触发即为阻塞项。逐条核对命中任一条按「解决方案」列修正后方可通过。1. 硬件参数硬编码阻塞所有硬件参数必须运行时动态获取禁止写死。命中即自动失败。红线检测解决方案写死核数blockDim 8;grep -n blockDim\s*\s*[0-9] *.ascaclrtGetDeviceInfo()动态获取核数写死核索引blockIdx 0;grep -n blockIdx\s*\s*[0-9] *.ascAscendC::GetBlockIdx()获取写死分块大小constexpr TILE 4096;/#define TILE 1024目视 grep根据 UB 容量动态计算分块大小任何硬编码 UB 大小目视运行时动态获取 UB 大小纯向量算子用ACL_DEV_ATTR_AICORE_CORE_NUM取核数目视纯向量用ACL_DEV_ATTR_VECTOR_CORE_NUM矩阵用ACL_DEV_ATTR_CUBE_CORE_NUM2. 禁用 API阻塞红线原因解决方案DataCopy(GM, UB)/DataCopy(UB, GM)不支持非对齐数据易致隐蔽 bug统一改用DataCopyPadGlobalTensor::SetValue/GetValue非调试逐元素访问效率极低DataCopyPad批量搬运高阶封装 APISoftmax / LayerNorm 等黑盒、调试困难基础矢量 APIAdd/Mul/Sub/Div/Exp/Log/ReduceSum/ReduceMax/Cast手动组合手动循环逐元素累加做归约性能低使用ReduceSum/ReduceMax// ✅ 正确 AscendC::DataCopyPad(xLocal, xGm, {rowsThisLoop, rLength, rLengthAlign, 0, 0}); // ❌ 红线数据长度非 32 字节倍数时出错 AscendC::DataCopy(xLocal, xGm, dataLength);3. Host 侧计算型操作阻塞Host 侧仅允许 Tiling 参数计算、内存分配/释放、Kernel 启动、结果验证。禁止对 tensor 做计算型操作——部署时输入/输出在 Device 上无法搬回 Host。红线解决方案Host 侧 TransposeCPU 三重循环交换维度在 Kernel 侧完成或调整设计避免 Host 预处理Host 侧 Reshape / PadCPU 循环重排数据在 Kernel 侧完成Host 侧任何对 tensor 的计算型循环移入 Kernel4. 流水线与数据流阻塞红线解决方案DataCopy 后未用 EnQue/DeQue 同步DataCopy 后补 EnQue/DeQue 配对同步最终结果留在 VECIN bufferinQueue未写入 VECOUT最后一步计算直接写入 outQueue 的 yLocal或DataCopy(yLocal, xLocal)后再 EnQueAllocTensor无对应FreeTensor内存泄漏每个 Alloc 配对 Freegrep -c AllocTensor/grep -c FreeTensor核对数量EnQue/DeQue 未配对内存泄漏配对grep -c EnQue/grep -c DeQue核对冗余 PipeBarrier同 pipe 连续操作间加 barrier只在跨 pipe 数据依赖点保留 barrier同 pipe 连续操作如连续矢量运算、连续归约删除 barrierPipe 归属PIPE_MTE2GM→UB 搬运、PIPE_V矢量/归约/Cast/Duplicate 等、PIPE_MTE3UB→GM 搬运、ScalarGetValue/SetValue。跨 pipe 且存在 RAW/WAW 依赖才需 barrier同 pipe 硬件保序。5. Kernel 内禁止事项阻塞红线解决方案前向声明 Kernel 函数先声明后定义Kernel 函数必须定义在调用之前Kernel 内使用std::命名空间函数改用 Ascend C API动态内存分配new/malloc用TPipeTQue管理内存递归调用改写为迭代使用未初始化变量使用前初始化.cpp/.cc作为 Kernel 文件扩展名Kernel 文件必须为.ascASC 编译器只识别.asc也仅在.asc中有效6. API 用法未经验证阻塞红线解决方案凭记忆/猜测写入 API未查文档用任何 API 前通过ascendc-docs-search查阅{API_NAME}官方文档同名 API 多变体如ReduceMax.md/ReduceMax-35.md须用find $ASC_DEVKIT_DIR/docs/api/ -name {APIName}*.md全部查阅后再选用检视意见推荐 API 未附文档来源推荐 API 的修复建议须附官方文档来源禁止凭记忆【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考