Skip to content

Commit 263f9ec

Browse files
authored
Merge pull request NVIDIA#131 from senior-zero/enh-main/github/json-device-list
Add list-devices option
2 parents 9d6a60e + 5785d00 commit 263f9ec

File tree

3 files changed

+49
-29
lines changed

3 files changed

+49
-29
lines changed

nvbench/json_printer.cu

+37-27
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,35 @@ void json_printer::do_process_bulk_data_float64(state &state,
222222
} // end hint == sample_times
223223
}
224224

225+
static void add_devices_section(nlohmann::ordered_json &root)
226+
{
227+
auto &devices = root["devices"];
228+
for (const auto &dev_info : nvbench::device_manager::get().get_devices())
229+
{
230+
auto &device = devices.emplace_back();
231+
device["id"] = dev_info.get_id();
232+
device["name"] = dev_info.get_name();
233+
device["sm_version"] = dev_info.get_sm_version();
234+
device["ptx_version"] = dev_info.get_ptx_version();
235+
device["sm_default_clock_rate"] = dev_info.get_sm_default_clock_rate();
236+
device["number_of_sms"] = dev_info.get_number_of_sms();
237+
device["max_blocks_per_sm"] = dev_info.get_max_blocks_per_sm();
238+
device["max_threads_per_sm"] = dev_info.get_max_threads_per_sm();
239+
device["max_threads_per_block"] = dev_info.get_max_threads_per_block();
240+
device["registers_per_sm"] = dev_info.get_registers_per_sm();
241+
device["registers_per_block"] = dev_info.get_registers_per_block();
242+
device["global_memory_size"] = dev_info.get_global_memory_size();
243+
device["global_memory_bus_peak_clock_rate"] =
244+
dev_info.get_global_memory_bus_peak_clock_rate();
245+
device["global_memory_bus_width"] = dev_info.get_global_memory_bus_width();
246+
device["global_memory_bus_bandwidth"] = dev_info.get_global_memory_bus_bandwidth();
247+
device["l2_cache_size"] = dev_info.get_l2_cache_size();
248+
device["shared_memory_per_sm"] = dev_info.get_shared_memory_per_sm();
249+
device["shared_memory_per_block"] = dev_info.get_shared_memory_per_block();
250+
device["ecc_state"] = dev_info.get_ecc_state();
251+
}
252+
}
253+
225254
void json_printer::do_print_benchmark_results(const benchmark_vector &benches)
226255
{
227256
nlohmann::ordered_json root;
@@ -274,33 +303,7 @@ void json_printer::do_print_benchmark_results(const benchmark_vector &benches)
274303
} // "version"
275304
} // "meta"
276305

277-
{
278-
auto &devices = root["devices"];
279-
for (const auto &dev_info : nvbench::device_manager::get().get_devices())
280-
{
281-
auto &device = devices.emplace_back();
282-
device["id"] = dev_info.get_id();
283-
device["name"] = dev_info.get_name();
284-
device["sm_version"] = dev_info.get_sm_version();
285-
device["ptx_version"] = dev_info.get_ptx_version();
286-
device["sm_default_clock_rate"] = dev_info.get_sm_default_clock_rate();
287-
device["number_of_sms"] = dev_info.get_number_of_sms();
288-
device["max_blocks_per_sm"] = dev_info.get_max_blocks_per_sm();
289-
device["max_threads_per_sm"] = dev_info.get_max_threads_per_sm();
290-
device["max_threads_per_block"] = dev_info.get_max_threads_per_block();
291-
device["registers_per_sm"] = dev_info.get_registers_per_sm();
292-
device["registers_per_block"] = dev_info.get_registers_per_block();
293-
device["global_memory_size"] = dev_info.get_global_memory_size();
294-
device["global_memory_bus_peak_clock_rate"] =
295-
dev_info.get_global_memory_bus_peak_clock_rate();
296-
device["global_memory_bus_width"] = dev_info.get_global_memory_bus_width();
297-
device["global_memory_bus_bandwidth"] = dev_info.get_global_memory_bus_bandwidth();
298-
device["l2_cache_size"] = dev_info.get_l2_cache_size();
299-
device["shared_memory_per_sm"] = dev_info.get_shared_memory_per_sm();
300-
device["shared_memory_per_block"] = dev_info.get_shared_memory_per_block();
301-
device["ecc_state"] = dev_info.get_ecc_state();
302-
}
303-
} // "devices"
306+
add_devices_section(root);
304307

305308
{
306309
auto &benchmarks = root["benchmarks"];
@@ -498,4 +501,11 @@ void json_printer::do_print_benchmark_list(const benchmark_vector &benches)
498501
m_ostream << root.dump(2) << "\n";
499502
}
500503

504+
void json_printer::print_devices_json()
505+
{
506+
nlohmann::ordered_json root;
507+
add_devices_section(root);
508+
m_ostream << root.dump(2) << "\n";
509+
}
510+
501511
} // namespace nvbench

nvbench/json_printer.cuh

+2
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ struct json_printer : nvbench::printer_base
6060
[[nodiscard]] bool get_enable_binary_output() const { return m_enable_binary_output; }
6161
void set_enable_binary_output(bool b) { m_enable_binary_output = b; }
6262

63+
void print_devices_json();
64+
6365
protected:
6466
// Virtual API from printer_base:
6567
void do_log_argv(const std::vector<std::string> &argv) override { m_argv = argv; }

nvbench/option_parser.cu

+10-2
Original file line numberDiff line numberDiff line change
@@ -403,10 +403,17 @@ void option_parser::parse_range(option_parser::arg_iterator_t first,
403403
this->print_list(printer);
404404
std::exit(0);
405405
}
406-
else if (arg == "--jsonlist" || arg == "-l")
406+
else if (arg == "--jsonlist-benches")
407407
{
408408
nvbench::json_printer printer{std::cout};
409-
this->print_list(printer);
409+
const auto &bench_mgr = nvbench::benchmark_manager::get();
410+
printer.print_benchmark_list(bench_mgr.get_benchmarks());
411+
std::exit(0);
412+
}
413+
else if (arg == "--jsonlist-devices")
414+
{
415+
nvbench::json_printer printer{std::cout};
416+
printer.print_devices_json();
410417
std::exit(0);
411418
}
412419
else if (arg == "--persistence-mode" || arg == "--pm")
@@ -590,6 +597,7 @@ void option_parser::print_version() const
590597
void option_parser::print_list(printer_base& printer) const
591598
{
592599
const auto &bench_mgr = nvbench::benchmark_manager::get();
600+
printer.print_device_info();
593601
printer.print_benchmark_list(bench_mgr.get_benchmarks());
594602
}
595603

0 commit comments

Comments
 (0)