在多线程中添加向量

时间:2018-04-05 11:22:14

标签: c++ multithreading optimization design-patterns

我想在某些条件下选择一个点并将所选点放在一个新容器中。

void IntervalMapEstimator::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)
{
    relevant_points.reserve (pointcloud.size ());

#pragma omp parallel for shared (relevant_points, pointcloud, cell_min_angle_sensor_rot, cell_max_angle_sensor_rot) num_threads(5)
        for(int i = 0; i < pointcloud.size(); i++) {
           if( -- condition -- ){
#pragma omp critical(push_in_relevant_points)
                     relevant_points.push_back(pointcloud[i]);                     
            }
        }
}

所以我有一个使用openMp的多线程环境,事情是,每次通过条件选择一个点我必须使用我的关键子句(基本上像std :: lock_guard一样工作)将值推送到related_point容器。因此,使用这个容器就像瓶颈一样。

我正在寻找解决问题的方法并提高效率,您有什么想法吗?

1 个答案:

答案 0 :(得分:0)

好的,这是我的解决方案,它不能很好地工作,在循环的每次迭代中平均只获得几微秒(我的样本大约是15000点)。 因为最后我仍然停止计算以将本地线程的结果添加到我的最终向量。

bool