[Bf-blender-cvs] [cba113a953c] cycles_oneapi: Cycles: finish removing oneAPI custom kernel stats
Xavier Hallade
noreply at git.blender.org
Fri Jun 3 15:19:29 CEST 2022
Commit: cba113a953c610fabd4507a80b2781f311e43c8a
Author: Xavier Hallade
Date: Fri Jun 3 15:15:27 2022 +0200
Branches: cycles_oneapi
https://developer.blender.org/rBcba113a953c610fabd4507a80b2781f311e43c8a
Cycles: finish removing oneAPI custom kernel stats
===================================================================
M intern/cycles/device/oneapi/queue.cpp
M intern/cycles/kernel/device/oneapi/kernel.cpp
M intern/cycles/kernel/device/oneapi/kernel.h
===================================================================
diff --git a/intern/cycles/device/oneapi/queue.cpp b/intern/cycles/device/oneapi/queue.cpp
index 7d559236606..0d68e31b0e3 100644
--- a/intern/cycles/device/oneapi/queue.cpp
+++ b/intern/cycles/device/oneapi/queue.cpp
@@ -19,67 +19,6 @@ struct KernelExecutionInfo {
int enqueue_count = 0;
};
-// TODO: Use or extend base Queue implementation for statistics.
-struct OneapiKernelStats {
- OneapiKernelStats(){};
- ~OneapiKernelStats()
- {
- }
-
- void print_and_reset()
- {
- if (stats_data.size() != 0) {
- std::vector<std::pair<DeviceKernel, KernelExecutionInfo>> stats_sorted;
- for (const auto &stat : stats_data) {
- stats_sorted.push_back(stat);
- }
-
- sort(stats_sorted.begin(),
- stats_sorted.end(),
- [](const std::pair<DeviceKernel, KernelExecutionInfo> &a,
- const std::pair<DeviceKernel, KernelExecutionInfo> &b) {
- return a.second.elapsed_summary > b.second.elapsed_summary;
- });
-
- VLOG(1) << "oneAPI execution kernels statistics:";
- double summary = 0.0;
- for (const std::pair<DeviceKernel, KernelExecutionInfo> &iter : stats_sorted) {
- VLOG(1) << " " << std::setfill(' ') << std::setw(10) << std::fixed << std::setprecision(5)
- << std::right << iter.second.elapsed_summary
- << "s: " << device_kernel_as_string(iter.first) << " ("
- << iter.second.enqueue_count << " runs)";
- summary += iter.second.elapsed_summary;
- }
- VLOG(1) << "Total measured kernel execution time: " << std::fixed << std::setprecision(5)
- << summary << "s";
-
- stats_data.clear();
- active_kernels.clear();
- }
- }
-
- void kernel_enqueued(DeviceKernel kernel)
- {
- assert(active_kernels.find(kernel) == active_kernels.end());
- active_kernels[kernel] = time_dt();
- }
-
- void kernel_finished(DeviceKernel kernel, unsigned int /*kernel_work_size*/)
- {
- assert(active_kernels.find(kernel) != active_kernels.end());
- double elapsed_time = time_dt() - active_kernels[kernel];
- active_kernels.erase(kernel);
-
- stats_data[kernel].elapsed_summary += elapsed_time;
- stats_data[kernel].enqueue_count += 1;
- }
-
- std::map<DeviceKernel, KernelExecutionInfo> stats_data;
- std::map<DeviceKernel, double> active_kernels;
-};
-
-static OneapiKernelStats global_kernel_stats;
-
/* OneapiDeviceQueue */
OneapiDeviceQueue::OneapiDeviceQueue(OneapiDevice *device)
@@ -88,21 +27,11 @@ OneapiDeviceQueue::OneapiDeviceQueue(OneapiDevice *device)
oneapi_dll_(device->oneapi_dll_object()),
kernel_context_(nullptr)
{
- if (getenv("CYCLES_ONEAPI_KERNEL_STATS") != nullptr && VLOG_IS_ON(1)) {
- with_kernel_statistics_ = true;
- }
- else {
- with_kernel_statistics_ = false;
- }
}
OneapiDeviceQueue::~OneapiDeviceQueue()
{
delete kernel_context_;
-
- if (with_kernel_statistics_) {
- global_kernel_stats.print_and_reset();
- }
}
int OneapiDeviceQueue::num_concurrent_states(const size_t state_size) const
@@ -162,7 +91,7 @@ void OneapiDeviceQueue::init_execution()
void *kg_dptr = (void *)oneapi_device_->kernel_globals_device_pointer();
assert(device_queue);
assert(kg_dptr);
- kernel_context_ = new KernelContext{device_queue, kg_dptr, with_kernel_statistics_};
+ kernel_context_ = new KernelContext{device_queue, kg_dptr};
debug_init_execution();
}
@@ -187,16 +116,10 @@ bool OneapiDeviceQueue::enqueue(DeviceKernel kernel,
assert(kernel_context_);
- if (with_kernel_statistics_)
- global_kernel_stats.kernel_enqueued(kernel);
-
/* Call the oneAPI kernel DLL to launch the requested kernel. */
bool is_finished_ok = oneapi_dll_.oneapi_enqueue_kernel(
kernel_context_, kernel, uniformed_kernel_work_size, args);
- if (with_kernel_statistics_)
- global_kernel_stats.kernel_finished(kernel, uniformed_kernel_work_size);
-
if (is_finished_ok == false) {
oneapi_device_->set_error("oneAPI kernel \"" + std::string(device_kernel_as_string(kernel)) +
"\" execution error: got runtime exception \"" +
diff --git a/intern/cycles/kernel/device/oneapi/kernel.cpp b/intern/cycles/kernel/device/oneapi/kernel.cpp
index 9429badc62c..141f25dd357 100644
--- a/intern/cycles/kernel/device/oneapi/kernel.cpp
+++ b/intern/cycles/kernel/device/oneapi/kernel.cpp
@@ -619,9 +619,6 @@ bool oneapi_enqueue_kernel(KernelContext *kernel_context,
assert(0);
return false;
});
- if (kernel_context->with_per_kernel_statistics) {
- queue->wait_and_throw();
- }
}
catch (sycl::exception const &e) {
if (s_error_cb) {
diff --git a/intern/cycles/kernel/device/oneapi/kernel.h b/intern/cycles/kernel/device/oneapi/kernel.h
index 606238f5919..70aca382f21 100644
--- a/intern/cycles/kernel/device/oneapi/kernel.h
+++ b/intern/cycles/kernel/device/oneapi/kernel.h
@@ -37,8 +37,6 @@ struct KernelContext {
SyclQueue *queue;
// Pointer to USM device memory with all global/constant allocation on this device
void *kernel_globals;
- // true, if Blender user have requested per-kernel statistics, overwise false
- bool with_per_kernel_statistics;
};
/* Use extern C linking so that the symbols can be easily load from the dynamic library at runtime.
More information about the Bf-blender-cvs
mailing list