diff options
author | Cedric Nugteren <web@cedricnugteren.nl> | 2018-03-21 22:58:37 +0100 |
---|---|---|
committer | Cedric Nugteren <web@cedricnugteren.nl> | 2018-03-21 22:58:37 +0100 |
commit | 7a2371213bb900c8c726c346f85920199f424d82 (patch) | |
tree | de3562f21a76667f1af865905cfc84d8c20a7039 /src/tuning/configurations.hpp | |
parent | 52791bf3553bb47a50dea4ac234f7e1b09c4383c (diff) |
Re-added support for local memory size constraint checking in the tuner
Diffstat (limited to 'src/tuning/configurations.hpp')
-rw-r--r-- | src/tuning/configurations.hpp | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/src/tuning/configurations.hpp b/src/tuning/configurations.hpp index 74679ff6..faa5498f 100644 --- a/src/tuning/configurations.hpp +++ b/src/tuning/configurations.hpp @@ -37,12 +37,21 @@ struct Constraint { }; using Constraints = std::vector<Constraint>; +// As above, but for local memory size +using LocalMemSizeFunction = std::function<size_t(std::vector<size_t>)>; +struct LocalMemSizeInfo { + LocalMemSizeFunction local_mem_size; + std::vector<std::string> parameters; +}; + // ================================================================================================= // Initializes an empty configuration (vector of name/value pairs) and kicks-off the recursive // function to find all configurations. It also applies the user-defined constraints within. -std::vector<Configuration> SetConfigurations(const std::vector<Parameter> parameters, - const Constraints& constraints); +std::vector<Configuration> SetConfigurations(const Device& device, + const std::vector<Parameter> parameters, + const Constraints& constraints, + const LocalMemSizeInfo& local_mem_size_info); // Iterates recursively over all permutations of the user-defined parameters. This code creates // multiple chains, in which each chain selects a unique combination of values for all parameters. @@ -51,14 +60,18 @@ std::vector<Configuration> SetConfigurations(const std::vector<Parameter> parame void PopulateConfigurations(const std::vector<Parameter> ¶meters, const size_t index, const Configuration &config, std::vector<Configuration> &configuration, - const Constraints& constraints); + const size_t local_mem_max, + const Constraints& constraints, + const LocalMemSizeInfo& local_mem_size_info); // Loops over all user-defined constraints to check whether or not the configuration is valid. // Assumes initially all configurations are valid, then returns false if one of the constraints has // not been met. Constraints consist of a user-defined function and a list of parameter names, which // are replaced by parameter values in this function. bool ValidConfiguration(const Configuration &config, - const Constraints& constraints); + const size_t local_mem_max, + const Constraints& constraints, + const LocalMemSizeInfo& local_mem_size_info); // Processes multipliers and dividers to obtain the final thread configuration std::vector<size_t> SetThreadConfiguration(const Configuration& config, |