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 ;
@@ -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