已关闭
[Documentation|文档反馈]: aclnnBitwiseNot 头文件注释写 out 数据类型可转换,资料与实现要求严格一致 #3950
liuhanwen8创建于 10 天前关闭于 7 天前
10 天前 添加了label:documentation
陈思
10 天前 评论:
10 天前 评论:
10 天前 将 chen_0715 设为负责人
10 天前 添加了label:pending-confirmation
9 天前 删除了label:pending-confirmation
8 天前 将 Nice_try 设为负责人
7 天前 关联了pull request:[WIP]fix some docs
7 天前 关闭了 issue
7 天前 添加了label:resolved


一、文档链接 (必填)
https://gitcode.com/cann/ops-math/blob/master/math/bitwise_not/docs/aclnnBitwiseNot.md
https://gitcode.com/cann/ops-math/blob/master/math/bitwise_not/op_api/aclnn_bitwise_not.h
二、问题文档片段 (必填)
现象
同一接口三处口径不一致:
OP_CHECK_DTYPE_NOT_MATCH(self, y->GetDataType(), return false)实测 self=INT16、out=INT32(两个类型都在 :84/:94 的支持列表内,且 INT16 可转换到 INT32)时首段直接返回 161002,错误信息
Tensor self expected dtype is DT_INT32 but found DT_INT16.:实现与 md:93 一致,头文件注释「可转换」与两者冲突。期望
头文件注释改为「数据类型需要与 self 一致」,与 md:93、op_api:82 对齐;若要支持可转换 dtype,需同时改资料与实现。
环境
584b2ea6cbaeba684a51a74296d82d4d50ab3b0f(2026-10-24)复现步骤
git clone https://gitcode.com/cann/ops-math && cd ops-mathprobe.cppg++ -std=c++17 -O2 probe.cpp -o probe -I$ASCEND_HOME_PATH/include -I$ASCEND_HOME_PATH/include/aclnnop -L$ASCEND_HOME_PATH/lib64 -lascendcl -lopapi -lnnopbaseexport LD_LIBRARY_PATH=$ASCEND_HOME_PATH/lib64:/usr/local/Ascend/driver/lib64:$LD_LIBRARY_PATH; ./probe复现脚本
对照组 self/out 同 dtype,缺陷组按头文件口径传可转换 dtype:
// build: g++ -std=c++17 -O2 probe.cpp -o probe -I$ASCEND_HOME_PATH/include -I$ASCEND_HOME_PATH/include/aclnnop \ // -L$ASCEND_HOME_PATH/lib64 -lascendcl -lopapi -lnnopbase #include <cstdio> #include <vector> #include "acl/acl.h" #include "aclnnop/aclnn_bitwise_not.h" static aclrtStream gStream; static aclTensor* Mk(const std::vector<int64_t>& s, aclDataType dt) { size_t n = 1; for (auto v : s) n *= v; void* d = nullptr; aclrtMalloc(&d, n * 2, ACL_MEM_MALLOC_HUGE_FIRST); std::vector<int16_t> h(n, 0); aclrtMemcpy(d, n * 2, h.data(), n * 2, ACL_MEMCPY_HOST_TO_DEVICE); std::vector<int64_t> st(s.size(), 1); return aclCreateTensor(s.data(), s.size(), dt, st.data(), 0, ACL_FORMAT_ND, s.data(), s.size(), d); } static void Run(const char* tag, aclDataType sdt, aclDataType odt) { std::vector<int64_t> shp = {4, 2}; aclTensor* self = Mk(shp, sdt); aclTensor* out = Mk(shp, odt); uint64_t ws = 0; aclOpExecutor* ex = nullptr; aclnnStatus r1 = aclnnBitwiseNotGetWorkspaceSize(self, out, &ws, &ex); void* wsa = nullptr; if (r1 == ACL_SUCCESS && ws > 0) aclrtMalloc(&wsa, ws, ACL_MEM_MALLOC_HUGE_FIRST); aclnnStatus r2 = (r1 == ACL_SUCCESS) ? aclnnBitwiseNot(wsa, ws, ex, gStream) : r1; printf("%-34s first=%-6d second=%-6d\n", tag, (int)r1, (int)r2); if (r1 != ACL_SUCCESS) printf(" err: %s\n", aclGetRecentErrMsg()); aclDestroyTensor(self); aclDestroyTensor(out); } int main() { aclInit(nullptr); aclrtSetDevice(0); aclrtCreateStream(&gStream); Run("对照: self=INT16 out=INT16", ACL_INT16, ACL_INT16); Run("缺陷: self=INT16 out=INT32", ACL_INT16, ACL_INT32); Run("缺陷: self=INT32 out=INT64", ACL_INT32, ACL_INT64); aclrtDestroyStream(gStream); aclrtResetDevice(0); aclFinalize(); return 0; }实测输出(err 行保留原文,仅省略 PID 与时间戳前缀):
影响
使用者按头文件注释传「可转换」dtype(如 INT16→INT32)会被 161002 拒绝,错误信息还指向 self,定位成本高;两份公开文档口径相反,无法判定以哪份为准。
建议
统一为「out 数据类型需要与 self 一致」;若后续要放开转换,再同步修改 md:93 与 op_api:82。