From 5c90577dfd365acde14ed6a7e99aa17cf4c6f6e4 Mon Sep 17 00:00:00 2001 From: Cedric Nugteren Date: Mon, 30 Oct 2017 20:39:21 +0100 Subject: Added collecting and printing of scores for the kernel-selection tuner --- src/utilities/timing.hpp | 37 ++++++++++++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) (limited to 'src/utilities/timing.hpp') diff --git a/src/utilities/timing.hpp b/src/utilities/timing.hpp index 4622aa99..423e6e2b 100644 --- a/src/utilities/timing.hpp +++ b/src/utilities/timing.hpp @@ -65,13 +65,18 @@ std::vector TimeRoutine(const size_t from, const size_t to, const size_t // ================================================================================================= +using TuningParameter = std::pair; +using TuningParameters = std::vector; +struct TuningResult { std::string name; double score; TuningParameters parameters; }; + void PrintTimingsToFileAsJSON(const std::string &filename, const Device& device, const Platform& platform, - const std::vector> &descriptions) { + const std::vector> &metadata, + const std::vector& tuning_results) { auto file = fopen(filename.c_str(), "w"); fprintf(file, "{\n"); - for (auto &description: descriptions) { - fprintf(file, " \"%s\": \"%s\",\n", description.first.c_str(), description.second.c_str()); + for (auto &datum: metadata) { + fprintf(file, " \"%s\": \"%s\",\n", datum.first.c_str(), datum.second.c_str()); } fprintf(file, " \"platform_version\": \"%s\",\n", platform.Version().c_str()); fprintf(file, " \"device_name\": \"%s\",\n", GetDeviceName(device).c_str()); @@ -80,6 +85,32 @@ void PrintTimingsToFileAsJSON(const std::string &filename, fprintf(file, " \"device_architecture\": \"%s\",\n", GetDeviceArchitecture(device).c_str()); fprintf(file, " \"device_core_clock\": \"%zu\",\n", device.CoreClock()); fprintf(file, " \"device_compute_units\": \"%zu\",\n", device.ComputeUnits()); + fprintf(file, " \"results\": [\n"); + + // Loops over all results + auto num_results = tuning_results.size(); + for (auto r = size_t{0}; r < num_results; ++r) { + auto result = tuning_results[r]; + fprintf(file, " {\n"); + fprintf(file, " \"kernel\": \"%s\",\n", result.name.c_str()); + fprintf(file, " \"time\": %.3lf,\n", result.score); + + // Loops over all the parameters for this result + fprintf(file, " \"parameters\": {"); + auto num_configs = result.parameters.size(); + for (auto p=size_t{0}; p