首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >效率提升::线程组

效率提升::线程组
EN

Stack Overflow用户
提问于 2018-03-23 21:28:25
回答 2查看 32关注 0票数 0

我想要提高我的程序的效率,在这个目的,我试图并行的任务,可以。我使用的是点云,所以我们谈论的是大数据,大约有17000个点。

下面是前面的代码:

代码语言:javascript
运行
复制
void Estimator::extract_relevant_points(std::vector<Point3D>& relevant_points, std::vector<Point3D>& pointcloud, doubleIE cell_min_angle_sensor_rot, doubleIE cell_max_angle_sensor_rot)
    {
    for(int i = 0; i < pointcloud.size(); i++) {
       //Doing my operations ...
    }
}

现在的代码是:

代码语言:javascript
运行
复制
void Estimator::extract_relevant_points_multithread(std::vector<Point3D>& relevant_points, std::vector<Point3D>& pointcloud, doubleIE cell_min_angle_sensor_rot, doubleIE cell_max_angle_sensor_rot)
    {
        std::cout << "pointcloud = " << pointcloud.size ()<< std::endl;

        boost::thread_group group;

        for(int i = 0; i < pointcloud.size(); i++) {
            group.create_thread(boost::bind(&IntervalMapEstimator::extract_relevant_point_in_thread, i,boost::ref(relevant_points), boost::ref(pointcloud), boost::cref(cell_min_angle_sensor_rot), boost::cref(cell_max_angle_sensor_rot)));
        }
        std::cout << "size group before join = " << group.size ()<< std::endl;
        group.join_all();
        std::cout << "size group after join = " << group.size ()<< std::endl;
    }

void Estimator::extract_relevant_point_in_thread(int i, std::vector<Point3D>& relevant_points, std::vector<Point3D>& pointcloud, doubleIE cell_min_angle_sensor_rot, doubleIE cell_max_angle_sensor_rot)
    {
        //Doing my operations
    }

但是新的代码在运行中崩溃了,我不明白为什么。有没有人有主意?另外,我在这个函数上花了一些时间,新版本似乎比第一个版本花了更多的时间……我也不明白为什么..

EN

回答 2

Stack Overflow用户

发布于 2018-03-23 23:53:06

看起来这段代码为每17000个点创建了一个线程。这必然会使您的应用程序崩溃,因为每个线程至少需要2MB堆栈,总共需要34 is堆栈,除非您有更多的RAM。

使用gcc parallel algorithmsIntel TBB parallel algorithmsIntel TBB task scheduler

票数 1
EN

Stack Overflow用户

发布于 2018-03-26 17:43:25

谢谢你的回答。

我想我可以用线程池模式来解决这个问题,你觉得这行得通吗?但是多少线程应该同时运行才能更有效率呢?

我的CPU有8个核心,所以我要猜测一下。

TBB看起来很有趣,但我更喜欢自己做。

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

https://stackoverflow.com/questions/49450758

复制
相关文章

相似问题

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