1212#include < array>
1313#include < mutex>
1414#include < optional>
15- #include < variant>
1615
1716namespace kmp {
1817
@@ -22,16 +21,12 @@ class Barrier;
2221
2322class 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