Closed
[Documentation|文档反馈]: aclnnCat 参数表声明 1-8 维,错误码表漏列「维度大于8」(实测 rank=9 返回 161002) #3885
liuhanwen8Add on 17 days agoClosed at 14 days ago
陈思
16 days ago Comments:
16 days ago Comments:
您好,感谢反馈!核对 cann/ops-math@584b2ea6cbaeba684a51a74296d82d4d50ab3b0f 的参数及错误码说明,参数表已声明 tensors 为 1–8 维,但 161002 的五项说明确实没有列出维数超过 8 的情况。缺项在错误码说明,不能据此把 rank=9 视为参数表支持的输入。
源码的 CheckShape先检查第一个输入的最大维数,再检查其余输入维数一致、dim 合法及非级联轴的形状一致。该检查失败由 CheckParams 映射为 ACLNN_ERR_PARAM_INVALID,随后第一段入口直接返回。因此,您给出的非空 rank=9 对照即使 dim=0 合法,也会因张量维数超限被拒;轴索引合法与张量维数满足上限是两项不同约束。
可行的资料修订是在 161002 下补充“tensors 中张量维数超过 8”,并将两处 rowspan="5" 同步调整为 6,与既有 1–8 维参数约束对齐。该修订不需要改变维数上限。以上为报告版本的源码核对,尚未独立运行设备复现;我们会继续确认资料补齐方式。


16 days ago Assign chen_0715 as responsible person
16 days ago Added label: pending-confirmation
16 days ago Removed label: pending-confirmation
14 days ago Assign Anthony0331 as responsible person
14 days ago Removed responsible person chen_0715
tangkaidi
14 days ago Comments:
14 days ago Comments:
您好,感谢您的关注和反馈。
该issue内提及的问题已确认,将会尽快合入代码。
修复PR链接:https://gitcode.com/cann/ops-math/pull/6735


14 days ago Close issue
14 days ago Added label: resolved
现象
aclnnCat资料参数表写明tensors维度为1-8,但「第一段接口完成入参校验」的错误码表(161002 共 5 条子项:dtype/format 不在支持范围、无法做数据类型推导、推导类型无法转为
out、非级联维度 shape 不一致、dim 超过 tensor 维度范围)没有「维度大于 8」这一项。
实测 rank=9 时第一段返回
161002,该拒绝理由在资料里查不到。单变量对照(两输入除 dim=0 外所有维度一致、dtype 相同、
dim=0在范围内,只有 rank 变化):期望
资料错误码表的 161002 子项补齐「tensors 的维度大于 8」,与参数表
1-8的声明一致。环境
584b2ea6cbaeconversion/concat_d)aclnnMaxDim存在同类缺失,已另行提交并互相引用复现步骤
repro.cpp;g++ -std=c++17 -o repro repro.cpp -I$ASCEND_HOME_PATH/include/aclnnop -I$ASCEND_HOME_PATH/include -L$ASCEND_HOME_PATH/lib64 -lascendcl -lnnopbase -lopapi;./repro;rc=0、缺陷行rc=161002。复现脚本
#include <cstdio> #include <vector> #include "acl/acl.h" #include "aclnnop/aclnn_cat.h" static aclTensor* mk(const std::vector<int64_t>& sh, void** dev) { int64_t n = 1; for (auto s : sh) n *= s; size_t bytes = (size_t)n * 4; aclrtMalloc(dev, bytes, ACL_MEM_MALLOC_HUGE_FIRST); std::vector<float> host((size_t)n, 1.0f); aclrtMemcpy(*dev, bytes, host.data(), bytes, ACL_MEMCPY_HOST_TO_DEVICE); std::vector<int64_t> st(sh.size(), 1); for (int64_t i = (int64_t)sh.size() - 2; i >= 0; --i) st[i] = sh[i + 1] * st[i + 1]; return aclCreateTensor(sh.data(), sh.size(), ACL_FLOAT, st.data(), 0, ACL_FORMAT_ND, sh.data(), sh.size(), *dev); } static void case_rank(const char* tag, int rank) { std::vector<int64_t> a(rank, 1), b(rank, 1); a[0] = 2; b[0] = 1; // 仅 dim=0 不同,其余维一致 std::vector<int64_t> out(rank, 1); out[0] = 3; void *da = nullptr, *db = nullptr, *dout = nullptr; aclTensor* ta = mk(a, &da); aclTensor* tb = mk(b, &db); aclTensor* to = mk(out, &dout); std::vector<aclTensor*> v{ta, tb}; aclTensorList* list = aclCreateTensorList(v.data(), v.size()); uint64_t ws = 0; aclOpExecutor* ex = nullptr; int rc = (int)aclnnCatGetWorkspaceSize(list, 0, to, &ws, &ex); printf(" %-34s rc=%d\n", tag, rc); } int main() { aclInit(nullptr); aclrtSetDevice(7); case_rank("对照 rank=8(资料称 1-8)", 8); case_rank("缺陷组 rank=9(资料称 1-8)", 9); return 0; }实测输出
影响
与
aclnnMaxDim同类:rank 上限的验收口径不在资料里,测试者按资料设计的用例不含该负向路径,实测 161002 只能记为未声明行为。
建议
在
conversion/concat_d/docs/aclnnCat.md的 161002 折叠子项中新增一行「tensors 的维度大于 8」,与参数表 1-8 对齐。