6 #ifndef XGBOOST_BASE_H_
7 #define XGBOOST_BASE_H_
22 #ifndef XGBOOST_STRICT_R_MODE
23 #define XGBOOST_STRICT_R_MODE 0
32 #ifndef XGBOOST_LOG_WITH_TIME
33 #define XGBOOST_LOG_WITH_TIME 1
39 #ifndef XGBOOST_CUSTOMIZE_GLOBAL_PRNG
40 #define XGBOOST_CUSTOMIZE_GLOBAL_PRNG 0
46 #if defined(__GNUC__) && ((__GNUC__ == 4 && __GNUC_MINOR__ >= 8) || __GNUC__ > 4)
47 #define XGBOOST_ALIGNAS(X) alignas(X)
49 #define XGBOOST_ALIGNAS(X)
53 #define XGBOOST_EXPECT(cond, ret) __builtin_expect((cond), (ret))
55 #define XGBOOST_EXPECT(cond, ret) (cond)
61 #if defined (__CUDA__) || defined(__NVCC__)
62 #define XGBOOST_DEVICE __host__ __device__
64 #define XGBOOST_DEVICE
67 #if defined(__CUDA__) || defined(__CUDACC__)
68 #define XGBOOST_HOST_DEV_INLINE XGBOOST_DEVICE __forceinline__
69 #define XGBOOST_DEV_INLINE __device__ __forceinline__
71 #define XGBOOST_HOST_DEV_INLINE
72 #define XGBOOST_DEV_INLINE
76 #if !defined(XGBOOST_MM_PREFETCH_PRESENT) && !defined(XGBOOST_BUILTIN_PREFETCH_PRESENT)
78 #if (defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_AMD64))) || defined(__INTEL_COMPILER)
80 #define XGBOOST_MM_PREFETCH_PRESENT
81 #define XGBOOST_BUILTIN_PREFETCH_PRESENT
82 #elif defined(__GNUC__)
84 #define XGBOOST_BUILTIN_PREFETCH_PRESENT
137 template <
typename T>
174 template <
typename T2>
193 g.grad_ = grad_ + rhs.grad_;
194 g.hess_ = hess_ + rhs.hess_;
208 g.grad_ = grad_ - rhs.grad_;
209 g.hess_ = hess_ - rhs.hess_;
221 g.grad_ = grad_ * multiplier;
222 g.hess_ = hess_ * multiplier;
234 g.grad_ = grad_ / divisor;
235 g.hess_ = hess_ / divisor;
240 return grad_ == rhs.grad_ && hess_ == rhs.hess_;
245 static_cast<float>(value));
289 g.grad_ = grad_ + rhs.grad_;
290 g.hess_ = hess_ + rhs.hess_;
302 g.grad_ = grad_ - rhs.grad_;
303 g.hess_ = hess_ - rhs.hess_;
308 return grad_ == rhs.grad_ && hess_ == rhs.hess_;
316 using Args = std::vector<std::pair<std::string, std::string> >;
#define XGBOOST_DEVICE
Tag function as usable by device.
Definition: base.h:64
Fixed point representation for high precision gradient pair. Has a different interface so we don't ac...
Definition: base.h:263
T ValueT
Definition: base.h:269
XGBOOST_DEVICE GradientPairInt64 operator+(const GradientPairInt64 &rhs) const
Definition: base.h:287
XGBOOST_DEVICE bool operator==(const GradientPairInt64 &rhs) const
Definition: base.h:307
GradientPairInt64()=default
XGBOOST_DEVICE T GetQuantisedHess() const
Definition: base.h:279
GradientPairInt64(GradientPairInt64 const &g)=default
GradientPairInt64 & operator=(GradientPairInt64 const &g)=default
XGBOOST_DEVICE GradientPairInt64 & operator-=(const GradientPairInt64 &rhs)
Definition: base.h:294
friend std::ostream & operator<<(std::ostream &os, const GradientPairInt64 &g)
Definition: base.h:310
XGBOOST_DEVICE GradientPairInt64 & operator+=(const GradientPairInt64 &rhs)
Definition: base.h:281
XGBOOST_DEVICE T GetQuantisedGrad() const
Definition: base.h:278
XGBOOST_DEVICE GradientPairInt64(T grad, T hess)
Definition: base.h:271
XGBOOST_DEVICE GradientPairInt64 operator-(const GradientPairInt64 &rhs) const
Definition: base.h:300
Implementation of gradient statistics pair. Template specialisation may be used to overload different...
Definition: base.h:138
GradientPairInternal(GradientPairInternal &&g)=default
XGBOOST_DEVICE GradientPairInternal< T > operator*(float multiplier) const
Definition: base.h:219
XGBOOST_DEVICE GradientPairInternal< T > & operator+=(const GradientPairInternal< T > &rhs)
Definition: base.h:183
void Add(const ValueT &grad, const ValueT &hess)
Definition: base.h:150
T ValueT
Definition: base.h:148
friend std::ostream & operator<<(std::ostream &os, const GradientPairInternal< T > &g)
Definition: base.h:248
XGBOOST_DEVICE GradientPairInternal(T grad, T hess)
Definition: base.h:161
XGBOOST_DEVICE GradientPairInternal< T > & operator*=(float multiplier)
Definition: base.h:213
XGBOOST_DEVICE GradientPairInternal(int value)
Definition: base.h:243
XGBOOST_DEVICE GradientPairInternal< T > operator+(const GradientPairInternal< T > &rhs) const
Definition: base.h:190
XGBOOST_DEVICE GradientPairInternal< T > & operator/=(float divisor)
Definition: base.h:226
XGBOOST_DEVICE GradientPairInternal< T > operator/(float divisor) const
Definition: base.h:232
XGBOOST_DEVICE T GetHess() const
Definition: base.h:181
XGBOOST_DEVICE GradientPairInternal< T > & operator-=(const GradientPairInternal< T > &rhs)
Definition: base.h:198
GradientPairInternal & operator=(GradientPairInternal &&that)=default
XGBOOST_DEVICE GradientPairInternal< T > operator-(const GradientPairInternal< T > &rhs) const
Definition: base.h:205
static void Reduce(GradientPairInternal< T > &a, const GradientPairInternal< T > &b)
Definition: base.h:155
GradientPairInternal(GradientPairInternal const &g)=default
XGBOOST_DEVICE T GetGrad() const
Definition: base.h:180
GradientPairInternal & operator=(GradientPairInternal const &that)=default
XGBOOST_DEVICE GradientPairInternal(const GradientPairInternal< T2 > &g)
Definition: base.h:175
GradientPairInternal()=default
XGBOOST_DEVICE bool operator==(const GradientPairInternal< T > &rhs) const
Definition: base.h:239
Core data structure for multi-target trees.
Definition: base.h:89
std::vector< std::pair< std::string, std::string > > Args
Definition: base.h:316
std::uint32_t bst_group_t
Type for ranking group index.
Definition: base.h:115
std::int32_t bst_node_t
Type for tree node index.
Definition: base.h:111
dmlc::omp_ulong omp_ulong
define unsigned long for openmp loop
Definition: base.h:322
dmlc::omp_uint bst_omp_uint
define unsigned int for openmp loop
Definition: base.h:324
std::int32_t bst_bin_t
Type for histogram bin index. We sometimes use -1 to indicate invalid bin.
Definition: base.h:103
std::int32_t XGBoostVersionT
Type used for representing version number in binary form.
Definition: base.h:326
std::uint64_t bst_idx_t
Type for data row index (sample).
Definition: base.h:107
std::int32_t bst_tree_t
Type for indexing trees.
Definition: base.h:127
std::uint32_t bst_target_t
Type for indexing into output targets.
Definition: base.h:119
std::int16_t bst_d_ordinal_t
Ordinal of a CUDA device.
Definition: base.h:131
std::uint32_t bst_uint
unsigned integer type used for feature index.
Definition: base.h:91
std::int32_t bst_layer_t
Type for indexing boosted layers.
Definition: base.h:123
std::uint32_t bst_feature_t
Type for data column (feature) index.
Definition: base.h:99
std::uint64_t bst_ulong
unsigned long integers
Definition: base.h:93
float bst_float
float type, used for storing statistics
Definition: base.h:95
std::int32_t bst_cat_t
Categorical value type.
Definition: base.h:97
constexpr bst_float kRtEps
small eps gap for minimum split decision.
Definition: base.h:319