From 2e018dbc2823e02107c36cd9045a78a6d9f13f82 Mon Sep 17 00:00:00 2001 From: Michael Richard Mckinsey Date: Fri, 9 Jun 2023 17:38:06 -0700 Subject: [PATCH 01/17] Add -t --tunings argument to RAJAPerf parser --- src/common/Executor.cpp | 15 +++++++++++++-- src/common/KernelBase.hpp | 7 ++++++- src/common/RunParams.cpp | 26 ++++++++++++++++++++++++++ src/common/RunParams.hpp | 9 +++++++++ 4 files changed, 54 insertions(+), 3 deletions(-) diff --git a/src/common/Executor.cpp b/src/common/Executor.cpp index e54bc9214..3115471d0 100644 --- a/src/common/Executor.cpp +++ b/src/common/Executor.cpp @@ -612,6 +612,9 @@ void Executor::setupSuite() // // Make a single ordering of tuning names for each variant across kernels. // + + // Determine which tunings to execute from input. + const Svector& selected_tuning_names = run_params.getTuningInput(); for (VariantID vid : variant_ids) { std::unordered_map tuning_names_order_map; for (const KernelBase* kernel : kernels) { @@ -619,11 +622,19 @@ void Executor::setupSuite() kernel->getVariantTuningNames(vid)) { if (tuning_names_order_map.find(tuning_name) == tuning_names_order_map.end()) { - tuning_names_order_map.emplace( - tuning_name, tuning_names_order_map.size()); + if (selected_tuning_names.size() == 0 || find(selected_tuning_names.begin(), selected_tuning_names.end(), tuning_name) != selected_tuning_names.end()) { + tuning_names_order_map.emplace( + tuning_name, tuning_names_order_map.size()); + } } } } + // Add tunings to metadata + std::vector final_tunings; + for (const auto &key: tuning_names_order_map) { + final_tunings.push_back(key.first); + } + adiak::value("tunings", final_tunings); tuning_names[vid].resize(tuning_names_order_map.size()); for (auto const& tuning_name_idx_pair : tuning_names_order_map) { tuning_names[vid][tuning_name_idx_pair.second] = tuning_name_idx_pair.first; diff --git a/src/common/KernelBase.hpp b/src/common/KernelBase.hpp index 5b431f05f..637c10bff 100644 --- a/src/common/KernelBase.hpp +++ b/src/common/KernelBase.hpp @@ -72,7 +72,12 @@ class KernelBase void setVariantDefined(VariantID vid); void addVariantTuningName(VariantID vid, std::string name) - { variant_tuning_names[vid].emplace_back(std::move(name)); } + { // Sub-select tuning from command line argument + const std::vector& selected_tuning_names = run_params.getTuningInput(); + if (selected_tuning_names.size() == 0 || std::find(selected_tuning_names.begin(), selected_tuning_names.end(), name) != selected_tuning_names.end()) { + variant_tuning_names[vid].emplace_back(std::move(name)); + } + } virtual void setSeqTuningDefinitions(VariantID vid) { addVariantTuningName(vid, getDefaultTuningName()); } diff --git a/src/common/RunParams.cpp b/src/common/RunParams.cpp index e85ee5c86..49de4d293 100644 --- a/src/common/RunParams.cpp +++ b/src/common/RunParams.cpp @@ -47,6 +47,8 @@ RunParams::RunParams(int argc, char** argv) invalid_variant_input(), exclude_variant_input(), invalid_exclude_variant_input(), + tuning_input(), + invalid_tuning_input(), feature_input(), invalid_feature_input(), exclude_feature_input(), @@ -156,6 +158,15 @@ void RunParams::print(std::ostream& str) const str << "\n\t" << invalid_exclude_variant_input[j]; } + str << "\n tuning_input = "; + for (size_t j = 0; j < tuning_input.size(); ++j) { + str << "\n\t" << tuning_input[j]; + } + str << "\n invalid_tuning_input = "; + for (size_t j = 0; j < invalid_tuning_input.size(); ++j) { + str << "\n\t" << invalid_tuning_input[j]; + } + str << "\n feature_input = "; for (size_t j = 0; j < feature_input.size(); ++j) { str << "\n\t" << feature_input[j]; @@ -534,6 +545,21 @@ void RunParams::parseCommandLineOptions(int argc, char** argv) } } } + } else if ( std::string(argv[i]) == std::string("--tunings") || + std::string(argv[i]) == std::string("-t") ) { + + bool done = false; + i++; + while ( i < argc && !done ) { + opt = std::string(argv[i]); + if ( opt.at(0) == '-' ) { + i--; + done = true; + } else { + tuning_input.push_back(opt); + ++i; + } + } } else if ( std::string(argv[i]) == std::string("--features") || std::string(argv[i]) == std::string("-f") ) { diff --git a/src/common/RunParams.hpp b/src/common/RunParams.hpp index 2c81a4f70..8dad90a0e 100644 --- a/src/common/RunParams.hpp +++ b/src/common/RunParams.hpp @@ -179,6 +179,13 @@ class RunParams { const std::vector& getInvalidExcludeVariantInput() const { return invalid_exclude_variant_input; } + const std::vector& getTuningInput() const + { return tuning_input; } + void setInvalidTuningInput( std::vector& svec ) + { invalid_tuning_input = svec; } + const std::vector& getInvalidTuningInput() const + { return invalid_tuning_input; } + const std::vector& getFeatureInput() const { return feature_input; } void setInvalidFeatureInput( std::vector& svec ) @@ -274,6 +281,8 @@ class RunParams { std::vector invalid_variant_input; std::vector exclude_variant_input; std::vector invalid_exclude_variant_input; + std::vector tuning_input; + std::vector invalid_tuning_input; std::vector feature_input; std::vector invalid_feature_input; std::vector exclude_feature_input; From 91361fa8e5a65eeffa6df651cd61526afd865bd4 Mon Sep 17 00:00:00 2001 From: Michael Richard Mckinsey Date: Mon, 12 Jun 2023 10:32:18 -0700 Subject: [PATCH 02/17] Only add adiak field if using Caliper --- src/common/Executor.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/common/Executor.cpp b/src/common/Executor.cpp index 3115471d0..e48e4e2e9 100644 --- a/src/common/Executor.cpp +++ b/src/common/Executor.cpp @@ -634,7 +634,9 @@ void Executor::setupSuite() for (const auto &key: tuning_names_order_map) { final_tunings.push_back(key.first); } - adiak::value("tunings", final_tunings); + #if defined(RAJA_PERFSUITE_USE_CALIPER) + adiak::value("tunings", final_tunings); + #endif tuning_names[vid].resize(tuning_names_order_map.size()); for (auto const& tuning_name_idx_pair : tuning_names_order_map) { tuning_names[vid][tuning_name_idx_pair.second] = tuning_name_idx_pair.first; From 21ab845435d79dec1320f406d4c21a7166acd204 Mon Sep 17 00:00:00 2001 From: Michael Richard Mckinsey Date: Mon, 12 Jun 2023 10:40:36 -0700 Subject: [PATCH 03/17] Refactor for readability --- src/common/Executor.cpp | 2 +- src/common/KernelBase.hpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/common/Executor.cpp b/src/common/Executor.cpp index e48e4e2e9..b428aa33e 100644 --- a/src/common/Executor.cpp +++ b/src/common/Executor.cpp @@ -622,7 +622,7 @@ void Executor::setupSuite() kernel->getVariantTuningNames(vid)) { if (tuning_names_order_map.find(tuning_name) == tuning_names_order_map.end()) { - if (selected_tuning_names.size() == 0 || find(selected_tuning_names.begin(), selected_tuning_names.end(), tuning_name) != selected_tuning_names.end()) { + if (selected_tuning_names.empty() || find(selected_tuning_names.begin(), selected_tuning_names.end(), tuning_name) != selected_tuning_names.end()) { tuning_names_order_map.emplace( tuning_name, tuning_names_order_map.size()); } diff --git a/src/common/KernelBase.hpp b/src/common/KernelBase.hpp index 637c10bff..86da5e791 100644 --- a/src/common/KernelBase.hpp +++ b/src/common/KernelBase.hpp @@ -74,7 +74,7 @@ class KernelBase void addVariantTuningName(VariantID vid, std::string name) { // Sub-select tuning from command line argument const std::vector& selected_tuning_names = run_params.getTuningInput(); - if (selected_tuning_names.size() == 0 || std::find(selected_tuning_names.begin(), selected_tuning_names.end(), name) != selected_tuning_names.end()) { + if (selected_tuning_names.empty() || std::find(selected_tuning_names.begin(), selected_tuning_names.end(), name) != selected_tuning_names.end()) { variant_tuning_names[vid].emplace_back(std::move(name)); } } From d0508ed005f30b66708028c8ae5da61c4562544a Mon Sep 17 00:00:00 2001 From: Michael Richard Mckinsey Date: Mon, 12 Jun 2023 11:00:08 -0700 Subject: [PATCH 04/17] Remove redundant filtering mechanism --- src/common/KernelBase.hpp | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/common/KernelBase.hpp b/src/common/KernelBase.hpp index 86da5e791..5b431f05f 100644 --- a/src/common/KernelBase.hpp +++ b/src/common/KernelBase.hpp @@ -72,12 +72,7 @@ class KernelBase void setVariantDefined(VariantID vid); void addVariantTuningName(VariantID vid, std::string name) - { // Sub-select tuning from command line argument - const std::vector& selected_tuning_names = run_params.getTuningInput(); - if (selected_tuning_names.empty() || std::find(selected_tuning_names.begin(), selected_tuning_names.end(), name) != selected_tuning_names.end()) { - variant_tuning_names[vid].emplace_back(std::move(name)); - } - } + { variant_tuning_names[vid].emplace_back(std::move(name)); } virtual void setSeqTuningDefinitions(VariantID vid) { addVariantTuningName(vid, getDefaultTuningName()); } From bb703343f65bccf917b01380fa0cd2b88ce998d2 Mon Sep 17 00:00:00 2001 From: Michael Richard Mckinsey Date: Mon, 12 Jun 2023 16:45:53 -0700 Subject: [PATCH 05/17] Add exlude-tunings complement argument to parser --- src/common/Executor.cpp | 9 ++++++--- src/common/RunParams.cpp | 27 +++++++++++++++++++++++++++ src/common/RunParams.hpp | 9 +++++++++ 3 files changed, 42 insertions(+), 3 deletions(-) diff --git a/src/common/Executor.cpp b/src/common/Executor.cpp index b428aa33e..0d5fc8e79 100644 --- a/src/common/Executor.cpp +++ b/src/common/Executor.cpp @@ -615,6 +615,7 @@ void Executor::setupSuite() // Determine which tunings to execute from input. const Svector& selected_tuning_names = run_params.getTuningInput(); + const Svector& excluded_tuning_names = run_params.getExcludeTuningInput(); for (VariantID vid : variant_ids) { std::unordered_map tuning_names_order_map; for (const KernelBase* kernel : kernels) { @@ -622,9 +623,11 @@ void Executor::setupSuite() kernel->getVariantTuningNames(vid)) { if (tuning_names_order_map.find(tuning_name) == tuning_names_order_map.end()) { - if (selected_tuning_names.empty() || find(selected_tuning_names.begin(), selected_tuning_names.end(), tuning_name) != selected_tuning_names.end()) { - tuning_names_order_map.emplace( - tuning_name, tuning_names_order_map.size()); + if ((selected_tuning_names.empty() || find(selected_tuning_names.begin(), selected_tuning_names.end(), tuning_name) != selected_tuning_names.end()) // If argument is not provided or name is selected + && + find(excluded_tuning_names.begin(), excluded_tuning_names.end(), tuning_name) == excluded_tuning_names.end()) { // name does not exist in exlusion list + tuning_names_order_map.emplace( + tuning_name, tuning_names_order_map.size()); // Add tuning name to map } } } diff --git a/src/common/RunParams.cpp b/src/common/RunParams.cpp index 49de4d293..e5987e2b2 100644 --- a/src/common/RunParams.cpp +++ b/src/common/RunParams.cpp @@ -49,6 +49,8 @@ RunParams::RunParams(int argc, char** argv) invalid_exclude_variant_input(), tuning_input(), invalid_tuning_input(), + exclude_tuning_input(), + invalid_exclude_tuning_input(), feature_input(), invalid_feature_input(), exclude_feature_input(), @@ -167,6 +169,15 @@ void RunParams::print(std::ostream& str) const str << "\n\t" << invalid_tuning_input[j]; } + str << "\n exclude_tuning_input = "; + for (size_t j = 0; j < exclude_tuning_input.size(); ++j) { + str << "\n\t" << exclude_tuning_input[j]; + } + str << "\n invalid_exclude_tuning_input = "; + for (size_t j = 0; j < invalid_exclude_tuning_input.size(); ++j) { + str << "\n\t" << invalid_exclude_tuning_input[j]; + } + str << "\n feature_input = "; for (size_t j = 0; j < feature_input.size(); ++j) { str << "\n\t" << feature_input[j]; @@ -561,6 +572,22 @@ void RunParams::parseCommandLineOptions(int argc, char** argv) } } + } else if ( std::string(argv[i]) == std::string("--exclude-tunings") || + std::string(argv[i]) == std::string("-et") ) { + + bool done = false; + i++; + while ( i < argc && !done ) { + opt = std::string(argv[i]); + if ( opt.at(0) == '-' ) { + i--; + done = true; + } else { + exclude_tuning_input.push_back(opt); + ++i; + } + } + } else if ( std::string(argv[i]) == std::string("--features") || std::string(argv[i]) == std::string("-f") ) { diff --git a/src/common/RunParams.hpp b/src/common/RunParams.hpp index 8dad90a0e..3a8119c44 100644 --- a/src/common/RunParams.hpp +++ b/src/common/RunParams.hpp @@ -186,6 +186,13 @@ class RunParams { const std::vector& getInvalidTuningInput() const { return invalid_tuning_input; } + const std::vector& getExcludeTuningInput() const + { return exclude_tuning_input; } + void setInvalidExcludeTuningInput( std::vector& svec ) + { invalid_exclude_tuning_input = svec; } + const std::vector& getInvalidExcludeTuningInput() const + { return invalid_exclude_tuning_input; } + const std::vector& getFeatureInput() const { return feature_input; } void setInvalidFeatureInput( std::vector& svec ) @@ -283,6 +290,8 @@ class RunParams { std::vector invalid_exclude_variant_input; std::vector tuning_input; std::vector invalid_tuning_input; + std::vector exclude_tuning_input; + std::vector invalid_exclude_tuning_input; std::vector feature_input; std::vector invalid_feature_input; std::vector exclude_feature_input; From fb1b38b99da4642656961074bbf830c40eae6d62 Mon Sep 17 00:00:00 2001 From: Michael Richard Mckinsey Date: Tue, 13 Jun 2023 09:39:16 -0700 Subject: [PATCH 06/17] Add tunings and exclude-tunings to help message --- src/common/RunParams.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/common/RunParams.cpp b/src/common/RunParams.cpp index e5987e2b2..df30b5c38 100644 --- a/src/common/RunParams.cpp +++ b/src/common/RunParams.cpp @@ -804,6 +804,21 @@ void RunParams::printHelpMessage(std::ostream& str) const << "\t\t --exclude-variants RAJA_CUDA (exclude all RAJA_CUDA kernel variants)\n" << "\t\t -ev Base_Seq RAJA_CUDA (exclude Base_Seq and RAJA_CUDA variants)\n\n"; + str << "\t --tunings, -t [Default is run all]\n" + << "\t (names of tunings to run)\n" + << "\t Note: knowing which tunings are available requires knowledge about the variants,\n" + << "\t since available tunings depend on the given variant (and potentially other args).\n"; + str << "\t\t Examples...\n" + << "\t\t --tunings default (run all default tunings)\n" + << "\t\t -t default block_128 (run default and block_128 tunings)\n\n"; + + str << "\t --exclude-tunings, -et [Default is exclude none]\n" + << "\t (names of tunings to exclude)\n" + << "\t See --tunings for more information.\n"; + str << "\t\t Examples...\n" + << "\t\t --exclude-tunings library (exclude all library tunings)\n" + << "\t\t -et default library (exclude default and library tunings)\n\n"; + str << "\t --seq-data-space, -sds [Default is Host]\n" << "\t (names of data space to use)\n"; str << "\t\t Examples...\n" From fb22a65ac350bf377f130e84d13cff3a7087b74e Mon Sep 17 00:00:00 2001 From: Michael Richard Mckinsey Date: Tue, 13 Jun 2023 10:41:11 -0700 Subject: [PATCH 07/17] Fix typo in comment --- src/common/Executor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/Executor.cpp b/src/common/Executor.cpp index 0d5fc8e79..476941d4f 100644 --- a/src/common/Executor.cpp +++ b/src/common/Executor.cpp @@ -625,7 +625,7 @@ void Executor::setupSuite() tuning_names_order_map.end()) { if ((selected_tuning_names.empty() || find(selected_tuning_names.begin(), selected_tuning_names.end(), tuning_name) != selected_tuning_names.end()) // If argument is not provided or name is selected && - find(excluded_tuning_names.begin(), excluded_tuning_names.end(), tuning_name) == excluded_tuning_names.end()) { // name does not exist in exlusion list + find(excluded_tuning_names.begin(), excluded_tuning_names.end(), tuning_name) == excluded_tuning_names.end()) { // name does not exist in exclusion list tuning_names_order_map.emplace( tuning_name, tuning_names_order_map.size()); // Add tuning name to map } From b393ee89ce9e1a565131626510b72a15fa16f56c Mon Sep 17 00:00:00 2001 From: Michael Richard Mckinsey Date: Tue, 13 Jun 2023 16:03:26 -0700 Subject: [PATCH 08/17] Add check for invalid tunings and exclude-tunings arguments --- src/common/Executor.cpp | 107 ++++++++++++++++++++++++++-------------- 1 file changed, 71 insertions(+), 36 deletions(-) diff --git a/src/common/Executor.cpp b/src/common/Executor.cpp index 476941d4f..fd3832543 100644 --- a/src/common/Executor.cpp +++ b/src/common/Executor.cpp @@ -612,56 +612,91 @@ void Executor::setupSuite() // // Make a single ordering of tuning names for each variant across kernels. // - // Determine which tunings to execute from input. const Svector& selected_tuning_names = run_params.getTuningInput(); const Svector& excluded_tuning_names = run_params.getExcludeTuningInput(); + // Constuct set of all possible tunings + set all_tunings; for (VariantID vid : variant_ids) { - std::unordered_map tuning_names_order_map; for (const KernelBase* kernel : kernels) { for (std::string const& tuning_name : kernel->getVariantTuningNames(vid)) { - if (tuning_names_order_map.find(tuning_name) == - tuning_names_order_map.end()) { - if ((selected_tuning_names.empty() || find(selected_tuning_names.begin(), selected_tuning_names.end(), tuning_name) != selected_tuning_names.end()) // If argument is not provided or name is selected - && - find(excluded_tuning_names.begin(), excluded_tuning_names.end(), tuning_name) == excluded_tuning_names.end()) { // name does not exist in exclusion list - tuning_names_order_map.emplace( - tuning_name, tuning_names_order_map.size()); // Add tuning name to map - } - } + all_tunings.insert(tuning_name); } } - // Add tunings to metadata - std::vector final_tunings; - for (const auto &key: tuning_names_order_map) { - final_tunings.push_back(key.first); - } - #if defined(RAJA_PERFSUITE_USE_CALIPER) - adiak::value("tunings", final_tunings); - #endif - tuning_names[vid].resize(tuning_names_order_map.size()); - for (auto const& tuning_name_idx_pair : tuning_names_order_map) { - tuning_names[vid][tuning_name_idx_pair.second] = tuning_name_idx_pair.first; + } + // Check for invalid tuning input + Svector invalid; + for (string tuning_name: selected_tuning_names) { + if (all_tunings.find(tuning_name) == all_tunings.end()) { + invalid.push_back(tuning_name); } - // reorder to put "default" first - auto default_order_iter = tuning_names_order_map.find(KernelBase::getDefaultTuningName()); - if (default_order_iter != tuning_names_order_map.end()) { - size_t default_idx = default_order_iter->second; - std::string default_name = std::move(tuning_names[vid][default_idx]); - tuning_names[vid].erase(tuning_names[vid].begin()+default_idx); - tuning_names[vid].emplace(tuning_names[vid].begin(), std::move(default_name)); + } + run_params.setInvalidTuningInput(invalid); + // Check for invalid exclude tuning input + invalid.clear(); + for (string tuning_name: excluded_tuning_names) { + if (all_tunings.find(tuning_name) == all_tunings.end()) { + invalid.push_back(tuning_name); } } - - // - // If we've gotten to this point, we have good input to run. - // - if ( run_params.getInputState() != RunParams::DryRun && - run_params.getInputState() != RunParams::CheckRun ) { - run_params.setInputState(RunParams::PerfRun); + run_params.setInvalidExcludeTuningInput(invalid); + // Validate invalid input + if ( !(run_params.getInvalidTuningInput().empty()) || + !(run_params.getInvalidExcludeTuningInput().empty())) { + run_params.setInputState(RunParams::BadInput); } + if (run_params.getInputState() != RunParams::BadInput) { // If tunings input is valid + for (VariantID vid : variant_ids) { + std::unordered_map tuning_names_order_map; + for (const KernelBase* kernel : kernels) { + for (std::string const& tuning_name : + kernel->getVariantTuningNames(vid)) { + if (tuning_names_order_map.find(tuning_name) == + tuning_names_order_map.end()) { + if ((selected_tuning_names.empty() || find(selected_tuning_names.begin(), selected_tuning_names.end(), tuning_name) != selected_tuning_names.end()) // If argument is not provided or name is selected + && + find(excluded_tuning_names.begin(), excluded_tuning_names.end(), tuning_name) == excluded_tuning_names.end()) { // name does not exist in exclusion list + tuning_names_order_map.emplace( + tuning_name, tuning_names_order_map.size()); // Add tuning name to map + } + } + } + } + + std::vector final_tunings; + for (const auto &key: tuning_names_order_map) { + final_tunings.push_back(key.first); + } + // Add tunings to metadata + #if defined(RAJA_PERFSUITE_USE_CALIPER) + adiak::value("tunings", final_tunings); + #endif + tuning_names[vid].resize(tuning_names_order_map.size()); + for (auto const& tuning_name_idx_pair : tuning_names_order_map) { + tuning_names[vid][tuning_name_idx_pair.second] = tuning_name_idx_pair.first; + } + // reorder to put "default" first + auto default_order_iter = tuning_names_order_map.find(KernelBase::getDefaultTuningName()); + if (default_order_iter != tuning_names_order_map.end()) { + size_t default_idx = default_order_iter->second; + std::string default_name = std::move(tuning_names[vid][default_idx]); + tuning_names[vid].erase(tuning_names[vid].begin()+default_idx); + tuning_names[vid].emplace(tuning_names[vid].begin(), std::move(default_name)); + } + } + + // + // If we've gotten to this point, we have good input to run. + // + if ( run_params.getInputState() != RunParams::DryRun && + run_params.getInputState() != RunParams::CheckRun ) { + run_params.setInputState(RunParams::PerfRun); + } + + } // tuning input looks good + } // kernel and variant input both look good } // if kernel input looks good From e212ec19c9ab1a5a78ed6ac7b916833b9efc9cee Mon Sep 17 00:00:00 2001 From: Michael Richard Mckinsey Date: Wed, 14 Jun 2023 10:34:33 -0700 Subject: [PATCH 09/17] Fix bug where kernels were running tunings despite them being excluded --- src/common/Executor.cpp | 26 +++++++++++++++----------- src/common/Executor.hpp | 2 ++ 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/common/Executor.cpp b/src/common/Executor.cpp index fd3832543..4dee2cf39 100644 --- a/src/common/Executor.cpp +++ b/src/common/Executor.cpp @@ -26,7 +26,6 @@ #include #include #include -#include #include #include @@ -649,7 +648,6 @@ void Executor::setupSuite() if (run_params.getInputState() != RunParams::BadInput) { // If tunings input is valid for (VariantID vid : variant_ids) { - std::unordered_map tuning_names_order_map; for (const KernelBase* kernel : kernels) { for (std::string const& tuning_name : kernel->getVariantTuningNames(vid)) { @@ -970,22 +968,28 @@ void Executor::runKernel(KernelBase* kernel, bool print_kernel_name) if ( run_params.showProgress() ) { if ( kernel->hasVariantDefined(vid) ) { - getCout() << " Running "; + getCout() << "\tRunning "; } else { - getCout() << " No "; + getCout() << "\tNo "; } getCout() << getVariantName(vid) << " variant" << endl; } for (size_t tune_idx = 0; tune_idx < kernel->getNumVariantTunings(vid); ++tune_idx) { - - if ( run_params.showProgress() ) { - getCout() << " Running " - << kernel->getVariantTuningName(vid, tune_idx) << " tuning"; + std::string tuning_name = kernel->getVariantTuningName(vid, tune_idx); + if (tuning_names_order_map.find(tuning_name) != tuning_names_order_map.end()) { // Check if valid tuning + if ( run_params.showProgress() ) { + getCout() << "\t\tRunning " + << tuning_name << " tuning"; + } + kernel->execute(vid, tune_idx); // Execute kernel + if ( run_params.showProgress() ) { + getCout() << " -- " << kernel->getLastTime() << " sec." << endl; + } } - kernel->execute(vid, tune_idx); - if ( run_params.showProgress() ) { - getCout() << " -- " << kernel->getLastTime() << " sec." << endl; + else { + getCout() << "\t\tNo " + << tuning_name << " tuning" << endl; } } } // loop over variants diff --git a/src/common/Executor.hpp b/src/common/Executor.hpp index 6bca5a1d2..1af6c99a1 100644 --- a/src/common/Executor.hpp +++ b/src/common/Executor.hpp @@ -17,6 +17,7 @@ #include #include #include +#include namespace rajaperf { @@ -86,6 +87,7 @@ class Executor std::vector kernels; std::vector variant_ids; std::vector tuning_names[NumVariants]; + std::unordered_map tuning_names_order_map; VariantID reference_vid; size_t reference_tune_idx; From a187dbf8f405a857f32f2e8a966373eecd0d84e7 Mon Sep 17 00:00:00 2001 From: Michael Richard Mckinsey Date: Wed, 14 Jun 2023 11:02:48 -0700 Subject: [PATCH 10/17] Add const to unmodified iterator in for-each --- src/common/Executor.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/common/Executor.cpp b/src/common/Executor.cpp index 4dee2cf39..e1966bb6a 100644 --- a/src/common/Executor.cpp +++ b/src/common/Executor.cpp @@ -626,7 +626,7 @@ void Executor::setupSuite() } // Check for invalid tuning input Svector invalid; - for (string tuning_name: selected_tuning_names) { + for (string const& tuning_name: selected_tuning_names) { if (all_tunings.find(tuning_name) == all_tunings.end()) { invalid.push_back(tuning_name); } @@ -634,7 +634,7 @@ void Executor::setupSuite() run_params.setInvalidTuningInput(invalid); // Check for invalid exclude tuning input invalid.clear(); - for (string tuning_name: excluded_tuning_names) { + for (string const& tuning_name: excluded_tuning_names) { if (all_tunings.find(tuning_name) == all_tunings.end()) { invalid.push_back(tuning_name); } From 108ae1e913f62da3a55ab26c51b09ed58ee60490 Mon Sep 17 00:00:00 2001 From: Michael McKinsey Date: Tue, 20 Jun 2023 10:36:43 -0700 Subject: [PATCH 11/17] Clarify logging message when skipping a tuning Co-authored-by: Jason Burmark --- src/common/Executor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/Executor.cpp b/src/common/Executor.cpp index e1966bb6a..4cde7c280 100644 --- a/src/common/Executor.cpp +++ b/src/common/Executor.cpp @@ -988,7 +988,7 @@ void Executor::runKernel(KernelBase* kernel, bool print_kernel_name) } } else { - getCout() << "\t\tNo " + getCout() << "\t\tSkipping " << tuning_name << " tuning" << endl; } } From 0141978b21f7703b5f814bed5c9731a161cf5303 Mon Sep 17 00:00:00 2001 From: Michael McKinsey Date: Tue, 20 Jun 2023 10:47:16 -0700 Subject: [PATCH 12/17] Add const to unmodified variable Co-authored-by: Jason Burmark --- src/common/Executor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/Executor.cpp b/src/common/Executor.cpp index 4cde7c280..0ca1beb6f 100644 --- a/src/common/Executor.cpp +++ b/src/common/Executor.cpp @@ -976,7 +976,7 @@ void Executor::runKernel(KernelBase* kernel, bool print_kernel_name) } for (size_t tune_idx = 0; tune_idx < kernel->getNumVariantTunings(vid); ++tune_idx) { - std::string tuning_name = kernel->getVariantTuningName(vid, tune_idx); + std::string const& tuning_name = kernel->getVariantTuningName(vid, tune_idx); if (tuning_names_order_map.find(tuning_name) != tuning_names_order_map.end()) { // Check if valid tuning if ( run_params.showProgress() ) { getCout() << "\t\tRunning " From d2f8b15210bd86fea0be1c12dccc98ae70aa2a62 Mon Sep 17 00:00:00 2001 From: Michael Richard Mckinsey Date: Tue, 20 Jun 2023 11:26:00 -0700 Subject: [PATCH 13/17] Revert change that duplicated the purpose of existing object 'tuning_names' and fix check --- src/common/Executor.cpp | 4 +++- src/common/Executor.hpp | 2 -- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/common/Executor.cpp b/src/common/Executor.cpp index 0ca1beb6f..6e846814a 100644 --- a/src/common/Executor.cpp +++ b/src/common/Executor.cpp @@ -26,6 +26,7 @@ #include #include #include +#include #include #include @@ -648,6 +649,7 @@ void Executor::setupSuite() if (run_params.getInputState() != RunParams::BadInput) { // If tunings input is valid for (VariantID vid : variant_ids) { + std::unordered_map tuning_names_order_map; for (const KernelBase* kernel : kernels) { for (std::string const& tuning_name : kernel->getVariantTuningNames(vid)) { @@ -977,7 +979,7 @@ void Executor::runKernel(KernelBase* kernel, bool print_kernel_name) for (size_t tune_idx = 0; tune_idx < kernel->getNumVariantTunings(vid); ++tune_idx) { std::string const& tuning_name = kernel->getVariantTuningName(vid, tune_idx); - if (tuning_names_order_map.find(tuning_name) != tuning_names_order_map.end()) { // Check if valid tuning + if (find(tuning_names[vid].begin(), tuning_names[vid].end(), tuning_name) != tuning_names[vid].end()) { // Check if valid tuning if ( run_params.showProgress() ) { getCout() << "\t\tRunning " << tuning_name << " tuning"; diff --git a/src/common/Executor.hpp b/src/common/Executor.hpp index 1af6c99a1..6bca5a1d2 100644 --- a/src/common/Executor.hpp +++ b/src/common/Executor.hpp @@ -17,7 +17,6 @@ #include #include #include -#include namespace rajaperf { @@ -87,7 +86,6 @@ class Executor std::vector kernels; std::vector variant_ids; std::vector tuning_names[NumVariants]; - std::unordered_map tuning_names_order_map; VariantID reference_vid; size_t reference_tune_idx; From 76d18b667cbaae14d37780ef30d4fb205b697b4e Mon Sep 17 00:00:00 2001 From: Michael Richard Mckinsey Date: Wed, 21 Jun 2023 09:28:12 -0700 Subject: [PATCH 14/17] Move functionality to ifdef --- src/common/Executor.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/common/Executor.cpp b/src/common/Executor.cpp index 6e846814a..5ac88ed68 100644 --- a/src/common/Executor.cpp +++ b/src/common/Executor.cpp @@ -665,14 +665,15 @@ void Executor::setupSuite() } } - std::vector final_tunings; - for (const auto &key: tuning_names_order_map) { - final_tunings.push_back(key.first); - } // Add tunings to metadata #if defined(RAJA_PERFSUITE_USE_CALIPER) + std::vector final_tunings; + for (const auto &key: tuning_names_order_map) { + final_tunings.push_back(key.first); + } adiak::value("tunings", final_tunings); #endif + tuning_names[vid].resize(tuning_names_order_map.size()); for (auto const& tuning_name_idx_pair : tuning_names_order_map) { tuning_names[vid][tuning_name_idx_pair.second] = tuning_name_idx_pair.first; From 6e0861e3f83cf5c28eea722a9dcc9335a6626787 Mon Sep 17 00:00:00 2001 From: Michael Richard Mckinsey Date: Wed, 21 Jun 2023 10:37:22 -0700 Subject: [PATCH 15/17] Extract metadata call from variant loop --- src/common/Executor.cpp | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/common/Executor.cpp b/src/common/Executor.cpp index 5ac88ed68..594d7b21a 100644 --- a/src/common/Executor.cpp +++ b/src/common/Executor.cpp @@ -665,15 +665,6 @@ void Executor::setupSuite() } } - // Add tunings to metadata - #if defined(RAJA_PERFSUITE_USE_CALIPER) - std::vector final_tunings; - for (const auto &key: tuning_names_order_map) { - final_tunings.push_back(key.first); - } - adiak::value("tunings", final_tunings); - #endif - tuning_names[vid].resize(tuning_names_order_map.size()); for (auto const& tuning_name_idx_pair : tuning_names_order_map) { tuning_names[vid][tuning_name_idx_pair.second] = tuning_name_idx_pair.first; @@ -688,6 +679,17 @@ void Executor::setupSuite() } } + // Add tunings to Adiak metadata + #if defined(RAJA_PERFSUITE_USE_CALIPER) + std::set tunings_set; + for (VariantID vid : variant_ids) { + for (std::string const& tuning_name : tuning_names[vid]) { + tunings_set.emplace(tuning_name); + } + } + adiak::value("tunings", tunings_set); + #endif + // // If we've gotten to this point, we have good input to run. // From 7407007d721b106e16a96ac4daf0d8ff9399e9c1 Mon Sep 17 00:00:00 2001 From: Michael Richard Mckinsey Date: Wed, 21 Jun 2023 10:46:10 -0700 Subject: [PATCH 16/17] Refactor for readability --- src/common/Executor.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/common/Executor.cpp b/src/common/Executor.cpp index 594d7b21a..e62307e04 100644 --- a/src/common/Executor.cpp +++ b/src/common/Executor.cpp @@ -984,8 +984,7 @@ void Executor::runKernel(KernelBase* kernel, bool print_kernel_name) std::string const& tuning_name = kernel->getVariantTuningName(vid, tune_idx); if (find(tuning_names[vid].begin(), tuning_names[vid].end(), tuning_name) != tuning_names[vid].end()) { // Check if valid tuning if ( run_params.showProgress() ) { - getCout() << "\t\tRunning " - << tuning_name << " tuning"; + getCout() << "\t\tRunning " << tuning_name << " tuning"; } kernel->execute(vid, tune_idx); // Execute kernel if ( run_params.showProgress() ) { @@ -993,8 +992,7 @@ void Executor::runKernel(KernelBase* kernel, bool print_kernel_name) } } else { - getCout() << "\t\tSkipping " - << tuning_name << " tuning" << endl; + getCout() << "\t\tSkipping " << tuning_name << " tuning" << endl; } } } // loop over variants From e5fdfb51522d63b58e8233f14072a8a22f7cc457 Mon Sep 17 00:00:00 2001 From: Michael Richard Mckinsey Date: Fri, 30 Jun 2023 12:58:27 -0700 Subject: [PATCH 17/17] Trigger tests