5 #ifndef XGBOOST_CONTEXT_H_
6 #define XGBOOST_CONTEXT_H_
9 #include <xgboost/logging.h>
16 #include <type_traits>
29 static auto constexpr
CPU() {
return "cpu"; }
30 static auto constexpr
CUDA() {
return "cuda"; }
32 static auto constexpr
SyclCPU() {
return "sycl:cpu"; }
33 static auto constexpr
SyclGPU() {
return "sycl:gpu"; }
56 [[nodiscard]]
bool IsCPU()
const {
return device ==
kCPU; }
115 [[nodiscard]] std::string
Name()
const {
128 LOG(FATAL) <<
"Unknown device.";
135 static_assert(
sizeof(DeviceOrd) ==
sizeof(std::int32_t));
157 template <
typename Container>
160 this->SetDeviceOrdinal(kwargs);
226 [[nodiscard]] CUDAContext
const*
CUDACtx()
const;
255 template <
typename CPUFn,
typename CUDAFn>
257 static_assert(std::is_same_v<std::invoke_result_t<CPUFn>, std::invoke_result_t<CUDAFn>>);
258 switch (this->
Device().device) {
267 LOG(WARNING) <<
"The requested feature doesn't have SYCL specific implementation yet. "
268 <<
"CPU implementation is used";
271 LOG(FATAL) <<
"Unknown device type:"
272 <<
static_cast<std::underlying_type_t<DeviceOrd::Type>
>(this->
Device().device);
276 return std::invoke_result_t<CPUFn>();
282 template <
typename CPUFn,
typename CUDAFn,
typename SYCLFn>
283 decltype(
auto)
DispatchDevice(CPUFn&& cpu_fn, CUDAFn&& cuda_fn, SYCLFn&& sycl_fn)
const {
284 static_assert(std::is_same_v<std::invoke_result_t<CPUFn>, std::invoke_result_t<SYCLFn>>);
294 DMLC_DECLARE_FIELD(
seed)
296 .describe(
"Random number seed during training.");
297 DMLC_DECLARE_ALIAS(
seed, random_state);
300 .describe(
"Seed PRNG determnisticly via iterator number.");
301 DMLC_DECLARE_FIELD(device).set_default(
DeviceSym::CPU()).describe(
"Device ordinal.");
302 DMLC_DECLARE_FIELD(
nthread).set_default(0).describe(
"Number of threads to use.");
303 DMLC_DECLARE_ALIAS(
nthread, n_jobs);
306 .describe(
"Fail with error when gpu_id is invalid.");
309 .describe(
"Enable checking whether parameters are used or not.");
313 void SetDeviceOrdinal(
Args const& kwargs);
315 this->device = (this->device_ = d).Name();
322 mutable std::shared_ptr<CUDAContext> cuctx_;
325 std::int32_t cfs_cpu_count_;
Defines configuration macros and basic types for xgboost.
Data structure representing JSON format.
Definition: json.h:396
Learner interface that integrates objective, gbm and evaluation together. This is the user facing XGB...
Definition: base.h:89
std::vector< std::pair< std::string, std::string > > Args
Definition: base.h:306
std::ostream & operator<<(std::ostream &os, DeviceOrd ord)
std::int16_t bst_d_ordinal_t
Ordinal of a CUDA device.
Definition: base.h:131
std::mt19937 RandomEngine
Define mt19937 as default type Random Engine.
Definition: context.h:25
macro for using C++11 enum class as DMLC parameter
Runtime context for XGBoost. Contains information like threads and device.
Definition: context.h:142
decltype(auto) DispatchDevice(CPUFn &&cpu_fn, CUDAFn &&cuda_fn) const
Call function based on the current device.
Definition: context.h:256
bool fail_on_invalid_gpu_id
Definition: context.h:171
DeviceOrd Device() const
Get the current device and ordinal.
Definition: context.h:207
void FromJson(Json const &in)
bool IsSycl() const
Is XGBoost running on any SYCL device?
Definition: context.h:202
std::string DeviceName() const
Name of the current device.
Definition: context.h:222
DeviceOrd DeviceFP64() const
Get the current device and ordinal, if it supports fp64, otherwise returns default CPU.
bool seed_per_iteration
Definition: context.h:169
std::int32_t Threads() const
Returns the automatically chosen number of threads based on the nthread parameter and the system sett...
bool validate_parameters
Definition: context.h:172
std::int64_t seed
Definition: context.h:167
Context MakeCUDA(bst_d_ordinal_t ordinal=0) const
Make a CUDA context based on the current context.
Definition: context.h:240
RandomEngine & Rng() const
Get the random engine.
Definition: context.h:230
bool IsCPU() const
Is XGBoost running on CPU?
Definition: context.h:182
CUDAContext const * CUDACtx() const
Get a CUDA device context for allocator and stream.
static constexpr std::int64_t kDefaultSeed
Definition: context.h:150
bool IsCUDA() const
Is XGBoost running on a CUDA device?
Definition: context.h:186
bool IsSyclCPU() const
Is XGBoost running on a SYCL CPU?
Definition: context.h:194
std::int32_t nthread
Definition: context.h:165
Context MakeCPU() const
Make a CPU context based on the current context.
Definition: context.h:247
bool IsSyclGPU() const
Is XGBoost running on a SYCL GPU?
Definition: context.h:198
bool IsSyclDefault() const
Is XGBoost running on the default SYCL device?
Definition: context.h:190
DMLC_DECLARE_PARAMETER(Context)
Definition: context.h:293
bst_d_ordinal_t Ordinal() const
Get the CUDA device ordinal. -1 if XGBoost is running on CPU.
Definition: context.h:218
void Init(Args const &kwargs)
Args UpdateAllowUnknown(Container const &kwargs)
Definition: context.h:158
A type for device ordinal. The type is packed into 32-bit for efficient use in viewing types like lin...
Definition: context.h:40
constexpr static auto SyclGPU(bst_d_ordinal_t ordinal=-1)
Constructor for SYCL GPU.
Definition: context.h:104
bool operator==(DeviceOrd const &that) const
Definition: context.h:108
bool IsCUDA() const
Definition: context.h:55
bool operator!=(DeviceOrd const &that) const
Definition: context.h:111
bool IsSyclCPU() const
Definition: context.h:58
std::string Name() const
Get a string representation of the device and the ordinal.
Definition: context.h:115
enum xgboost::DeviceOrd::Type kCPU
bool IsSyclDefault() const
Definition: context.h:57
constexpr DeviceOrd & operator=(DeviceOrd &&that)=default
constexpr DeviceOrd(DeviceOrd &&that)=default
constexpr DeviceOrd & operator=(DeviceOrd const &that)=default
Type
Definition: context.h:45
@ kSyclGPU
Definition: context.h:50
@ kSyclDefault
Definition: context.h:48
@ kCUDA
Definition: context.h:47
@ kSyclCPU
Definition: context.h:49
bool IsSyclGPU() const
Definition: context.h:59
bool IsCPU() const
Definition: context.h:56
static constexpr bst_d_ordinal_t InvalidOrdinal()
Definition: context.h:43
static constexpr bst_d_ordinal_t CPUOrdinal()
Definition: context.h:42
constexpr DeviceOrd(Type type, bst_d_ordinal_t ord)
Definition: context.h:63
constexpr static auto SyclCPU(bst_d_ordinal_t ordinal=-1)
Constructor for SYCL CPU.
Definition: context.h:95
constexpr DeviceOrd()=default
bool IsSycl() const
Definition: context.h:60
static constexpr auto CUDA(bst_d_ordinal_t ordinal)
Constructor for CUDA device.
Definition: context.h:79
constexpr DeviceOrd(DeviceOrd const &that)=default
constexpr static auto CPU()
Constructor for CPU.
Definition: context.h:73
constexpr static auto SyclDefault(bst_d_ordinal_t ordinal=-1)
Constructor for SYCL.
Definition: context.h:87
bst_d_ordinal_t ordinal
Definition: context.h:53
static constexpr auto CUDA()
Definition: context.h:30
static constexpr auto CPU()
Definition: context.h:29
static constexpr auto SyclDefault()
Definition: context.h:31
static constexpr auto SyclGPU()
Definition: context.h:33
static constexpr auto SyclCPU()
Definition: context.h:32
Definition: parameter.h:84
Args UpdateAllowUnknown(Container const &kwargs)
Definition: parameter.h:90