5 #ifndef XGBOOST_CONTEXT_H_
6 #define XGBOOST_CONTEXT_H_
9 #include <xgboost/logging.h>
15 #include <type_traits>
23 static auto constexpr
CPU() {
return "cpu"; }
24 static auto constexpr
CUDA() {
return "cuda"; }
26 static auto constexpr
SyclCPU() {
return "sycl:cpu"; }
27 static auto constexpr
SyclGPU() {
return "sycl:gpu"; }
45 [[nodiscard]]
bool IsCPU()
const {
return device ==
kCPU; }
106 [[nodiscard]] std::string
Name()
const {
119 LOG(FATAL) <<
"Unknown device.";
126 static_assert(
sizeof(DeviceOrd) ==
sizeof(std::int32_t));
148 template <
typename Container>
151 this->SetDeviceOrdinal(kwargs);
220 [[nodiscard]] CUDAContext
const*
CUDACtx()
const;
242 template <
typename CPUFn,
typename CUDAFn>
244 static_assert(std::is_same_v<std::invoke_result_t<CPUFn>, std::invoke_result_t<CUDAFn>>);
245 switch (this->
Device().device) {
254 LOG(WARNING) <<
"The requested feature doesn't have SYCL specific implementation yet. "
255 <<
"CPU implementation is used";
258 LOG(FATAL) <<
"Unknown device type:"
259 <<
static_cast<std::underlying_type_t<DeviceOrd::Type>
>(this->
Device().device);
263 return std::invoke_result_t<CPUFn>();
269 template <
typename CPUFn,
typename CUDAFn,
typename SYCLFn>
270 decltype(
auto)
DispatchDevice(CPUFn&& cpu_fn, CUDAFn&& cuda_fn, SYCLFn&& sycl_fn)
const {
271 static_assert(std::is_same_v<std::invoke_result_t<CPUFn>, std::invoke_result_t<SYCLFn>>);
281 DMLC_DECLARE_FIELD(
seed)
283 .describe(
"Random number seed during training.");
284 DMLC_DECLARE_ALIAS(
seed, random_state);
287 .describe(
"Seed PRNG determnisticly via iterator number.");
288 DMLC_DECLARE_FIELD(device).set_default(
DeviceSym::CPU()).describe(
"Device ordinal.");
289 DMLC_DECLARE_FIELD(
nthread).set_default(0).describe(
"Number of threads to use.");
290 DMLC_DECLARE_ALIAS(
nthread, n_jobs);
293 .describe(
"Fail with error when gpu_id is invalid.");
296 .describe(
"Enable checking whether parameters are used or not.");
300 void SetDeviceOrdinal(
Args const& kwargs);
302 this->device = (this->device_ = d).Name();
309 mutable std::shared_ptr<CUDAContext> cuctx_;
311 std::int32_t cfs_cpu_count_;
Defines configuration macros and basic types for xgboost.
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::ostream & operator<<(std::ostream &os, DeviceOrd ord)
std::int16_t bst_d_ordinal_t
Ordinal of a CUDA device.
Definition: base.h:131
macro for using C++11 enum class as DMLC parameter
Runtime context for XGBoost. Contains information like threads and device.
Definition: context.h:133
decltype(auto) DispatchDevice(CPUFn &&cpu_fn, CUDAFn &&cuda_fn) const
Call function based on the current device.
Definition: context.h:243
bool fail_on_invalid_gpu_id
Definition: context.h:162
DeviceOrd Device() const
Get the current device and ordinal.
Definition: context.h:208
bool IsSycl() const
Is XGBoost running on any SYCL device?
Definition: context.h:201
std::string DeviceName() const
Name of the current device.
Definition: context.h:216
void ConfigureGpuId(bool require_gpu)
Configure the parameter ‘device’. Deprecated, will remove once gpu_id is removed.
bool seed_per_iteration
Definition: context.h:160
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:163
std::int64_t seed
Definition: context.h:158
Context MakeCUDA(bst_d_ordinal_t ordinal=0) const
Make a CUDA context based on the current context.
Definition: context.h:227
bool IsCPU() const
Is XGBoost running on CPU?
Definition: context.h:181
CUDAContext const * CUDACtx() const
Get a CUDA device context for allocator and stream.
static constexpr std::int64_t kDefaultSeed
Definition: context.h:141
bool IsCUDA() const
Is XGBoost running on a CUDA device?
Definition: context.h:185
bool IsSyclCPU() const
Is XGBoost running on a SYCL CPU?
Definition: context.h:193
std::int32_t nthread
Definition: context.h:156
Context MakeCPU() const
Make a CPU context based on the current context.
Definition: context.h:234
bool IsSyclGPU() const
Is XGBoost running on a SYCL GPU?
Definition: context.h:197
bool IsSyclDefault() const
Is XGBoost running on the default SYCL device?
Definition: context.h:189
DMLC_DECLARE_PARAMETER(Context)
Definition: context.h:280
bst_d_ordinal_t Ordinal() const
Get the CUDA device ordinal. -1 if XGBoost is running on CPU.
Definition: context.h:212
void Init(Args const &kwargs)
Args UpdateAllowUnknown(Container const &kwargs)
Definition: context.h:149
A type for device ordinal. The type is packed into 32-bit for efficient use in viewing types like lin...
Definition: context.h:34
constexpr static auto SyclGPU(bst_d_ordinal_t ordinal=-1)
Constructor for SYCL GPU.
Definition: context.h:95
bool operator==(DeviceOrd const &that) const
Definition: context.h:99
bool IsCUDA() const
Definition: context.h:44
bool operator!=(DeviceOrd const &that) const
Definition: context.h:102
bool IsSyclCPU() const
Definition: context.h:47
std::string Name() const
Get a string representation of the device and the ordinal.
Definition: context.h:106
enum xgboost::DeviceOrd::Type kCPU
bool IsSyclDefault() const
Definition: context.h:46
constexpr DeviceOrd & operator=(DeviceOrd &&that)=default
constexpr DeviceOrd(DeviceOrd &&that)=default
constexpr DeviceOrd & operator=(DeviceOrd const &that)=default
Type
Definition: context.h:39
@ kSyclGPU
Definition: context.h:40
@ kSyclDefault
Definition: context.h:40
@ kCUDA
Definition: context.h:39
@ kSyclCPU
Definition: context.h:40
bool IsSyclGPU() const
Definition: context.h:48
bool IsCPU() const
Definition: context.h:45
static constexpr bst_d_ordinal_t InvalidOrdinal()
Definition: context.h:37
static constexpr bst_d_ordinal_t CPUOrdinal()
Definition: context.h:36
constexpr DeviceOrd(Type type, bst_d_ordinal_t ord)
Definition: context.h:54
constexpr static auto SyclCPU(bst_d_ordinal_t ordinal=-1)
Constructor for SYCL CPU.
Definition: context.h:86
constexpr DeviceOrd()=default
bool IsSycl() const
Definition: context.h:49
static constexpr auto CUDA(bst_d_ordinal_t ordinal)
Constructor for CUDA device.
Definition: context.h:70
constexpr DeviceOrd(DeviceOrd const &that)=default
constexpr static auto CPU()
Constructor for CPU.
Definition: context.h:64
constexpr static auto SyclDefault(bst_d_ordinal_t ordinal=-1)
Constructor for SYCL.
Definition: context.h:78
bst_d_ordinal_t ordinal
Definition: context.h:42
static constexpr auto CUDA()
Definition: context.h:24
static constexpr auto CPU()
Definition: context.h:23
static constexpr auto SyclDefault()
Definition: context.h:25
static constexpr auto SyclGPU()
Definition: context.h:27
static constexpr auto SyclCPU()
Definition: context.h:26
Definition: parameter.h:84
Args UpdateAllowUnknown(Container const &kwargs)
Definition: parameter.h:90