6 #ifndef XGBOOST_COMMON_THREADING_UTILS_H_ 7 #define XGBOOST_COMMON_THREADING_UTILS_H_ 68 template<
typename Func>
70 for (
size_t i = 0; i < dim1; ++i) {
71 const size_t size = getter_size_dim2(i);
72 const size_t n_blocks = size/grain_size + !!(size % grain_size);
73 for (
size_t iblock = 0; iblock < n_blocks; ++iblock) {
74 const size_t begin = iblock * grain_size;
75 const size_t end = std::min(begin + grain_size, size);
76 AddBlock(i, begin, end);
83 return ranges_.size();
88 CHECK_LT(i, first_dimension_.size());
89 return first_dimension_[i];
94 CHECK_LT(i, ranges_.size());
99 void AddBlock(
size_t first_dimension,
size_t begin,
size_t end) {
100 first_dimension_.push_back(first_dimension);
101 ranges_.emplace_back(begin, end);
104 std::vector<Range1d> ranges_;
105 std::vector<size_t> first_dimension_;
110 template<
typename Func>
112 const size_t num_blocks_in_space = space.
Size();
114 #pragma omp parallel num_threads(nthreads) 116 size_t tid = omp_get_thread_num();
117 size_t chunck_size = num_blocks_in_space / nthreads + !!(num_blocks_in_space % nthreads);
119 size_t begin = chunck_size * tid;
120 size_t end = std::min(begin + chunck_size, num_blocks_in_space);
121 for (
auto i = begin; i <
end; i++) {
130 #endif // XGBOOST_COMMON_THREADING_UTILS_H_ void ParallelFor2d(const BlockedSpace2d &space, const int nthreads, Func func)
Definition: threading_utils.h:111
BlockedSpace2d(size_t dim1, Func getter_size_dim2, size_t grain_size)
Definition: threading_utils.h:69
size_t GetFirstDimension(size_t i) const
Definition: threading_utils.h:87
size_t Size() const
Definition: threading_utils.h:82
Definition: threading_utils.h:17
size_t begin()
Definition: threading_utils.h:23
namespace of xgboost
Definition: base.h:102
Definition: threading_utils.h:52
size_t end()
Definition: threading_utils.h:27
Range1d GetRange(size_t i) const
Definition: threading_utils.h:93
Range1d(size_t begin, size_t end)
Definition: threading_utils.h:19