您好,感谢反馈和提供 Host UT 对照结果!
核对 ops-math 的 77f7e4c2286 版本,legacy tiling 的 LinSpaceGetConstValue 在 DT_INT64 分支中确实先把值转为 float,再转回 int64_t num。FP32 超过 2^24 后无法精确表示所有整数,16777219 会舍入为 16777220;而 InferShape 的 GetNumValue 直接读取 int64_t,输出维度保留原值。因此,代码路径与您报告的 tiling 计数、输出 shape 不一致相符。该计数还会参与后续分核和尾块计算,设备端具体影响仍需实际执行确认。
您提出的修复方向是合理的:让 legacy 的 DT_INT64 num 读取保持整数精度,去掉中间的 FP32 转换,同时保留空指针检查及其他类型分支的行为。通过注册的 tiling 与 InferShape 回调共同校验计数,能够覆盖这两个入口的一致性;您提供的 num=17、num=16777219 对照及修复后 2/2 Host UT 结果也与这一方向一致。独立 Arch35 路径不属于本次确认的故障范围。
我们会继续跟踪这一计数一致性问题。


您好,已完成修复,改动已随 PR !6812 提交。
根因:legacy Host tiling 的 LinSpaceGetConstValue 在 DT_INT64 分支先将 int64_t 经 float 转换再转回目标类型,num=16777219 超过 FP32 精确表示范围(2^24),被舍入为 16777220;而 InferShape 的 GetNumValue 直接读取 int64_t,导致 tiling 计数与输出 shape 不一致。
修复(math/lin_space/op_host/lin_space_tiling.cpp):DT_INT64 分支直接读取 int64_t 数值,经 double 中间转换(16777219 < 2^53,double 可精确表示),避免经 float 丢失精度;num=17 小计数对照不受影响。
验证(910B3 / CANN 9.3.0,2026-10-29):
- 定向 Host UT 6/6 PASS:3 个 tiling 用例 + 3 个 infershape 用例;其中
lin_space_tiling_int64_big_num断言 tiling data 中 num 字段 = 16777219,Linspace_infershape_int64_big_num_case断言输出维度 = [16777219]。 - 基线回归:临时还原修复后
lin_space_tiling_int64_big_num失败(tiling data num=16777220),证实该用例能捕获此缺陷。 git diff --check通过;生产代码lin_space_tiling.cpp经 clang-format(仓内 .clang-format 配置)检查 0 违规;两个测试文件存在历史遗留的全文件格式偏差(非本次引入),新增用例沿用文件既有风格以保证 diff 最小。
改动文件:
math/lin_space/op_host/lin_space_tiling.cppmath/lin_space/tests/ut/op_host/test_lin_space_tiling.cppmath/lin_space/tests/ut/op_host/test_lin_space_infershape.cpp


[Bug-Report|缺陷反馈]: LinSpace legacy tiling loses INT64 num precision
问题
LinSpace 接受
DT_INT64 num,但 legacy Host tiling 将该值经float转换。输入num=16777219时,tiling 写入16777220,InferShape 返回的输出 shape 则为[16777219]。最小复现
调用注册的 legacy Host tiling 与 InferShape callback,输入
start=0、stop=1、num=16777219(DT_INT64)。num=17可作为小计数对照。预期 / 实际
16777219。16777220,InferShape 仍返回[16777219]。影响
Host tiling 元素数与输出 shape 不一致,可能导致设备端处理范围与输出尺寸不符;本次未验证设备端具体表现。
修复
legacy tiling 直接读取
int64_t,并新增注册 tiling 与 InferShape 回归用例。独立的 Arch35 tiling 路径不在本次修改范围内。Validation
验证
cmake --build build --target math_op_host_ut -j8,定向 Host UT2/2通过,覆盖 tiling 的num=17、num=16777219以及 InferShape 输出维度。2):tiling 写入16777220,InferShape 返回[16777219]。clang-format --dry-run --Werror检查通过;补丁git diff --check通过。master,git apply --check和git diff --check通过。设备执行未验证。