summaryrefslogtreecommitdiff
path: root/src/utilities/timing.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/utilities/timing.hpp')
-rw-r--r--src/utilities/timing.hpp71
1 files changed, 15 insertions, 56 deletions
diff --git a/src/utilities/timing.hpp b/src/utilities/timing.hpp
index bfad6147..a66aba4b 100644
--- a/src/utilities/timing.hpp
+++ b/src/utilities/timing.hpp
@@ -40,6 +40,14 @@ double TimeFunction(const size_t num_runs, F const &function) {
// =================================================================================================
+double RunKernelTimed(const size_t num_runs, Kernel &kernel, Queue &queue, const Device &device,
+ std::vector<size_t> global, const std::vector<size_t> &local);
+
+double TimeKernel(const size_t num_runs, Kernel &kernel, Queue &queue, const Device &device,
+ std::vector<size_t> global, const std::vector<size_t> &local);
+
+// =================================================================================================
+
using Timing = std::pair<size_t, double>;
template <typename T, typename F>
@@ -47,76 +55,27 @@ std::vector<Timing> TimeRoutine(const size_t from, const size_t to, const size_t
const size_t num_runs, const Queue& queue,
const std::vector<Buffer<T>>& buffers, F const &routine) {
auto timings = std::vector<Timing>();
+ printf("| value | time |\n");
+ printf("x--------x--------------x\n");
for (auto value = from; value < to; value += step) {
- printf("[ RUN ] Running with value %zu\n", value);
+ printf("| %6zu |", value);
try {
const auto FunctionToTune = [&]() { routine(value, queue, buffers); };
const auto time_ms = TimeFunction(num_runs, FunctionToTune);
- printf("[ OK ] Took %.2lf ms\n", time_ms);
+ printf(" %9.2lf ms |\n", time_ms);
timings.push_back({value, time_ms});
}
catch (...) {
- printf("[ ERROR ] Exception caught\n");
+ const auto status_code = DispatchExceptionCatchAll(true);
+ printf(" error %-5d |\n", static_cast<int>(status_code));
timings.push_back({value, -1.0}); // invalid
}
}
+ printf("x--------x--------------x\n");
return timings;
}
// =================================================================================================
-
-using TuningParameter = std::pair<std::string, size_t>;
-using TuningParameters = std::vector<TuningParameter>;
-struct TuningResult { std::string name; double score; TuningParameters parameters; };
-
-void PrintTimingsToFileAsJSON(const std::string &filename,
- const Device& device, const Platform& platform,
- const std::vector<std::pair<std::string,std::string>> &metadata,
- const std::vector<TuningResult>& tuning_results) {
- printf("[ STATUS ] Writing results to '%s'\n", filename.c_str());
- auto file = fopen(filename.c_str(), "w");
- fprintf(file, "{\n");
- 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, " \"clblast_device_name\": \"%s\",\n", GetDeviceName(device).c_str());
- fprintf(file, " \"clblast_device_vendor\": \"%s\",\n", platform.Vendor().c_str());
- fprintf(file, " \"clblast_device_type\": \"%s\",\n", device.Type().c_str());
- fprintf(file, " \"clblast_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<num_configs; ++p) {
- auto config = result.parameters[p];
- fprintf(file, "\"%s\": %zu", config.first.c_str(), config.second);
- if (p < num_configs-1) { fprintf(file, ","); }
- }
- fprintf(file, "}\n");
-
- // The footer
- fprintf(file, " }");
- if (r < num_results - 1) { fprintf(file, ","); }
- fprintf(file, "\n");
- }
- fprintf(file, " ]\n");
- fprintf(file, "}\n");
- fclose(file);
-}
-
-// =================================================================================================
} // namespace clblast
// CLBLAST_TIMING_H_