Open3D (C++ API)  0.17.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-2023 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().
25 };
26
28 Device() = default;
29
31 explicit Device(DeviceType device_type, int device_id);
32
34 explicit Device(const std::string& device_type, int device_id);
35
37 explicit Device(const std::string& type_colon_id);
38
39 bool operator==(const Device& other) const;
40
41 bool operator!=(const Device& other) const;
42
43 bool operator<(const Device& other) const;
44
46 inline bool IsCPU() const { return device_type_ == DeviceType::CPU; }
47
49 inline bool IsCUDA() const { return device_type_ == DeviceType::CUDA; }
50
52 inline bool IsSYCL() const { return device_type_ == DeviceType::SYCL; }
53
55 std::string ToString() const;
56
58 inline DeviceType GetType() const { return device_type_; }
59
61 inline int GetID() const { return device_id_; }
62
64 bool IsAvailable() const;
65
67 static std::vector<Device> GetAvailableDevices();
68
70 static std::vector<Device> GetAvailableCPUDevices();
71
73 static std::vector<Device> GetAvailableCUDADevices();
74
76 static std::vector<Device> GetAvailableSYCLDevices();
77
79 static void PrintAvailableDevices();
80
81protected:
83 int device_id_ = 0;
84};
85
88class IsDevice {
89public:
90 IsDevice() = default;
91 virtual ~IsDevice() = default;
92
93 virtual core::Device GetDevice() const = 0;
94
95 inline bool IsCPU() const {
97 }
98
99 inline bool IsCUDA() const {
101 }
102};
103
104} // namespace core
105} // namespace open3d
106
107namespace std {
108template <>
109struct hash<open3d::core::Device> {
110 std::size_t operator()(const open3d::core::Device& device) const {
111 return std::hash<std::string>{}(device.ToString());
112 }
113};
114} // namespace std
Definition Device.h:18
bool IsSYCL() const
Returns true iff device type is SYCL GPU.
Definition Device.h:52
bool IsAvailable() const
Returns true if the device is available.
Definition Device.cpp:107
int GetID() const
Returns the device index (within the same device type).
Definition Device.h:61
DeviceType
Type for device.
Definition Device.h:21
static std::vector< Device > GetAvailableSYCLDevices()
Returns a vector of available SYCL device.
Definition Device.cpp:139
bool operator!=(const Device &other) const
Definition Device.cpp:80
DeviceType device_type_
Definition Device.h:82
static void PrintAvailableDevices()
Print all available devices.
Definition Device.cpp:143
bool operator==(const Device &other) const
Definition Device.cpp:75
bool IsCPU() const
Returns true iff device type is CPU.
Definition Device.h:46
Device()=default
Default constructor -> "CPU:0".
static std::vector< Device > GetAvailableCPUDevices()
Returns a vector of available CPU device.
Definition Device.cpp:127
bool operator<(const Device &other) const
Definition Device.cpp:84
bool IsCUDA() const
Returns true iff device type is CUDA.
Definition Device.h:49
int device_id_
Definition Device.h:83
static std::vector< Device > GetAvailableCUDADevices()
Returns a vector of available CUDA device.
Definition Device.cpp:131
std::string ToString() const
Returns string representation of device, e.g. "CPU:0", "CUDA:0".
Definition Device.cpp:88
static std::vector< Device > GetAvailableDevices()
Returns a vector of available devices.
Definition Device.cpp:116
DeviceType GetType() const
Returns type of the device, e.g. DeviceType::CPU, DeviceType::CUDA.
Definition Device.h:58
Definition Device.h:88
bool IsCUDA() const
Definition Device.h:99
virtual core::Device GetDevice() const =0
bool IsCPU() const
Definition Device.h:95
virtual ~IsDevice()=default
Definition PinholeCameraIntrinsic.cpp:16
Definition Device.h:107
std::size_t operator()(const open3d::core::Device &device) const
Definition Device.h:110