6 #ifndef XGBOOST_BASE_H_
7 #define XGBOOST_BASE_H_
20 #ifndef XGBOOST_STRICT_R_MODE
21 #define XGBOOST_STRICT_R_MODE 0
30 #ifndef XGBOOST_LOG_WITH_TIME
31 #define XGBOOST_LOG_WITH_TIME 1
37 #ifndef XGBOOST_CUSTOMIZE_LOGGER
38 #define XGBOOST_CUSTOMIZE_LOGGER XGBOOST_STRICT_R_MODE
44 #ifndef XGBOOST_CUSTOMIZE_GLOBAL_PRNG
45 #define XGBOOST_CUSTOMIZE_GLOBAL_PRNG XGBOOST_STRICT_R_MODE
51 #if defined(__GNUC__) && ((__GNUC__ == 4 && __GNUC_MINOR__ >= 8) || __GNUC__ > 4)
52 #define XGBOOST_ALIGNAS(X) alignas(X)
54 #define XGBOOST_ALIGNAS(X)
57 #if defined(__GNUC__) && ((__GNUC__ == 4 && __GNUC_MINOR__ >= 8) || __GNUC__ > 4) && \
58 !defined(__CUDACC__) && !defined(__sun) && !defined(sun)
59 #include <parallel/algorithm>
60 #define XGBOOST_PARALLEL_SORT(X, Y, Z) __gnu_parallel::sort((X), (Y), (Z))
61 #define XGBOOST_PARALLEL_STABLE_SORT(X, Y, Z) \
62 __gnu_parallel::stable_sort((X), (Y), (Z))
63 #elif defined(_MSC_VER) && (!__INTEL_COMPILER)
65 #define XGBOOST_PARALLEL_SORT(X, Y, Z) concurrency::parallel_sort((X), (Y), (Z))
66 #define XGBOOST_PARALLEL_STABLE_SORT(X, Y, Z) std::stable_sort((X), (Y), (Z))
68 #define XGBOOST_PARALLEL_SORT(X, Y, Z) std::sort((X), (Y), (Z))
69 #define XGBOOST_PARALLEL_STABLE_SORT(X, Y, Z) std::stable_sort((X), (Y), (Z))
73 #define XGBOOST_EXPECT(cond, ret) __builtin_expect((cond), (ret))
75 #define XGBOOST_EXPECT(cond, ret) (cond)
81 #if defined (__CUDA__) || defined(__NVCC__)
82 #define XGBOOST_DEVICE __host__ __device__
84 #define XGBOOST_DEVICE
87 #if defined(__CUDA__) || defined(__CUDACC__)
88 #define XGBOOST_HOST_DEV_INLINE XGBOOST_DEVICE __forceinline__
89 #define XGBOOST_DEV_INLINE __device__ __forceinline__
91 #define XGBOOST_HOST_DEV_INLINE
92 #define XGBOOST_DEV_INLINE
96 #if !defined(XGBOOST_MM_PREFETCH_PRESENT) && !defined(XGBOOST_BUILTIN_PREFETCH_PRESENT)
98 #if (defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_AMD64))) || defined(__INTEL_COMPILER)
100 #define XGBOOST_MM_PREFETCH_PRESENT
101 #define XGBOOST_BUILTIN_PREFETCH_PRESENT
102 #elif defined(__GNUC__)
104 #define XGBOOST_BUILTIN_PREFETCH_PRESENT
142 template <
typename T>
176 template <
typename T2>
195 g.grad_ = grad_ + rhs.grad_;
196 g.hess_ = hess_ + rhs.hess_;
210 g.grad_ = grad_ - rhs.grad_;
211 g.hess_ = hess_ - rhs.hess_;
223 g.grad_ = grad_ * multiplier;
224 g.hess_ = hess_ * multiplier;
236 g.grad_ = grad_ / divisor;
237 g.hess_ = hess_ / divisor;
242 return grad_ == rhs.grad_ && hess_ == rhs.hess_;
247 static_cast<float>(value));
290 g.grad_ = grad_ + rhs.grad_;
291 g.hess_ = hess_ + rhs.hess_;
303 g.grad_ = grad_ - rhs.grad_;
304 g.hess_ = hess_ - rhs.hess_;
309 return grad_ == rhs.grad_ && hess_ == rhs.hess_;
318 using Args = std::vector<std::pair<std::string, std::string> >;
334 #if DMLC_USE_CXX11 && defined(__GNUC__) && !defined(__clang_version__)
335 #if __GNUC__ == 4 && __GNUC_MINOR__ < 8
#define XGBOOST_DEVICE
Tag function as usable by device.
Definition: base.h:84
Fixed point representation for high precision gradient pair. Has a different interface so we don't ac...
Definition: base.h:265
T ValueT
Definition: base.h:271
GradientPairInt64(const GradientPairInt64 &g)=default
XGBOOST_DEVICE GradientPairInt64 operator+(const GradientPairInt64 &rhs) const
Definition: base.h:288
XGBOOST_DEVICE bool operator==(const GradientPairInt64 &rhs) const
Definition: base.h:308
GradientPairInt64()=default
XGBOOST_DEVICE T GetQuantisedHess() const
Definition: base.h:280
XGBOOST_DEVICE GradientPairInt64 & operator-=(const GradientPairInt64 &rhs)
Definition: base.h:295
friend std::ostream & operator<<(std::ostream &os, const GradientPairInt64 &g)
Definition: base.h:311
XGBOOST_DEVICE GradientPairInt64 & operator+=(const GradientPairInt64 &rhs)
Definition: base.h:282
XGBOOST_DEVICE T GetQuantisedGrad() const
Definition: base.h:279
XGBOOST_DEVICE GradientPairInt64(T grad, T hess)
Definition: base.h:273
XGBOOST_DEVICE GradientPairInt64 operator-(const GradientPairInt64 &rhs) const
Definition: base.h:301
Implementation of gradient statistics pair. Template specialisation may be used to overload different...
Definition: base.h:143
GradientPairInternal(const GradientPairInternal< T > &g)=default
XGBOOST_DEVICE GradientPairInternal< T > operator*(float multiplier) const
Definition: base.h:221
XGBOOST_DEVICE GradientPairInternal< T > & operator+=(const GradientPairInternal< T > &rhs)
Definition: base.h:185
void Add(const ValueT &grad, const ValueT &hess)
Definition: base.h:155
T ValueT
Definition: base.h:153
friend std::ostream & operator<<(std::ostream &os, const GradientPairInternal< T > &g)
Definition: base.h:250
XGBOOST_DEVICE GradientPairInternal(T grad, T hess)
Definition: base.h:166
XGBOOST_DEVICE GradientPairInternal< T > & operator*=(float multiplier)
Definition: base.h:215
XGBOOST_DEVICE GradientPairInternal()
Definition: base.h:164
XGBOOST_DEVICE GradientPairInternal(int value)
Definition: base.h:245
XGBOOST_DEVICE GradientPairInternal< T > operator+(const GradientPairInternal< T > &rhs) const
Definition: base.h:192
XGBOOST_DEVICE GradientPairInternal< T > & operator/=(float divisor)
Definition: base.h:228
XGBOOST_DEVICE GradientPairInternal< T > operator/(float divisor) const
Definition: base.h:234
XGBOOST_DEVICE T GetHess() const
Definition: base.h:183
XGBOOST_DEVICE GradientPairInternal< T > & operator-=(const GradientPairInternal< T > &rhs)
Definition: base.h:200
XGBOOST_DEVICE GradientPairInternal< T > operator-(const GradientPairInternal< T > &rhs) const
Definition: base.h:207
static void Reduce(GradientPairInternal< T > &a, const GradientPairInternal< T > &b)
Definition: base.h:160
XGBOOST_DEVICE T GetGrad() const
Definition: base.h:182
XGBOOST_DEVICE GradientPairInternal(const GradientPairInternal< T2 > &g)
Definition: base.h:177
XGBOOST_DEVICE bool operator==(const GradientPairInternal< T > &rhs) const
Definition: base.h:241
namespace of xgboost
Definition: base.h:110
int32_t XGBoostVersionT
Type used for representing version number in binary form.
Definition: base.h:328
std::vector< std::pair< std::string, std::string > > Args
Definition: base.h:318
uint32_t bst_feature_t
Type for data column (feature) index.
Definition: base.h:123
dmlc::omp_ulong omp_ulong
define unsigned long for openmp loop
Definition: base.h:324
dmlc::omp_uint bst_omp_uint
define unsigned int for openmp loop
Definition: base.h:326
int32_t bst_int
integer type.
Definition: base.h:115
uint64_t bst_ulong
unsigned long integers
Definition: base.h:117
std::size_t bst_row_t
Type for data row index.
Definition: base.h:132
uint32_t bst_uint
unsigned integer type used for feature index.
Definition: base.h:113
int32_t bst_cat_t
Categorical value type.
Definition: base.h:121
int32_t bst_node_t
Type for tree node index.
Definition: base.h:134
uint32_t bst_group_t
Type for ranking group index.
Definition: base.h:136
int32_t bst_bin_t
Type for histogram bin index.
Definition: base.h:125
float bst_float
float type, used for storing statistics
Definition: base.h:119
constexpr bst_float kRtEps
small eps gap for minimum split decision.
Definition: base.h:321