Spirula Studio 的 Radix Sort 与 Prefix Scan:跨厂商 GPU 排序原语完全指南

发布时间:2026/9/30 12:38:09

Spirula Studio 的 Radix Sort 与 Prefix Scan:跨厂商 GPU 排序原语完全指南 Spirula Studio 的 Radix Sort 与 Prefix Scan跨厂商 GPU 排序原语完全指南【免费下载链接】spirula-studioCross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA.项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studioSpirula Studio 是一款跨厂商的 3D 高斯泼溅3D Gaussian Splatting训练工具能从视频一路训练到 splat 再到网格同时支持 Vulkan 与 CUDA 两种后端。而让它在 NVIDIA、AMD、Intel、Apple 显卡上跑同一套训练逻辑的关键底座之一就是本文的主角——一套跨厂商的radix sort基数排序与prefix scan前缀扫描排序原语。这篇指南会用尽量通俗的方式讲清楚它们是干什么的、怎么设计的、为什么难。为什么排序原语对 3DGS 训练这么重要3D 高斯泼溅的训练和渲染几乎每一步都绕不开排序和求前缀和原语在 Spirula Studio 中的典型用途sort_pairs键值对排序把每个 tile屏幕小块里的高斯按深度排序再按序做透明度合成inclusive_sum/exclusive_sum前缀和统计 tile 内高斯数量、生成偏移表densify 阶段 MCMC 采样的累积和select_flagged流压缩根据标志位把存活的元素紧凑地拷到一起简单说GPU 上百万级的高斯要高效地按位置、按深度组织起来排序就是最基础的那把锤子。而问题在于——NVIDIA 的 CUDA 生态有成熟的 CUB 库可以直接用但 Vulkan 是跨厂商的开放接口没有现成的设备端排序库可用。一个接口两种实现后端接缝设计Spirula Studio 的做法很优雅在 src/backend/common/SortScan.h 里只声明一套接口然后在两个后端里各写一份实现Engine 训练代码 │ ▼ backend::sort_pairs / inclusive_sum / select_flagged ← 唯一接口 ├─ CUDA 后端 → 薄封装 CUBRadixSort / DeviceScan / DeviceSelect └─ Vulkan 后端 → 自己用 Slang 写的 radix sort 前缀扫描计算核CUDA 实现见 src/backend/cuda/SortScanCuda.cu本质是把 CUB 的调用包一层保证行为与原来完全一致Vulkan 实现见 src/backend/vulkan/SortScanVulkan.cpp主机侧调度和 src/backend/vulkan/shaders/sort_scan.slangGPU 侧计算核。这样一来上层训练代码只需要知道我要排序不需要知道底下是 CUB 还是 Slang——这就是所谓的后端接缝整体架构在 src/backend/README.md 和 docs/backends.md 中有更完整的描述。Radix Sort 三趟法直方图、脊柱扫描、排名散列Vulkan 端的 radix sort 是经典的低位优先LSD三趟流水线每趟处理 8 个比特直方图Histogram把数据切成 2048 个一组的分区每个工作区workgroup统计自己分区里 0~255 每个数字出现多少次脊柱扫描Spine Scan对各分区计数做前缀和算出每个数字的全局起始位置——这一步本身就是 prefix scan两个原语在这里相遇了排名并散列Rank and Scatter每个线程用 subgroup ballot 投票算出自己这个元素在同数字里的稳定排名然后把它写到输出缓冲的正确位置。几个值得新手记住的设计点begin_bit/end_bit参数如果键值的高位全是 0比如只用低位存 tile 编号 深度可以直接跳过不需要的趟数省掉无谓的排序开销64 位键是刻意决策tile 键的结构是(tile_id 32) | depth32 位打包在大型实景数据集上会溢出所以 Vulkan 端专门编译了 64 位键的变体ping-pong 双缓冲排序结果在两块缓冲区之间来回倒腾DoubleBuffer和 CUB 的行为完全对齐上层代码无感知。Prefix Scan 两级扫描块内 全局前缀和实现用的是标准的两级工作区扫描sort_scan.slang 中的scan_blocks/scan_spine/scan_add每个 256 线程的工作区负责 2048 个元素先做块内扫描顺手记下整块的总和再对所有块总和做一次脊柱扫描得到每个块的起始偏移最后把偏移加回块内结果完成全局前缀和。支持的类型包括int32、int64以及一个特别的float版包含式前缀和——它服务于 densify 阶段 MCMC 采样的累积概率计算。文档里也诚实地标注了浮点求和的结合顺序和 CUB 不同跨后端的结果只保证在舍入误差内一致这是数值计算的正常现象。select_flagged流压缩则是前缀和 散列 计数回读的组合拳先对标志位做排他前缀和得到每个存活元素的目标位置再一次性散列过去最后回读一个数告诉调用方选出了多少。跨厂商的隐形深坑这些细节才真正值钱在单一 GPU 上写排序不难难的是在每一家厂商的驱动上都对。Spirula Studio 的 Vulkan 实现处理了不少硬骨头详见 src/backend/vulkan/README.md 的 Sort / scan 一节不假设 subgroup 宽度NVIDIA 是 32 线程一组AMD 是 64Intel 甚至可变。所有 ballot 排名代码用uint4掩码写成宽度无关的形式主机侧还会主动钉住 subgroup 尺寸——Intel 驱动上不定尺寸排序会静默产出错误结果没有 64 位整数特性就自己模拟部分老设备不支持shaderInt64实现里用uint2字对模拟 64 位键与扫描累加器内存布局与原生版本一致同一套入口名通吃共享内存 bank 冲突排序散列阶段的排名暂存区一开始让 32 条 lane 挤在同两个 bank 上转置布局后直接收回了整个分箱阶段 12% 的时间。这些经验大多被写进了官方文档是踩坑记录级别的干货。怎么验证和 CPU 参考实现逐条对答案排序原语的正确性由 src/backend/vulkan/tests/vk_sortscan_test.cpp 把关。它的思路非常朴实——用 CPU 当裁判生成随机键值对用std::stable_sort算出参考顺序逐位比对 GPU 结果顺带验证了稳定性覆盖 32/64 位键、非 8 倍数的比特区间、重复键洪泛、空输入、以及超过 65535 网格折叠上限的超大尺寸等边界扫描与流压缩同样与 CPU 前缀和逐元素比对。测试在 NVIDIA 私有驱动、Mesa ANVIntel 开源驱动、llvmpipe软件渲染上全部跑通且验证层零警告——这正是跨厂商三个字最硬核的注脚 ✅延伸阅读与代码导航想读什么去哪里排序/扫描/压缩的统一接口src/backend/common/SortScan.hCUDA 端CUB 封装实现src/backend/cuda/SortScanCuda.cuVulkan 端主机侧调度src/backend/vulkan/SortScanVulkan.cppVulkan 端 GPU 计算核Slangsrc/backend/vulkan/shaders/sort_scan.slang正确性测试src/backend/vulkan/tests/vk_sortscan_test.cpp后端架构总览docs/backends.md移植风险与性能笔记src/backend/README.md小结Spirula Studio 的 radix sort 与 prefix scan 是一组教科书级的跨厂商 GPU 原语设计范例一套接口、两种实现、CPU 对答案、坑全部写进文档。它把 CUB 在 CUDA 生态中的地位用 Slang 计算核在 Vulkan 生态里重新搭了出来为上层的高斯泼溅训练换上了真正与厂商无关的双腿。如果你想给任何开源 GPU 项目添加跨厂商排序能力这套模式——接口先行、双后端实现、奇偶校验测试——都非常值得直接借鉴 【免费下载链接】spirula-studioCross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA.项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/30 12:38:09

