当前位置: 首页 > news >正文

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),仅供参考

http://www.jsqmd.com/news/1168774/

相关文章:

  • FFmpeg H.264 裁剪与拼接:SPS/PPS 数据丢失的 2 种修复方案与原理
  • 3分钟掌握Umi-OCR:免费离线文字识别工具终极指南
  • 深度解析Bytecode Viewer:Java字节码逆向工程实战指南
  • 2026 温岭起重设备出租 吊车叉车租赁本地博主真实测评榜单 - LYL仔仔
  • PrimeQA社区贡献指南:如何为这个顶级开源项目做出贡献
  • 如何快速构建跨平台音乐歌词提取工具:完整技术方案与开源解决方案
  • STM32L152RE与PAM8904的低功耗蜂鸣器驱动方案
  • 嵌入式AT命令解析难题的DMA驱动解决方案:STM32串口通信效率革命
  • PCUI完全指南:打造现代Web工具界面的终极UI组件库
  • 2026年劳力士官方维修与售后服务地址指引,全国门店全新升级 - 劳力士官方维修中心
  • 重新定义Python金融数据获取:yfinance的架构革命与实践智慧
  • Spring Boot 3 + Vue 3 + MySQL 粉丝互动平台源码 前后端分离实战
  • NtyTcp缓冲区管理策略:如何优化网络数据传输性能
  • 2026 上海全屋定制品牌实力盘点:存量房时代 7 大主流品牌深度测评 - GrowUME
  • data-to-paper社区贡献指南:如何参与这个开源科学研究项目
  • PrimeQA核心组件深度解析:信息检索、阅读理解、问题生成的实现原理
  • 告别重复代码!XAOP实现Android权限动态申请的完整指南
  • Docker PostgreSQL 多数据库初始化深度解析:Shell脚本如何优雅管理多数据库创建
  • 从 “盲挖” 到“点位探测”!管线运维升级与鼎讯G-6000应用效果
  • 无惧恶劣天气工况四季常态化稳定驱蚊 - 优企甄选
  • 房间追踪相遇问题(BFS + 周期模拟)
  • PIC18F8520与PAM8904构建工业级音频警报系统
  • 2026 天津老凤祥金店回收多少钱,首推易奢福 - 奢侈品回收实体店
  • CANN Runtime编码规范
  • 国家中小学智慧教育平台电子课本下载工具完整指南:三步快速获取PDF教材
  • OpenCore Legacy Patcher终极指南:如何让老Mac免费升级最新macOS
  • AD7175-8与PIC18LF24K50的高精度信号采集方案
  • 具身智能2023-2024:从PaLM-E到VoxPoser,5大突破性论文核心解读
  • 终极指南:3分钟解锁网易云音乐NCM格式,实现跨设备自由播放
  • 工业级电感和电阻负载控制方案:TPD2015FN与STM32F732IE应用详解