16struct KernelExecutionInfo {
17 double elapsed_summary = 0.0;
18 int enqueue_count = 0;
23OneapiDeviceQueue::OneapiDeviceQueue(OneapiDevice *device)
28int OneapiDeviceQueue::num_concurrent_states(
const size_t state_size)
const
30 int num_states = 4 * num_concurrent_busy_states(state_size);
38int OneapiDeviceQueue::num_concurrent_busy_states(
const size_t )
const
40 const int max_num_threads = oneapi_device_->get_num_multiprocessors() *
41 oneapi_device_->get_max_num_threads_per_multiprocessor();
43 return 4 *
max(8 * max_num_threads, 65536);
46int OneapiDeviceQueue::num_sort_partitions(
int max_num_paths,
uint )
const
48 int sort_partition_elements = (oneapi_device_->get_max_num_threads_per_multiprocessor() >= 128) ?
53 return max(max_num_paths / sort_partition_elements, 1);
56void OneapiDeviceQueue::init_execution()
58 oneapi_device_->load_texture_info();
60 SyclQueue *device_queue = oneapi_device_->sycl_queue();
61 void *kg_dptr = oneapi_device_->kernel_globals_device_pointer();
64 kernel_context_ = make_unique<KernelContext>();
65 kernel_context_->queue = device_queue;
66 kernel_context_->kernel_globals = kg_dptr;
68 debug_init_execution();
72 const int signed_kernel_work_size,
75 if (oneapi_device_->have_error()) {
80 if (oneapi_device_->load_texture_info()) {
86 void **args =
const_cast<void **
>(_args.
values);
88 debug_enqueue_begin(kernel, signed_kernel_work_size);
89 assert(signed_kernel_work_size >= 0);
90 size_t kernel_global_size = (size_t)signed_kernel_work_size;
91 size_t kernel_local_size;
94 kernel_context_->scene_max_shaders = oneapi_device_->scene_max_shaders();
96 oneapi_device_->get_adjusted_global_and_local_sizes(
97 kernel_context_->queue, kernel, kernel_global_size, kernel_local_size);
100 bool is_finished_ok = oneapi_device_->enqueue_kernel(
101 kernel_context_.get(), kernel, kernel_global_size, kernel_local_size, args);
103 if (is_finished_ok ==
false) {
105 "\" execution error: got runtime exception \"" +
106 oneapi_device_->oneapi_error_message() +
"\"");
111 return is_finished_ok;
114bool OneapiDeviceQueue::synchronize()
116 if (oneapi_device_->have_error()) {
120 bool is_finished_ok = oneapi_device_->queue_synchronize(oneapi_device_->sycl_queue());
121 if (is_finished_ok ==
false) {
122 oneapi_device_->set_error(
"oneAPI unknown kernel execution error: got runtime exception \"" +
123 oneapi_device_->oneapi_error_message() +
"\"");
128 return !(oneapi_device_->have_error());
133 oneapi_device_->mem_zero(mem);
138 oneapi_device_->mem_copy_to(mem);
143 oneapi_device_->mem_copy_from(mem);
146# ifdef SYCL_LINEAR_MEMORY_INTEROP_AVAILABLE
149 return make_unique<OneapiDeviceGraphicsInterop>(
this);
#define CCL_NAMESPACE_END
const char * device_kernel_as_string(DeviceKernel kernel)
#define assert(assertion)
string string_human_readable_size(size_t size)