examples/add_example/tests/ut/op_kernel/test_add_example.cpp 的 test_case_0:
examples/add_example/tests/ut/op_kernel/test_add_example.cpp
test_case_0
EXPECT_*/ASSERT_*
grep -c "EXPECT\|ASSERT"
AscendC::GmAlloc
ICPU_RUN_KF(AddExampleKernel, blockDim, x, y, z, workspace, ...); AscendC::GmFree(x); // 无任何读回校验 ... } // TEST_F 结束,从未断言
对照同仓其余测试层:
test_add_example_tiling.cpp
examples/fast_kernel_launch_example/tests/add/test_add.py
torch.equal
allclose
kernel UT 是三层中唯一无校验的,且 add_example 是本仓 opgen 示例工程的门面用例。
在 ICPU_RUN_KF 前将 x/y 填入已知值(tikicpulib 下 GmAlloc 返回 host 可访问内存),运行后逐元素校验 z[i] == x[i] + y[i](float32 加法位精确,可位级比较)。
z[i] == x[i] + y[i]
仅测试有效性,不影响 kernel 行为;add_example kernel 若出现回归,当前 UT 无法拦截。
问题定位
examples/add_example/tests/ut/op_kernel/test_add_example.cpp的test_case_0:EXPECT_*/ASSERT_*数量为 0(grep -c "EXPECT\|ASSERT"= 0)——ICPU_RUN_KF 之后直接释放内存结束,kernel 计算错误(甚至写出垃圾)也不会失败AscendC::GmAlloc分配 x/y 后未填入任何数据,也无数据文件加载——即使想校验也没有已知期望值证据
ICPU_RUN_KF(AddExampleKernel, blockDim, x, y, z, workspace, ...); AscendC::GmFree(x); // 无任何读回校验 ... } // TEST_F 结束,从未断言对照同仓其余测试层:
test_add_example_tiling.cpp:ExecuteTestCase 校验 tiling 输出("256 8")✓examples/fast_kernel_launch_example/tests/add/test_add.py:torch.equal/allclose真实校验 ✓kernel UT 是三层中唯一无校验的,且 add_example 是本仓 opgen 示例工程的门面用例。
修复方向
在 ICPU_RUN_KF 前将 x/y 填入已知值(tikicpulib 下 GmAlloc 返回 host 可访问内存),运行后逐元素校验
z[i] == x[i] + y[i](float32 加法位精确,可位级比较)。影响面
仅测试有效性,不影响 kernel 行为;add_example kernel 若出现回归,当前 UT 无法拦截。