发布时间:2026/8/30 3:37:22
CANN/cannbot-skills HIVM内建指令操作 HIVM 内建指令操作【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills关键词IntrinOp, GET.BLOCK.IDX, SET.FLAG.IMM, WAIT.FLAG.IMM, BARRIER, SET.FFTS.BASE.ADDR, SET.CROSS.CORE, INTRA.BLOCK概述HIVM 内建指令操作Intrinsic Operations是 HIVM 方言中最底层的操作直接对应 NPU 硬件指令。这些操作从 HIVMIntrinOps.td 定义继承自LLVM_IntrOpBase在 Lowering 的最终阶段由高层 HIVM 操作转换而来。内建指令操作通常不由用户直接编写而是由编译器 Pass 自动生成。了解这些操作有助于理解 HIVM IR 到硬件指令的映射关系。指令分类1. Block 索引指令指令高层操作说明hivm.GET.BLOCK.IDXhir.get_block_idx获取当前 Block 索引hivm.GET.BLOCK.NUMhir.get_block_num获取 Block 总数hivm.GET.SUBBLOCKIDhir.get_sub_block_idx获取当前 Sub-Block 索引hivm.GET.SUBBLOCKDIMhir.get_sub_block_num获取 Sub-Block 总数2. Pipe 同步指令指令参数说明hivm.SET.FLAG.IMMset_pipe(I64Attr), wait_pipe(I64Attr), event_id(I64Attr)设置 Event Flag立即数模式hivm.WAIT.FLAG.IMMset_pipe(I64Attr), wait_pipe(I64Attr), event_id(I64Attr)等待 Event Flag立即数模式hivm.SET.FLAG.REGset_pipe(I64Attr), wait_pipe(I64Attr), event_id(I64)设置 Event Flag寄存器模式hivm.WAIT.FLAG.REGset_pipe(I64Attr), wait_pipe(I64Attr), event_id(I64)等待 Event Flag寄存器模式hivm.BARRIERpipe(I64Attr)Pipeline 屏障3. FFTS 同步指令指令参数说明hivm.SET.FFTS.BASE.ADDRaddr(I64)设置 FFTS 基地址寄存器hivm.SET.CROSS.COREpipe(I64Attr), config(I64)FFTS 跨核同步指令hivm.WAIT.FLAG.DEV.REGflag_id(I64)FFTS Block/Sub-Block 同步等待寄存器hivm.WAIT.FLAG.DEV.PIPE.IMMpipe(I64Attr), flag_id(I64Attr)FFTS 同步等待Pipe Flag 立即数hivm.WAIT.FLAG.DEV.PIPE.REGpipe(I64Attr), flag_id(I64)FFTS 同步等待Pipe 立即数 Flag 寄存器4. Intra-Block 同步指令指令参数说明hivm.SET.INTRA.BLOCK.modepipe(I64Attr), sync_id(I64)Block 内同步设置寄存器模式hivm.WAIT.INTRA.BLOCK.modepipe(I64Attr), sync_id(I64)Block 内同步等待寄存器模式hivm.SET.INTRA.BLOCKI.modepipe(I64Attr), sync_id(I64Attr)Block 内同步设置立即数模式hivm.WAIT.INTRA.BLOCKI.modepipe(I64Attr), sync_id(I64Attr)Block 内同步等待立即数模式5. 控制指令指令参数说明hivm.SET.MASK.NORM无设置 Mask 为正常模式hivm.GET.CTRL无获取控制寄存器值hivm.SET.CTRLconfig(I64)设置控制寄存器hivm.SBITSET0x(I64), idx(I64)设置状态位为 0hivm.SBITSET1x(I64), idx(I64)设置状态位为 16. 缓存指令指令参数说明hivm.DCCI.DSTptr(LLVMPointer), entire(I64), dst(I64)清除/无效化 GM 数据缓存hivm.DCCI.DST.UBptr(LLVMPointer), entire(I64), dst(I64)清除/无效化 UB 数据缓存指令详细说明SET.FLAG.IMM / WAIT.FLAG.IMM立即数模式的 Pipe 同步指令Event ID 编码在指令中。// 参数 set_pipe: I64Attr -- 发送信号的 Pipe立即数 wait_pipe: I64Attr -- 接收信号的 Pipe立即数 event_id: I64Attr -- Event ID立即数 // 无返回值SET.FLAG.REG / WAIT.FLAG.REG寄存器模式的 Pipe 同步指令Event ID 来自寄存器值。// 参数 set_pipe: I64Attr -- 发送信号的 Pipe立即数 wait_pipe: I64Attr -- 接收信号的 Pipe立即数 event_id: I64 -- Event ID寄存器值 // 无返回值SET.CROSS.COREFFTS 跨核同步指令发送数据包括模式和 Flag ID到 FFTS 目标地址。// 参数 pipe: I64Attr -- Pipe 类型立即数 config: I64 -- 配置值寄存器 // config 编码格式 // config (0x0001 | ((mode 0x0f) 4) | ((flagID 0x0f) 8)) // // mode: // 0: inter block synchronization // 1: inter subblock synchronization // 2: intra block synchronization // // flagID: 8-bit flag ID每个 flag ID 有一个计数器INTRA.BLOCK 同步指令Block 内 Cube Core 和 Vector Core 之间的同步指令。ID 映射规则Mix-Mode Block1 CUBECORE 2 VECCORESET 来源目标ID 映射VECCORE0 ID 0-15CUBECOREID 0-15VECCORE1 ID 0-15CUBECOREID 16-31CUBECORE ID 0-15VECCORE0ID 0-15CUBECORE ID 16-31VECCORE1ID 0-15同步机制每个 sync ID 有一个 4-bit 计数器SET 操作递增对方 Core 对应 ID 的计数器不阻塞当前 PipelineWAIT 操作如果对应 ID 的计数器为 0 则阻塞否则递减计数器高层操作到内建指令的映射高层操作内建指令说明hir.get_block_idxhivm.GET.BLOCK.IDXBlock 索引查询hir.get_block_numhivm.GET.BLOCK.NUMBlock 数量查询hir.set_flag(静态 Event ID)hivm.SET.FLAG.IMM立即数模式同步hir.set_flag(动态 Event ID)hivm.SET.FLAG.REG寄存器模式同步hir.wait_flag(静态 Event ID)hivm.WAIT.FLAG.IMM立即数模式等待hir.wait_flag(动态 Event ID)hivm.WAIT.FLAG.REG寄存器模式等待hir.pipe_barrierhivm.BARRIERPipeline 屏障hir.set_ffts_base_addrhivm.SET.FFTS.BASE.ADDRFFTS 基地址设置hir.sync_block_sethivm.SET.CROSS.CORE/hivm.SET.INTRA.BLOCKI.mode跨核/核内同步hir.sync_block_waithivm.WAIT.FLAG.DEV.REG/hivm.WAIT.INTRA.BLOCKI.mode跨核/核内等待hir.set_mask_normhivm.SET.MASK.NORMMask 模式设置hir.set_ctrlhivm.SET.CTRL控制寄存器设置hir.dccihivm.DCCI.DST/hivm.DCCI.DST.UB缓存操作常见问题Q: 为什么有 IMM 和 REG 两种模式A: IMMImmediate模式将参数编码在指令中适用于编译时已知的常量参数执行效率更高。REGRegister模式从寄存器读取参数适用于运行时计算的动态参数。Q: SET.CROSS.CORE 的 config 如何编码A:config 0x0001 | ((mode 0x0f) 4) | ((flagID 0x0f) 8)其中 mode 为同步模式0跨Block1跨Sub-Block2Block内flagID 为 8-bit Flag ID。Q: INTRA.BLOCK 同步的 ID 映射规则是什么A: 在 Mix-Mode Block 中CUBECORE 有 32 个 ID每个 VECCORE 有 16 个 ID。VECCORE0 的 ID 0-15 映射到 CUBECORE 的 ID 0-15VECCORE1 的 ID 0-15 映射到 CUBECORE 的 ID 16-31反之亦然。相关文档源码参考HIVMIntrinOps.td高层同步操作04-Synchronization/01-pipe-sync.md跨核同步04-Synchronization/02-block-sync.md【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

