6 #ifndef XGBOOST_COMMON_THREADING_UTILS_H_ 7 #define XGBOOST_COMMON_THREADING_UTILS_H_ 12 #include "xgboost/logging.h" 70 template<
typename Func>
72 for (
size_t i = 0; i < dim1; ++i) {
73 const size_t size = getter_size_dim2(i);
74 const size_t n_blocks = size/grain_size + !!(size % grain_size);
75 for (
size_t iblock = 0; iblock < n_blocks; ++iblock) {
76 const size_t begin = iblock * grain_size;
77 const size_t end = std::min(begin + grain_size, size);
78 AddBlock(i, begin, end);
85 return ranges_.size();
90 CHECK_LT(i, first_dimension_.size());
91 return first_dimension_[i];
96 CHECK_LT(i, ranges_.size());
101 void AddBlock(
size_t first_dimension,
size_t begin,
size_t end) {
102 first_dimension_.push_back(first_dimension);
103 ranges_.emplace_back(begin, end);
106 std::vector<Range1d> ranges_;
107 std::vector<size_t> first_dimension_;
112 template<
typename Func>
114 const size_t num_blocks_in_space = space.
Size();
115 nthreads = std::min(nthreads, omp_get_max_threads());
116 nthreads = std::max(nthreads, 1);
118 #pragma omp parallel num_threads(nthreads) 120 size_t tid = omp_get_thread_num();
121 size_t chunck_size = num_blocks_in_space / nthreads + !!(num_blocks_in_space % nthreads);
123 size_t begin = chunck_size * tid;
124 size_t end = std::min(begin + chunck_size, num_blocks_in_space);
125 for (
auto i = begin; i <
end; i++) {
134 #endif // XGBOOST_COMMON_THREADING_UTILS_H_ BlockedSpace2d(size_t dim1, Func getter_size_dim2, size_t grain_size)
Definition: threading_utils.h:71
size_t begin() const
Definition: threading_utils.h:25
size_t GetFirstDimension(size_t i) const
Definition: threading_utils.h:89
size_t Size() const
Definition: threading_utils.h:84
Definition: threading_utils.h:19
namespace of xgboost
Definition: base.h:102
Definition: threading_utils.h:54
void ParallelFor2d(const BlockedSpace2d &space, int nthreads, Func func)
Definition: threading_utils.h:113
Range1d GetRange(size_t i) const
Definition: threading_utils.h:95
size_t end() const
Definition: threading_utils.h:29
Range1d(size_t begin, size_t end)
Definition: threading_utils.h:21