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

CANN Triton排序选择算子优化

Sort/Select 算子优化【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills适用于需要迭代选择元素的算子NMS、TopK、ArgSort 等核心约束Triton Ascend 不支持break/continue/return和 Pythonif分支必须用tl.where mask 实现条件逻辑。禁止语法替代方案说明if cond:tl.where(cond, a, b)所有条件必须用 SIMD 友好的方式表达break/continue用循环变量 mask 控制循环次数固定用 mask 跳过无效迭代return无法提前返回所有路径必须执行到函数末尾标量条件赋值x y if condx tl.where(cond, y, x)标量变量更新必须用tl.where1.2 迭代选择的标准模式对于需要每次从剩余元素中选一个最优的算法如NMS标准模式是# 模式selection-sort 风格的迭代选择 for step in range(max_select): # 1. 线性扫描找最优候选 best_idx -1 best_score threshold for i in range(n_elements): score tl.load(scores_ptr i) higher (score best_score) active best_idx tl.where(higher, i, best_idx) best_score tl.where(higher, score, best_score) # 2. 检查是否找到有效候选 found (best_idx ! -1) active # 3. 记录结果仅当 found 时 tl.store(output_ptr count, best_idx.to(tl.int32), maskfound) count tl.where(found, count 1, count) # 4. 标记已选通过修改内存状态 tl.store(scores_ptr best_idx, sentinel_value, maskfound) # 5. 根据选中元素更新其他元素状态算子特定逻辑 # ... 例如 NMS 中计算 IoU 并抑制重叠 box关键原则用内存值如将 score 设为哨兵值表示已选/已抑制状态而非标量 flag用tl.where做所有条件选择不用 Pythonif用mask参数控制tl.load/tl.store的执行2. 算子特定实现2.1 NMS (Non-Maximum Suppression)算法语义验证框架对比的是 PyTorch 参考实现如30_NMS.py其语义通常包含先过滤只保留满足门槛条件的元素如score scores_threshold再降序排序参考实现通常用torch.argsort(..., descendingTrue, stableTrue)确定顺序迭代选择按排序后的顺序遍历若当前元素未被抑制则选中依赖抑制选中后根据算子特定规则抑制其他元素如 NMS 的 IoU 阈值数量限制最多输出max_output_size个达到即停止输出格式输出张量前num_selected个有效其余为 0 或哨兵值关键降序关系来自参考实现的排序步骤。Triton kernel 中没有显式排序而是通过迭代选择最高分来隐式复现降序语义。参考实现triton.jit def select_kernel( values_ptr, # 用于比较的值 selected_indices_ptr, # 输出选中的原始索引 num_selected_ptr, # 输出实际选中数量 n_elements, max_output_size: tl.constexpr, threshold: tl.constexpr, ): pid tl.program_id(0) active (pid 0) selected_count 0 for step in range(max_output_size): # 1. 线性扫描找最优候选 best_idx -1 best_val threshold for i in range(n_elements): val tl.load(values_ptr i) better (val best_val) active best_idx tl.where(better, i, best_idx) best_val tl.where(better, val, best_val) # 2. 检查是否找到有效候选 found (best_idx ! -1) active # 3. 记录结果 tl.store(selected_indices_ptr selected_count, best_idx.to(tl.int32), maskfound) selected_count tl.where(found, selected_count 1, selected_count) # 4. 标记已选防止重复 tl.store(values_ptr best_idx, sentinel_value, maskfound) # 5. 算子特定逻辑根据选中元素更新其他元素状态 # - NMS读取选中元素的数据计算与其他元素的关系如 IoU # 将满足条件的其他元素标记为已选/已抑制 # - TopK无需此步骤 # - 其他算子根据业务规则更新其他元素的值或标记 tl.store(num_selected_ptr, selected_count, maskactive)关键点:grid(1,)单核执行顺序依赖算法天然难以并行best_idx -1初始值配合found (best_idx ! -1)判断是否找到有效元素maskfound保护所有依赖best_idx的 load/store避免 -1 越界写入顺序自然为降序与参考实现argsort(descendingTrue)语义一致算子特定扩展NMS在通用模式阶段5加入读取选中 box 坐标计算与其他 box 的 IoU将 IoU threshold 的 box 的 score 设为哨兵值抑制。关键点:scores_f32 scores.float().contiguous()保证连续内存访问输出前num_selected个为原始索引按 score 降序其余为 0TopK无抑制逻辑阶段5为空。将哨兵值设为-float(inf)。常见错误# 错误Python if 分支 if score best_score: best_idx i # 正确tl.where best_idx tl.where(score best_score, i, best_idx)# 错误标量 flag 累积 keep True for j in range(n): if iou threshold: keep False # 正确通过内存状态传递 tl.store(scores_ptr j, -1.0, masksuppress)# 错误先收集所有保留元素再截断破坏降序 # 正确每次迭代只选一个天然满足降序和数量限制【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关文章:

