ascendc-api-best-practices

Ascend C API 使用最佳实践。提供算术、归约、数据搬运、Buffer管理、精度转换、通信接口等 API 的正确用法和限制说明。触发:用户询问具体 API 用法(如"DataCopy 怎么用"、"ReadNbi 怎么用")、遇到 API 参数错误或限制报错(如 repeatTimes、对齐问题)、需要查看 API 最佳实践或避坑指南时。

SKILL.md

GitHub

Ascend C API 最佳实践


API 类别索引

API 类别 涵盖 API 核心文档 典型场景
算术运算 Add, Sub, Mul, Div, Adds, Muls api-arithmetic.md Softmax, LayerNorm, 广播优化
跨代际迁移(Subnormal 与超越函数) Exp, Ln, Sqrt, Rsqrt, Div, Reciprocal api-cross-gen-migration.md DAV_2201→DAV_3510 迁移精度对齐、高精度/高性能模式选择
归约操作 ReduceMax, ReduceSum api-reduce.md, api-reduce-pattern.md Softmax, LayerNorm, ReduceMean
归并排序 Sort, Concat, MrgSort, Extract api-mrgsort.md Sort, ArgSort, TopK
数据搬运 DataCopy, DataCopyPad api-datacopy.md 非对齐处理、多维搬运
LoadData / Cube 加载 LoadData2D, LoadData2DV2, LoadData2DMx api-loaddata.md L1 → L0 加载、Cube GEMM、MX 块量化格式
Transpose / 重排 TransDataTo5HD, Gather api-transpose.md 小通道 transpose、permute
数据过滤/解交织 GatherMask api-gathermask.md RoPE 奇偶拆分、列分量分离、非均匀间隔自定义 mask
Matmul 高阶 API(Cube) MatmulImpl, MatmulConfig, IterateAll api-matmul.md MatMul, BatchMatMul, MatMulBias;限 Atlas A2/A3 系列(DAV_2201)平台
GMM 高阶 API GMMBaseParams, GMMArray, per-token dequant 管线 api-gmm.md GroupedMatmul, A8W8/A4W4 量化反量化;限 Atlas A2/A3 系列(DAV_2201)平台
Buffer 管理 TBuf, TQue api-buffer.md Double Buffer、内存规划
精度转换 Cast api-precision.md FP16/FP32 混合精度
流水线同步 EnQue, DeQue, SetFlag api-pipeline.md 多级流水线、事件同步
Compare 256B对齐 Compare api-restrictions.md Padding 策略
repeatTime 限制 repeatTimes ≤ 255 api-repeat-limits.md 分批处理
API 限制 - api-restrictions.md 禁用 API、编译期限制
Host Runtime aclrtSetDevice, aclrtGetDeviceInfo api-host-runtime.md 设备初始化、核数获取
点对点通信 Hcomm, ReadNbi, WriteNbi, Drain api-hcomm.md 跨卡点对点搬运、URMA 队列语义
跨核同步 CrossCoreSetFlag, CrossCoreWaitFlag, SyncAll api-crosscore-sync.md AIC↔AIV 通知、flagId 硬件规则
HCCL Host HcclCommInitRootInfoConfig, HcclChannelAcquire, HcclEngineCtxCreate api-hccl-host.md 通信域/channel/engine ctx 管理
DMA 原子操作 SetAtomicAdd, SetAtomicMax, DisableDmaAtomic api-atomic.md 多核/多 rank 部分和累加、split-K 累加

场景索引

使用场景 相关文档 关键技巧
Softmax/LayerNorm api-reduce.md, api-reduce-pattern.md, api-arithmetic.md 标量操作、广播优化、Buffer 复用
逐行处理(AR 模板) api-arithmetic.md Adds/Muls、节省 UB
MatMul/BatchMatMul(Ascend C 高阶 API,Atlas A2/A3 系列) api-matmul.md MatmulConfig 选择、enUnitFlag、IterateAll、TilingHeader stack 加载
GroupedMatmul / GMM(Ascend C 高阶 API,Atlas A2/A3 系列) api-gmm.md GMMArray 分组索引、AIC/AIV 分职、per-token dequant 管线
Transpose / 重排 api-transpose.md 2维度 转置性能
多行广播(ARA 模板) api-arithmetic.md BinaryRepeatParams.src1RepStride=0、分批处理
半精度加减法(FP16/BF16 Add/Sub) api-arithmetic.md, api-precision.md 默认升精度(除非 spec 明确同量级)、in-place 复用
非对齐数据 api-datacopy.md DataCopyPad、32 字节对齐
混合精度 api-precision.md FP16 输入 FP32 计算
Subnormal 精度丢失(DAV_3510 跨代迁移) api-cross-gen-migration.md FTZ 语义、PRECISION_1ULP_FTZ_FALSE、eps 规避
Fixpipe 跨代参数(L0C 回写) api-cross-gen-fixpipe.md DAV_2201→DAV_3510 回写参数切换:FixpipeParamsArch3510 字段与单位差异
流水线优化 api-pipeline.md, api-buffer.md Double Buffer、事件同步
性能调优 api-buffer.md, api-repeat-limits.md Double Buffer、repeatTimes 优化
遇到 API 限制 api-restrictions.md 替代方案、避坑指南
通算融合(MC2) api-hcomm.md, api-crosscore-sync.md Hcomm/CrossCore 原语层 API;编排层(核分工、flag 流水、UB 隔离、通信并行度)请参考对应框架/领域技能文档
多卡通信 api-hccl-host.md HCCL 建链、engine ctx 下发、资源生命周期
RoPE 奇偶拆分 api-gathermask.md pattern 1/2、Normal/Counter 均可、零拷贝偏移;限 Atlas A2/A3 系列(DAV_2201)平台
Interleaved 列分离 api-gathermask.md 官方:Normal 模式、stride=8;实测:tile≥2048、外层循环;限 Atlas A2/A3 系列(DAV_2201)平台
非均匀间隔自定义 mask api-gathermask.md 用户自定义 LocalTensor mask、类型匹配

快速参考

完整的 API 参数速查表:api-quickref.md


⛔️ API 黑名单

禁止在生产代码中使用:

API 禁止原因 替代方案 文档
GlobalTensor::SetValue() 效率极低 DataCopyPad api-datacopy.md
GlobalTensor::GetValue() 效率极低 DataCopyPad api-datacopy.md

限制使用的 API:

API 限制条件 说明 文档
DataCopy(GM↔UB) 仅当搬运数据严格 32 字节对齐时允许使用 非对齐场景必须使用 DataCopyPad api-datacopy.md

仅允许调试时使用:

// ✅ 调试:单点验证
AscendC::printf("debug: xGm[0]=%f\n", xGm.GetValue(0));