Pull Request已成功合入, 合并人@CANN-robot
(感谢 xchu42 的贡献)变更摘要
本次 PR 新增了在自动融合(AutoFuse)编译优化过程中根据张量大小动态设置 L2 Cache 提示(L2CacheHint)的功能。核心思路是:在调度阶段计算每个输入/输出张量的数据量,当总数据量超过阈值(196MB)且单个输入张量不小于 16MB 时,对该输入禁用 L2 Cache;当单个输出张量超过 392MB(2×196MB)时,对该输出禁用 L2 Cache。禁用信息通过新增的 L2Ctrl 结构传递到代码生成阶段,最终在生成的 kernel 代码中插入 SetL2CacheHint(AscendC::CacheMode::CACHE_MODE_DISABLE) 调用。
主要改动
-
新增
L2CacheMode枚举与L2Ctrl数据结构:在schedule_result.h中定义L2CacheMode(kNormal/kDisable)和L2Ctrl结构体(含input_l2_cache_hints与output_l2_cache_hints两个 vector),并嵌入FusedScheduledResult作为调度结果的一部分,用于在优化阶段与代码生成阶段之间传递 L2 Cache 控制信息。 -
新增
Optimizer::SetL2Ctrl策略方法:在optimize.cpp中实现SetL2Ctrl,通过CalcNodeL2Size遍历 Data 节点的后继计算各输入/输出的字节大小,依据kL2CacheTotalThreshold(196MB)和kL2CacheInputSmallThreshold(16MB)等阈值决定每个输入/输出是否应禁用 L2 Cache,并将结果写入fused_scheduled_result.l2_ctrl。 -
Kernel类增加 L2 Cache 模式解析与查询能力:在codegen_kernel.h中为Kernel新增input_cache_modes_/output_cache_modes_成员及GetInputCacheMode/GetOutputCacheMode访问方法,同时新增ParseL2CacheModes方法在ParseGraph时从FusedScheduledResult.l2_ctrl中提取 hints 并建立索引映射。 -
Tensor::SetGlobalBuffer支持输出SetL2CacheHint代码:在codegen_kernel.cpp中为SetGlobalBuffer增加L2CacheMode参数,当模式为kDisable时自动追加生成SetL2CacheHint(AscendC::CacheMode::CACHE_MODE_DISABLE)语句;AppendInputGlobalTensorInit和AppendOutputGlobalTensorInit分别传递对应索引的 cache mode。 -
新增单元测试覆盖:新增
test_set_l2_ctrl.cpp测试文件,覆盖总和未超阈值、总和超阈值但小输入豁免、大输出禁用、多输入混合等场景;在test_codegen_kernel.cpp中新增SetGlobalBufferWithL2CacheHint测试,验证禁用模式下代码生成输出的正确性。


代码审查
审查总结
共审查了 7 个变更文件,发现 2 个问题。
各文件审查结果
| 文件 | 结果 |
|---|---|
autofuse/codegen/codegen_kernel.cpp |
1 个问题 (P3) |
autofuse/codegen/codegen_kernel.h |
无问题 |
autofuse/common/schedule_result.h |
无问题 |
autofuse/optimize/optimize.cpp |
无问题 |
autofuse/optimize/optimize.h |
1 个问题 (P3) |
autofuse/tests/ut/codegen/test_codegen_kernel.cpp |
无问题 |
autofuse/tests/ut/optimize/test_set_l2_ctrl.cpp |
无问题 |
按优先级统计
- P0: 0
- P1: 0
- P2: 0
- P3: 2
整体风险评估
低风险。本次变更的核心逻辑正确:SetL2Ctrl 中的阈值判断逻辑合理,ParseL2CacheModes 正确建立了 input/output 名称到 L2 cache hint 的映射关系,SetGlobalBuffer 仅在 kDisable 时追加 SetL2CacheHint 调用。测试覆盖了主要场景(总和低于/高于阈值、大小输入混合、大输出独立判断),且与生产调用顺序一致。两个 P3 问题均为代码整洁性和一致性方面的改进建议,不影响运行时正确性。
| 类型 | 数量 |
|---|---|
| 🔴 阻塞 | 0 |
| 🟡 建议 | 1 |
💬 仅评论


/lgtm


Pull Request
描述
为 Autofuse 融合算子自动生成 L2 Cache Hint 配置代码,根据 GM tensor 总大小动态决定是否禁用 L2 Cache。
当前仅在inductor场景生效
变更类型
请选择本次引入的变更类型:
关联的Issue
如何测试
描述测试此变更的步骤和前提条件:
NA
核对清单
其他信息
在此添加任何其他关于本次 PR 的说明。