Closed
[Documentation|文档反馈]: aclnn_log2.h 中 aclnnInplaceLog2 的 selfRef 注释漏列 DOUBLE/COMPLEX64/COMPLEX128 且角色写成 [in](实测 6 种 dtype 全部支持) #4163
liuhanwen8Add on 13 days agoClosed at 3 days ago
13 days ago Added label: documentation
xujiachen8
13 days ago Comments:
13 days ago Comments:
您好,感谢反馈!核对当前 master(b08e885e7fac),头文件的原地 selfRef 注释确实只列 FLOAT、FLOAT16、BFLOAT16,并标为 [in];同版接口资料则列有 DOUBLE、COMPLEX64、COMPLEX128,角色为输入/输出。
实现中,A2 分支采用的原地类型支持表包含这三种类型;原地接口将同一张量同时作为输入和输出,经 ViewCopy 写回。这与您给出的六种 dtype 对照相符。这里需要区分原地类型表与非原地接口的输入/输出规则,也应保留不同产品的类型限制。
一个可行调整是补全该注释的类型说明并明确原地读写角色,与当前资料及平台条件一致;这属于注释口径校正,不需要据此修改现有函数签名。我们会持续跟踪这处说明的一致性。


13 days ago Assign jiaoyiming as responsible person
13 days ago Added label: pending-confirmation
13 days ago Removed label: pending-confirmation
3 days ago Close issue
3 days ago changed custom state from 进行中 to 已完成
3 days ago Added label: resolved
现象
math/log/op_api/aclnn_log2.h里aclnnInplaceLog2的@param注释只列 3 种 dtype,且把selfRef角色标成[in]:资料(
math/log/docs/aclnnLog2&aclnnInplaceLog2.mdL256)与实现都支持 6 种,角色是输入/输出(原地写回)。实机核对(A2 910B2 / CANN 9.2.0,aclnn 两段式直调,逐个 dtype 换 aclDataType):期望
注释与资料 L256 对齐:
数据类型支持FLOAT、FLOAT16、DOUBLE、COMPLEX64、COMPLEX128、BFLOAT16,角色写[in,out]。环境
cann/ops-mathmasteraf636ea0(git fetch后核对,缺陷仍在)复现步骤
python3 check_hdr_dtype.py --repo-root .(只读两个文件,不需要 NPU)。[DEFECT]:漏列 COMPLEX128、COMPLEX64、DOUBLE;角色写成[in]。复现脚本
#!/usr/bin/env python3 """断言:aclnn_log2.h 的 selfRef 注释 dtype 列表 == 资料 inplace 参数表 dtype 列表。 用法: python3 check_hdr_dtype.py --repo-root <仓根>;退出码 0=一致 1=缺陷 2=无法判定。""" import os import re import sys argv = sys.argv[1:] root = "." for i, a in enumerate(argv): if a in ("--repo-root", "--root"): root = argv[i + 1] if i + 1 < len(argv) else "." break else: if argv and not argv[0].startswith("-"): root = argv[0] hdr = os.path.join(root, "math/log/op_api/aclnn_log2.h") doc = os.path.join(root, "math/log/docs/aclnnLog2&aclnnInplaceLog2.md") for p in (hdr, doc): if not os.path.exists(p): print("[SKIP] 找不到 %s(请把仓根作为第一个参数传入)" % p) sys.exit(2) htext = open(hdr, encoding="utf-8", errors="ignore").read() m = re.search(r"@param\s*\[([^\]]*)\]\s*selfRef\(aclTensor\*\):\s*数据类型支持([^,,]+)", htext) if not m: print("[SKIP] 头文件里没找到 aclnnInplaceLog2 的 selfRef @param 注释") sys.exit(2) role = m.group(1).strip() raw = re.sub(r"[((][^))]*[))]", "", m.group(2)) # 去掉「(910B支持)」这类括注 comment = {t.strip() for t in re.split(r"[、,,]", raw) if t.strip()} dtext = open(doc, encoding="utf-8", errors="ignore").read() sec = dtext.split("## aclnnInplaceLog2GetWorkspaceSize", 1)[-1].split("## aclnnInplaceLog2", 1)[0] mrow = re.search(r"<td>selfRef(aclTensor\*)</td>(.*?)</tr>", sec, re.S) if not mrow: print("[SKIP] 资料里没找到 aclnnInplaceLog2GetWorkspaceSize 的 selfRef 参数行") sys.exit(2) doc_set = set() for cell in re.findall(r"<td[^>]*>(.*?)</td>", mrow.group(1), re.S): plain = re.sub(r"<[^>]+>", "", cell).strip() if "FLOAT" in plain and "、" in plain: doc_set = {t.strip() for t in re.split(r"[、,,]", plain) if t.strip()} if not doc_set: print("[SKIP] 资料 selfRef 行里没解析出 dtype 列表") sys.exit(2) print("注释 dtype(%d): %s" % (len(comment), "、".join(sorted(comment)))) print("资料 dtype(%d): %s" % (len(doc_set), "、".join(sorted(doc_set)))) print("注释角色: [%s]" % role) rc = 0 missing = sorted(doc_set - comment) if missing: print("[DEFECT] 头文件注释漏列 %s —— 资料与实现均支持这 %d 种 dtype" % ("、".join(missing), len(missing))) rc = 1 if role == "in": print("[DEFECT] selfRef 注释角色写成 [in],资料写「输入/输出」(原地写回),会让人以为只读") rc = 1 if rc == 0: print("OK:注释与资料一致") sys.exit(rc)实测输出(仓根
af636ea0实跑):退出码 1。
影响
[in]会让读者以为selfRef只读,与资料参数表「输入/输出」冲突。建议
@param [in,out] selfRef(aclTensor*): 数据类型支持FLOAT、FLOAT16、DOUBLE、COMPLEX64、COMPLEX128、BFLOAT16,支持非连续的Tensor,数据格式支持ND,selfRef也是输出结果。aclnnLog2(非 inplace)的self/out注释只列FLOAT、FLOAT16,属另一个接口,另开一条。