2026/8/29 20:50:59

DC-DC升压转换系统设计与PIC微控制器实现

1. 高电压DC-DC升压转换系统架构设计在工业控制、医疗设备和新能源领域,高电压DC-DC升压转换是常见的电源需求场景。我们选择TPS61170作为核心升压芯片,配合PIC18F65K40微控制器构建智能调节系统,主要基于以下考量:TPS61170作为德…

2026/8/28 18:38:11

Agent工具注册中心:动态工具发现与参数验证的后端设计

Agent工具注册中心:动态工具发现与参数验证的后端设计 一、背景与问题定义 大模型Agent架构中,工具调用(Tool Use)是实现LLM与外部世界交互的核心机制。随着业务场景扩展,一个Agent系统可能注册数十甚至上百个工具&a…

2026/8/29 19:38:10

从Git提交记录看职业生命周期:传统程序员平均3.2年进入维护瓶颈,AI程序员却呈现指数级成长曲线——附可复用的能力评估矩阵

更多请点击: https://kaifayun.com 第一章:从Git提交记录看职业生命周期的本质差异 Git 提交历史不只是代码演进的快照,它悄然映射出开发者职业阶段的认知模式、责任边界与协作哲学。一个初入职场的工程师常以功能实现为唯一目标&#xff0c…

2026/8/30 3:34:09

订单状态机设计:从状态图到可执行规则,完整落地指南

