aGrUM 2.3.2
a C++ library for (probabilistic) graphical models
threadsOMP_inl.h
Go to the documentation of this file.
1/****************************************************************************
2 * This file is part of the aGrUM/pyAgrum library. *
3 * *
4 * Copyright (c) 2005-2025 by *
5 * - Pierre-Henri WUILLEMIN(_at_LIP6) *
6 * - Christophe GONZALES(_at_AMU) *
7 * *
8 * The aGrUM/pyAgrum library is free software; you can redistribute it *
9 * and/or modify it under the terms of either : *
10 * *
11 * - the GNU Lesser General Public License as published by *
12 * the Free Software Foundation, either version 3 of the License, *
13 * or (at your option) any later version, *
14 * - the MIT license (MIT), *
15 * - or both in dual license, as here. *
16 * *
17 * (see https://agrum.gitlab.io/articles/dual-licenses-lgplv3mit.html) *
18 * *
19 * This aGrUM/pyAgrum library is distributed in the hope that it will be *
20 * useful, but WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, *
21 * INCLUDING BUT NOT LIMITED TO THE WARRANTIES MERCHANTABILITY or FITNESS *
22 * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE *
23 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *
24 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, *
25 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR *
26 * OTHER DEALINGS IN THE SOFTWARE. *
27 * *
28 * See LICENCES for more details. *
29 * *
30 * SPDX-FileCopyrightText: Copyright 2005-2025 *
31 * - Pierre-Henri WUILLEMIN(_at_LIP6) *
32 * - Christophe GONZALES(_at_AMU) *
33 * SPDX-License-Identifier: LGPL-3.0-or-later OR MIT *
34 * *
35 * Contact : info_at_agrum_dot_org *
36 * homepage : http://agrum.gitlab.io *
37 * gitlab : https://gitlab.com/agrumery/agrum *
38 * *
39 ****************************************************************************/
40#pragma once
41
42
48
49// to ease automatic parsers
50#include <agrum/agrum.h>
51
53
54namespace gum {
55
56 namespace threadsOMP {
57
58 INLINE bool hasOMPSupport() {
59#ifdef _OPENMP
60 return true;
61#else
62 return false;
63#endif
64 }
65
66 INLINE unsigned int getMaxNumberOfThreads() {
67#ifdef _OPENMP
68 return omp_get_max_threads();
69#else
70 return 1;
71#endif
72 }
73
74 INLINE unsigned int getNumberOfLogicalProcessors() {
75#ifdef _OPENMP
76 return omp_get_num_procs();
77#else
78 return std::thread::hardware_concurrency();
79#endif
80 }
81
82 INLINE unsigned int getThreadNumber() {
83#ifdef _OPENMP
84 return omp_get_thread_num();
85#else
86 return 0;
87#endif
88 }
89
90 INLINE unsigned int getNumberOfRunningThreads() {
91#ifdef _OPENMP
92 return omp_get_num_threads();
93#else
94 return 1;
95#endif
96 }
97
98 INLINE void setNestedParallelism(bool value) {
99#ifdef _OPENMP
100 omp_set_nested(((value == true) ? 1 : 0));
101#else
103 "openMP was not enabled at compilation (and you "
104 "asked for nested parallelism !)");
105#endif
106 }
107
108 INLINE bool getNestedParallelism() {
109#ifdef _OPENMP
110 return ((omp_get_nested() == 0) ? false : true);
111#else
112 return false;
113#endif
114 }
115
116 INLINE void setDynamicThreadsNumber(bool value) {
117#ifdef _OPENMP
118 omp_set_dynamic(((value == true) ? 1 : 0));
119#else
121 "openMP was not enabled at compilation (and you "
122 "asked for dynamic adjustment of the number of "
123 "threads !)");
124#endif
125 }
126
128#ifdef _OPENMP
129 return ((omp_get_dynamic() == 0) ? false : true);
130#else
131 return false;
132#endif
133 }
134
135 } /* namespace threadsOMP */
136
137} // namespace gum
Exception : operation not allowed.
#define GUM_ERROR(type, msg)
Definition exceptions.h:72
unsigned int getMaxNumberOfThreads()
Returns the maximum number of threads that should be used at any time.
bool getDynamicThreadsNumber()
Get the dynamic thread number adjustment status.
unsigned int getNumberOfRunningThreads()
Get the current number of running threads.
unsigned int getNumberOfLogicalProcessors()
Get the number of logical processors.
void setDynamicThreadsNumber(bool value)
Set the dynamic threads number (false by default).
bool getNestedParallelism()
Get nested parallelism status.
void setNestedParallelism(bool value)
Set nested parallelism (false bu default).
unsigned int getThreadNumber()
Get the calling thread id.
bool hasOMPSupport()
Is OMP active ?
gum is the global namespace for all aGrUM entities
Definition agrum.h:46
Wrappers for OpenMP.