18using OneAPIDeviceIteratorCallback =
19 void (*)(
const char *,
const char *,
const int, bool, bool, bool,
void *);
23 SyclQueue *device_queue_ =
nullptr;
24# ifdef WITH_EMBREE_GPU
25 RTCDevice embree_device =
nullptr;
26# if RTC_VERSION >= 40400
29 RTCScene embree_traversable =
nullptr;
31# if RTC_VERSION >= 40302
33 vector<RTCScene> all_embree_scenes;
36 using ConstMemMap = map<string, unique_ptr<device_vector<uchar>>>;
37 ConstMemMap const_mem_map_;
38 void *kg_memory_ =
nullptr;
39 void *kg_memory_device_ =
nullptr;
40 size_t kg_memory_size_ = 0;
41 size_t max_memory_on_device_ = 0;
42 std::string oneapi_error_string_;
43 bool use_hardware_raytracing =
false;
44 unsigned int kernel_features = 0;
45 int scene_max_shaders_ = 0;
54 bool is_several_intel_dgpu_devices_detected =
false;
56 size_t get_free_mem()
const;
61 OneapiDevice(
const DeviceInfo &info, Stats &stats, Profiler &profiler,
bool headless);
63 ~OneapiDevice()
override;
64# ifdef WITH_EMBREE_GPU
71 void reserve_private_memory(
const uint kernel_features);
73 string oneapi_error_message();
75 int scene_max_shaders();
77 void *kernel_globals_device_pointer();
80 void mem_alloc(device_memory &mem)
override;
84 device_memory &mem,
const size_t y,
size_t w,
const size_t h,
size_t elem)
override;
89 void mem_zero(device_memory &mem)
override;
90 void mem_free(device_memory &mem)
override;
95 void global_alloc(device_memory &mem);
96 void global_copy_to(device_memory &mem);
97 void global_free(device_memory &mem);
100 void tex_alloc(device_texture &mem);
101 void tex_copy_to(device_texture &mem);
102 void tex_free(device_texture &mem);
124 const bool log)
override;
130 void *usm_aligned_alloc_host(
const size_t memory_size,
const size_t alignment);
131 void usm_free(
void *usm_ptr);
133 static void architecture_information(
const SyclDevice *device,
string &
name,
bool &is_optimized);
135 static void iterate_devices(OneAPIDeviceIteratorCallback cb,
void *user_ptr);
137 size_t get_memcapacity();
138 int get_num_multiprocessors();
139 int get_max_num_threads_per_multiprocessor();
140 bool queue_synchronize(SyclQueue *queue);
141 bool kernel_globals_size(
size_t &kernel_global_size);
142 void set_global_memory(SyclQueue *queue,
143 void *kernel_globals,
144 const char *memory_name,
145 void *memory_device_pointer);
146 bool enqueue_kernel(KernelContext *kernel_context,
148 const size_t global_size,
149 const size_t local_size,
151 void get_adjusted_global_and_local_sizes(SyclQueue *queue,
153 size_t &kernel_global_size,
154 size_t &kernel_local_size);
155 SyclQueue *sycl_queue();
158 bool can_use_hardware_raytracing_for_features(
const uint requested_features)
const;
159 void check_usm(SyclQueue *queue,
const void *usm_ptr,
bool allow_host);
160 bool create_queue(SyclQueue *&external_queue,
161 const int device_index,
163 bool *is_several_intel_dgpu_devices_detected_pointer);
164 void free_queue(SyclQueue *queue);
165 void *usm_aligned_alloc_host(SyclQueue *queue,
const size_t memory_size,
const size_t alignment);
166 void *usm_alloc_device(SyclQueue *queue,
const size_t memory_size);
167 void usm_free(SyclQueue *queue,
void *usm_ptr);
168 bool usm_memcpy(SyclQueue *queue,
void *dest,
void *src,
const size_t num_bytes);
169 bool usm_memset(SyclQueue *queue,
void *usm_ptr,
unsigned char value,
const size_t num_bytes);
void BLI_kdtree_nd_ free(KDTree *tree)
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
void refit(btStridingMeshInterface *triangles, const btVector3 &aabbMin, const btVector3 &aabbMax)
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
virtual void host_free(const MemoryType type, void *host_pointer, const size_t size)
virtual void mem_move_to_host(device_memory &mem)=0
virtual void mem_zero(device_memory &mem)=0
virtual unique_ptr< DeviceQueue > gpu_queue_create()
virtual void const_copy_to(const char *name, void *host, const size_t size)=0
virtual void build_bvh(BVH *bvh, Progress &progress, bool refit)
virtual bool load_kernels(uint)
virtual BVHLayoutMask get_bvh_layout_mask(const uint kernel_features) const =0
virtual bool should_use_graphics_interop(const GraphicsInteropDevice &, const bool=false)
virtual bool check_peer_access(Device *)
virtual void mem_free(device_memory &mem)=0
virtual void mem_copy_from(device_memory &mem, const size_t y, size_t w, const size_t h, size_t elem)=0
virtual void mem_copy_to(device_memory &mem)=0
virtual device_ptr mem_alloc_sub_ptr(device_memory &, size_t, size_t)
static string device_capabilities(const uint device_type_mask=DEVICE_MASK_ALL)
virtual void mem_alloc(device_memory &mem)=0
virtual void * host_alloc(const MemoryType type, const size_t size)
#define CCL_NAMESPACE_END
ccl_device bool BVH_FUNCTION_FULL_NAME BVH(KernelGlobals kg, const ccl_private Ray *ray, ccl_private LocalIntersection *local_isect, const int local_object, ccl_private uint *lcg_state, const int max_hits)
virtual bool shared_alloc(void *&shared_pointer, const size_t size)=0
virtual void shared_free(void *shared_pointer)=0
virtual void get_device_memory_info(size_t &total, size_t &free)=0
virtual bool alloc_device(void *&device_pointer, const size_t size)=0
virtual void * shared_to_device_pointer(const void *shared_pointer)=0
virtual void copy_host_to_device(void *device_pointer, void *host_pointer, const size_t size)=0
virtual void free_device(void *device_pointer)=0