面试官问“订单状态机怎么设计”时,很多人第一反应是画一张图:待付款变成已付款,已付款变成已发货,已发货变成已签收,再补一两个“取消”分支。图一画出来,面试官往往不会停在这里,而是继续追问…

2026/8/30 3:34:09

订单状态机设计指南:从状态定义到并发控制

先统一回答一个高频面试问题:订单状态机到底该怎么设计?这个问题我在面试候选人和做项目评审时经常遇到。很多人能说出“待支付、已支付、已发货”这几个状态,但一问到“状态如何流转”“超时怎么处理”“并发怎么控制”“历史轨迹怎么记录”…

2026/8/30 3:34:09

REINFORCE算法深度解析:从策略梯度数学推导到RLHF实践

如果准备理解 RLHF,绕不开 REINFORCE。无论是 PPO、GRPO,还是更早的策略梯度实现,底层都源于 REINFORCE 这条数学主线。它解决的问题非常具体:在离散动作空间里,模型输出无法直接对奖励函数求导,怎么通过采…

2026/8/30 3:34:09

嵌入式开发进阶路线:从C语言到Linux的5个月入门指南

最近经常有读者私信问同一个问题:想学嵌入式,但不知道从哪里开始。网上资料越搜越多,今天看一篇 STM32 入门,明天翻一篇 Linux 驱动,后天又收藏一份 FreeRTOS 移植教程,收藏夹越来越满,真正掌握…

2026/8/30 3:34:09

AI应用工程化:人机协作与模型评估的落地方法

AI 时代的人类定位,不是一句职业焦虑,而是一个每天都要做的工程决策。做 AI 应用时,模型负责生成文本、代码、图片和推理结果,人负责定义生成边界、设计协作流程并裁决结果是否可用。这篇文章不讨论抽象的哲学命题,而是…

2026/8/30 3:29:09

Flask+MySQL电商项目源码全解析:从解压到跑通核心代码

简介:Web应用开发中,后端框架与数据库的协作决定了项目的稳定性和可维护性。Flask作为轻量级Python框架,凭借灵活性和高透明度,成为理解Web请求-响应循环的绝佳选择;MySQL则以其关系型存储和事务支持,保障了…

2026/8/30 0:03:35

vSound小提琴数字处理器实操指南:从接线到演出的完整配置

电小提琴或者原声小提琴插电演出,第一个绕不开的坎就是声音难听。原声琴的共鸣和空气感一旦进了拾音器,出来的往往是一坨干瘪、发尖、带着奇怪塑料味的信号。我当初第一次把琴接上乐队调音台,直接被主唱吐槽"你这声音像在锯钢丝"。…

2026/8/30 0:03:35

传感器接口IC如何攻克生物化学传感的微弱信号难题?

1. 从电极到比特流:为什么生物化学传感必须依赖专用接口IC 做生物化学传感的人都有过类似的经历:明明传感器本身性能很好,信号输出却一塌糊涂——噪声大、漂移明显、重复性差,怎么调都达不到预期。很多时候问题并不在传感器&#…

2026/8/30 0:03:35

STM32F411CEU6多通道ADC采集:扫描模式+DMA实现详解

1. 多通道 ADC 的用武之地把“Multichannel ADC”和“STM32F411CEU6”这两个关键字放在一起,其实就是嵌入式开发里最常遇到的一类需求:用一块不算贵的 MCU,同时采集多路模拟信号。STM32F411CEU6 是 48 引脚的 Cortex-M4F 主控,主频…

2026/8/30 0:03:35

vSound小提琴数字处理器实操指南:从接线到演出的完整配置

电小提琴或者原声小提琴插电演出,第一个绕不开的坎就是声音难听。原声琴的共鸣和空气感一旦进了拾音器,出来的往往是一坨干瘪、发尖、带着奇怪塑料味的信号。我当初第一次把琴接上乐队调音台,直接被主唱吐槽"你这声音像在锯钢丝"。…

2026/8/30 0:03:35

传感器接口IC如何攻克生物化学传感的微弱信号难题?

1. 从电极到比特流:为什么生物化学传感必须依赖专用接口IC 做生物化学传感的人都有过类似的经历:明明传感器本身性能很好,信号输出却一塌糊涂——噪声大、漂移明显、重复性差,怎么调都达不到预期。很多时候问题并不在传感器&#…

2026/8/30 0:03:35

STM32F411CEU6多通道ADC采集:扫描模式+DMA实现详解

1. 多通道 ADC 的用武之地把“Multichannel ADC”和“STM32F411CEU6”这两个关键字放在一起,其实就是嵌入式开发里最常遇到的一类需求:用一块不算贵的 MCU,同时采集多路模拟信号。STM32F411CEU6 是 48 引脚的 Cortex-M4F 主控,主频…

2026/8/28 16:16:48

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/28 16:16:50

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/28 11:06:45

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…