Skip to content

Commit 22b13ee

Browse files
committed
[software] Simplify omp dynamic schedule
1 parent 36c060e commit 22b13ee

1 file changed

Lines changed: 14 additions & 22 deletions

File tree

software/runtime/kmp/team.hpp

Lines changed: 14 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
#include <array>
1313
#include <mutex>
1414
#include <optional>
15-
#include <variant>
1615

1716
namespace kmp {
1817

@@ -22,16 +21,12 @@ class Barrier;
2221

2322
class Team {
2423

25-
template <typename T, typename SignedT = typename std::make_signed<T>::type,
26-
typename UnsignedT = typename std::make_unsigned<T>::type>
2724
struct DynamicSchedule {
28-
DynamicSchedule() {}
29-
30-
T lowerNext = 0;
31-
T upper = 0;
32-
SignedT chunk = 0;
33-
SignedT incr = 0;
34-
SignedT stride = 0;
25+
kmp_uint32 lowerNext = 0;
26+
kmp_uint32 upper = 0;
27+
kmp_uint32 chunk = 0; // Chunk size assumed to be positive
28+
kmp_int32 incr = 0;
29+
kmp_int32 stride = 0;
3530

3631
bool valid = false;
3732
kmp_uint32 numDone = 0;
@@ -189,7 +184,7 @@ class Team {
189184

190185
DEBUG_PRINT("Dispatch init\n");
191186

192-
auto &dynamicSchedule = std::get<DynamicSchedule<T>>(this->dynamicSchedule);
187+
DEBUG_PRINT("Got dynamic schedule\n");
193188

194189
switch (schedtype) {
195190
case kmp_sch_dynamic_chunked: {
@@ -202,9 +197,9 @@ class Team {
202197

203198
SignedT span = incr * chunk;
204199

205-
dynamicSchedule.lowerNext = lower;
206-
dynamicSchedule.upper = upper;
207-
dynamicSchedule.chunk = chunk;
200+
dynamicSchedule.lowerNext = static_cast<kmp_uint32>(lower);
201+
dynamicSchedule.upper = static_cast<kmp_uint32>(upper);
202+
dynamicSchedule.chunk = static_cast<kmp_uint32>(chunk);
208203
dynamicSchedule.incr = incr;
209204
dynamicSchedule.stride = span * static_cast<SignedT>(numThreads);
210205

@@ -232,8 +227,6 @@ class Team {
232227

233228
DEBUG_PRINT("Dispatch next\n");
234229

235-
auto &dynamicSchedule = std::get<DynamicSchedule<T>>(this->dynamicSchedule);
236-
237230
std::lock_guard<Mutex> lock(dynamicSchedule.mutex);
238231
assert(dynamicSchedule.valid && "Dynamic schedule is not valid");
239232

@@ -247,14 +240,14 @@ class Team {
247240
return false;
248241
}
249242

250-
*plower = dynamicSchedule.lowerNext;
243+
*plower = static_cast<T>(dynamicSchedule.lowerNext);
251244

252-
dynamicSchedule.lowerNext += static_cast<T>(dynamicSchedule.chunk);
245+
dynamicSchedule.lowerNext += dynamicSchedule.chunk;
253246
if (dynamicSchedule.lowerNext > dynamicSchedule.upper) {
254-
*pupper = dynamicSchedule.upper;
247+
*pupper = static_cast<T>(dynamicSchedule.upper);
255248
*plastiter = true;
256249
} else {
257-
*pupper = dynamicSchedule.lowerNext - 1;
250+
*pupper = static_cast<T>(dynamicSchedule.lowerNext - 1);
258251
*plastiter = false;
259252
}
260253

@@ -270,8 +263,7 @@ class Team {
270263

271264
Barrier barrier;
272265

273-
std::variant<DynamicSchedule<kmp_int32>, DynamicSchedule<kmp_uint32>>
274-
dynamicSchedule;
266+
DynamicSchedule dynamicSchedule;
275267

276268
void *copyPrivateData = nullptr;
277269

0 commit comments

Comments
 (0)