已合并
【PR】: [feat] 支持设置L2CacheHint #1538
【PR】: [feat] 支持设置L2CacheHint #1538
已合并
xchu42创建于 28 天前
xchu42
xchu42成员
28 天前

Pull Request

描述

为 Autofuse 融合算子自动生成 L2 Cache Hint 配置代码,根据 GM tensor 总大小动态决定是否禁用 L2 Cache。
当前仅在inductor场景生效

变更类型

请选择本次引入的变更类型:

关联的Issue

如何测试

描述测试此变更的步骤和前提条件:
NA

核对清单

其他信息

在此添加任何其他关于本次 PR 的说明。

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 xchu42 的贡献)
xchu42xchu42成员
28 天前 添加了label:enhancement
xchu42xchu42成员
28 天前 创建了 pull request,commit 0bd80330
atomgit-bot
atomgit-bot
28 天前 评论:

变更摘要

本次 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 中定义 L2CacheModekNormal/kDisable)和 L2Ctrl 结构体(含 input_l2_cache_hintsoutput_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) 语句;AppendInputGlobalTensorInitAppendOutputGlobalTensorInit 分别传递对应索引的 cache mode。

  • 新增单元测试覆盖:新增 test_set_l2_ctrl.cpp 测试文件,覆盖总和未超阈值、总和超阈值但小输入豁免、大输出禁用、多输入混合等场景;在 test_codegen_kernel.cpp 中新增 SetGlobalBufferWithL2CacheHint 测试,验证禁用模式下代码生成输出的正确性。

likedislike
atomgit-bot
atomgit-bot
28 天前 评论:

代码审查

审查总结

共审查了 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

💬 仅评论

likedislike
CANN-robotCANN-robot成员
28 天前 添加了label:cann-cla/yes
此处折叠了247条消息 查看更多
wangxiaotian995成员
21 天前 评论:

/lgtm

likedislike
CANN-robotCANN-robot成员
21 天前 添加了label:lgtm
张德鹏成员
21 天前 评论:

/approve

likedislike
CANN-robotCANN-robot成员
21 天前 添加了label:approved
CANN-robotCANN-robot成员
21 天前 合入了pull request