CANN Triton排序选择算子优化

Sort/Select 算子优化 【免费下载链接】cannbot-skills CANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体,本仓库为其提供可复用的 Skills 模块。 项目地址: https://gitcode.com/cann/cannbot-skills 适用于需要迭代选择元素的算子:NMS、…...

Tunasync镜像同步工具:清华大学TUNA团队的高效解决方案

Tunasync镜像同步工具:清华大学TUNA团队的高效解决方案 【免费下载链接】tunasync Mirror job management tool. 项目地址: https://gitcode.com/gh_mirrors/tu/tunasync Tunasync是清华大学TUNA团队开发的一款专业镜像同步管理工具,为开源社区提…...

从Wi-Fi信号到降噪耳机:聊聊‘相位’在工程师日常调试中的那些事儿

从Wi-Fi信号到降噪耳机:聊聊‘相位’在工程师日常调试中的那些事儿 调试设备时突然出现的信号干扰,或是降噪耳机里挥之不去的底噪,往往让工程师们头疼不已。这些看似无关的问题背后,其实都藏着一个共同的关键因素——相位。不同于…...

瑞芯微RK3588核心板规格书,详细参数配置,定位ARM高端AIOT智能模组,板对板连接器320Pin 间距0.5 B to B连接器

触觉智能研发的瑞芯微RK3588核心板,板对板连接器320Pin 间距0.5 B to B连接器,型号简写SOM3588-V1,在CSDN平台留下规格书方便大家查看。1. 产品概述1.1 IDO-SOM3588-V1适用范围IDO-SOM3588-V1核心板适用于工业主机,边缘计算网关、…...

ArcSWAT模型结果可视化:用MATLAB一键绘制专业级降水-径流过程图(附完整代码)

ArcSWAT模型结果可视化:用MATLAB一键绘制专业级降水-径流过程图(附完整代码) 水文模型的后处理环节往往决定着研究成果的呈现质量。当我们在ArcSWAT中完成复杂的流域划分、参数率定和径流模拟后,如何将海量的数据输出转化为直观、…...

WebShell-Bypass-Guide字符串处理函数免杀技巧详解

WebShell-Bypass-Guide字符串处理函数免杀技巧详解 【免费下载链接】WebShell-Bypass-Guide 从零学习Webshell免杀手册 项目地址: https://gitcode.com/gh_mirrors/we/WebShell-Bypass-Guide WebShell免杀技术是网络安全领域的重要技能,而字符串处理函数是构…...

uniCloud云函数实战:从‘Hello World’到连接数据库的完整数据流指南

uniCloud云函数实战:从‘Hello World’到连接数据库的完整数据流指南 在当今快速迭代的互联网开发领域,后端服务的轻量化与敏捷部署已成为开发者关注的焦点。uniCloud作为一款面向全栈开发的云服务平台,其云函数功能让前端开发者也能轻松处理…...

COMTool图表插件使用教程:实时数据可视化与曲线绘制完整指南

COMTool图表插件使用教程:实时数据可视化与曲线绘制完整指南 【免费下载链接】COMTool Cross platform communicate assistant(Serial/network/terminal tool)( 跨平台 串口调试助手 网络调试助手 终端工具 linux windows mac Raspberry Pi )…...

2026,AI Agent 真的开始上班了——从 MCP 协议到生产部署,一份踩坑实录

爆款标题备选2026 年,我司来了一个 AI 同事——Agent 落地实录MCP 协议 LangChain Dify:把 AI Agent 塞进生产环境的正确姿势BBC 报道了三个中国人的 AI 恐惧,但我想说点不一样的AI Agent 从 Demo 到生产,中间隔着一个 MCP 协议…...

