From d86ff75fa567202c2c15628f33b52282e76f47f9 Mon Sep 17 00:00:00 2001 From: Cedric Nugteren Date: Fri, 30 Mar 2018 10:23:33 +0200 Subject: Added argument checking for the GEMM tuner: expects m/n to be multiples of MWG/NWG --- src/tuning/kernels/xgemm.hpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/tuning/kernels/xgemm.hpp b/src/tuning/kernels/xgemm.hpp index 5f191ba9..51549bee 100644 --- a/src/tuning/kernels/xgemm.hpp +++ b/src/tuning/kernels/xgemm.hpp @@ -118,7 +118,16 @@ TunerSettings XgemmGetTunerSettings(const int V, const Arguments &args) { // Tests for valid arguments template -void XgemmTestValidArguments(const int, const Arguments &) { } +void XgemmTestValidArguments(const int V, const Arguments &args) { + const auto mwg_max = (V == 1) ? 64 : 128; + const auto nwg_max = (V == 1) ? 64 : 128; + if (!IsMultiple(args.m, mwg_max)) { + throw std::runtime_error("'Xgemm' kernel requires 'm' to be a multiple of MWG (max " + ToString(mwg_max) + ")"); + } + if (!IsMultiple(args.n, nwg_max)) { + throw std::runtime_error("'Xgemm' kernel requires 'n' to be a multiple of NWG (max " + ToString(nwg_max) + ")"); + } +} std::vector XgemmSetConstraints(const int V) { auto constraints = std::vector(); auto MultipleOfX = [] (std::vector v) { return IsMultiple(v[0], v[1]); }; -- cgit v1.2.3