AI工程从零构建:手写管道而非套用MLOps平台

1. 这不是“搭积木”,而是亲手锻造AI系统的完整工程链“AI Engineering from Scratch”——看到这个标题,很多人第一反应是:又要学Python、调PyTorch、跑通一个ResNet?不。它根本不是“从零写模型”,而是从一张白纸开始…

2026/9/30 12:38:09

项目采购管理避坑指南:从自制外购到合同管理实操

1. 为什么项目一做大,采购就变成“背锅侠”以前我在一个小团队做项目的时候,采购这事儿基本就是“谁缺谁买、买完报销”,根本没人把它当回事。后来有一次负责一个跨部门的实施类项目,预算几百万,涉及硬件、软件授权、外…

2026/9/30 12:33:09

ECG心电信号降噪:GAN如何解决噪声与信号形态相似的临床难题

简介:本资源是一篇聚焦心电信号智能降噪的硕士毕业论文,面向生物医学工程、信号处理及人工智能方向的高年级本科生与研究生,解决临床ECG信号易受噪声干扰、传统方法泛化性差与波形失真等核心问题。全文基于深度学习提出两种创新方案&#xff…

2026/9/30 13:18:20

开源版Jev登顶Hugging Face:编程Agent本地部署与Codex接入全指南

最近这两天,开发者群里讨论最多的消息之一,就是“「开源版Jev」登上 Hugging Face 热榜第一”。如果你也在刷 Hugging Face 的 Trending 榜,应该看到了那个模型卡:名字里带着 Jev,定位是面向编程场景的 Agent 类型模型…

