Closed
[Documentation|文档反馈]: 36 个算子 README 为占位空壳,其中 13 份称“仅包含 aclnn 接口”但 op_kernel 已有实现 #3691
liuhanwen8Add on  22 days agoClosed at  21 days ago
liuhanwen8
liuhanwen8
22 days ago Create

问题描述

本仓 36 个算子级 README.md 为占位空壳:去掉 H1 后正文仅一句“本目录仅包含 X 算子对应的 aclnn 接口;如您想要贡献该算子的 AscendC 实现……”(141–163 字节,无功能说明、参数表、约束、示例)。其中 13 个与事实相反——同目录 op_kernel/ 下已有 1–15 个 .cpp/.h 实现文件。

判定方法

git ls-tree -r --name-only HEAD | grep -E '^[^/]+/[^/]+/README\.md$' | grep -v '^experimental/'
# 去首个 H1 后正文字节 < 260 且命中占位语(暂无 Ascend C|仅包含.*aclnn 接口|如您想要贡献)
# 同目录 op_kernel/**/*.{cpp,h} 文件数 > 0 → 说法与实现矛盾

清单(HEAD 1416d2f,36 份)

有 op_kernel 实现(13,矛盾):conversion/view_copy(15 个文件)、conversion/roll(7)、math/complex(4)、math/asin(3)、math/atan2(3)、math/gcd(3)、math/ger(3)、math/log_add_exp(3)、math/reduce_log_sum(3)、math/reduce_max(3)、math/reduce_min(3)、math/logical_not(2)、conversion/pad(1)

无 op_kernel(23,仅占位语表述不准,实际另有 op_host/op_graph/examples):conversion/{contiguous,npu_format_cast,squeeze,squeezev2,squeezev3,unsqueeze,unsqueezev2,unsqueezev3,weight_quant_preprocess}、math/{bitwise_not,cummax,cumprod,cumsum_cube,left_shift,pdist,qr,rank,shape,shape_n,triangular_solve}、random/{dsa_gen_bit_mask,dsa_random_normal,dsa_random_uniform}

代表单例

conversion/view_copy/README.md 全文即:

# ViewCopy

本目录仅包含ViewCopy算子对应的aclnn接口;如您想要贡献该算子的AscendC实现,请参考[贡献流程](../../CONTRIBUTING.md)。

而同目录有 op_kernel/view_copy_apt.cpp + arch35/view_copy_{base,dim1..dim8,pure_move_align,simt_dim1..simt_dim8}.h 共 15 个实现文件,docs/aclnnInplaceCopy.md 也在。conversion/roll 同形(7 个 kernel 文件 + docs/aclnnRoll.md)。

共性数据

  • 13/13 矛盾 README 中 docs/ 出现 0 次;其中 12 个同目录已有 docs/aclnn*.md(材料齐备,只是入口页未更新)。
  • 36 份中 29 份仍被 op_list.md 收录——官方索引直达一个“自称没有实现”的页面。

其他三仓分布(同口径)

仓 算子级 README 占位空壳 其中 op_kernel 非空
ops-math(本 issue) 386 36 13
ops-nn 621 24 11
ops-transformer 202 7 7
ops-cv 98 1 0

跨仓最强单例在 ops-transformer:mc2/quant_all_reduce/README.md 仅“该算子暂无Ascend C代码实现”,而 op_kernel/ 有 4 个实现文件——留给对应仓处理,本条不代提。

修复建议

① 13 个矛盾项在占位语后追加“实现已提供,见 op_kernel/;接口文档见 docs/aclnnXxx.md”;23 个无 kernel 的改为“提供 aclnn 接口与 op_host/op_graph 交付件,AscendC kernel 待补充”。② 用同目录 docs/aclnn*.md 聚合出五章节(材料已齐,属搬运)。③ CI 加门禁:占位语含“暂无实现/欢迎贡献”而 op_kernel/ 非空时直接失败。

已查重

检索 ops-math 全部 open issue 及 closed 前 300 条(关键词:占位/空壳/暂无 Ascend/README/仅包含 aclnn,及 view_copy、roll、reduce_max 等算子名),无重复。相近但不同:#3156(缺 examples)、#3540 / #3388(Roll 单点文档错)、#3632(cdist_grad 表格缺 <tr>)。

likedislike
liuhanwen8liuhanwen8
22 days ago Added label: documentation
liuhanwen8liuhanwen8
22 days ago Modify description of issue
陈思
陈思Collaborators
21 days ago Comments:

您好,感谢反馈!

问题分析

在 cann/ops-math 提交 e6f4febca3218a19cdd3b3a6b75b58e9c4ec7d8b 中逐项核对后,您列出的 36 份 README 仍只有标题和一条占位说明,其中 13 个目录已有 kernel 源文件,且这 13 份 README 均未提供 docs/ 入口;其中 12 个目录已有 aclnn*.md,Pad 没有同目录接口文档。这里确认的是该提交的状态,与报告中的 1416d2f 分开看待。

