87 static typename std::enable_if<t_max_number_of_threads <= 32, void>::type
ThreadLoop(
uint04 number_of_loops,
const std::function<
void(
uint04 index)>& callback)
89 volatile uint04 loops_performed = 0;
90 switch (
getMin(t_max_number_of_threads, number_of_loops, s_os_number_of_threads))
93 case 1:
ThreadLoop<1>(number_of_loops, loops_performed, callback);
break;
94 case 2:
ThreadLoop<2>(number_of_loops, loops_performed, callback);
break;
95 case 3:
ThreadLoop<3>(number_of_loops, loops_performed, callback);
break;
96 case 4:
ThreadLoop<4>(number_of_loops, loops_performed, callback);
break;
97 case 5:
ThreadLoop<5>(number_of_loops, loops_performed, callback);
break;
98 case 6:
ThreadLoop<6>(number_of_loops, loops_performed, callback);
break;
99 case 7:
ThreadLoop<7>(number_of_loops, loops_performed, callback);
break;
100 case 8:
ThreadLoop<8>(number_of_loops, loops_performed, callback);
break;
101 case 9:
ThreadLoop<9>(number_of_loops, loops_performed, callback);
break;
102 case 10:
ThreadLoop<10>(number_of_loops, loops_performed, callback);
break;
103 case 11:
ThreadLoop<11>(number_of_loops, loops_performed, callback);
break;
104 case 12:
ThreadLoop<12>(number_of_loops, loops_performed, callback);
break;
105 case 13:
ThreadLoop<13>(number_of_loops, loops_performed, callback);
break;
106 case 14:
ThreadLoop<14>(number_of_loops, loops_performed, callback);
break;
107 case 15:
ThreadLoop<15>(number_of_loops, loops_performed, callback);
break;
108 case 16:
ThreadLoop<16>(number_of_loops, loops_performed, callback);
break;
109 case 32:
ThreadLoop<32>(number_of_loops, loops_performed, callback);
break;
110 default: lib_assert(
false,
"Invalid thread count");
return;
125 if constexpr (t_max_number_of_threads == 1)
127 while (loops_performed < number_of_loops)
130 if(loop - 1 < number_of_loops)
137 [&callback, &loops_performed, number_of_loops]
139 ThreadLoop<t_max_number_of_threads / 2>(number_of_loops, loops_performed, callback);
141 [&callback, &loops_performed, number_of_loops]
143 ThreadLoop<t_max_number_of_threads - (t_max_number_of_threads / 2)>(number_of_loops, loops_performed, callback);