From 46f3af08c682b198e51e097c944868c1794eed84 Mon Sep 17 00:00:00 2001 From: jorgep31415 Date: Fri, 17 Jan 2025 13:17:18 -0800 Subject: [PATCH 1/2] [ET-VK] Print op breakdown with tab separator Use boolean flag to switch between nicely-formatted space separator and spreadsheet-ready tab operator. Motiviation is similar to https://github.com/pytorch/executorch/pull/7035 in facilitating copy-paste of results to a gsheet. Differential Revision: [D68345444](https://our.internmc.facebook.com/intern/diff/D68345444/) [ghstack-poisoned] --- backends/vulkan/runtime/vk_api/QueryPool.cpp | 40 +++++++++++++++++++- backends/vulkan/runtime/vk_api/QueryPool.h | 6 ++- 2 files changed, 42 insertions(+), 4 deletions(-) diff --git a/backends/vulkan/runtime/vk_api/QueryPool.cpp b/backends/vulkan/runtime/vk_api/QueryPool.cpp index 943911d19d0..872860a3824 100644 --- a/backends/vulkan/runtime/vk_api/QueryPool.cpp +++ b/backends/vulkan/runtime/vk_api/QueryPool.cpp @@ -233,9 +233,45 @@ std::string QueryPool::generate_string_report() { return ss.str(); } -void QueryPool::print_results() { + +std::string QueryPool::generate_tabbed_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 tabbed) { EARLY_RETURN_IF_UNINITIALIZED(); - std::cout << generate_string_report() << std::endl; + if (tabbed) { + std::cout << generate_tabbed_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..904697f5c00 100644 --- a/backends/vulkan/runtime/vk_api/QueryPool.h +++ b/backends/vulkan/runtime/vk_api/QueryPool.h @@ -99,14 +99,16 @@ class QueryPool final { std::vector> get_shader_timestamp_data(); - std::string generate_string_report(); - void print_results(); + void print_results(const bool tabbed = 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_tabbed_string_report(); }; } // namespace vkapi From 798ea38621980c50cb7680c0cb9d496a4d4cc525 Mon Sep 17 00:00:00 2001 From: jorgep31415 Date: Fri, 17 Jan 2025 14:48:33 -0800 Subject: [PATCH 2/2] Update on "[ET-VK] Print op breakdown with tab separator" Use boolean flag to switch between nicely-formatted space separator and spreadsheet-ready tab operator. Motiviation is similar to https://github.com/pytorch/executorch/pull/7035 in facilitating copy-paste of results to a gsheet. Differential Revision: [D68345444](https://our.internmc.facebook.com/intern/diff/D68345444/) [ghstack-poisoned] --- backends/vulkan/runtime/vk_api/QueryPool.cpp | 8 ++++---- backends/vulkan/runtime/vk_api/QueryPool.h | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/backends/vulkan/runtime/vk_api/QueryPool.cpp b/backends/vulkan/runtime/vk_api/QueryPool.cpp index 872860a3824..032385e7f2b 100644 --- a/backends/vulkan/runtime/vk_api/QueryPool.cpp +++ b/backends/vulkan/runtime/vk_api/QueryPool.cpp @@ -234,7 +234,7 @@ std::string QueryPool::generate_string_report() { } -std::string QueryPool::generate_tabbed_string_report() { +std::string QueryPool::generate_tsv_string_report() { std::lock_guard lock(mutex_); std::stringstream ss; @@ -265,10 +265,10 @@ std::string QueryPool::generate_tabbed_string_report() { return ss.str(); } -void QueryPool::print_results(const bool tabbed) { +void QueryPool::print_results(const bool tsv_format) { EARLY_RETURN_IF_UNINITIALIZED(); - if (tabbed) { - std::cout << generate_tabbed_string_report() << std::endl; + if (tsv_format) { + std::cout << generate_tsv_string_report() << std::endl; } else { std::cout << generate_string_report() << std::endl; } diff --git a/backends/vulkan/runtime/vk_api/QueryPool.h b/backends/vulkan/runtime/vk_api/QueryPool.h index 904697f5c00..56380dc630d 100644 --- a/backends/vulkan/runtime/vk_api/QueryPool.h +++ b/backends/vulkan/runtime/vk_api/QueryPool.h @@ -99,7 +99,7 @@ class QueryPool final { std::vector> get_shader_timestamp_data(); - void print_results(const bool tabbed = false); + 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); @@ -108,7 +108,7 @@ class QueryPool final { } private: std::string generate_string_report(); - std::string generate_tabbed_string_report(); + std::string generate_tsv_string_report(); }; } // namespace vkapi