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

CANN/cannbot-skills: HFusion→HIVM 转换规则

HFusion→HIVM 转换规则

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

本文档详细描述 HFusion 方言到 HIVM 方言的转换 Pass。

源码参考:Conversion/Passes.td

1. 转换概述

HFusion→HIVM 转换是 BishengIR 编译流水线的关键步骤,将高级算子融合图转换为硬件指令映射图。此转换决定了算子如何映射到具体的硬件执行单元(Cube/Vector/DMA)。

┌─────────────────────────────────────────────────┐ │ HFusion Dialect │ │ 融合后的命名算子 + linalg.generic │ │ 调度信息 + tiling 信息 │ └──────────────────────┬──────────────────────────┘ │ │ ConvertHFusionToHIVM │ ▼ ┌─────────────────────────────────────────────────┐ │ HIVM Dialect │ │ 硬件指令映射(Cube/Vector/DMA) │ │ 内存规划 + 同步 + 多缓冲 │ └─────────────────────────────────────────────────┘

2. ConvertHFusionToHIVM

2.1 Pass 定义

项目内容
Pass 名称ConvertHFusionToHIVM
CLI 参数convert-hfusion-to-hivm
作用域ModuleOp
构造函数mlir::createConvertHFusionToHIVMPass()
依赖方言func::FuncDialect,hivm::HIVMDialect,memref::MemRefDialect,arith::ArithDialect,affine::AffineDialect,scf::SCFDialect,vector::VectorDialect,linalg::LinalgDialect

2.2 Pass 选项

选项类型默认值说明
mm-map-modeMmMapModecore_op矩阵乘法映射模式

2.3 mm-map-mode 选项详解

mm-map-mode控制矩阵乘法算子如何映射到 HIVM 指令:

模式枚举值说明
core_opCoreOp映射为 HIVM Core 操作(Cube 单元),使用 Fractal 数据布局
macro_instrMacroInstr映射为 HIVM 宏指令,使用更高级的抽象

core_op 模式

  • 矩阵乘法映射为 Cube Core 操作
  • 数据布局转换为 Fractal 格式(Z 形/N 形)
  • 适用于大规模矩阵乘法

macro_instr 模式

  • 矩阵乘法映射为宏指令
  • 提供更高级的抽象,允许编译器进行更激进的优化
  • 适用于需要灵活调度的场景

3. 转换语义

3.1 算子映射规则

HFusion 算子HIVM 映射执行单元
矩阵乘法 (core_op)hivm.cube_matmulCube
矩阵乘法 (macro_instr)hivm.macro_matmulCube
逐元素运算hivm.vector_*Vector
归约运算hivm.vector_reduceVector
数据搬运hivm.dma_copyDMA
广播/转置hivm.vector_broadcast/transposed_copyVector/DMA

3.2 内存布局转换

HFusion→HIVM 转换中,数据布局从 ND 格式转换为硬件特定的格式:

场景输入布局输出布局说明
Cube 矩阵乘法 AND (M×K)Fractal (zN)行优先→Z 形 Fractal
Cube 矩阵乘法 BND (K×N)Fractal (nZ)列优先→N 形 Fractal
Cube 矩阵乘法 CFractal (zN)ND (M×N)Z 形 Fractal→行优先
Vector 运算NDND保持 ND 布局

3.3 同步操作插入

转换过程中自动插入同步操作:

  1. Cube→Vector 依赖:插入hivm.sync确保 Cube 计算完成
  2. DMA→计算依赖:插入hivm.sync确保数据搬运完成
  3. 多缓冲切换:插入hivm.sync确保前一个缓冲使用完毕

4. 辅助转换 Pass

4.1 ConvertHFusionToVector

将 HFusion 操作转换为 vector 方言操作(寄存器模式)。

项目内容
CLI 参数convert-hfusion-to-vector
构造函数mlir::createConvertHFusionToVectorPass()
依赖方言vector::VectorDialect,linalg::LinalgDialect,memref::MemRefDialect,arith::ArithDialect,scf::SCFDialect

此 Pass 用于 SIMT 路径,将 HFusion 算子直接转换为 vector 操作,跳过 HIVM 的 Cube 映射。

4.2 ConvertTensorToHIVM

将 tensor 操作直接转换为 HIVM 操作(跳过 HFusion 层)。

项目内容
CLI 参数convert-tensor-to-hivm
构造函数mlir::createTensorToHIVMConversionPass()
依赖方言tensor::TensorDialect,hivm::HIVMDialect

5. 转换后的 HIVM 结构

5.1 典型 HIVM 函数结构

