Pull Request已成功合入, 合并人@CANN-robot
(感谢 ren-botao 的贡献)变更摘要
此 PR 将确定性计算从简单的开关(0/1)扩展为多级确定性模型(level 0-3),支持 ACL runtime 的 ACL_OPT_DETERMINISTIC 与 ACL_OPT_STRONG_CONSISTENCY 组合语义,并实现一致性开关的动态生效。核心改动包括:在 OpConfigInfo 中新增 deterministicLevel_ 字段替代单一的布尔标记;新增 GetDeterministicLevelFromRt() 函数从 runtime 获取确定性等级并兼容老 runtime 的回退逻辑;将 TilingParseCtxHolder::GetDeterministicLevel() 从静态缓存的 call_once 模式改为懒求值,每次从线程局部上下文中读取最新值,使一致性开关可在运行时动态生效。
主要改动
-
OpConfigInfo结构体扩展:新增int32_t deterministicLevel_{0}字段,移除uint8_t reserved[6]填充,拷贝构造和赋值运算符同步更新,使确定性的语义从布尔开关扩展为等级值(0=关闭, 1=确定性, 2=强一致性, 3=batch 一致性)。 -
新增
GetDeterministicLevelFromRt()函数:在op_executor.cpp中封装从 ACL runtime 获取确定性等级的完整逻辑——通过ACL_OPT_DETERMINISTIC获取等级值,当返回值为 1 时二次获取ACL_OPT_STRONG_CONSISTENCY判断是否应升级为 level 2,兼容仅支持 0/1 返回的老 runtime。 -
OpCache 哈希键更新:
AddOpConfigInfoToBuf()中将参与哈希计算的内容从isDeterministicOn_(1 字节 bool)改为deterministicLevel_(4 字节 int32_t),CheckHashBufCapacity和OpCacheAdd4Byte调用同步调整,这导致缓存的哈希长度从 1029 变为 1032。 -
GetDeterministicLevel()改为懒求值动态生效:在tiling_parse_ctx_holder.h中,GetDeterministicLevel()不再返回构建时预先计算并存储的值,改为每次调用时从GetThreadLocalContext().opConfigInfo_.deterministicLevel_实时读取并写入DeterministicLevel_,同时将DeterministicLevel_成员标记为mutable;BuildTilingParseCtx()中移除了原有的确定性等级计算逻辑和相关常量定义。 -
测试桩与用例完善:
aclrt_stub.cpp新增gStrongConsistencyNew变量及对ACL_OPT_STRONG_CONSISTENCY的设置/获取支持;DeterministicTest用例重写为 5 个子用例,覆盖 level 0/1/2/3 及老 runtime 回退路径(deterministic=1 + consistency=1 → 升级为 2)。


代码审查
最终回顾
边界值、热路径成本及已报位置的独立次要缺陷已检查,未发现新增问题。
审查总结
| 优先级 | 数量 |
|---|---|
| P0 | 0 |
| P1 | 0 |
| P2 | 0 |
| P3 | 1 |
整体风险判断:低风险。本次变更的核心逻辑正确——将确定性级别从布尔切换为多级(0–3)、支持运行时动态读取、并通过惰性求值将级别注入 tiling 上下文。唯一的发现是 GetDeterministicLevel() 继承了 GetDeterministic() 已有的并发写入竞态模式(P3),在实际运行中因所有线程写入相同值而良性。
各文件审查结论:
include/nnopbase/opdev/op_config.h— 无问题(补全了此前缺少的aicNum_/aivNum_拷贝,属正向修复)src/nnopbase/common/utils/op_cache.cpp— 无问题(哈希键格式按预期更新)src/nnopbase/composite_op/aclnn_engine/op_executor.cpp— 无问题(GetDeterministicLevelFromRt与InitL2Phase1Context逻辑正确)src/nnopbase/composite_op/aclnn_engine/tiling_parse_ctx_holder.cpp— 无问题(移除确定性级别的一次性初始化,转由惰性求值接管)src/nnopbase/composite_op/aclnn_engine/tiling_parse_ctx_holder.h— 1 个 P3 发现(GetDeterministicLevel()引入对mutable成员的并发写入竞态)tests/nnopbase/common/depends/acl/aclrt_stub.cpp— 无问题(新增ACL_OPT_STRONG_CONSISTENCY桩处理)tests/nnopbase/ut/composite_op/test_op_cache.cpp— 无问题(哈希键长度按预期从 1029 更新为 1032)tests/nnopbase/ut/composite_op/test_op_executor.cpp— 无问题(测试覆盖了 level 0–3 及老 runtime 回退路径)tests/nnopbase/ut/composite_op/test_tilingctx_builder.cpp— 无问题(测试断言适配新的惰性求值语义)
⚠️ 已识别出整体风险,但无法提取行内评论,请参考整体评估。


