CANN/cannbot-skills HIVM内建指令操作

发布时间:2026/10/23 14:32:44

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/10/21 5:37:56

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

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

2026/10/21 2:48:04

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

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

2026/10/22 12:47:01

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

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

2026/10/23 19:21:12

控制台贪吃蛇从能跑到能玩:环形数组、状态机与定点重绘实战

上一篇文章,我们把控制台贪吃蛇最基础的版本跑通了:蛇能动、食物能刷、撞墙能结束。但那个版本距离“一个能玩的游戏”还差得远。如果你真把它拿给朋友试玩,多半会被吐槽三件事:按键卡顿、画面闪烁、蛇稍微一长就找不着头在哪。这…

2026/10/23 19:21:12

Windows PE加载器原理与CTF实战加载技术

1. 这个标题背后藏着一个被严重误解的CTF基础概念“Windows下的CTF加载程序是什么?”——看到这个标题,我第一反应不是去查资料,而是下意识点开任务管理器,切到“详细信息”页签,盯着那一长串进程名看了三秒。为什么&a…

2026/10/23 19:21:12

用Python模拟日地轨道:从圆轨道到开普勒定律的数值计算实践

1. 从“抬头看天”到“动手算天”:这个项目到底在做什么“地球围绕太阳转”这句话,大概每个人在小学阶段就听过。但真正要把这件事从一句常识变成一套能算、能验证、能可视化的东西,中间隔着的可不只是几个公式。我做的这个项目,核…

2026/10/23 19:21:12

MATLAB中CLAHE图像增强:从原理到参数调优与避坑指南

简介:面向图像处理学习者与研究者的限制对比度自适应直方图均衡化(CLAHE)算法MATLAB源码包,主要用于改善医学影像、遥感图像等场景中的局部对比度。代码以函数化方式拆分直方图构建、直方图裁剪、灰度映射与双线性插值等步骤&…

2026/10/23 19:21:12

GitComet 快捷键清单:20 个让 Git 操作效率翻倍的按键

【免费下载链接】GitComet GitComet is fastest open source user interface for GIT workflows 项目地址: https://gitcode.com/gh_mirrors/gi/GitComet 点击查看 免费下载 GitComet 是一款开源的 Git 图形界面工具,主打高性能的提交历史、Diff 对比与…

2026/10/23 19:16:10

深入理解ifft:缩放、共轭与循环移位的底层机制

简介:本资源是一份面向信号处理初学者与MATLAB实践者的逆傅里叶变换(IFFT)核心实现脚本,聚焦于理解频域到时域转换原理及自定义函数开发思路。资源提供一个精简实用的MATLAB函数F2T.m,完整封装了预处理(如零…

2026/10/22 11:29:28

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/23 0:02:26

Verilog实现FPGA密码锁:矩阵键盘与状态机设计实战

说实话,这几年接触了不少想入门FPGA的朋友,如果你问哪个项目能一口气把Verilog的核心基本功串起来,我通常会推荐电子密码锁。这个项目看着不起眼,却把矩阵键盘扫描、按键消抖、状态机设计、动态显示刷新、外设控制这些数字逻辑里的…

2026/10/23 0:02:26

数据服务监控运维实战:从指标体系到告警治理与故障排查

周末凌晨两点,手机震了。第一反应是“数据服务挂了”。打开电脑看了下,果然,某张核心报表的数据产出时间已经超过SLA两小时,下游三个业务方连着发来问询。这种场景,做过大数据运维的人都不会陌生。数据服务的监控与运维…

2026/10/23 0:02:26

FreeRTOS任务通知实战详解:内核原理、API与避坑指南

裸机编程切到RTOS之后,任务之间的通信和同步永远是躲不开的坎。前面聊过队列、信号量、互斥锁、事件组,这次把FreeRTOS任务通知(Task Notification)单独拎出来讲透。原因很简单:任务通知是FreeRTOS里最容易用错、也最容…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