CANN MemRefExt方言文档
MemRefExt 方言【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills1. 概述MemRefExt 方言扩展了 MLIR 标准的 MemRef 方言提供 NPU 设备特有的内存分配操作特别是工作空间Workspace内存的分配。方言名称memref_extC 命名空间::bishengir::memref_ext依赖方言arith::ArithDialect源码参考MemRefExtOps.td、MemRefExtBase.td2. 方言定义def MemRefExt_Dialect : Dialect { let name memref_ext; let cppNamespace ::bishengir::memref_ext; let description [{ extended memref dialect }]; let dependentDialects [arith::ArithDialect]; let hasConstantMaterializer 1; }3. 操作定义3.1 memref_ext.alloc_workspace功能分配工作空间内存。工作空间用于 Kernel 执行过程中的临时存储其大小由 Host 端的hacc.infer_workspace_shape_function推断。操作签名操作数/结果类型说明workspaceArgOptionalAnyMemRef已有的工作空间参数复用场景dynamicSizeVariadicIndex动态维度大小offsetVariadicIndex偏移量memrefAnyMemRef分配的 MemRef 结果内存效果MemAllocDefaultResource, 0, FullEffectMLIR 示例静态大小分配%ws memref_ext.alloc_workspace() : memref100xi8动态大小分配%ws memref_ext.alloc_workspace(%dynamic) : memref2x?xi32从已有工作空间分配带偏移%ws memref_ext.alloc_workspace(%dynamic) from %arg offset [%offset] : from memref?xi8 to memref2x?xi324. LoweringMemRefExt 操作在编译流程中会被 lowering 为标准 MemRef 操作或 HIVM 层的内存操作memref_ext.alloc_workspace │ ├── Lowering 到 HIVM 层的内存分配 │ └── Lowering 到标准 memref.alloc 偏移计算5. 与 HACC 方言的协作工作空间内存的生命周期由 HACC 方言管理Host 端hacc.infer_workspace_shape_function计算工作空间大小Host 端分配工作空间内存工作空间通过hacc.arg_type #hacc.arg_typeworkspace传递给 Device KernelDevice Kernel 内部使用memref_ext.alloc_workspace从传入的工作空间中分配子区域【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考