CANN/cannbot-skills自定义操作文档

发布时间:2026/9/20 20:09:23
CANN/cannbot-skills自定义操作文档 hir.custom — 自定义单 Pipe 操作【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills关键词custom, CustomOp, Builtin, __builtin_gather_load, __builtin_index_select, SinglePipe概述hir.custom是 HIVM 方言中的自定义单 Pipe 操作允许用户在现有操作无法满足需求时编写自定义实现。该操作在单个 Pipeline 上执行通过name属性标识操作类型。Custom 操作适用于以下场景现有操作无法实现所需功能现有操作可以实现但性能不佳需要私有操作内置操作name 以__builtin开头由编译器自带实现用户无需指定属性即可使用。Python API 对应Triton 的自定义操作可以通过tl.extern等机制映射为 hir.custom。IR 操作定义从 HIVMOps.td 提取def CustomOp : HIVM_CustomOpcustom, [SinglePipeOpTrait] { let arguments (ins StrAttr:$name, VariadicAnyType:$inputs, VariadicAnyType:$outputs); let results (outs VariadicAnyType:$results); }基类HIVM_CustomOp定义HIVMOps.tdclass HIVM_CustomOpstring mnemonic, listTrait traits [] : HIVM_StructuredOpmnemonic, !listconcat([AttrSizedOperandSegments, MemoryEffects[MemRead, MemWrite], HIVMInferCoreTypeInterface], traits) { dag args (ins StrAttr:$name, VariadicAnyType:$inputs, VariadicAnyType:$outputs); dag res (outs VariadicAnyType:$results); }参数说明输入操作数ins参数类型必选说明$nameStrAttr是操作名称__builtin_前缀为内置操作$inputsVariadicAnyType是输入参数可变数量$outputsVariadicAnyType是输出/初始化参数DestinationStyle输出结果outs参数类型说明$resultsVariadicAnyType结果值必需属性属性类型说明hivm.tcore_typeTCoreTypeAttr执行的 Core 类型hivm.pipePipeAttr执行的 Pipelinehivm.vf_modeVFModeAttrVector 运行模式Cube Core 时忽略可选属性属性类型说明gm_addr_args_indicesDenseI32ArrayAttr指示哪些参数包含 GM 纯地址额外类方法方法返回类型说明getCoreType()optionalTCoreType获取 Core 类型setCoreType(TCoreType)void设置 Core 类型getPipe()PIPE获取 PipesetPipe(PIPE)void设置 PipegetVFMode()optionalVFMode获取 VF 模式setVFMode(VFMode)void设置 VF 模式getGMAddrArgsIndices()optionalSmallVectorsize_t获取 GM 地址参数索引setGMAddrArgsIndices(SmallVectorsize_t)void设置 GM 地址参数索引isBuiltin()bool判断是否为内置操作getDpsInitsMutable()MutableOperandRangeDestinationStyleOpInterface内置操作常量static constexpr StringLiteral kBuiltinGatherLoadName __builtin_gather_load; static constexpr StringLiteral kBuiltinIndexSelectName __builtin_index_select;IR 示例自定义操作%empty tensor.empty() : tensor3x3xf32 %0 hivm.hir.custom { hivm.tcore_type #hivm.tcore_typeVECTOR, hivm.pipe #hivm.pipePIPE_V, hivm.vf_mode #hivm.vf_modeSIMD } my_custom_op ins(%arg0, %arg1, %c4_i64, %c0_i32, %c2_i64, %c1_i64, %c2_i32, %c2_i32, %c0_i32, %c0_i32 : memref?xf32, tensor3x3xi64, i64, i32, i64, i64, i32, i32, i32, i32) outs(%empty : tensor3x3xf32) - tensor3x3xf32内置操作无需指定属性%empty tensor.empty() : tensor3x3xf32 %0 hivm.hir.custom __builtin_gather_load ins(%arg0, %arg1, %c4_i64, %c0_i32, %c2_i64, %c1_i64, %c2_i32, %c2_i32, %c0_i32, %c0_i32 : memref?xf32, tensor3x3xi64, i64, i32, i64, i64, i32, i32, i32, i32) outs(%empty : tensor3x3xf32) - tensor3x3xf32__builtin_index_select%0 tensor.empty() : tensor1x4x32xf32 %1 hivm.hir.custom {extra_attr srcStrideLength3, hivm.vf_mode #hivm.vf_modeSIMT} __builtin_index_select ins(%arg0, %arg1, %c0_i32, %c9000_i64, %c0_i32, %c0_i32, %c0_i32, %c0_i32, %c0_i32, %c0_i32, %c32_i32, %c4000_i32, %c32_i32 : memref?xf32, tensor16x400xi32, i32, i64, i32, i32, i32, i32, i32, i32, i32, i32, i32) outs(%0 : tensor1x4x32xf32) - tensor1x4x32xf32IR 层约束与验证SinglePipeOpTrait操作在单个 Pipeline 上执行。AttrSizedOperandSegmentsinputs 和 outputs 的数量由属性决定。DestinationStyleOpInterfaceoutputs 作为 DPS init 操作数。Core Type必须通过hivm.tcore_type属性指定内置操作可省略编译器自动推断。Pipe必须通过hivm.pipe属性指定内置操作可省略。VFMode必须通过hivm.vf_mode属性指定内置操作可省略Cube Core 时忽略。Builtin 验证内置操作编译器会检查参数正确性并规范化属性。常见问题Q: 自定义操作如何提供实现A: 当前自定义操作的用户实现机制尚未完全开放标记为 TODO。内置操作由编译器自动链接到模板库。Q: __builtin_gather_load 和 hir.gather_load 的区别A:__builtin_gather_load是通过 custom 操作机制实现的 gather load而hir.gather_load是独立的 HIVM 操作。两者功能类似但 custom 版本更灵活可以通过属性配置。Q: gm_addr_args_indices 的用途A: 指示哪些输入参数包含 GM 的纯地址值。Lowering Pass 在处理这些参数时会保留地址值而不是尝试从 memref 中提取数据。相关文档源码参考HIVMOps.td测试用例custom-op.mlirCustomMacroOp02-custom-macro-op.md【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

网站建设站建设好吗?别被忽悠了,看完这篇再掏钱

网站建设站建设好吗?别被忽悠了,看完这篇再掏钱

很多老板一开口就问:网站建设站建设好吗?其实这个问题本身就有点问题。因为“好”与“坏”,从来不是绝对的。就像问“吃饭好吗?”一样荒谬。关键是你吃的是什么,怎么吃。我见过太多公司花几万块做个网站。结果上线第一天,打开速度像蜗牛。客户逛了两秒就关掉,转化率几乎…

发布时间:2026/8/20 5:35:23
精品网站建设费用 找磐石网络一流 到底贵在哪?老站长掏心窝子说真话

精品网站建设费用 找磐石网络一流 到底贵在哪?老站长掏心窝子说真话

很多人问做网站到底要花多少钱,怕被坑又怕质量差。这篇文章直接拆解真实报价和隐形坑,帮你省下冤枉钱。看完你就知道,为什么有的网站几千块,有的要几万,差别到底在哪。记得去年给公司翻新官网,我差点就在路边小店签了合同。那时候不懂行,觉得网站不就是套个模板吗?结果…

发布时间:2026/8/20 5:35:23
如何快速上手openEuler/imageTailor?3分钟掌握ISO裁剪核心功能

如何快速上手openEuler/imageTailor?3分钟掌握ISO裁剪核心功能

如何快速上手openEuler/imageTailor?3分钟掌握ISO裁剪核心功能 【免费下载链接】imageTailor a tool for tailoring image 项目地址: https://gitcode.com/openeuler/imageTailor 前往项目官网免费下载:https://ar.openeuler.org/ar/ 想要快速上…

发布时间:2026/8/20 5:35:23
跑断腿?我在平阳县建设局网站办证的血泪史与避坑指南

跑断腿?我在平阳县建设局网站办证的血泪史与避坑指南

说实话,以前我对“跑审批”这四个字充满了恐惧。总觉得那是只有大企业或者专业中介才能玩转的游戏,咱们普通小老板或者刚入行的工程人,根本摸不着头脑。直到上个月,我为了一个小型装修项目的施工许可,硬着头皮去了一趟平阳县建设局网站,结果发现,只要找对路子,这事儿真…

发布时间:2026/9/19 23:04:59
为什么你的网站留不住人?揭秘建设网站会员体系的底层逻辑与实操指南

为什么你的网站留不住人?揭秘建设网站会员体系的底层逻辑与实操指南

很多老板都在问:为什么我的网站流量不少,转化率却惨不忍睹?其实,问题往往出在“留客”上。你花了大价钱买流量,用户进来逛了一圈,连个招呼都没打就走了。这就像开了一家实体店,顾客进门看看,然后转身离开,你连个联系方式都没拿到。这种“一次性买卖”思维,在今天的互…

发布时间:2026/9/19 23:04:57
徐州市丰县建设局网站 咋用才不踩坑?老业主掏心窝子分享

徐州市丰县建设局网站 咋用才不踩坑?老业主掏心窝子分享

昨晚半夜两点,我还在盯着手机屏幕,心里那个急啊。为啥?因为我家那套安置房的事儿,开发商那边一直拖泥带水,说是等公示,可公示啥样我心里没底。没办法,只能硬着头皮去查“徐州市丰县建设局网站”。说实话,第一次上去的时候,我整个人是懵的。界面那叫一个复古,跟咱们老…

发布时间:2026/9/19 21:20:10
龙口网站建设公司哪家好?别踩坑,看这几点就够了

龙口网站建设公司哪家好?别踩坑,看这几点就够了

本文关键词:龙口网站建设公司哪家好做企业官网,最怕啥?怕花了几万块,结果打开慢得像蜗牛,手机端还乱码。更怕的是,搜“龙口某某公司”,首页连个影子都找不着。钱打水漂,还耽误事。很多老板找我聊,开口就问:“龙口网站建设公司哪家好?”这话问得实在。毕竟龙口这地方…

发布时间:2026/9/19 23:04:54
别再被忽悠了!一份真正落地的建筑网站建设方案,专治各种花里胡哨

别再被忽悠了!一份真正落地的建筑网站建设方案,专治各种花里胡哨

说实话,我见过太多建筑公司的官网了。真的,多到让人想吐。要么就是满屏的大图,加载慢得像蜗牛。要么就是文案写得云里雾里,根本不知道你是干啥的。客户点进来三秒钟,啪,关掉了。这就叫浪费生命。今天我不讲那些虚头巴脑的理论。我就想聊聊,到底怎么做一个真正能接活的建…

发布时间:2026/9/19 23:04:54
个人做计算机编程与网站建设到底难不难?老程序员掏心窝子说几句

个人做计算机编程与网站建设到底难不难?老程序员掏心窝子说几句

这篇文章不讲那些虚头巴脑的理论,直接告诉你新手入坑计算机编程与网站建设最真实的坑在哪,以及怎么避开。很多人以为写代码就是对着黑屏幕敲字母,其实那是电影骗人的。真正的难点在于怎么把脑子里的想法变成别人能看懂、能用的网页。如果你正纠结要不要学,或者刚起步觉得头…

发布时间:2026/9/19 23:04:51