【发布时间】:2018-09-02 04:41:14
【问题描述】:
我想提高我的程序的效率,为此我尝试并行化可能的任务。我正在使用点云,所以我们谈论的是大数据,大约 17000 点。
这是之前的代码:
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 ...
}
}
现在的代码是:
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
}
但是新代码在运行时崩溃了,我不明白为什么。有没有人有想法? 我还放了一点时间来获得花在这个功能上的时间,似乎新版本比第一个版本花费了更多时间……也不明白为什么……
【问题讨论】:
标签: multithreading boost boost-thread point-clouds