CUDA对cartographer的加速

ceres-solver的CUDA加速版本在ubuntu上的并行加速运算

最近项目需求需要使用cartographer算法建图,打算使用CUDA做并行加速,在优化问题中cartographer主要使用的就是ceres-solver,在最新的版本中ceres-solver已经是能够支持cuda加速,本篇使用ceres-solover 2.1(最新版本已经到了2.2)来实现CUDA加速
ceres-solver官网链接: ceres-solver

依赖

C++17-compliant compiler
CMake 3.16 or later
Eigen 3.3 or later
glog 0.3.5 or later
gflags
SuiteSparse 4.5.6 or later

ceres-solver 2.1 安装

依赖安装

# CMake
sudo apt-get install cmake
# google-glog + gflags
sudo apt-get install libgoogle-glog-dev libgflags-dev
# Use ATLAS for BLAS & LAPACK
sudo apt-get install libatlas-base-dev
# Eigen3
sudo apt-get install libeigen3-dev
# SuiteSparse (optional)
sudo apt-get install libsuitesparse-dev

源码安装

#ceres-solver-2.1.0源码下载
http://ceres-solver.org/ceres-solver-2.1.0.tar.gz
tar zxf ceres-solver-2.2.0.tar.gz
mkdir build
cd build
cmake -D CMAKE_INSTALL_PREFIX=/usr/local/ceres ..
make -j4
make test
# Optionally install Ceres, it can also be exported using CMake which
# allows Ceres to be used without requiring installation, see the documentation
# for the EXPORT_BUILD_DIR option for more information.
make install

运行make test的同时可以通过nvidia-smi查看电脑GPU的使用情况,是可以发现已经使用了GPU加速

测试CUDA加速ceres-solver

CUDA加速版本的ceres-solover主要提供了三种加速优化方式:
DENSE_QR
DENSE_NORMAL_CHOLESKY
DENSE_SCHUR
打开./internal/ceres/dense_cholesky_test.cc测试一下

decltype(auto) MakeValues() {
  return ::testing::Values(EIGEN
#ifndef CERES_NO_LAPACK
                           ,
                           LAPACK
#endif
#ifndef CERES_NO_CUDA
                           ,
                           CUDA
#endif
  );
}

最后运行完后会返回在eigen,Lpack,CUDA三种方式下的运行耗时,但是示例中所给的是小规模运算,所以看到的CUDA耗时会比eigenLPACK要大很多,可以自行加大计算的规模量可以看到速度较为明显的提升,同时可以打开nvidia-smi查看GPU的使用率,使用CUDA加速的话就是在options配置项中加入options.dense_linear_algebra_library_type = CUDA

// 使用cuda
#ifndef CERES_NO_CUDA
  ceres::Solver::Options options;
  options.minimizer_type = ceres::TRUST_REGION;
  options.linear_solver_type = ceres::DENSE_QR;
  options.dense_linear_algebra_library_type = CUDA;//加入这一句即可
  ceres::Solve(options, &problem, &summary);
#endif
// 不使用 cuda
#ifdef CERES_NO_CUDA
  ceres::Solver::Options options;
  options.linear_solver_type = ceres::DENSE_QR;
  options.minimizer_type = ceres::TRUST_REGION;
  ceres::Solve(options, &problem, &summary);
#endif

对carto进行加速

使用cuda加速版本的ceres-solver对carto进行加速,找到源代码中使用ceres优化的部分如local-slam部分的scan_matching等,在ceres的配置项option加上cuda即可,具体的实现方式即效果后续会进行更新。

  • 19
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值