2026/9/30 13:18:20

HPE SimpliVity超融合平台选型部署与避坑指南

简介:这份PPT资料面向企业IT架构师、运维工程师及数据中心决策者,系统讲解HPE SimpliVity超融合平台如何应对现代IT环境中的部署效率、灾难恢复与成本控制难题。内容围绕问题识别、平台优势、技术回顾与演示、数据保护、业务敏捷性及成本节省六大模块展开…

2026/9/30 13:18:20

Ubuntu 18.04 apt update 域名解析失败排查与修复指南

简介:这份技术方案文档面向使用 Ubuntu 18.04 的开发者与运维人员,针对执行 sudo apt update 时频繁出现「无法解析域名」报错的问题,提供经过实测验证的排查与修复思路。内容覆盖 cn.archive.ubuntu.com、ppa.launchpad.net、packages.micro…

2026/9/30 13:18:20

从端口扫描到LLM红队:AI大模型赋能安全自动化平台实践

如果你也是一个常年泡在安全运营和开发两边的朋友,大概会有同感:安全工作最累的往往不是漏洞本身,而是“资产盘点靠手点、日志研判靠眼瞪、告警一条接一条”这种重复劳动。前段时间我把AI大模型正式拉进了自己的工具链,搭了一个从…

2026/9/30 13:13:17

深度走读 RocksDB:用 C++ 紧凑编码与指针逆向偏移,破解 LSM 树写放大

在分布式存储与高性能键值存储系统的生产运维中,当业务负载包含特征向量、图片与多媒体元数据、知识库文档切片等较大载荷(单条记录在 4KB~64KB)时,传统 LSM-Tree(Log-Structured Merge-tree)存储引擎常会遭遇写放大(Write Amplification, WA)失控的问题。监控大盘上写…

2026/9/29 11:07:23

东莞市品牌网站建设报价常见报错与解决

东莞品牌网站建设报价单背后:一份保姆级建站教程避坑实录 网站做好了没人访问,这大概是很多老板最头疼的事。花了大几万做的品牌站,上线后流量惨淡,比路边摊还冷清。别急着骂外包公司,很多“东莞品牌网站建设报价”里藏着不少猫腻,比如用模板站冒充定制…

2026/9/29 21:48:03

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/29 7:00:49

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/30 0:01:22

MATLAB+Yalmip+CPLEX实战:综合能源系统优化调度全流程解析

做综合能源系统优化调度这活儿,最痛苦的不是建模本身,而是模型写完之后不知道该怎么求解。看论文里轻飘飘一句“采用Yalmip调用CPLEX求解”,自己上手时却往往卡在环境配置、变量声明、约束写法和求解状态判读上,一耗就是两三天。这…

2026/9/30 0:01:22

I3C比I2C快10倍?RK3576实战:速率、DTS配置与混合总线避坑指南

I3C 比 I2C 快 10 倍?这句话在嵌入式群里传了很久,每次都能吵出一堆截图。前段时间我正好在 RK3576 上调板级 I3C 接口,从控制器寄存器一路摸到 Linux DTS 配置,踩了不少坑,也把这笔速度账彻底算明白了。本文就用 RK35…

2026/9/30 0:01:22

字符串转对象:JSON.parse、new Function与URLSearchParams

“字符串转对象”这几个字,我在技术群里见过的问法至少有十几种:有人拿着一串{a:1,b:2}说 JSON.parse 直接报错,有人要从 URL 里抠出参数,还有人只是想把abc变成能挂属性的东西。js 这门语言里,字符串和对象之间的转换…

2026/9/29 3:53:39

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/29 9:46:12

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/30 10:28:53

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

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

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

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