Thanks for your pull-request.
The full list of commands accepted by me can be found at here。
You can get sig-info at here
PR Approval Progress
✅ Congratulations! All modules have met the lgtm and approve requirements.
Module Approval Details
| module | lgtm status | approve status |
|---|---|---|
| include | ✅ wangrui_, 王永光, 宋恺 (3/2) | ✅ 王永光 (1/1) |
| repo-cann/opbase | ✅ wangrui_, 宋恺 (2/2) | ✅ wangrui_, 宋恺 (2/1) |
💡 Tip:
- Committer can comment
/approveor/lgtm- Commenting
/approveimplies both code review (lgtm) and intent to merge (approve)
CLA Signature Pass
ren-botao, thanks for your pull request. All authors of the commits have signed the CLA. 👍


流水线任务触发成功
任务链接 [c4125761e51c436d97e2741524471017][流水线指导]
| 任务名称 | 状态 | 日志 | 下载链接 |
|---|---|---|---|
| codecheck | ✅ SUCCESS | >>>>> | |
| SCA | ✅ SUCCESS | >>>>> | |
| antipoison | ✅ SUCCESS | >>>>> | |
| Check_Pr | ✅ SUCCESS | >>>>> | |
| Compile_Ascend_X86_ubuntu24 | ✅ SUCCESS | >>>>> | >>>>> |
| UT_Test | ✅ SUCCESS | ||
| Compile_Ascend_ARM_ubuntu24 | ✅ SUCCESS | >>>>> | >>>>> |
| pre_comment | ✅ SUCCESS | >>>>> | |
| StaticCheck_codespell_check | ✅ SUCCESS | ||
| StaticCheck_link_validity_check | ✅ SUCCESS | ||
| StaticCheck_resource_existence_check | ✅ SUCCESS | ||
| StaticCheck_tag_closed_check | ✅ SUCCESS | ||
| StaticCheck_markdownlint | ✅ SUCCESS | ||
| codecheck_style | ✅ SUCCESS | >>>>> | |
| precommit | ❌ FAILED | >>>>> | >>>>> |




流水线任务触发成功
任务链接 [fb83f3a8bac4435886b57ad5944cbf78][流水线指导]
| 任务名称 | 状态 | 日志 | 下载链接 |
|---|---|---|---|
| codecheck | ✅ SUCCESS | >>>>> | |
| SCA | ✅ SUCCESS | >>>>> | |
| antipoison | ✅ SUCCESS | >>>>> | |
| Check_Pr | ✅ SUCCESS | >>>>> | |
| Compile_Ascend_X86_ubuntu24 | ✅ SUCCESS | >>>>> | >>>>> |
| UT_Test | ✅ SUCCESS | ||
| Compile_Ascend_ARM_ubuntu24 | ✅ SUCCESS | >>>>> | >>>>> |
| pre_comment | ✅ SUCCESS | >>>>> | |
| StaticCheck_codespell_check | ✅ SUCCESS | ||
| StaticCheck_link_validity_check | ✅ SUCCESS | ||
| StaticCheck_resource_existence_check | ✅ SUCCESS | ||
| StaticCheck_tag_closed_check | ✅ SUCCESS | ||
| StaticCheck_markdownlint | ✅ SUCCESS | ||
| codecheck_style | ✅ SUCCESS | >>>>> | |
| precommit | ✅ SUCCESS | >>>>> | |
| API_Check | ✅ SUCCESS | >>>>> |
[2026-07-10 09:57:55] CI执行结束




流水线任务触发成功
任务链接 [685caa3f1dfa488aa79ec90d77cff06e][流水线指导]
| 任务名称 | 状态 | 日志 | 下载链接 |
|---|---|---|---|
| codecheck | ✅ SUCCESS | >>>>> | |
| SCA | ✅ SUCCESS | >>>>> | |
| antipoison | ✅ SUCCESS | >>>>> | |
| Check_Pr | ✅ SUCCESS | >>>>> | |
| Compile_Ascend_X86_ubuntu24 | ✅ SUCCESS | >>>>> | >>>>> |
| UT_Test | ✅ SUCCESS | ||
| Compile_Ascend_ARM_ubuntu24 | ✅ SUCCESS | >>>>> | >>>>> |
| pre_comment | ✅ SUCCESS | >>>>> | |
| StaticCheck_codespell | ✅ SUCCESS | ||
| StaticCheck_link_validity | ✅ SUCCESS | ||
| StaticCheck_resource_existence | ✅ SUCCESS | ||
| StaticCheck_tag_closed | ✅ SUCCESS | ||
| StaticCheck_markdownlint | ✅ SUCCESS | ||
| codecheck_style | ✅ SUCCESS | >>>>> | |
| precommit | ✅ SUCCESS | >>>>> | |
| API_Check | ✅ SUCCESS | >>>>> |
[2026-07-13 09:21:10] CI执行结束




/lgtm
/approve


/approve


描述
现新增 ACL_OPT_DETERMINISTIC 获取的值的定义,新增 2 和 3, 2表示开启强一致性计算,3表示开启batch一致性计算,值是前向包含的
aclnn 框架支持确定性计算与一致性开关算子级动态生效。
关联的Issue
#259
测试
tests/nnopbase/ut/composite_op/test_op_cache.cpp、test_op_executor.cpp、test_tilingctx_builder.cpp 配合上述 4 个动作更新用例。
tests/nnopbase/common/depends/acl/aclrt_stub.cpp 补齐 ACL_OPT_STRONG_CONSISTENCY 桩。
文档更新
不涉及
类型标签