117 long long minimum_items_per_thread) {
118 if (work_items <= 0 || minimum_items_per_thread <= 0) {
124 long long affordable_threads = work_items / minimum_items_per_thread;
125 if (affordable_threads < 2) {
128 long long available_threads =
static_cast<long long>(
maximum_threads());
129 return static_cast<int>(std::min(affordable_threads, available_threads));
143 int number_of_slices,
147 long long slices =
static_cast<long long>(number_of_slices);
148 long long index =
static_cast<long long>(slice_index);
149 long long base_size = work_items / slices;
150 long long remainder = work_items % slices;
151 first = index * base_size + std::min(index, remainder);
152 last = first + base_size + (index < remainder ? 1 : 0);