例如,ViewCopy README 仍写“仅包含…aclnn接口”,而 kernel 入口 已包含 arch35 实现并调用其计算流程;aclnnInplaceCopy 文档 也已有功能、参数和产品支持说明。这样的入口页既会误导源码贡献者,也让接口使用者难以找到现有资料。另有一项统计差异:本次核对的 算子索引 链接到其中 31 份独立 README,共 32 条链接(qr 有两个入口),这是当前核查提交的计数,与报告中 29 份的版本口径需区分。

对其余 23 项,需要把“同目录没有 kernel 源码”与“算子尚未实现”区分。例如 BitwiseNot 接口实现 按输入类型调用 LogicalNot 或 Invert;没有独立 kernel 不能直接推出功能未实现,也不宜统一写成“kernel 待补充”。

处理方向

一个可行的方案是先替换与现状冲突的占位句,按每个算子的实际交付内容说明实现位置,并为已有接口文档、样例补充入口;参数与产品支持约束可链接到对应接口文档,避免整段复制后产生两份不同步资料。涉及复用时需写清实际位置,例如 Pad 入口 调用的是 PadV3 的共享实现,不能只按本目录文件数描述完整实现范围。对没有同目录文档的项,则需分别确认可引用资料,不能补入不存在的链接。

CI 检查可以考虑先覆盖“README 声称仅有接口,但存在有效 kernel 入口”的明确矛盾,并结合入口依赖和构建配置判断,覆盖共享实现,同时排除仅有 .gitkeep 或空壳文件造成的误判。新增门禁的范围和误报成本还需要评估;文档内容是否充分则适合另设检查,避免把“无独立 kernel”自动判为缺陷。我们会继续跟踪这批入口文档与实际交付内容的一致性。

likedislike
陈思陈思Collaborators
21 days ago Assign chensi79 as responsible person
liuhanwen8
liuhanwen8
21 days ago Comments:

已按算子拆分为 36 条独立 issue(每个算子一条,均带 documentation 标签),本 issue 转为汇总跟踪项:

math(21):asin #3711、atan2 #3712、bitwise_not #3713、complex #3714、cummax #3715、cumprod #3716、cumsum_cube #3717、gcd #3718、ger #3719、left_shift #3720、log_add_exp #3721、logical_not #3722、pdist #3723、qr #3724、rank #3725、reduce_log_sum #3726、reduce_max #3727、reduce_min #3728、shape #3729、shape_n #3730、triangular_solve #3731

conversion(12):contiguous #3732、npu_format_cast #3733、pad #3734、roll #3735、squeeze #3736、squeezev2 #3737、squeezev3 #3738、unsqueeze #3739、unsqueezev2 #3740、unsqueezev3 #3741、view_copy #3742、weight_quant_preprocess #3743

random(3):dsa_gen_bit_mask #3744、dsa_random_normal #3745、dsa_random_uniform #3746

