Skip to content

Commit 4927dc8

Browse files
committed
review
1 parent 7958240 commit 4927dc8

File tree

3 files changed

+15
-19
lines changed

3 files changed

+15
-19
lines changed

cpp/open3d/pipelines/integration/UniformTSDFVolume.cpp

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -260,13 +260,15 @@ 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>>> per_thread_voxels;
264264

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

271273
#ifdef _WIN32
272274
#pragma omp for schedule(static)
@@ -283,17 +285,22 @@ std::shared_ptr<geometry::VoxelGrid> UniformTSDFVolume::ExtractVoxelGrid()
283285
double c = (f + 1.0) * 0.5;
284286
Eigen::Vector3d color(c, c, c);
285287
Eigen::Vector3i index(x, y, z);
286-
per_thread_voxels[thread_id].emplace_back(index, color);
288+
thread_voxels.emplace_back(
289+
std::make_pair(index, geometry::Voxel(index, color)));
287290
}
288291
}
289292
}
290293
}
291294
}
292295

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

299306
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)