summaryrefslogtreecommitdiff
path: root/src/tuning
diff options
context:
space:
mode:
authorCedric Nugteren <web@cedricnugteren.nl>2017-11-06 20:50:36 +0100
committerCedric Nugteren <web@cedricnugteren.nl>2017-11-06 20:50:36 +0100
commit34a33b54cf6c395468ba230057b3c9e1dada9fb7 (patch)
tree3212228aac285fbe1be6fb507dec866edf2daa31 /src/tuning
parent9b0a435fb00b845b875590be90acffcd4f3bb009 (diff)
Changed GEMM routine tuner's scoring to use L2 measure instead for better averaging
Diffstat (limited to 'src/tuning')
-rw-r--r--src/tuning/routines/xgemm.cpp4
1 files changed, 3 insertions, 1 deletions
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<double>(score) / static_cast<double>(scores.size() - 1);
scores[i] = TuningResult{
"gemm_kernel_selection",
- static_cast<double>(score) / static_cast<double>(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<size_t>(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;