From ec688f9d6fd2934486c04e8b450a5ac22f97bfe5 Mon Sep 17 00:00:00 2001 From: Daniel Girardeau-Montaut Date: Tue, 24 May 2022 13:27:06 +0200 Subject: [PATCH] Ability to choose the number of threads (the 'threads' parameter was ignored!) --- Src_CC_wrap/PoissonReconLib.cpp | 15 +++++++++++---- Src_CC_wrap/PoissonReconLib.h | 3 +++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/Src_CC_wrap/PoissonReconLib.cpp b/Src_CC_wrap/PoissonReconLib.cpp index a2486cf..8fb7631 100644 --- a/Src_CC_wrap/PoissonReconLib.cpp +++ b/Src_CC_wrap/PoissonReconLib.cpp @@ -47,13 +47,20 @@ namespace { } } -PoissonReconLib::Parameters::Parameters() +int PoissonReconLib::Parameters::GetMaxThreadCount() { #ifdef WITH_OPENMP - threads = omp_get_num_procs(); + return omp_get_num_procs(); +#else + return std::thread::hardware_concurrency(); #endif } +PoissonReconLib::Parameters::Parameters() + : threads(GetMaxThreadCount()) +{ +} + template class Vertex : public PointData<_Real> { @@ -714,9 +721,9 @@ bool PoissonReconLib::Reconstruct( const Parameters& params, } #ifdef WITH_OPENMP - ThreadPool::Init((ThreadPool::ParallelType)(int)ThreadPool::OPEN_MP, std::thread::hardware_concurrency()); + ThreadPool::Init((ThreadPool::ParallelType)(int)ThreadPool::OPEN_MP, params.threads); #else - ThreadPool::Init((ThreadPool::ParallelType)(int)ThreadPool::THREAD_POOL, std::thread::hardware_concurrency()); + ThreadPool::Init((ThreadPool::ParallelType)(int)ThreadPool::THREAD_POOL, params.threads); #endif PointStream pointStream(inCloud); diff --git a/Src_CC_wrap/PoissonReconLib.h b/Src_CC_wrap/PoissonReconLib.h index 40245c1..e7d67a7 100644 --- a/Src_CC_wrap/PoissonReconLib.h +++ b/Src_CC_wrap/PoissonReconLib.h @@ -31,6 +31,9 @@ public: //! Default initializer Parameters(); + //! Returns the maximum number of threads + static int GetMaxThreadCount(); + //! Boundary types enum BoundaryType { FREE, DIRICHLET, NEUMANN };