diff --git a/backends/vulkan/runtime/vk_api/QueryPool.cpp b/backends/vulkan/runtime/vk_api/QueryPool.cpp index 943911d19d0..6ebda7b7ef4 100644 --- a/backends/vulkan/runtime/vk_api/QueryPool.cpp +++ b/backends/vulkan/runtime/vk_api/QueryPool.cpp @@ -233,9 +233,44 @@ std::string QueryPool::generate_string_report() { return ss.str(); } -void QueryPool::print_results() { +std::string QueryPool::generate_tsv_string_report() { + std::lock_guard lock(mutex_); + + std::stringstream ss; + + ss << "Kernel Name\t"; + ss << "Global Workgroup Size\t"; + ss << "Local Workgroup Size\t"; + ss << "Duration (ns)\t"; + ss << std::endl; + + ss << "===========\t"; + ss << "=====================\t"; + ss << "====================\t"; + ss << "=============\t"; + ss << std::endl; + + for (ShaderDuration& entry : shader_durations_) { + std::chrono::duration exec_duration_ns( + entry.execution_duration_ns); + + ss << entry.kernel_name << "\t"; + ss << stringize(entry.global_workgroup_size) << "\t"; + ss << stringize(entry.local_workgroup_size) << "\t"; + ss << exec_duration_ns.count() << "\t"; + ss << std::endl; + } + + return ss.str(); +} + +void QueryPool::print_results(const bool tsv_format) { EARLY_RETURN_IF_UNINITIALIZED(); - std::cout << generate_string_report() << std::endl; + if (tsv_format) { + std::cout << generate_tsv_string_report() << std::endl; + } else { + std::cout << generate_string_report() << std::endl; + } } unsigned long QueryPool::get_total_shader_ns(std::string kernel_name) { diff --git a/backends/vulkan/runtime/vk_api/QueryPool.h b/backends/vulkan/runtime/vk_api/QueryPool.h index fb7a8cd9e20..a94ea101760 100644 --- a/backends/vulkan/runtime/vk_api/QueryPool.h +++ b/backends/vulkan/runtime/vk_api/QueryPool.h @@ -99,14 +99,17 @@ class QueryPool final { std::vector> get_shader_timestamp_data(); - std::string generate_string_report(); - void print_results(); + void print_results(const bool tsv_format = false); unsigned long get_total_shader_ns(std::string kernel_name); unsigned long get_mean_shader_ns(std::string kernel_name); operator bool() const { return querypool_ != VK_NULL_HANDLE; } + + private: + std::string generate_string_report(); + std::string generate_tsv_string_report(); }; } // namespace vkapi