From 5785d002e55ed6d0326a4e0f82dbed1a5da7c6d4 Mon Sep 17 00:00:00 2001 From: Georgy Evtushenko Date: Thu, 13 Apr 2023 16:32:19 +0400 Subject: [PATCH] Add jsonlist-devices option --- nvbench/json_printer.cu | 64 +++++++++++++++++++++++----------------- nvbench/json_printer.cuh | 2 ++ nvbench/option_parser.cu | 12 ++++++-- 3 files changed, 49 insertions(+), 29 deletions(-) diff --git a/nvbench/json_printer.cu b/nvbench/json_printer.cu index 6c0e29a..1e2d438 100644 --- a/nvbench/json_printer.cu +++ b/nvbench/json_printer.cu @@ -222,6 +222,35 @@ void json_printer::do_process_bulk_data_float64(state &state, } // end hint == sample_times } +static void add_devices_section(nlohmann::ordered_json &root) +{ + auto &devices = root["devices"]; + for (const auto &dev_info : nvbench::device_manager::get().get_devices()) + { + auto &device = devices.emplace_back(); + device["id"] = dev_info.get_id(); + device["name"] = dev_info.get_name(); + device["sm_version"] = dev_info.get_sm_version(); + device["ptx_version"] = dev_info.get_ptx_version(); + device["sm_default_clock_rate"] = dev_info.get_sm_default_clock_rate(); + device["number_of_sms"] = dev_info.get_number_of_sms(); + device["max_blocks_per_sm"] = dev_info.get_max_blocks_per_sm(); + device["max_threads_per_sm"] = dev_info.get_max_threads_per_sm(); + device["max_threads_per_block"] = dev_info.get_max_threads_per_block(); + device["registers_per_sm"] = dev_info.get_registers_per_sm(); + device["registers_per_block"] = dev_info.get_registers_per_block(); + device["global_memory_size"] = dev_info.get_global_memory_size(); + device["global_memory_bus_peak_clock_rate"] = + dev_info.get_global_memory_bus_peak_clock_rate(); + device["global_memory_bus_width"] = dev_info.get_global_memory_bus_width(); + device["global_memory_bus_bandwidth"] = dev_info.get_global_memory_bus_bandwidth(); + device["l2_cache_size"] = dev_info.get_l2_cache_size(); + device["shared_memory_per_sm"] = dev_info.get_shared_memory_per_sm(); + device["shared_memory_per_block"] = dev_info.get_shared_memory_per_block(); + device["ecc_state"] = dev_info.get_ecc_state(); + } +} + void json_printer::do_print_benchmark_results(const benchmark_vector &benches) { nlohmann::ordered_json root; @@ -274,33 +303,7 @@ void json_printer::do_print_benchmark_results(const benchmark_vector &benches) } // "version" } // "meta" - { - auto &devices = root["devices"]; - for (const auto &dev_info : nvbench::device_manager::get().get_devices()) - { - auto &device = devices.emplace_back(); - device["id"] = dev_info.get_id(); - device["name"] = dev_info.get_name(); - device["sm_version"] = dev_info.get_sm_version(); - device["ptx_version"] = dev_info.get_ptx_version(); - device["sm_default_clock_rate"] = dev_info.get_sm_default_clock_rate(); - device["number_of_sms"] = dev_info.get_number_of_sms(); - device["max_blocks_per_sm"] = dev_info.get_max_blocks_per_sm(); - device["max_threads_per_sm"] = dev_info.get_max_threads_per_sm(); - device["max_threads_per_block"] = dev_info.get_max_threads_per_block(); - device["registers_per_sm"] = dev_info.get_registers_per_sm(); - device["registers_per_block"] = dev_info.get_registers_per_block(); - device["global_memory_size"] = dev_info.get_global_memory_size(); - device["global_memory_bus_peak_clock_rate"] = - dev_info.get_global_memory_bus_peak_clock_rate(); - device["global_memory_bus_width"] = dev_info.get_global_memory_bus_width(); - device["global_memory_bus_bandwidth"] = dev_info.get_global_memory_bus_bandwidth(); - device["l2_cache_size"] = dev_info.get_l2_cache_size(); - device["shared_memory_per_sm"] = dev_info.get_shared_memory_per_sm(); - device["shared_memory_per_block"] = dev_info.get_shared_memory_per_block(); - device["ecc_state"] = dev_info.get_ecc_state(); - } - } // "devices" + add_devices_section(root); { auto &benchmarks = root["benchmarks"]; @@ -498,4 +501,11 @@ void json_printer::do_print_benchmark_list(const benchmark_vector &benches) m_ostream << root.dump(2) << "\n"; } +void json_printer::print_devices_json() +{ + nlohmann::ordered_json root; + add_devices_section(root); + m_ostream << root.dump(2) << "\n"; +} + } // namespace nvbench diff --git a/nvbench/json_printer.cuh b/nvbench/json_printer.cuh index 23875c4..8457687 100644 --- a/nvbench/json_printer.cuh +++ b/nvbench/json_printer.cuh @@ -60,6 +60,8 @@ struct json_printer : nvbench::printer_base [[nodiscard]] bool get_enable_binary_output() const { return m_enable_binary_output; } void set_enable_binary_output(bool b) { m_enable_binary_output = b; } + void print_devices_json(); + protected: // Virtual API from printer_base: void do_log_argv(const std::vector &argv) override { m_argv = argv; } diff --git a/nvbench/option_parser.cu b/nvbench/option_parser.cu index 3d65fff..d1378eb 100644 --- a/nvbench/option_parser.cu +++ b/nvbench/option_parser.cu @@ -403,10 +403,17 @@ void option_parser::parse_range(option_parser::arg_iterator_t first, this->print_list(printer); std::exit(0); } - else if (arg == "--jsonlist" || arg == "-l") + else if (arg == "--jsonlist-benches") { nvbench::json_printer printer{std::cout}; - this->print_list(printer); + const auto &bench_mgr = nvbench::benchmark_manager::get(); + printer.print_benchmark_list(bench_mgr.get_benchmarks()); + std::exit(0); + } + else if (arg == "--jsonlist-devices") + { + nvbench::json_printer printer{std::cout}; + printer.print_devices_json(); std::exit(0); } else if (arg == "--persistence-mode" || arg == "--pm") @@ -590,6 +597,7 @@ void option_parser::print_version() const void option_parser::print_list(printer_base& printer) const { const auto &bench_mgr = nvbench::benchmark_manager::get(); + printer.print_device_info(); printer.print_benchmark_list(bench_mgr.get_benchmarks()); }