使用PCL处理LIDAR点云数据时,感觉计算效率不太让人满意,在不明就里的情况下想到用GPU来做点云分割、聚类的相关计算。所以自行编译了PCL以支持GPU计算。最后测试的结果不很理想,真实原因还有待探索。
关于GPU计算比CPU还慢
首先说一下GPU计算的结果,我处理的点云大概也就一万来个点,用GPU做聚类居然比CPU还要慢,查了一圈也没真正搞明白背后的原因,看了这个网页上的讨论,貌似这居然是因为我的点数太少,无法显示出GPU计算的优越性,因为时间都浪费在数据向显存中传递的过程了。我只能理解为这是PCL-GPU相关算法本身的问题,如有大神对此有更深的见解请在评论区批评指正。
其实看到这种结果时,我内心是崩溃的:这么大费周章地叕一次重新编译了PCL,结果居然是这样的T_T。也许最新版本的PCL和更高版本的CUDA结合会碰撞出不一样的火花?暂时没时间搞清楚这件事情了,不妨先记在这里,日后有缘再做探讨吧。看到这里如果还想在pcl里支持GPU计算的,希望后面的内容能帮到您。
为什么选择这些版本号
其实关于这点没什么好说的。我写这段就是想提醒大家,能用最新的就用最新的吧,毕竟新版会修正老版中的各种莫名其妙的问题(这个大家后面就可以看到)。
很早以前就安装过CUDA,我的显卡是GeForce 940M,貌似最高也就支持到v9.0了,而且我当然不可能卸载掉它再去尝试更高的版本。Visual Studio也是以前就安装了的,不想装最新的2017,2019什么的,就想着凑合用了。至于PCL1.8.1,一开始下All-in-one installer时看见也就它后面会跟着MSV2015这个后缀。我想这其实是没什么关系的,但保险起见也就用它了。
关于GPU的架构(CUDA版本)
对于NVIDA显卡的架构,我其实是一窍不通的,只是使用CMake时遇到了不少error,貌似根源就在硬件架构(的代别)上,这里统一罗列一下。取这个小标题只是为了省事,显然本文不可能去讨论硬件的问题的。
当然用CMake处理PCL源码时,首先出现的是一些第三方支持的相关目录找不到的问题,类似这种的:
CMake Error at D:/Program Files/CMake/share/cmake-3.15/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
Could NOT find Eigen (missing: EIGEN_INC