Skip to content

Commit 1753862

Browse files
committed
review
1 parent 7958240 commit 1753862

File tree

3 files changed

+16
-19
lines changed

3 files changed

+16
-19
lines changed

cpp/open3d/pipelines/integration/UniformTSDFVolume.cpp

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -260,13 +260,16 @@ std::shared_ptr<geometry::VoxelGrid> UniformTSDFVolume::ExtractVoxelGrid()
260260
// Create a vector to hold voxels for each thread in the parallel region,
261261
// since access to voxel_grid->voxels_ (std::unordered_map) is not
262262
// thread-safe.
263-
std::vector<std::vector<geometry::Voxel>> per_thread_voxels;
263+
std::vector<std::vector<std::pair<Eigen::Vector3i, geometry::Voxel>>>
264+
per_thread_voxels;
264265

265-
#pragma omp parallel num_threads(utility::EstimateMaxThreads())
266+
int num_threads = utility::EstimateMaxThreads();
267+
268+
#pragma omp parallel num_threads(num_threads)
266269
{
267270
#pragma omp single
268-
{ per_thread_voxels.resize(utility::GetNumThreads()); }
269-
int thread_id = utility::GetThreadNum();
271+
{ per_thread_voxels.resize(num_threads); }
272+
auto &thread_voxels = per_thread_voxels[utility::GetThreadNum()];
270273

271274
#ifdef _WIN32
272275
#pragma omp for schedule(static)
@@ -283,17 +286,22 @@ std::shared_ptr<geometry::VoxelGrid> UniformTSDFVolume::ExtractVoxelGrid()
283286
double c = (f + 1.0) * 0.5;
284287
Eigen::Vector3d color(c, c, c);
285288
Eigen::Vector3i index(x, y, z);
286-
per_thread_voxels[thread_id].emplace_back(index, color);
289+
thread_voxels.emplace_back(std::make_pair(
290+
index, geometry::Voxel(index, color)));
287291
}
288292
}
289293
}
290294
}
291295
}
292296

297+
size_t total_voxels = 0;
293298
for (const auto &thread_vector : per_thread_voxels) {
294-
for (const auto &voxel : thread_vector) {
295-
voxel_grid->voxels_[voxel.grid_index_] = voxel;
296-
}
299+
total_voxels += thread_vector.size();
300+
}
301+
voxel_grid->voxels_.reserve(total_voxels);
302+
303+
for (const auto &thread_vector : per_thread_voxels) {
304+
voxel_grid->voxels_.insert(thread_vector.begin(), thread_vector.end());
297305
}
298306

299307
return voxel_grid;

cpp/open3d/utility/Parallel.cpp

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -45,14 +45,6 @@ int EstimateMaxThreads() {
4545
#endif
4646
}
4747

48-
int GetNumThreads() {
49-
#ifdef _OPENMP
50-
return omp_get_num_threads();
51-
#else
52-
return 1; // No parallelism available.
53-
#endif
54-
}
55-
5648
int GetThreadNum() {
5749
#ifdef _OPENMP
5850
return omp_get_thread_num();

cpp/open3d/utility/Parallel.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,6 @@ namespace utility {
1313
/// Estimate the maximum number of threads to be used in a parallel region.
1414
int EstimateMaxThreads();
1515

16-
/// Returns the number of threads in the current parallel region.
17-
int GetNumThreads();
18-
1916
/// Returns the thread ID in the current parallel region.
2017
int GetThreadNum();
2118

0 commit comments

Comments
 (0)