Open3D (C++ API)  0.19.0
Loading...
Searching...
No Matches
Device.h
Go to the documentation of this file.
1// ----------------------------------------------------------------------------
2// - Open3D: www.open3d.org -
3// ----------------------------------------------------------------------------
4// Copyright (c) 2018-2024 www.open3d.org
5// SPDX-License-Identifier: MIT
6// ----------------------------------------------------------------------------
7
8#pragma once
9
10#include <string>
11#include <vector>
12
13namespace open3d {
14namespace core {
15
18class Device {
19public:
21 enum class DeviceType {
22 CPU = 0,
23 CUDA = 1,
24 SYCL = 2, // SYCL gpu_selector_v.
25 };
26
28 Device() = default;
29
31 explicit Device(DeviceType device_type, int device_id);
32
35 explicit Device(const std::string& device_type, int device_id);
36
39 Device(const std::string& device_str);
40
41 bool operator==(const Device& other) const;
42
43 bool operator!=(const Device& other) const;
44
45 bool operator<(const Device& other) const;
46
48 inline bool IsCPU() const { return device_type_ == DeviceType::CPU; }
49
51 inline bool IsCUDA() const { return device_type_ == DeviceType::CUDA; }
52
54 inline bool IsSYCL() const { return device_type_ == DeviceType::SYCL; }
55
57 std::string ToString() const;
58
60 inline DeviceType GetType() const { return device_type_; }
61
63 inline int GetID() const { return device_id_; }
64
66 bool IsAvailable() const;
67
69 static std::vector<Device> GetAvailableDevices();
70
72 static std::vector<Device> GetAvailableCPUDevices();
73
75 static std::vector<Device> GetAvailableCUDADevices();
76
78 static std::vector<Device> GetAvailableSYCLDevices();
79
81 static void PrintAvailableDevices();
82
83protected:
85 int device_id_ = 0;
86};
87
90class IsDevice {
91public:
92 IsDevice() = default;
93 virtual ~IsDevice() = default;
94
95 virtual core::Device GetDevice() const = 0;
96
97 inline bool IsCPU() const {
99 }
100
101 inline bool IsCUDA() const {
103 }
104
105 inline bool IsSYCL() const {
107 }
108};
109
110} // namespace core
111} // namespace open3d
112
113namespace std {
114template <>
115struct hash<open3d::core::Device> {
116 std::size_t operator()(const open3d::core::Device& device) const {
117 return std::hash<std::string>{}(device.ToString());
118 }
119};
120
121template <>
122struct less<open3d::core::Device> {
124 const open3d::core::Device& rhs) const {
125 return lhs.ToString() < rhs.ToString();
126 }
127};
128} // namespace std
Definition Device.h:18
bool IsSYCL() const
Returns true iff device type is SYCL GPU.
Definition Device.h:54
bool IsAvailable() const
Returns true if the device is available.
Definition Device.cpp:113
int GetID() const
Returns the device index (within the same device type).
Definition Device.h:63
DeviceType
Type for device.
Definition Device.h:21
static std::vector< Device > GetAvailableSYCLDevices()
Returns a vector of available SYCL device.
Definition Device.cpp:145
bool operator!=(const Device &other) const
Definition Device.cpp:86
DeviceType device_type_
Definition Device.h:84
static void PrintAvailableDevices()
Print all available devices.
Definition Device.cpp:149
bool operator==(const Device &other) const
Definition Device.cpp:81
bool IsCPU() const
Returns true iff device type is CPU.
Definition Device.h:48
Device()=default
Default constructor -> "CPU:0".
static std::vector< Device > GetAvailableCPUDevices()
Returns a vector of available CPU device.
Definition Device.cpp:133
bool operator<(const Device &other) const
Definition Device.cpp:90
bool IsCUDA() const
Returns true iff device type is CUDA.
Definition Device.h:51
int device_id_
Definition Device.h:85
static std::vector< Device > GetAvailableCUDADevices()
Returns a vector of available CUDA device.
Definition Device.cpp:137
std::string ToString() const
Returns string representation of device, e.g. "CPU:0", "CUDA:0".
Definition Device.cpp:94
static std::vector< Device > GetAvailableDevices()
Returns a vector of available devices.
Definition Device.cpp:122
DeviceType GetType() const
Returns type of the device, e.g. DeviceType::CPU, DeviceType::CUDA.
Definition Device.h:60
Definition Device.h:90
bool IsCUDA() const
Definition Device.h:101
virtual core::Device GetDevice() const =0
bool IsSYCL() const
Definition Device.h:105
bool IsCPU() const
Definition Device.h:97
virtual ~IsDevice()=default
Definition PinholeCameraIntrinsic.cpp:16
Definition Device.h:113
std::size_t operator()(const open3d::core::Device &device) const
Definition Device.h:116
bool operator()(const open3d::core::Device &lhs, const open3d::core::Device &rhs) const
Definition Device.h:123