13 template<
typename INDEX_T>
14 static inline void For(INDEX_T start, INDEX_T end,
const std::function<
void(
int, INDEX_T, INDEX_T)>& inner_fun) {
19 num_threads = omp_get_num_threads();
21 INDEX_T num_inner = (end - start + num_threads - 1) / num_threads;
22 if (num_inner <= 0) { num_inner = 1; }
24 #pragma omp parallel for schedule(static, 1)
25 for (
int i = 0; i < num_threads; ++i) {
27 INDEX_T inner_start = start + num_inner * i;
28 INDEX_T inner_end = inner_start + num_inner;
29 if (inner_end > end) { inner_end = end; }
30 if (inner_start < end) {
31 inner_fun(i, inner_start, inner_end);