已关闭
【重构需求】删除 att L0/L2 求解器——L0 不适用 CV 融合场景,L2 硬件命中不可控 #207
zhang_shengjie创建于 7月23日关闭于 27 天前
7月23日 修改了issue 的描述
Zzhang_shengjie
7月23日 修改标题为 “【需求】删除 att L0/L2 求解器——L0 不适用 CV 融合场景,L2 硬件命中不可控”,原标题为“删除 att L0/L2 求解器——L0 不适用 CV 融合场景,L2 硬件命中不可控”
7月23日 修改标题为 “【需求】删除 att L0/L2 求解器——L0 不适用 CV 融合场景,L2 硬件命中不可控”,原标题为“删除 att L0/L2 求解器——L0 不适用 CV 融合场景,L2 硬件命中不可控”
sgd
7月23日 评论:
7月23日 评论:
/assign @zhang_shengjie


7月23日 将 zhang_shengjie 设为负责人
Zzhang_shengjie
7月23日 修改标题为 “【重构需求】删除 att L0/L2 求解器——L0 不适用 CV 融合场景,L2 硬件命中不可控”,原标题为“【需求】删除 att L0/L2 求解器——L0 不适用 CV 融合场景,L2 硬件命中不可控”
7月23日 修改标题为 “【重构需求】删除 att L0/L2 求解器——L0 不适用 CV 融合场景,L2 硬件命中不可控”,原标题为“【需求】删除 att L0/L2 求解器——L0 不适用 CV 融合场景,L2 硬件命中不可控”
7月23日 修改了issue 的描述
gcw_NLOuEjCz
7月24日 评论:
7月24日 评论:
@Jett_Woo 老师,这边尝试一下,请求分配


8月10日 关联了pull request:refactor: 面向VV融合的求解器,删除L0/L2求解器
27 天前 关闭了 issue
27 天前 添加了label:resolved
删除 att L0/L2 求解器
问题背景
att 的 HighPerf Tiling求解器历史上设计了三段式求解架构:
L0 求解器 → L2 求解器 → General 求解器。设计初衷是通过快速确定性启发式先行求解硬件亲和变量(L0A/L0B/L0C 和 L2 相关变量),缩小 General 启发式搜索器的搜索空间,提升求解质量和速度。{16, 32, 64, 128, 256, 512, 1024}中枚举搜索,目标是最大化 MAC 利用率(要求核数利用率 ≥ 60%)。EMPIRIC_L2_SIZE = 128MB)下求解 L2 tiling 变量,并处理多核读冲突,依赖 L0 求解器的输出作为基本块大小(base_val)。问题描述
随着技术演进,两个求解器已无法满足实际需求:
L0 求解器:仅适用于 cube 算子,不适用于 CV 融合场景
当前 CV 融合(Cube+Vector)使用的是另一套 tiling 方案,L0 求解器的候选值集合和 MAC 利用率最大化目标针对的是纯 cube 计算的硬件特征。CV 融合场景下,vector 部分的计算特征、UB 占用、流水排布与纯 cube 差异显著,L0 求解器的启发式假设不再成立,强行套用会导致次优解或与 CV 融合方案冲突。
L2 求解器:输入输出 Tensor 大小和硬件命中不可控,难以准确估计
L2 求解器的核心约束是 L2 缓存占用不超过容量上限,但实际 L2 占用取决于输入输出 Tensor 的大小和硬件 cache 命中行为:
当前 L2 求解器用固定经验值
EMPIRIC_L2_SIZE = 128MB(l2_solver_code.h)和符号表达式估算 L2 占用,与实际硬件行为偏差大,求解结果不可靠,可能引导 tiling 走向错误的分块策略。结论
L0/L2 求解器的假设已失效,继续维护增加代码复杂度却无法产生实际收益,应当删除。HighPerf 路径改为单段 General 求解,由 General 启发式搜索器统一处理全部 tiling 变量,避免 L0/L2 的错误假设带来的风险。
计划方案
前置条件
建议步骤
删除 L0/L2 运行时模板
solver_pass/l0_solver_code.h、solver_pass/l2_solver_code.hsolver_pass/solver.h/solver.cpp:移除 include 和 L0/L2 分支删除 L0/L2 codegen
solver_pass_gen/l0_solver/、solver_pass_gen/l2_solver/目录solver_pass_manager.h/.cpp:移除 L0/L2 方法、include,简化遍历逻辑收缩 SolverType 枚举
base_types.h:SolverType收缩为{SEARCH_TILE, ERROR}删除 L0/L2 测试
tests/ut/att/CMakeLists.txt的 glob更新 CMake
att/CMakeLists.txt是否显式引用 L0/L2 源文件,若有则移除需要验证的点
L0TileSolver、L2TileSolver、L0TileSolverGen、L2TileSolverGen、ExecuteL0Solver、ExecuteL2Solver)solver_pass_gen/managerUT 验证GenFuncPass/GenClassPass只生成 General 代码验证命令