拆分口径(已按您 2026-10-21 的反馈调整):

  1. 每条均基于 HEAD 3e45432d 逐目录重新核对,附该算子 README 现状字节数、op_api/op_host/op_kernel/op_graph/docs/examples 实际清单,以及 op_list.md 是否收录。
  2. 13 条有 op_kernel 实现的,只陈述"占位语与实际实现矛盾"这一明确事实,不再外推其他结论。
  3. 其余 23 条不再表述为"kernel 待补充",改为写明实际交付/复用位置,例如 BitwiseNot 经 l0op::LogicalNot/l0op::Invert 组合完成(op_api/aclnn_bitwise_not.cpp:151)、Pad 的 pad_apt.cpp:15 引入 ../pad_v3/arch35/*.h 并调用 PadV3::LaunchKernelPad*、squeezev2/v3 与 unsqueezev2/v3 目录本身没有 op_api 只有 op_host+op_graph。
  4. squeezev2、squeezev3、unsqueezev2、unsqueezev3、weight_quant_preprocess 5 份当前不在 op_list.md 索引中,已在对应条目注明"未收录(暂不影响本问题)",不并入缺陷计数。
  5. 每条修复建议都要求:参数/约束链接到已有 docs/aclnn*.md 而不复制;无接口文档的(如 pad、shape、squeezev2 等)明确写"暂无接口文档"而不留空话。

统计口径对齐:本次在 3e45432d 复核为 31 份被 op_list.md 收录、5 份未收录,与您在 e6f4feb 核到的"31 份独立 README(32 条链接,qr 两个入口)"一致;原报告中的 29 份属旧提交口径,已作废。

拆分粒度或措辞如果不符合预期,我按您的意见合并或改写;本 issue 是否关闭也请一并示下。

likedislike
liuhanwen8
liuhanwen8
21 days ago Comments:

(收口)已把拆分粒度收敛到 13 条:上一条评论列出的 36 条是我按“占位 README”清单机械拆分的结果,复核后判据收紧了——只有 README 说“仅包含 aclnn 接口”、而 op_kernel/ 确实有实现文件的,才构成“入档表述与仓库事实矛盾”。其余 23 条已关闭,并在各条下留了说明。

保留的 13 条(硬矛盾,逐算子跟踪)

算子 issue op_kernel/ 实现文件数
math/asin #3711 3
math/atan2 #3712 3
math/complex #3714 4
math/gcd #3718 3
math/ger #3719 3
math/log_add_exp #3721 3
math/logical_not #3722 2
math/reduce_log_sum #3726 3
math/reduce_max #3727 3
math/reduce_min #3728 3
conversion/pad #3734 1
conversion/roll #3735 7
conversion/view_copy #3742 15

已关闭的 23 条及判据

  1. 14 条:README 表述其实准确,只是内容单薄 —— bitwise_not(#3713)、cummax(#3715)、cumprod(#3716)、cumsum_cube(#3717)、left_shift(#3720)、pdist(#3723)、qr(#3724)、triangular_solve(#3731)、contiguous(#3732)、npu_format_cast(#3733)、weight_quant_preprocess(#3743)、dsa_gen_bit_mask(#3744)、dsa_random_normal(#3745)、dsa_random_uniform(#3746)。这些目录确实只有 aclnn 接口(op_api/ 或 op_host/op_api/),"仅包含 aclnn 接口"没有说错;缺功能说明/文档入口属文档充实,不作为缺陷逐条跟踪。
  2. 9 条:表述与目录实际交付不一致,但不属硬矛盾 —— rank(#3725)、shape(#3729)、shape_n(#3730)、squeeze(#3736)、squeezev2(#3737)、squeezev3(#3738)、unsqueeze(#3739)、unsqueezev2(#3740)、unsqueezev3(#3741)。其中 7 条本目录并无 op_api/(只有 op_host/+op_graph/),另 2 条漏述 op_host+op_graph;严重度比 13 条低一个量级,已并入本条汇总,不再单开。

口径说明

  • 第 1 类中 bitwise_not 的复用路径已于 #3713 写清(l0op::LogicalNot/Invert,op_api/aclnn_bitwise_not.cpp:151)、Pad 的共享实现见 #3734(pad_apt.cpp:15 引 ../pad_v3/arch35/*.h、调用 PadV3::LaunchKernelPad*),与您 2026-10-21 的反馈一致:不把"本目录无独立 kernel"写成实现缺失。
  • 若您希望把第 1 类的“文档充实”另建一条汇总 issue(而非散在 14 条里),我可以只开 1 条收敛,不再逐算子拆。

后续会以这 13 条为准逐项跟进;如判据还需再收紧(例如只看 op_kernel/ 下有实际计算入口、排除仅 tiling/结构体头文件),也请指出,我按新口径复核这 13 条。

likedislike
liuhanwen8
liuhanwen8
21 days ago Comments:

(结项)本条汇总项已收口,关闭跟踪。

最终口径:36 份占位 README 中,只有 13 份构成“称仅包含 aclnn 接口、而同一目录 op_kernel/ 确有实现文件”的硬矛盾,已按算子拆为独立条目逐条跟踪:math/asin #3711、math/atan2 #3712、math/complex #3714、math/gcd #3718、math/ger #3719、math/log_add_exp #3721、math/logical_not #3722、math/reduce_log_sum #3726、math/reduce_max #3727、math/reduce_min #3728、conversion/pad #3734、conversion/roll #3735、conversion/view_copy #3742(13 条均 open)。

其余 23 条:已在逐算子核对后关闭,并在各条留了说明——其中 14 条的实际交付确实只有 aclnn 接口(op_api/ 或 op_host/op_api/),README 该句与事实相符,缺的是功能说明与文档入口,属文档充实建议;另 9 条为漏述 op_host/op_graph,或本目录并无 op_api/ 却写“仅包含 aclnn 接口”,严重度低于上述硬矛盾,不单独跟踪。

后续:本汇总项不再单独维护,进展以这 13 条为准。若判据需要再收紧(例如要求 op_kernel/ 下必须有实际计算入口、排除仅 tiling/结构体头文件),请在其中指出,我按新口径复核并回填。

感谢 chensi79 在 2026-10-21 的逐项核对与口径澄清(特别是“无独立 kernel ≠ 未实现”和“共享实现需写实际位置”两点),已全部体现在拆分条目中。

likedislike
liuhanwen8liuhanwen8
21 days ago Close issue