17 struct KernelExecutionInfo {
18 double elapsed_summary = 0.0;
19 int enqueue_count = 0;
24 OneapiDeviceQueue::OneapiDeviceQueue(OneapiDevice *device)
26 oneapi_device_(device),
27 oneapi_dll_(device->oneapi_dll_object()),
28 kernel_context_(nullptr)
32 OneapiDeviceQueue::~OneapiDeviceQueue()
34 delete kernel_context_;
37 int OneapiDeviceQueue::num_concurrent_states(
const size_t state_size)
const
39 const int max_num_threads = oneapi_device_->get_num_multiprocessors() *
40 oneapi_device_->get_max_num_threads_per_multiprocessor();
49 int OneapiDeviceQueue::num_concurrent_busy_states()
const
51 const int max_num_threads = oneapi_device_->get_num_multiprocessors() *
52 oneapi_device_->get_max_num_threads_per_multiprocessor();
54 return 4 *
max(8 * max_num_threads, 65536);
59 oneapi_device_->load_texture_info();
61 SyclQueue *device_queue = oneapi_device_->sycl_queue();
62 void *kg_dptr = (
void *)oneapi_device_->kernel_globals_device_pointer();
65 kernel_context_ =
new KernelContext{device_queue, kg_dptr};
67 debug_init_execution();
71 const int signed_kernel_work_size,
74 if (oneapi_device_->have_error()) {
78 void **args =
const_cast<void **
>(_args.
values);
80 debug_enqueue(
kernel, signed_kernel_work_size);
81 assert(signed_kernel_work_size >= 0);
82 size_t kernel_work_size = (size_t)signed_kernel_work_size;
84 size_t kernel_local_size = oneapi_dll_.oneapi_kernel_preferred_local_size(
86 size_t uniformed_kernel_work_size =
round_up(kernel_work_size, kernel_local_size);
88 assert(kernel_context_);
91 bool is_finished_ok = oneapi_dll_.oneapi_enqueue_kernel(
92 kernel_context_,
kernel, uniformed_kernel_work_size, args);
94 if (is_finished_ok ==
false) {
96 "\" execution error: got runtime exception \"" +
97 oneapi_device_->oneapi_error_message() +
"\"");
100 return is_finished_ok;
103 bool OneapiDeviceQueue::synchronize()
105 if (oneapi_device_->have_error()) {
109 bool is_finished_ok = oneapi_dll_.oneapi_queue_synchronize(oneapi_device_->sycl_queue());
110 if (is_finished_ok ==
false)
111 oneapi_device_->set_error(
"oneAPI unknown kernel execution error: got runtime exception \"" +
112 oneapi_device_->oneapi_error_message() +
"\"");
116 return !(oneapi_device_->have_error());
121 oneapi_device_->mem_zero(mem);
126 oneapi_device_->mem_copy_to(mem);
131 oneapi_device_->mem_copy_from(mem);
#define CCL_NAMESPACE_END
CCL_NAMESPACE_BEGIN const char * device_kernel_as_string(DeviceKernel kernel)
SyclQueue void void size_t num_bytes SyclQueue void const char void *memory_device_pointer KernelContext int kernel
static struct ImBuf * init_execution(const SeqRenderData *context, ImBuf *ibuf1, ImBuf *ibuf2, ImBuf *ibuf3)
#define VLOG_DEVICE_STATS
string string_human_readable_size(size_t size)
ccl_device_inline size_t round_up(size_t x, size_t multiple)