基于多GPU的BA算法,有三个创新点:
- 对于整个BA流程进行了矢量化(Vectorised),使其满足并行化计算的需求。
- 在多个线程之间进行了合理的工作量分配,同时保证了优化结果的最优性。
- API和主流的优化库g2o和ceres兼容。
基于SIMD优化的矢量化BA
将BA流程特别是PCG的过程都通过SIMD进行优化。
分布式BA
基于边的工作分配
根据边的数量还将雅可比矩阵分为若干块 J = [ J 1 J 2 … J 3 ] T J=[J_1 J_2 \dots J_3]^T J=[J1J2…J3]T,在后续的海森矩阵计算和舒尔补中也体现了这一点。
多线程同步
在矩阵计算和PCG过程中保持同步。
其他优化
GPU显存优化
估计后续矩阵微分需要的显存,避免频繁的显存分配。
在多个GPU线程中共享对于雅可比矩阵等变量的存储。
兼容和可拓展的API
在BA问题的声明和BA求解器的选择上,兼容现有优化库。