diff options
author | Manuel Bottini <manuel.bottini@arm.com> | 2021-01-25 15:07:17 +0000 |
---|---|---|
committer | Georgios Pinitas <georgios.pinitas@arm.com> | 2021-02-03 17:35:00 +0000 |
commit | be9f9f9139b759d314f4f2a6d2ee747079666504 (patch) | |
tree | 461690abb95caeaeca40261fd85816a906c8446c /arm_compute/runtime/CL/CLTuningParams.h | |
parent | 7061eb283969f9a020c08349454447564e4dd5b3 (diff) | |
download | ComputeLibrary-be9f9f9139b759d314f4f2a6d2ee747079666504.tar.gz |
Add WBSM tuning to CLTuner
Add WBSM as possible parameter to be tuned
Add helper functions to check WBSM support and setting the value in the kernel
Update tuning parameter lists to use WBSM
Update CLTuner to use WBSM
The WBSM tuning is exposed as a parameter to be set at compile time by setting the CLTuningInfo
CLTuningInfo contains information about the tuning mode and if wbsm tuning enabled
Resolves: COMPMID-3936
Change-Id: Id53697c9c6d2cef41c049f368002f6197351b3ed
Signed-off-by: Manuel Bottini <manuel.bottini@arm.com>
Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/4914
Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
Tested-by: Arm Jenkins <bsgcomp@arm.com>
Reviewed-by: Gian Marco Iodice <gianmarco.iodice@arm.com>
Reviewed-by: Georgios Pinitas <georgios.pinitas@arm.com>
Diffstat (limited to 'arm_compute/runtime/CL/CLTuningParams.h')
-rw-r--r-- | arm_compute/runtime/CL/CLTuningParams.h | 85 |
1 files changed, 79 insertions, 6 deletions
diff --git a/arm_compute/runtime/CL/CLTuningParams.h b/arm_compute/runtime/CL/CLTuningParams.h index 99a386638d..b50481336b 100644 --- a/arm_compute/runtime/CL/CLTuningParams.h +++ b/arm_compute/runtime/CL/CLTuningParams.h @@ -25,6 +25,10 @@ #define ARM_COMPUTE_CLTUNING_PARAMS_H #include "arm_compute/core/CL/OpenCL.h" +#include "arm_compute/runtime/CL/CLTunerTypes.h" +#include "support/StringSupport.h" + +#include <ostream> namespace arm_compute { @@ -34,26 +38,95 @@ class CLTuningParams public: CLTuningParams(const CLTuningParams &) = default; - CLTuningParams(unsigned int lws_x = 0, unsigned int lws_y = 0, unsigned int lws_z = 0) - : _lws(lws_x, lws_y, lws_z) + CLTuningParams(unsigned int lws_x = 0, unsigned int lws_y = 0, unsigned int lws_z = 0, int wbsm = 0) + : _lws(lws_x, lws_y, lws_z), _wbsm(wbsm) { } - CLTuningParams(cl::NDRange lws) - : _lws(lws) + CLTuningParams(cl::NDRange lws, cl_int wbsm = 0) + : _lws(lws), _wbsm(wbsm) { } - void set_lws(cl::NDRange &lws) + + CLTuningParams(cl_int wbsm) + : CLTuningParams(cl::NullRange, wbsm) + { + } + + void set_lws(cl::NDRange lws) { _lws = lws; } - cl::NDRange get_lws() + cl::NDRange get_lws() const { return _lws; } + void set_wbsm(cl_int wbsm) + { + _wbsm = wbsm; + } + + cl_int get_wbsm() const + { + return _wbsm; + } + + std::string to_string(CLTuningInfo tuning_info) + { + std::string tuning_params_string = ""; + tuning_params_string += ";" + support::cpp11::to_string(_lws[0]) + ";" + support::cpp11::to_string(_lws[1]) + ";" + support::cpp11::to_string(_lws[2]); + if(tuning_info.tune_wbsm) + { + tuning_params_string += ";" + support::cpp11::to_string(_wbsm); + } + return tuning_params_string; + } + + bool from_string(CLTuningInfo tuning_info, std::string tuning_params_string) + { + std::replace(tuning_params_string.begin(), tuning_params_string.end(), ';', ' '); + std::vector<std::string> array; + std::stringstream ss(tuning_params_string); + std::string temp; + while(ss >> temp) + { + array.push_back(temp); + } + // Read 3 values for lws + if(array.size() < 3) + { + return false; + } + const unsigned int lws_0 = support::cpp11::stoi(array[0]); + const unsigned int lws_1 = support::cpp11::stoi(array[1]); + const unsigned int lws_2 = support::cpp11::stoi(array[2]); + if(lws_0 == 0 && lws_1 == 0 && lws_2 == 0) + { + // If lws values are 0, cl::NullRange has to be used + // otherwise the lws object will be badly created + _lws = cl::NullRange; + } + else + { + _lws = cl::NDRange(lws_0, lws_1, lws_2); + } + array.erase(array.begin(), array.begin() + 3); + if(tuning_info.tune_wbsm) + { + if(array.size() < 1) + { + return false; + } + _wbsm = support::cpp11::stoi(array[0]); + array.erase(array.begin()); + } + return true; + } + private: cl::NDRange _lws; + cl_int _wbsm; }; } // namespace arm_compute #endif /*ARM_COMPUTE_CLTUNING_PARAMS_H */ |