Skip to content

Commit 37600b0

Browse files
committed
framework: add Omp
1 parent 765b390 commit 37600b0

File tree

3 files changed

+144
-0
lines changed

3 files changed

+144
-0
lines changed

src.cmake

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,8 @@ set(ENGINELIST
188188
${ENGINE_DIR}/framework/CvarSystem.h
189189
${ENGINE_DIR}/framework/LogSystem.cpp
190190
${ENGINE_DIR}/framework/LogSystem.h
191+
${ENGINE_DIR}/framework/Omp.cpp
192+
${ENGINE_DIR}/framework/Omp.h
191193
${ENGINE_DIR}/framework/Resource.cpp
192194
${ENGINE_DIR}/framework/Resource.h
193195
${ENGINE_DIR}/framework/System.cpp

src/engine/framework/Omp.cpp

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
/*
2+
===========================================================================
3+
Daemon BSD Source Code
4+
Copyright (c) 2025, Daemon Developers
5+
All rights reserved.
6+
7+
Redistribution and use in source and binary forms, with or without
8+
modification, are permitted provided that the following conditions are met:
9+
* Redistributions of source code must retain the above copyright
10+
notice, this list of conditions and the following disclaimer.
11+
* Redistributions in binary form must reproduce the above copyright
12+
notice, this list of conditions and the following disclaimer in the
13+
documentation and/or other materials provided with the distribution.
14+
* Neither the name of the Daemon developers nor the
15+
names of its contributors may be used to endorse or promote products
16+
derived from this software without specific prior written permission.
17+
18+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
19+
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21+
DISCLAIMED. IN NO EVENT SHALL DAEMON DEVELOPERS BE LIABLE FOR ANY
22+
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23+
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24+
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
25+
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27+
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28+
===========================================================================
29+
*/
30+
31+
#include <algorithm>
32+
33+
#include "CvarSystem.h"
34+
#include "Omp.h"
35+
36+
#if defined(_OPENMP)
37+
#include "omp.h"
38+
#endif
39+
40+
#if defined(_OPENMP)
41+
static Cvar::Range<Cvar::Cvar<int>> common_ompThreads(
42+
"common.ompThreads", "OpenMP threads", Cvar::NONE, 0, 0, 32 );
43+
#endif
44+
45+
namespace Omp {
46+
#if defined(_OPENMP)
47+
static int ompMaxThreads = 1;
48+
#endif
49+
50+
static int ompThreads = 1;
51+
52+
static void ReadMaxThreads()
53+
{
54+
#if defined(_OPENMP)
55+
ompMaxThreads = omp_get_max_threads();
56+
#endif
57+
}
58+
59+
void SetupThreads()
60+
{
61+
#if defined(_OPENMP)
62+
if ( common_ompThreads.Get() )
63+
{
64+
ompThreads = common_ompThreads.Get();
65+
return;
66+
}
67+
68+
( ompMaxThreads <= 4 )
69+
{
70+
ompThreads = ompMaxThreads;
71+
return
72+
}
73+
74+
if ( ompMaxThreads <= 16 )
75+
{
76+
ompThreads = ompMaxThreads - ( ompMaxThreads / 4 );
77+
return;
78+
}
79+
80+
ompThreads = 16
81+
#endif
82+
}
83+
84+
void Init()
85+
{
86+
ReadMaxThreads();
87+
SetupThreads();
88+
}
89+
90+
void ApplyThreads()
91+
{
92+
#if defined(_OPENMP)
93+
omp_set_num_threads( ompThreads );
94+
#endif
95+
}
96+
97+
int GetThreads()
98+
{
99+
return ompThreads;
100+
}
101+
}

src/engine/framework/Omp.h

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/*
2+
===========================================================================
3+
Daemon BSD Source Code
4+
Copyright (c) 2025, Daemon Developers
5+
All rights reserved.
6+
7+
Redistribution and use in source and binary forms, with or without
8+
modification, are permitted provided that the following conditions are met:
9+
* Redistributions of source code must retain the above copyright
10+
notice, this list of conditions and the following disclaimer.
11+
* Redistributions in binary form must reproduce the above copyright
12+
notice, this list of conditions and the following disclaimer in the
13+
documentation and/or other materials provided with the distribution.
14+
* Neither the name of the Daemon developers nor the
15+
names of its contributors may be used to endorse or promote products
16+
derived from this software without specific prior written permission.
17+
18+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
19+
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21+
DISCLAIMED. IN NO EVENT SHALL DAEMON DEVELOPERS BE LIABLE FOR ANY
22+
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23+
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24+
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
25+
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27+
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28+
===========================================================================
29+
*/
30+
31+
#ifndef COMMON_OMP_H_
32+
#define COMMON_OMP_H_
33+
34+
namespace Omp {
35+
void SetupThreads();
36+
void Init();
37+
void ApplyThreads();
38+
int GetThreads();
39+
};
40+
41+
#endif // COMMON_OMP_H_

0 commit comments

Comments
 (0)