各位好,
我正在研究将 Photo-SLAM(基于3D高斯溅射的实时SLAM系统)适配到 RDK S100 平台,遇到了一些架构层面的疑问,希望能和社区一起探讨。
核心矛盾:S100 没有 NVIDIA GPU,Photo-SLAM 严重依赖 CUDA
RDK S100 的硬件架构是 CPU (6×A78AE) + BPU Nash (80 TOPS) + MCU (4×R52+) + Mali-G78AE (仅 100 GFLOPS)。这意味着:
| 问题 | 详情 |
|---|---|
| 无 CUDA 设备 | Mali-G78AE 是移动端 GPU,不支持 CUDA |
| BPU 不等于通用 NPU | BPU Nash 专为 CNN/Transformer 推理优化,支持 160+ ONNX 算子,但不是通用 GPU 计算单元 |
| 光栅化管线完全无法运行 | Photo-SLAM 的核心——可微高斯光栅化(tile-based α-blending + 基数排序 + 前缀和)是纯 CUDA kernel,无法在 Mali GPU 或 BPU 上直接执行 |
| PyTorch CUDA 扩展失效 | 整个 src/rasterize_points.cu 的 ATen 绑定依赖 CUDA |
所以这不是"简单移植几个算子"的问题,而是 整套渲染管线需要重写。
一、项目简介
Photo-SLAM 是一个融合 ORB-SLAM3 前端与 3D Gaussian Splatting 后端的照片级真实感 SLAM 系统,GitHub: HuajianUP/Photo-SLAM。
其计算负载主要分为两部分:
| 模块 | 计算特征 | 当前实现 |
|---|---|---|
| ORB-SLAM3 前端 | 特征提取、特征匹配、BA优化 | 纯 CPU,可移植 |
| 3DGS 渲染与训练 | 高斯光栅化、α-blending、协方差计算、SH→RGB、基数排序 | 纯 CUDA,不可移植 |
二、S100 平台适配的关键问题
我梳理了 3DGS 管线中 5 类 CUDA 计算任务在 S100 上的迁移可行性:
1. 高斯光栅化核心(前向渲染 + 反向传播)
- 含 tile-based α-blending、
cub::DeviceRadixSort、cub::DeviceScan::InclusiveSum - 这是最大的计算瓶颈,也是最难迁移的部分
问题:S100 的 Mali-G78AE GPU 能否通过 OpenCL/Vulkan Compute 实现等价的 tile-based 渲染?BPU 是否支持自定义算子注册来实现 α-blending 这类非标准算子?
2. 预处理算子(3D协方差计算 + SH→RGB 颜色转换)
- 本质是逐高斯的矩阵运算,计算模式为 3×3 矩阵乘法和多项式求值
- 理论上可以转为 ONNX 算子组合在 BPU 上推理
问题:S100 的 BPU 工具链是否支持将自定义的逐元素矩阵运算(如3×3协方差计算)编译为 BPU 算子?160+ ONNX 算子中是否覆盖了 MatMul、ReduceSum、Where 等基础算子?
3. 点云操作与深度反投影
- 纯 4×4 矩阵变换和逐元素乘加
- 迁移难度低,CPU 即可完成
这部分预计无障碍
4. KNN(Morton码排序 + 桶式最近邻搜索)
- 依赖 CUB 的基数排序和 Thrust
问题:S100 是否提供高性能排序库?BPU 或 CPU 上的排序性能如何?
5. PyTorch CUDA 扩展层
- 当前通过 ATen C++ API 绑定 CUDA kernel
问题:S100 是否支持 PyTorch 的运行?如果支持,是否有对应的后端(如 ARM PyTorch + OpenCL 后端)?还是需要切换到 ONNX Runtime / ncnn 等推理框架?
三、我目前的思路
初步考虑两种技术路线:
路线A:CPU + BPU 异构
- ORB-SLAM3 前端在 CPU 上运行(A78AE 性能足够)
- 3DGS 预处理算子(协方差、SH)转为 ONNX 模型在 BPU 上推理
- 光栅化渲染在 CPU 上用多线程实现(性能会是瓶颈)
- 放弃训练,只做推理渲染
路线B:Mali GPU OpenCL + BPU 混合
- 预处理在 BPU 上
- 光栅化通过 OpenCL/Vulkan Compute 在 Mali-G78AE 上实现
- 需要将整个 CUDA 光栅化管线重写为 OpenCL
想请教社区:
- Mali-G78AE 在 S100 上的 OpenCL/Vulkan Compute 支持情况如何?有无开发文档和示例?
- BPU 自定义算子的开发流程是什么?是否有教程?限制有哪些?
- S100 上是否有 PyTorch 的适配方案?或者推荐用什么推理框架替代?
- 是否有在 S100 上跑过类似的 SLAM + 神经渲染系统的先例?
四、环境信息
- 目标平台:RDK S100 (80 TOPS, 12GB)
- 源项目:Photo-SLAM (CUDA 11.8+, PyTorch 2.0+)
- 我的开发背景:有 SLAM 和 3DGS 基础,但对 BPU 工具链不熟悉
感谢任何建议和指引!![]()