CANNBot Skills HFusion变换Pass总览

HFusion 变换 Pass 总览

【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体,本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills

1. 概述

HFusion 方言提供了 40+ 个变换 Pass,覆盖操作融合、自动调度、自动向量化、类型合法化、Tiling 数据打包等多个编译阶段。本文档列出所有 Pass 的名称和功能简述。

源码参考:Passes.td、Passes.h

2. 融合与调度 Pass

Pass 名称作用域功能简述
hfusion-fuse-opsModuleOp张量上的操作融合,将可融合操作 outline 为独立函数
hfusion-auto-scheduleModuleOp自动调度融合 Kernel,生成 Tiling 参数
hfusion-infer-func-fusion-kindFuncOp推断函数的融合类型
hfusion-infer-out-shapesModuleOp生成输出张量形状推断函数
hfusion-compose-multi-reduceFuncOp组合多个归约为单个操作
hfusion-decompose-multiFuncOp将多操作分解为单操作
hfusion-pre-vectorization-fusionFuncOp向量化前的逐元操作融合
hfusion-eliminate-duplicate-funcsModuleOp消除融合后的重复函数

3. 向量化 Pass

Pass 名称作用域功能简述
hfusion-auto-vectorizeModuleOp自动向量化 Linalg 命名操作
hfusion-auto-vectorize-v2ModuleOp第二版自动向量化(Tile + Fuse + Vectorize)
hfusion-generic-unrollerFuncOp非可向量化 Linalg 操作的展开
hfusion-pull-slice-into-vector-functionModuleOp将 extract_slice/insert_slice 拉入 VF 函数
outline-vector-functionModuleOpOutline 向量函数
hfusion-vectorize-opsModuleOp向量化 HFusion 操作
remove-mask-from-unaligned-reduction-loopFuncOp移除未对齐归约循环的掩码

4. 类型合法化 Pass

Pass 名称作用域功能简述
hfusion-legalize-scalarFuncOp将标量操作合法化为张量操作
hfusion-legalize-bf16FuncOp将 BF16 类型合法化为 FP32
hfusion-legalize-fp8FuncOp将 FP8 类型合法化为 FP32
hfusion-legalize-boolModuleOp将 int8/int1 布尔类型合法化
hfusion-downgrade-fp64FuncOp将 FP64 常量降级为 FP32
hfusion-normalize-opsFuncOp规范化 HFusion 操作
hfusion-normalize-slice-opsFuncOp规范化 Slice 操作

5. Tiling 与数据打包 Pass

Pass 名称作用域功能简述
hfusion-pack-tiling-dataModuleOp将动态 Tiling 信息打包为结构体
hfusion-constantize-tiling-dataModuleOp在 Tiling 和 Device 函数间传播常量
hfusion-add-ffts-addrModuleOp添加 FFTS 基地址到函数参数

6. 形状与参数变换 Pass

Pass 名称作用域功能简述
hfusion-tensor-results-to-out-paramsModuleOp将张量结果移至函数输出参数
hfusion-hoist-tensor-emptyModuleOp将 tensor.empty 提升到函数参数并合并
hfusion-simplify-vf-argModuleOp简化 VF 函数参数
hfusion-merge-vfModuleOp合并 VF 函数
hfusion-fold-unit-dimsFuncOp折叠 Linalg 操作中的单位维度

7. 操作变换 Pass

Pass 名称作用域功能简述
hfusion-convert-generic-to-namedFuncOp将 Linalg generic 转换为命名操作
hfusion-flatten-opsFuncOp展平 Linalg 和 HFusion 操作
hfusion-inline-brcFuncOp内联广播类操作
hfusion-outline-single-opFuncOpOutline 单个 Linalg 操作为 Kernel
hfusion-simplify-opsFuncOp简化操作
hfusion-reorder-opsFuncOp按 BFS 重排操作
hfusion-generalizeFuncOp将 HFusion 操作转换为 linalg.generic
hfusion-decomposeFuncOp分解实现 AggregatedOpInterface 的操作

8. 缓存与符号 Pass

Pass 名称作用域功能简述
hfusion-cache-ioFuncOp缓存输入输出参数
hfusion-cache-io-for-return-argFuncOp缓存直接返回的参数
hfusion-recache-ioFuncOp重新缓存 IO
hfusion-remove-cache-ioFuncOp移除缓存 IO
hfusion-fold-symbolic-dimFuncOp用 hfusion::SymbolicDimOp 替换 tensor.dim
hfusion-unfold-symbolic-dimFuncOp将 SymbolicDimOp 替换为符号参数
hfusion-drop-symbolsFuncOp丢弃操作中的 ranked tensor 符号

9. Host 函数与 Triton 适配 Pass

Pass 名称作用域功能简述
hfusion-wrap-host-funcModuleOp为 Host 辅助函数创建包装函数
adapt-triton-kernelModuleOp适配 Triton 入口 Kernel

10. 关键 Pass 选项

10.1 hfusion-fuse-ops

选项类型默认值说明
output-modeOutputModeMultipleOutline 函数输出模式
fusion-modeFusionKindUnknown融合类型
always-inlineboolfalse始终内联 outline 函数
move-out-to-parambooltrue将张量输出移至参数
max-horizontal-fusion-sizeint-1最大水平融合大小
multi-kernelboolfalse启用多 Kernel outline
enable-symbol-analysisboolfalse启用符号分析

10.2 hfusion-auto-vectorize

选项类型默认值说明
vector-lengthunsigned256向量长度(字节)
peel-loopsboolfalse尝试剥离循环
max-vectorize-axesint64_t-1最大向量化轴数
tree-reduceboolfalse使用树形归约

10.3 hfusion-flatten-ops

选项类型默认值说明
flatten-modeFlattenModeGreedy展平模式
skip-hostboolfalse跳过 Host 函数
multi-dynamic-shapebooltrue折叠多个动态形状
register-basedboolfalse使用基于寄存器的展平模式
skip-scopebooltrue存在 scope 时跳过

10.4 hfusion-auto-vectorize-v2

选项类型默认值说明
vector-lengthunsigned256向量长度(字节)
max-fused-opsunsigned15单个融合节点最大操作数
enable-multiple-consumer-fusionboolfalse启用多消费者融合

【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体,本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考