func @kernel(...) { %buf_a = hivm.local_alloc ... ; 分配 Cube 输入缓冲 %buf_b = hivm.local_alloc ... ; 分配 Cube 输入缓冲 %buf_c = hivm.local_alloc ... ; 分配 Cube 输出缓冲 %dma_a = hivm.dma_copy %a -> %buf_a ; DMA 搬运 A %dma_b = hivm.dma_copy %b -> %buf_b ; DMA 搬运 B hivm.sync [%dma_a, %dma_b] ; 等待 DMA 完成 %cube = hivm.cube_matmul %buf_a, %buf_b -> %buf_c ; Cube 矩阵乘 hivm.sync [%cube] ; 等待 Cube 完成 %vec = hivm.vector_add %buf_c, %bias ; Vector 逐元素加 hivm.dma_copy %vec -> %output ; DMA 写回 }

5.2 多缓冲模式

func @kernel_multibuf(...) { %buf_a0 = hivm.local_alloc ... ; 缓冲 A 第 0 片 %buf_a1 = hivm.local_alloc ... ; 缓冲 A 第 1 片 %dma0 = hivm.dma_copy %a0 -> %buf_a0 ; 搬运第 0 片 hivm.sync [%dma0] %cube0 = hivm.cube_matmul %buf_a0, %buf_b -> %buf_c0 %dma1 = hivm.dma_copy %a1 -> %buf_a1 ; 搬运第 1 片(与计算重叠) hivm.sync [%cube0, %dma1] %cube1 = hivm.cube_matmul %buf_a1, %buf_b -> %buf_c1 ... }

6. 与后续 Pass 的衔接

ConvertHFusionToHIVM 完成后,进入 HIVM 变换阶段:

  1. HIVM Tensor 优化:布局推断、内存规划、同步优化
  2. HIVM Lowering:HIVM→TritonGPU(SIMD)或 HIVM→LLVM(SIMT)
  3. 后端代码生成:LLVM→二进制

详细内容参见:

  • 04-hivm-transforms.md — HIVM 变换 Pass
  • 05-hivm-to-backend.md — HIVM→后端转换

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

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

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

相关文章:

  • Copilot Chat提示工程进阶,深度解析GPT-4o上下文理解机制与12类精准指令设计法
  • 三相异步电机三角形改星形误接线致绕组烧毁及保护拒动故障分析
  • CAD显示工具栏、显示背景方格网
  • Beyond Compare 5密钥生成器:双模式激活解决方案详解
  • WaveTools:终极鸣潮游戏性能优化工具箱完整指南
  • embed python环境快速搭建
  • Docker 构建 ARM64 镜像并导出二进制文件 — 完整操作指南
  • Flutter Android 无线调试No supported devices connected
  • ChatGPT-Image2图像生成实战:从免费使用到工作流搭建
  • 终极游戏库管理指南:5分钟掌握Playnite开源游戏管理器
  • MidiEditor:开源MIDI编辑器的完整功能架构解析
  • 性能对比分析:NV-Raw2insights-MRI在CMRxRecon挑战赛中的优异表现
  • 无锡2026全屋定制爱格可丽芙双授权品牌选购宝典 - 设计本
  • Llama-3.1-8B-Instruct-FP8-KV-Quark-test性能优化:KV缓存量化实战指南
  • 【ChatGPT JSON工程化实战】:从Prompt设计→Schema约束→反序列化熔断,构建零崩溃JSON流水线(含GitHub Star 4.2k的开源工具链)
  • SSM框架+MySQL 8.0 网上书店系统:3层架构设计与5大核心模块实现
  • Copilot Chat从入门到精通:3天掌握企业级AI协作工作流,附实测效率提升数据
  • 2026年7月泉州惠普售后专业维修服务中心综合指南|地址电话服务项目维保流程全攻略.txt - 品牌引荐
  • 2026年7月泉州华硕售后本地化服务全景|交通指引气候养护到店全攻略.txt - 品牌引荐
  • 如何在Windows上免费获得苹果级别中文排版体验:PingFangSC字体包完整指南
  • 终极指南:Nintendo Switch Cleaner and Builder 一站式游戏文件管理解决方案
  • LLM 幻觉检测:用输出一致性检查降低业务风险,别让模型在关键场景胡编
  • CANN Runtime日志配置查看
  • DC-DC升压转换器与PIC微控制器的智能电源方案设计
  • Angular SVG圆形进度条自定义主题:5步实现品牌色彩统一
  • 五款热门中央软水机深度测评 - GrowUME
  • 2026年安徽哪所卫校男生可以上-合肥医药卫生学校(原安徽红十字会卫校) - cc江江
  • Gmail接入Gemini API的终极清单,含OAuth2.0动态刷新、速率限制绕行与错误码速查表
  • WeChatMsg:微信聊天记录永久保存与智能分析完全指南
  • 农业机器人市场2034年达374亿美元:3大驱动力与5个商业化挑战