合并受阻
变更摘要
该 PR 完成 DivCustomTemplate(z = x / y)自定义算子的工程化实现与验证:基于算子原型 JSON 使用 msopgen 生成算子工程,完成 Host 侧算子注册与 Tiling、Kernel 侧 Ascend C 核函数实现,编译安装为自定义算子包,并通过 aclnnDivCustomTemplate 接口完成 float16/float32 两种数据类型的调用与精度验证。核心改动覆盖算子原型定义(div_custom_template.json)、一键构建运行脚本(run.sh)、Host 侧 TilingFunc/InferShape/InferDataType、Kernel 侧模板化核函数 KernelDivCustomTemplate 及共享 tiling 结构 DivCustomTemplateTilingData、ACLNN 测试用例(test/main.cpp),以及 CMake 构建预设与 TensorFlow 框架适配插件。
主要改动
-
算子原型与工程生成流程:新增
div_custom_template.json定义x/y输入与z输出(float16/float32、ND 布局);run.sh串联环境加载、msopgen 生成工程(已存在则跳过)、编译、安装到${HOME}/vendors/customize、编译并运行测试的完整流程,并 source 自定义算子环境脚本以支持运行时加载算子库。 -
Host 侧 Tiling 与算子注册(
custom_op/op_host/div_custom_template.cpp):TilingFunc用int64_t累乘 shape 各维得到元素总数写入tiling->size,超UINT32_MAX时返回失败;按dtype记录数据类型(0=float16,1=float32);核数自适应(每核最多 2048 元素、上限 8 核,blockDim至少为 1),workspace 置 0;InferShape将输入 shape 透传给输出,InferDataType透传输入数据类型;DivCustomTemplate的OpDef注册输入输出及ascend910bAICore 配置。 -
Kernel 侧核函数实现(
custom_op/op_kernel/div_custom_template.cpp):模板类KernelDivCustomTemplate<T>(half/float)采用标准 Ascend C 范式,经GlobalTensor管理 GM 侧 x/y/z、TPipe::InitBuffer分配 UB 队列(深度 1、单块 2048 元素),按 CopyIn → Compute(Div矢量指令逐元素除法)→ CopyOut 循环处理;多核按GetBlockNum()/GetBlockIdx()均匀切分区间,核内按TILE_SIZE分块;入口div_custom_template依据tilingData.dtype选择对应模板实例。 -
共享 Tiling 数据结构(
custom_op/op_kernel/div_custom_template_tiling.h):新增 Host/Kernel 共享的DivCustomTemplateTilingData结构,包含元素总数size与数据类型标识dtype两个字段。 -
ACLNN 验证测试(
test/main.cpp):通过aclnnDivCustomTemplateGetWorkspaceSize与aclnnDivCustomTemplate执行算子,覆盖 float16(aclFloat16)与 float32 两种用例,以 x=1.0、y=2.0 校验结果 z=0.5,并打印前 10 个结果判定test pass,最后统一释放 tensor、workspace、stream 等资源。


Thanks for your pull-request.
The full list of commands accepted by me can be found at here.
You can get sig-info at here.
For more, you also can visit HICANN.
PR Approval Progress
⚠️ This PR does not yet meet the following requirements:lgtm (requires ≥ 2 person(s) per module)、approve (requires ≥ 1 person(s) per module)
Module Approval Details
| module | lgtm status | approve status |
|---|---|---|
| repo-cann/cann-outreach | ❌ (0/2)(You can also ask: 王艳秋, yanyawen, yanhf, shaoyf, Carolina_yuan) | ❌ (0/1)(You can also ask: 傅涛, yanhf, jxlang, shaoyf, li-shengxian3) |
💡 Tip:
- Committer can comment
/approveor/lgtm- Commenting
/approveimplies both code review (lgtm) and intent to merge (approve)
CLA Signature Pass
Murasame_214, thanks for your pull request. All authors of the commits have signed the CLA. 👍


题目
【代码侦探Challenge 04】工程化算子开发:基于算子原型文件(JSON)使用 msopgen 生成完整算子工程,完成 DivCustomTemplate(z = x / y)核函数与 Tiling 实现,编译安装为自定义算子包,并通过 aclnnDivCustomTemplate 接口完成调用与精度验证。
实现说明
目录结构及各文件职责
murasame/DivCustomTemplate/
实现思路
多核切分:按 GetBlockNum() 将 totalLength 均匀分配到各核,核内再按 2048 元素分块循环处理。
自验证结果
本机环境:CANN 9.1.0,SoC = Ascend910B3,输入 shape (8, 2048),float16,x = 1.0、y = 2.0。
bash run.sh 全流程输出:
result is:
0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5
test pass
编译安装与 ACLNN 接口调用均成功,精度校验通过(z = x / y = 1.0 / 2.0 = 0.5)。