首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的pcl cuda代码在CPU而不是GPU上运行?

为什么我的pcl cuda代码在CPU而不是GPU上运行?
EN

Stack Overflow用户
提问于 2019-02-15 16:14:01
回答 1查看 1.8K关注 0票数 0

我有一段使用pcl/gpu命名空间的代码:

代码语言:javascript
复制
pcl::gpu::Octree::PointCloud clusterCloud;
clusterCloud.upload(cloud_filtered->points);

pcl::gpu::Octree::Ptr octree_device (new pcl::gpu::Octree);
octree_device->setCloud(clusterCloud);
octree_device->build();

/*tree->setCloud (clusterCloud);*/

// Create the cluster extractor object for the planar model and set all the parameters
std::vector<pcl::PointIndices> cluster_indices;
pcl::gpu::EuclideanClusterExtraction ec;
ec.setClusterTolerance (0.1);
ec.setMinClusterSize (2000);
ec.setMaxClusterSize (250000);
ec.setSearchMethod (octree_device);
ec.setHostCloud (cloud_filtered);

ec.extract (cluster_indices);

我已经安装了CUDA,并包含了执行此操作所需的pcl/gpu“.hpp”。它会编译(我有一个带有ROS的猫工作区),当我运行它时,它的运行速度真的很慢。我使用的是nvidia-smi,我的代码只在CPU中运行,我不知道为什么以及如何解决它。

下面的代码是gpu/分段示例的实现:pcl/seg.cpp

EN

回答 1

Stack Overflow用户

发布于 2019-02-15 18:36:15

(这是一个答案,因为它太长了,无法发表评论。)

我不知道pcl,但可能是因为您传递的是主机端的std::vector,而不是设备端的数据。

..。你会问什么是“主机端”和“设备端”?什么是std

std只是C++标准库使用的一个namespacestd::vector是C++标准库中的一个(模板化)类,它为放入其中的元素动态分配内存。

问题是,std::vector使用的内存是您的主系统内存,与图形处理器没有任何关系。但很可能你的PCL库需要你传递GPU内存中的数据--这不可能是std::vector中的数据。您需要分配设备端内存并将数据从主机端内存复制到设备端内存。

另请参阅:

Why we do not have access to device memory on host side?

并咨询CUDA programming guide,了解如何执行分配和复制(至少,如何在可能的最低级别执行;您的"pcl“可能有自己的工具。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54705053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档