15 #include <sycl/sycl.hpp>
33 return devices_.find(device) != devices_.end();
36 std::vector<Device> device_vec;
37 for (
const auto &device : devices_) {
38 device_vec.push_back(device.first);
44 return devices_.at(device).queue;
48 namespace sid = sycl::info::device;
54 auto aspects =
device.get_info<sid::aspects>();
55 fp64 = std::find(aspects.begin(), aspects.end(), sycl::aspect::fp64) !=
59 "SYCL device {} does not support double precision. Use env "
60 "vars 'OverrideDefaultFP64Settings=1' "
61 "'IGC_EnableDPEmulation=1' to enable double precision "
62 "emulation on Intel GPUs.",
66 std::find(aspects.begin(), aspects.end(),
67 sycl::aspect::usm_device_allocations) != aspects.end();
70 "SYCL device {} does not support USM device allocations. "
71 "CloudViewer SYCL support may not work.",
76 SYCLContext::SYCLContext() {
80 const sycl::device &sycl_device = sycl::device(sycl::gpu_selector_v);
82 devices_.emplace(open3d_device, sycl_device);
83 }
catch (
const sycl::exception &e) {
89 if (devices_.size() == 0) {
93 "SYCL GPU device is not available, falling back to SYCL "
96 const sycl::device &sycl_device = sycl::device(sycl::cpu_selector_v);
97 const Device open3d_device =
99 devices_.emplace(open3d_device, sycl_device);
100 }
catch (
const sycl::exception &e) {
104 if (devices_.size() == 0) {
#define CLOUDVIEWER_DLL_LOCAL
bool IsDeviceAvailable(const Device &device)
Returns true if the specified SYCL device is available.
static SYCLContext & GetInstance()
Get singleton instance.
bool IsAvailable()
Returns true if there is at least one SYCL devices.
sycl::queue GetDefaultQueue(const Device &device)
Get the default SYCL queue given an CloudViewer device.
std::vector< Device > GetAvailableSYCLDevices()
Returns a list of all available SYCL devices.
CLOUDVIEWER_DLL_LOCAL std::string GetDeviceTypeName(const sycl::device &device)
Generic file read and write utility for python interface.
std::string to_string(const T &n)
bool usm_device_allocations
bool fp64
Double precision support, else need to emulate.
SYCLDevice(const sycl::device &sycl_device)
std::string device_type
cpu, gpu, host, acc, custom, unknown.
size_t max_work_group_size
Preferred work group size.
sycl::device device
SYCL device.
std::string name
Fiendlly / descriptive name of the device.
sycl::queue queue
Default queue for this device.