Go to the documentation of this file.
6 #ifndef XGBOOST_COMMON_COMMON_H_
7 #define XGBOOST_COMMON_COMMON_H_
10 #include <xgboost/logging.h>
17 #include <type_traits>
24 #if defined(__CUDACC__)
25 #include <thrust/system/cuda/error.h>
26 #include <thrust/system_error.h>
28 #define WITH_CUDA() true
32 #define WITH_CUDA() false
34 #endif // defined(__CUDACC__)
37 #if defined(__CUDACC__)
41 #define safe_cuda(ans) ThrowOnCudaError((ans), __FILE__, __LINE__)
43 inline cudaError_t ThrowOnCudaError(cudaError_t code,
const char *file,
45 if (code != cudaSuccess) {
46 LOG(FATAL) << thrust::system_error(code, thrust::cuda_category(),
47 std::string{file} +
": " +
48 std::to_string(line)).what();
52 #endif // defined(__CUDACC__)
62 inline std::vector<std::string>
Split(
const std::string& s,
char delim) {
64 std::istringstream is(s);
65 std::vector<std::string> ret;
66 while (std::getline(is, item, delim)) {
80 std::ostringstream os;
85 template <
typename T1,
typename T2>
87 return static_cast<T1
>(std::ceil(
static_cast<double>(a) / b));
91 template <
class T, std::size_t N, std::size_t... Idx>
92 constexpr
auto UnpackArr(std::array<T, N> &&arr, std::index_sequence<Idx...>) {
93 return std::make_tuple(std::forward<std::array<T, N>>(arr)[Idx]...);
97 template <
class T, std::
size_t N>
100 std::make_index_sequence<N>{});
126 return i_ >= other.i_;
129 return i_ < other.i_;
137 i_{start}, step_{step} {}
154 return *begin_ == *other.begin_ && *end_ == *other.end_;
157 return !(*
this == other);
173 template <
typename Fn>
182 using reference = std::add_lvalue_reference_t<value_type>;
183 using pointer = std::add_pointer_t<value_type>;
230 template <
typename Fn>
238 #ifndef XGBOOST_USE_CUDA
239 LOG(FATAL) <<
"XGBoost version not compiled with GPU support.";
240 #endif // XGBOOST_USE_CUDA
244 #ifndef XGBOOST_USE_ONEAPI
245 LOG(FATAL) <<
"XGBoost version not compiled with OneAPI support.";
246 #endif // XGBOOST_USE_ONEAPI
249 template <
typename Idx,
typename Container,
250 typename V =
typename Container::value_type,
251 typename Comp = std::less<V>>
252 std::vector<Idx>
ArgSort(Container
const &array, Comp comp = std::less<V>{}) {
253 std::vector<Idx> result(array.size());
254 std::iota(result.begin(), result.end(), 0);
255 auto op = [&array, comp](Idx
const &l, Idx
const &r) {
return comp(array[l], array[r]); };
271 #endif // XGBOOST_COMMON_COMMON_H_
typename std::conditional< std::is_same< std::ptrdiff_t, std::int64_t >::value, std::ptrdiff_t, std::int64_t >::type ptrdiff_t
Definition: span.h:135
constexpr auto UnpackArr(std::array< T, N > &&arr)
Definition: common.h:98
XGBOOST_DEVICE Iterator begin() const
Definition: common.h:144
XGBOOST_DEVICE bool operator==(const Iterator &other) const
Definition: common.h:125
XGBOOST_DEVICE T Max(T a, T b)
Definition: common.h:73
XGBOOST_DEVICE bool operator==(const Range &other) const
Definition: common.h:153
XGBOOST_DEVICE Iterator(DifferenceType start)
Definition: common.h:135
XGBOOST_DEVICE DifferenceType operator*() const
Definition: common.h:114
#define XGBOOST_PARALLEL_STABLE_SORT(X, Y, Z)
Definition: base.h:69
defines configuration macros of xgboost.
XGBOOST_DEVICE Iterator operator++(int)
Definition: common.h:119
const XGBOOST_DEVICE Iterator & operator++()
Definition: common.h:115
auto MakeIndexTransformIter(Fn &&fn)
Definition: common.h:231
constexpr XGBOOST_DEVICE bool empty() const __span_noexcept
Definition: span.h:560
XGBOOST_DEVICE Iterator end() const
Definition: common.h:145
int64_t DifferenceType
Definition: common.h:108
XGBOOST_DEVICE void Step(DifferenceType s)
Definition: common.h:132
void AssertGPUSupport()
Definition: common.h:237
std::vector< Idx > ArgSort(Container const &array, Comp comp=std::less< V >{})
Definition: common.h:252
XGBOOST_DEVICE Range(DifferenceType begin, DifferenceType end)
Definition: common.h:147
XGBOOST_DEVICE Range(DifferenceType begin, DifferenceType end, DifferenceType step)
Definition: common.h:149
XGBOOST_DEVICE T1 DivRoundUp(const T1 a, const T2 b)
Definition: common.h:86
std::string ToString(const T &data)
Definition: common.h:79
XGBOOST_DEVICE bool operator!=(const Range &other) const
Definition: common.h:156
OptionalWeights(float w)
Definition: common.h:265
OptionalWeights(Span< float const > w)
Definition: common.h:264
span class implementation, based on ISO++20 span<T>. The interface should be the same.
Definition: span.h:148
XGBOOST_DEVICE Iterator(DifferenceType start, DifferenceType step)
Definition: common.h:136
XGBOOST_DEVICE bool operator!=(const Iterator &other) const
Definition: common.h:128
XGBOOST_DEVICE void Step(DifferenceType s)
Definition: common.h:160
void AssertOneAPISupport()
Definition: common.h:243
constexpr auto UnpackArr(std::array< T, N > &&arr, std::index_sequence< Idx... >)
Definition: common.h:92
float dft
Definition: common.h:262
#define XGBOOST_DEVICE
Tag function as usable by device.
Definition: base.h:84
Span< float const > weights
Definition: common.h:261
XGBOOST_DEVICE float operator[](size_t i) const
Definition: common.h:267
namespace of xgboost
Definition: base.h:110
std::vector< std::string > Split(const std::string &s, char delim)
Split a string by delimiter.
Definition: common.h:62