18struct KernelExecutionInfo {
19 double elapsed_summary = 0.0;
20 int enqueue_count = 0;
25OneapiDeviceQueue::OneapiDeviceQueue(OneapiDevice *device)
26 :
DeviceQueue(device), oneapi_device_(device), kernel_context_(nullptr)
30OneapiDeviceQueue::~OneapiDeviceQueue()
32 delete kernel_context_;
35int OneapiDeviceQueue::num_concurrent_states(
const size_t state_size)
const
37 int num_states = 4 * num_concurrent_busy_states(state_size);
45int OneapiDeviceQueue::num_concurrent_busy_states(
const size_t )
const
47 const int max_num_threads = oneapi_device_->get_num_multiprocessors() *
48 oneapi_device_->get_max_num_threads_per_multiprocessor();
50 return 4 *
max(8 * max_num_threads, 65536);
53int OneapiDeviceQueue::num_sort_partition_elements()
const
55 return (oneapi_device_->get_max_num_threads_per_multiprocessor() >= 128) ? 65536 : 8192;
58void OneapiDeviceQueue::init_execution()
60 oneapi_device_->load_texture_info();
62 SyclQueue *device_queue = oneapi_device_->sycl_queue();
63 void *kg_dptr = (
void *)oneapi_device_->kernel_globals_device_pointer();
66 kernel_context_ =
new KernelContext{device_queue, kg_dptr, 0};
68 debug_init_execution();
72 const int signed_kernel_work_size,
75 if (oneapi_device_->have_error()) {
79 void **args =
const_cast<void **
>(_args.
values);
81 debug_enqueue_begin(kernel, signed_kernel_work_size);
82 assert(signed_kernel_work_size >= 0);
83 size_t kernel_global_size = (size_t)signed_kernel_work_size;
84 size_t kernel_local_size;
86 assert(kernel_context_);
87 kernel_context_->scene_max_shaders = oneapi_device_->scene_max_shaders();
89 oneapi_device_->get_adjusted_global_and_local_sizes(
90 kernel_context_->queue, kernel, kernel_global_size, kernel_local_size);
93 bool is_finished_ok = oneapi_device_->enqueue_kernel(
94 kernel_context_, kernel, kernel_global_size, kernel_local_size, args);
96 if (is_finished_ok ==
false) {
98 "\" execution error: got runtime exception \"" +
99 oneapi_device_->oneapi_error_message() +
"\"");
104 return is_finished_ok;
107bool OneapiDeviceQueue::synchronize()
109 if (oneapi_device_->have_error()) {
113 bool is_finished_ok = oneapi_device_->queue_synchronize(oneapi_device_->sycl_queue());
114 if (is_finished_ok ==
false)
115 oneapi_device_->set_error(
"oneAPI unknown kernel execution error: got runtime exception \"" +
116 oneapi_device_->oneapi_error_message() +
"\"");
120 return !(oneapi_device_->have_error());
125 oneapi_device_->mem_zero(mem);
130 oneapi_device_->mem_copy_to(mem);
135 oneapi_device_->mem_copy_from(mem);
#define CCL_NAMESPACE_END
const char * device_kernel_as_string(DeviceKernel kernel)
#define VLOG_DEVICE_STATS
string string_human_readable_size(size_t size)