我想在某些条件下选择一个点并将所选点放在一个新容器中。
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容器。因此,使用这个容器就像瓶颈一样。
我正在寻找解决问题的方法并提高效率,您有什么想法吗?
答案 0 :(得分:0)
好的,这是我的解决方案,它不能很好地工作,在循环的每次迭代中平均只获得几微秒(我的样本大约是15000点)。 因为最后我仍然停止计算以将本地线程的结果添加到我的最终向量。
bool