Line data Source code
1 : // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2 : // SPDX-License-Identifier: Apache-2.0
3 :
4 : #include "omp.hpp"
5 :
6 : #if defined(MFEM_USE_OPENMP)
7 : #include <omp.h>
8 : #endif
9 :
10 : namespace palace::utils
11 : {
12 :
13 66 : void SetNumThreads(int nt)
14 : {
15 : #if defined(MFEM_USE_OPENMP)
16 66 : omp_set_num_threads(nt);
17 : #endif
18 66 : }
19 :
20 0 : int GetMaxThreads()
21 : {
22 : #if defined(MFEM_USE_OPENMP)
23 0 : return omp_get_max_threads();
24 : #else
25 : return 1;
26 : #endif
27 : }
28 :
29 66 : int GetNumActiveThreads()
30 : {
31 : #if defined(MFEM_USE_OPENMP)
32 66 : return omp_get_num_threads();
33 : #else
34 : return 1;
35 : #endif
36 : }
37 :
38 187469 : int GetThreadNum()
39 : {
40 : #if defined(MFEM_USE_OPENMP)
41 187469 : return omp_get_thread_num();
42 : #else
43 : return 0;
44 : #endif
45 : }
46 :
47 0 : int InParallel()
48 : {
49 : #if defined(MFEM_USE_OPENMP)
50 0 : return omp_in_parallel();
51 : #else
52 : return 0;
53 : #endif
54 : }
55 :
56 66 : int ConfigureOmp()
57 : {
58 : #if defined(MFEM_USE_OPENMP)
59 : int nt;
60 66 : const char *env = std::getenv("OMP_NUM_THREADS");
61 66 : if (env)
62 : {
63 66 : std::sscanf(env, "%d", &nt);
64 : }
65 : else
66 : {
67 0 : nt = 1;
68 : }
69 66 : utils::SetNumThreads(nt);
70 66 : return nt;
71 : #else
72 : return 0;
73 : #endif
74 : }
75 :
76 : } // namespace palace::utils
|