Skip to content

Commit d4805c1

Browse files
committed
[software] Simplify omp dynamic schedule
1 parent 4936e8a commit d4805c1

File tree

1 file changed

+14
-22
lines changed

1 file changed

+14
-22
lines changed

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;
@@ -150,7 +145,7 @@ class Team {
150145

151146
DEBUG_PRINT("Dispatch init\n");
152147

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

155150
switch (schedtype) {
156151
case kmp_sch_dynamic_chunked: {
@@ -163,9 +158,9 @@ class Team {
163158

164159
SignedT span = incr * chunk;
165160

166-
dynamicSchedule.lowerNext = lower;
167-
dynamicSchedule.upper = upper;
168-
dynamicSchedule.chunk = chunk;
161+
dynamicSchedule.lowerNext = static_cast<kmp_uint32>(lower);
162+
dynamicSchedule.upper = static_cast<kmp_uint32>(upper);
163+
dynamicSchedule.chunk = static_cast<kmp_uint32>(chunk);
169164
dynamicSchedule.incr = incr;
170165
dynamicSchedule.stride = span * static_cast<SignedT>(numThreads);
171166

@@ -193,8 +188,6 @@ class Team {
193188

194189
DEBUG_PRINT("Dispatch next\n");
195190

196-
auto &dynamicSchedule = std::get<DynamicSchedule<T>>(this->dynamicSchedule);
197-
198191
std::lock_guard<Mutex> lock(dynamicSchedule.mutex);
199192
assert(dynamicSchedule.valid && "Dynamic schedule is not valid");
200193

@@ -208,14 +201,14 @@ class Team {
208201
return false;
209202
}
210203

211-
*plower = dynamicSchedule.lowerNext;
204+
*plower = static_cast<T>(dynamicSchedule.lowerNext);
212205

213-
dynamicSchedule.lowerNext += static_cast<T>(dynamicSchedule.chunk);
206+
dynamicSchedule.lowerNext += dynamicSchedule.chunk;
214207
if (dynamicSchedule.lowerNext > dynamicSchedule.upper) {
215-
*pupper = dynamicSchedule.upper;
208+
*pupper = static_cast<T>(dynamicSchedule.upper);
216209
*plastiter = true;
217210
} else {
218-
*pupper = dynamicSchedule.lowerNext - 1;
211+
*pupper = static_cast<T>(dynamicSchedule.lowerNext - 1);
219212
*plastiter = false;
220213
}
221214

@@ -231,8 +224,7 @@ class Team {
231224

232225
Barrier barrier;
233226

234-
std::variant<DynamicSchedule<kmp_int32>, DynamicSchedule<kmp_uint32>>
235-
dynamicSchedule;
227+
DynamicSchedule dynamicSchedule;
236228

237229
void *copyPrivateData = nullptr;
238230

0 commit comments

Comments
 (0)