aGrUM 3.1.1
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-2026 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-2026 *
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
41#pragma once
42
43
49
50// to ease automatic parsers
51#include <agrum/agrum.h>
52
54
55namespace gum {
56
57 namespace threadsOMP {
58
59 INLINE bool hasOMPSupport() {
60#ifdef _OPENMP
61 return true;
62#else
63 return false;
64#endif
65 }
66
67 INLINE unsigned int getMaxNumberOfThreads() {
68#ifdef _OPENMP
69 return omp_get_max_threads();
70#else
71 return 1;
72#endif
73 }
74
75 INLINE unsigned int getNumberOfLogicalProcessors() {
76#ifdef _OPENMP
77 return omp_get_num_procs();
78#else
79 return std::thread::hardware_concurrency();
80#endif
81 }
82
83 INLINE unsigned int getThreadNumber() {
84#ifdef _OPENMP
85 return omp_get_thread_num();
86#else
87 return 0;
88#endif
89 }
90
91 INLINE unsigned int getNumberOfRunningThreads() {
92#ifdef _OPENMP
93 return omp_get_num_threads();
94#else
95 return 1;
96#endif
97 }
98
99 INLINE void setDynamicThreadsNumber(bool value) {
100#ifdef _OPENMP
101 omp_set_dynamic(((value == true) ? 1 : 0));
102#else
104 "openMP was not enabled at compilation (and you "
105 "asked for dynamic adjustment of the number of "
106 "threads !)");
107#endif
108 }
109
111#ifdef _OPENMP
112 return ((omp_get_dynamic() == 0) ? false : true);
113#else
114 return false;
115#endif
116 }
117
118 } /* namespace threadsOMP */
119
120} // namespace gum
Exception : operation not allowed.
#define GUM_ERROR(type, msg)
Definition exceptions.h:76
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).
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.