From 34a33b54cf6c395468ba230057b3c9e1dada9fb7 Mon Sep 17 00:00:00 2001 From: Cedric Nugteren Date: Mon, 6 Nov 2017 20:50:36 +0100 Subject: Changed GEMM routine tuner's scoring to use L2 measure instead for better averaging --- src/tuning/routines/xgemm.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/tuning/routines/xgemm.cpp b/src/tuning/routines/xgemm.cpp index f45e8635..a880c97e 100644 --- a/src/tuning/routines/xgemm.cpp +++ b/src/tuning/routines/xgemm.cpp @@ -103,9 +103,10 @@ void TuneXgemm(int argc, char* argv[]) { for (auto j = size_t{0}; j < i; ++j) { score += (ratios[j] <= 1.0); } for (auto j = i + 1; j < ratios.size(); ++j) { score += (ratios[j] > 1.0); } const auto epsilon = (scores.size() - i) / 1e3; // favour later results over earlier ones + const auto relative_score = static_cast(score) / static_cast(scores.size() - 1); scores[i] = TuningResult{ "gemm_kernel_selection", - static_cast(score) / static_cast(scores.size() - 1) + epsilon, + (relative_score * relative_score) * 100 + epsilon, // squared for proper default computation TuningParameters{ TuningParameter{"XGEMM_MIN_INDIRECT_SIZE", indirect[i].first}, TuningParameter{"PRECISION", static_cast(precision)} @@ -114,6 +115,7 @@ void TuneXgemm(int argc, char* argv[]) { } // Displaying results + printf("[ -------> ] value indirect direct score (lowest means best switching point)\n"); for (auto i = size_t{0}; i < indirect.size(); ++i) { assert(indirect[i].first == direct[i].first); const auto value = indirect[i].first; -- cgit v1.2.3