DocLayout-YOLO实战案例:从学术论文到财务报表的布局分析

DocLayout-YOLO实战案例:从学术论文到财务报表的布局分析 【免费下载链接】DocLayout-YOLO DocLayout-YOLO: Enhancing Document Layout Analysis through Diverse Synthetic Data and Global-to-Local Adaptive Perception 项目地址: https://gitcode.com/gh_mir…...

BetterDiscord Installer完全指南:如何一键安装和优化Discord插件

BetterDiscord Installer完全指南:如何一键安装和优化Discord插件 【免费下载链接】Installer A simple standalone program which automates the installation, removal and maintenance of BetterDiscord. 项目地址: https://gitcode.com/gh_mirrors/ins/Instal…...

从靶场到实战:用Vulhub在Docker里一键复现Struts2全系列漏洞(S2-001到S2-053)

从靶场到实战:用Vulhub在Docker里一键复现Struts2全系列漏洞 在安全研究领域,能够快速搭建可复现的漏洞环境是每个从业者的基本功。传统方式需要手动配置Java环境、下载特定版本的Struts2框架、部署Web服务器,整个过程耗时费力且容易出错。而…...

DeepFace实战:用5行代码快速搭建一个本地人脸搜索系统(附完整代码)

DeepFace实战:5行代码构建本地人脸搜索系统的工程化实践 人脸识别技术早已不再是实验室里的黑科技,而是能够快速落地的实用工具。今天我们将用Python生态中最轻量级的DeepFace库,从工程化角度构建一个真正可用的人脸搜索系统。不同于简单的AP…...

嵌入式核心板选型指南:从单核到四核的精准配置与实战优化

1. 项目概述:从“固定套餐”到“自助餐”的嵌入式核心板选型变革最近在规划一个工业HMI项目,主控选型时又翻开了飞凌嵌入式的产品手册。看到AM62x系列核心板配置新增了单核、双核、四核的选项,第一反应是:这路子对了。在嵌入式开发…...

从场景到代码:如何用研华Navigator为PCIE1751规划数据采集方案(AI/AO/DI/DO全解析)

从场景到代码:如何用研华Navigator为PCIE1751规划数据采集方案(AI/AO/DI/DO全解析) 在工业自动化领域,数据采集系统的设计往往面临一个核心矛盾:硬件性能的丰富性与实际需求的精准匹配。研华PCIE-1751作为一款多功能数…...

革命性AI emojis:一键生成个性化Slack表情的完整指南

革命性AI emojis:一键生成个性化Slack表情的完整指南 【免费下载链接】emojis Turn your ideas into emojis in seconds. Generate your favorite Slack emojis with just one click. 项目地址: https://gitcode.com/gh_mirrors/em/emojis GitHub加速计划的e…...

不只是YOLOv5!详解Windows‘页面文件太小’错误的通用解决思路与内存优化技巧

不只是YOLOv5!详解Windows‘页面文件太小’错误的通用解决思路与内存优化技巧 当你在深夜赶工一个重要的机器学习项目,或是渲染一段4K视频时,突然弹出一个冰冷的错误提示:"页面文件太小,无法完成操作"。这一…...

基于Sakura实验板的STM32流水灯项目实战:从GPIO控制到模式切换

1. 项目概述:从零到一,点亮你的第一串“流水”如果你刚拿到一块单片机开发板,面对一堆引脚和代码感到无从下手,那么“流水灯”几乎就是所有嵌入式开发者的“Hello World”。它简单、直观,却能让你快速理解GPIO&#xf…...

如何在5分钟内解锁所有Steam成就:Steam Achievement Manager完整使用指南

如何在5分钟内解锁所有Steam成就:Steam Achievement Manager完整使用指南 【免费下载链接】SteamAchievementManager A manager for game achievements in Steam. 项目地址: https://gitcode.com/gh_mirrors/st/SteamAchievementManager 还在为Steam游戏中那…...

基于RK3568的智能家居控制器:硬件选型、架构设计与软件实现全解析

