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) <<
"未知设备。";
126 static_assert(
sizeof(DeviceOrd) ==
sizeof(std::int32_t));
148 template <
typename Container>
151 this->SetDeviceOrdinal(kwargs);
219 [[nodiscard]] CUDAContext
const*
CUDACtx()
const;
241 template <
typename CPUFn,
typename CUDAFn>
243 static_assert(std::is_same_v<std::invoke_result_t<CPUFn>, std::invoke_result_t<CUDAFn>>);
244 switch (this->
Device().device) {
253 LOG(WARNING) <<
"所请求的功能尚无 SYCL 特定的实现。 "
257 LOG(FATAL) <<
"未知设备类型:"
258 <<
static_cast<std::underlying_type_t<DeviceOrd::Type>
>(this->
Device().device);
262 return std::invoke_result_t<CPUFn>();
268 template <
typename CPUFn,
typename CUDAFn,
typename SYCLFn>
269 decltype(
auto)
DispatchDevice(CPUFn&& cpu_fn, CUDAFn&& cuda_fn, SYCLFn&& sycl_fn)
const {
270 static_assert(std::is_same_v<std::invoke_result_t<CPUFn>, std::invoke_result_t<SYCLFn>>);
280 DMLC_DECLARE_FIELD(
seed)
282 .describe(
"训练期间的随机数种子。");
283 DMLC_DECLARE_ALIAS(
seed, random_state);
286 .describe(
"通过迭代器编号确定性地为 PRNG 播种。");
287 DMLC_DECLARE_FIELD(device).set_default(
DeviceSym::CPU()).describe(
"设备序号。");
288 DMLC_DECLARE_FIELD(
nthread).set_default(0).describe(
"要使用的线程数。");
289 DMLC_DECLARE_ALIAS(
nthread, n_jobs);
292 .describe(
"当 gpu_id 无效时,报错失败。");
295 .describe(
"启用检查参数是否使用。");
299 void SetDeviceOrdinal(
Args const& kwargs);
301 this->device = (this->device_ = d).Name();
308 mutable std::shared_ptr<CUDAContext> cuctx_;
310 std::int32_t cfs_cpu_count_;
集成目标、gbm和评估的学习器接口。这是用户面临的XGB...
Definition: base.h:97
std::vector< std::pair< std::string, std::string > > Args
定义: base.h:324
std::ostream & operator<<(std::ostream &os, DeviceOrd ord)
std::int16_t bst_d_ordinal_t
CUDA 设备的序号。
定义: base.h:139
XGBoost的运行时上下文。包含线程和设备等信息。
Definition: context.h:133
decltype(auto) DispatchDevice(CPUFn &&cpu_fn, CUDAFn &&cuda_fn) const
根据当前设备调用函数。
定义: context.h:242
bool fail_on_invalid_gpu_id
定义: context.h:162
DeviceOrd Device() const
获取当前设备和序号。
定义: context.h:200
bool IsSycl() const
XGBoost 是否在任何 SYCL 设备上运行?
定义: context.h:193
std::string DeviceName() const
当前设备的名称。
定义: context.h:215
DeviceOrd DeviceFP64() const
获取当前设备和序号,如果它支持 fp64,否则返回默认 CPU。
bool seed_per_iteration
定义: context.h:160
std::int32_t Threads() const
根据 nthread 参数和系统设置返回自动选择的线程数...
bool validate_parameters
定义: context.h:163
std::int64_t seed
定义: context.h:158
Context MakeCUDA(bst_d_ordinal_t ordinal=0) const
基于当前上下文创建一个 CUDA 上下文。
定义: context.h:226
bool IsCPU() const
XGBoost 是否在 CPU 上运行?
定义: context.h:173
CUDAContext const * CUDACtx() const
获取用于分配器和流的 CUDA 设备上下文。
static constexpr std::int64_t kDefaultSeed
定义: context.h:141
bool IsCUDA() const
XGBoost 是否在 CUDA 设备上运行?
定义: context.h:177
bool IsSyclCPU() const
XGBoost 是否在 SYCL CPU 上运行?
定义: context.h:185
std::int32_t nthread
定义: context.h:156
Context MakeCPU() const
基于当前上下文创建一个 CPU 上下文。
定义: context.h:233
bool IsSyclGPU() const
XGBoost 是否在 SYCL GPU 上运行?
定义: context.h:189
bool IsSyclDefault() const
XGBoost 是否在默认 SYCL 设备上运行?
定义: context.h:181
DMLC_DECLARE_PARAMETER(Context)
定义: context.h:279
bst_d_ordinal_t Ordinal() const
获取 CUDA 设备序号。如果 XGBoost 在 CPU 上运行,则为 -1。
定义: context.h:211
void Init(Args const &kwargs)
Args UpdateAllowUnknown(Container const &kwargs)
定义: context.h:149
设备序号的类型。该类型被打包成32位,以便在查看类型(如lin...)时高效使用
Definition: context.h:34
constexpr static auto SyclGPU(bst_d_ordinal_t ordinal=-1)
SYCL GPU 的构造函数。
定义: context.h:95
bool operator==(DeviceOrd const &that) const
定义: context.h:99
bool IsCUDA() const
定义: context.h:44
bool operator!=(DeviceOrd const &that) const
定义: context.h:102
bool IsSyclCPU() const
定义: context.h:47
std::string Name() const
获取设备和序号的字符串表示形式。
定义: context.h:106
enum xgboost::DeviceOrd::Type kCPU
bool IsSyclDefault() const
定义: context.h:46
constexpr DeviceOrd & operator=(DeviceOrd &&that)=default
constexpr DeviceOrd(DeviceOrd &&that)=default
constexpr DeviceOrd & operator=(DeviceOrd const &that)=default
@ kSyclGPU
定义: context.h:40
@ kSyclDefault
定义: context.h:40
@ kSyclCPU
定义: context.h:40
bool IsSyclGPU() const
定义: context.h:48
bool IsCPU() const
定义: context.h:45
static constexpr bst_d_ordinal_t InvalidOrdinal()
定义: context.h:37
static constexpr bst_d_ordinal_t CPUOrdinal()
定义: context.h:36
constexpr DeviceOrd(Type type, bst_d_ordinal_t ord)
定义: context.h:54
constexpr static auto SyclCPU(bst_d_ordinal_t ordinal=-1)
SYCL CPU 的构造函数。
定义: context.h:86
constexpr DeviceOrd()=default
bool IsSycl() const
定义: context.h:49
static constexpr auto CUDA(bst_d_ordinal_t ordinal)
CUDA 设备的构造函数。
定义: context.h:70
constexpr DeviceOrd(DeviceOrd const &that)=default
constexpr static auto CPU()
CPU 的构造函数。
定义: context.h:64
constexpr static auto SyclDefault(bst_d_ordinal_t ordinal=-1)
SYCL 的构造函数。
定义: context.h:78
bst_d_ordinal_t ordinal
定义: context.h:42
static constexpr auto CUDA()
定义: context.h:24
static constexpr auto CPU()
定义: context.h:23
static constexpr auto SyclDefault()
定义: context.h:25
static constexpr auto SyclGPU()
定义: context.h:27
static constexpr auto SyclCPU()
定义: context.h:26
Args UpdateAllowUnknown(Container const &kwargs)
定义: parameter.h:90