1. 项目概述:为什么选择RK3568作为智能家居控制器的“大脑”?在智能家居这个赛道里摸爬滚打了十来年,我经手过不少方案,从早期的单片机到后来的ARM Cortex-A系列,再到如今百花齐放的各类SoC。每次做产品选型&#xff0…...

3分钟掌握UnityPackage Extractor:无需Unity轻松提取资源包

3分钟掌握UnityPackage Extractor:无需Unity轻松提取资源包 【免费下载链接】unitypackage_extractor Extract a .unitypackage, with or without Python 项目地址: https://gitcode.com/gh_mirrors/un/unitypackage_extractor 你是否曾因需要查看Unity资源包…...

MODBUS调试助手开发全解析:从协议原理到实战避坑指南

1. 项目概述与核心价值在工业自动化、楼宇自控、能源监控这些领域里混迹了十几年,我打交道最多的通讯协议,除了各种现场总线,就是MODBUS了。无论是RS-232、RS-485串口,还是后来普及的TCP/IP网络,MODBUS协议以其简单、开…...

告别臃肿PDF!用Ghostscript命令行批量压缩/拆分/合并的保姆级教程

Ghostscript实战指南:PDF批量处理的高效命令行艺术 每次面对动辄上百兆的扫描版PDF报告时,你是否也经历过邮箱附件发送失败、云盘上传卡在99%的崩溃瞬间?当领导临时要求合并二十份季度报表,或是学术期刊需要按章节拆分投稿时&…...

我的MIPS五段流水CPU踩坑实录:从Load-Use Hazard到数据前递的完整调试过程

我的MIPS五段流水CPU踩坑实录:从Load-Use Hazard到数据前递的完整调试过程 1. 当流水线遇上数据冒险:一个FPGA初学者的崩溃瞬间 那是一个凌晨三点,我的Verilog仿真波形图上突然出现了一个诡异的数值——寄存器R9被意外写入了0。作为计算机体系…...

模电数电不再怕:用甘晴void的三本笔记法,搞定HNU电路与电子学课堂测验与作业

模电数电不再怕:用甘晴void的三本笔记法,搞定HNU电路与电子学课堂测验与作业 电路与电子学这门课,对很多计算机专业的学生来说就像一座难以逾越的高山。模电的抽象概念、数电的逻辑设计,加上频繁的课堂测验和课后作业,…...

LangGraph 是什么?为什么它越来越像 AI Agent 时代的“操作系统”

文章目录一、为什么普通的“聊天式 AI”不够用了?1. 状态容易丢2. 流程难控制3. 执行失败后很难恢复4. 决策过程不透明二、LangGraph 到底是什么?1. 编排2. 运行时三、为什么很多人会说:LangGraph 像 Agent Server 的“操作系统”&#xff1f…...

专业解密QQ音乐加密格式:QMCDecode让音乐文件重获自由播放权

专业解密QQ音乐加密格式:QMCDecode让音乐文件重获自由播放权 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac,qmc0,qmc3转mp3, mflac,mflac0等转flac),仅支持macOS,可自动识别到QQ音乐下载目录&#xff0c…...

3步打造高效macOS菜单栏:Hidden Bar深度使用指南

3步打造高效macOS菜单栏:Hidden Bar深度使用指南 【免费下载链接】hidden An ultra-light MacOS utility that helps hide menu bar icons 项目地址: https://gitcode.com/gh_mirrors/hi/hidden 作为macOS用户,你是否曾为菜单栏图标拥挤不堪而烦恼…...

单片机编程规范1 ---阮丁远 20260509

单片机编程规范1 ---阮丁远 20260509 :1.只用静态数组is被占用的标志位来 分配内存,不用malloc2.读写带下标的参数前先验证下标大小范围是否对,比如有的下标只能1开始,因为0的话里面 0-1 就变为负数了3.可以建立 参数 范围 监控…...

【权威实测】Perplexity vs PubMed vs Scite:在结构生物学领域,它为何将文献召回率提升68%?

更多请点击: https://codechina.net 第一章:Perplexity生物知识搜索 Perplexity 是一款以实时网络检索与引用溯源为核心能力的 AI 搜索工具,其在生命科学领域的应用正迅速拓展。不同于传统大模型依赖静态训练数据,Perplexity 在执…...