summaryrefslogtreecommitdiff
path: root/src/tuning/kernels/xgemm.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/tuning/kernels/xgemm.cpp')
-rw-r--r--src/tuning/kernels/xgemm.cpp106
1 files changed, 63 insertions, 43 deletions
diff --git a/src/tuning/kernels/xgemm.cpp b/src/tuning/kernels/xgemm.cpp
index 6ab64af4..e2032256 100644
--- a/src/tuning/kernels/xgemm.cpp
+++ b/src/tuning/kernels/xgemm.cpp
@@ -18,9 +18,7 @@
#include "utilities/utilities.hpp"
#include "tuning/tuning.hpp"
-#define XGEMM_EXEC
-bool tStrategyFlag=true;
-#define DEFAULT_NUM_OF_STRATEGY 1
+
namespace clblast {
// =================================================================================================
@@ -45,7 +43,9 @@ class TuneXgemm {
// The list of arguments relevant for this routine
static std::vector<std::string> GetOptions() {
- return {kArgM, kArgN, kArgK, kArgAlpha, kArgBeta, kArgFraction,tStrategy, psoSwarmSize, psoInfG, psoInfL, psoInfR};
+ return {kArgM, kArgN, kArgK, kArgAlpha, kArgBeta, kArgFraction,
+ kArgHeuristicSelection, kArgMultiSearchStrategy, kArgPsoSwarmSize,
+ kArgPsoInfGlobal, kArgPsoInfLocal, kArgPsoInfRandom};
}
// Tests for valid arguments
@@ -58,7 +58,14 @@ class TuneXgemm {
static size_t DefaultBatchCount() { return 1; } // N/A for this kernel
static double DefaultFraction() { return (V==1) ? 1.0 : 512.0; } // test all or sample randomly
static size_t DefaultNumRuns() { return 2; } // run every kernel this many times for averaging
-
+ static size_t DefaultNumSearchStragegy() { return 2; } // Full search and Random/PSO
+ static size_t DefaultSwarmSizePSO() { return 8; }
+ static double DefaultInfluenceGlobalPSO(){ return 0.1; }
+ static double DefaultInfluenceLocalPSO(){ return 0.3; }
+ static double DefaultInfluenceRandomPSO(){ return 0.6; }
+ static size_t DefaultHeuristic(){ return size_t{3};} // PSO
+ static double DefaultMaxTempAnn(){ return 1.0;}
+
// Describes how to obtain the sizes of the buffers
static size_t GetSizeX(const Arguments<T> &) { return 1; } // N/A for this kernel
static size_t GetSizeY(const Arguments<T> &) { return 1; } // N/A for this kernel
@@ -173,6 +180,29 @@ class TuneXgemm {
return 2 * args.m * args.n * args.k;
}
static std::string PerformanceUnit() { return "GFLOPS"; }
+
+ // Returns which Heuristic to run
+ static size_t GetCurrentHeuristic(const Arguments<T> &args){
+
+ // Multi Search Strategy is enable
+ if( args.multi_search_strategy){
+ if( V == 1){
+ return size_t{0};
+ }
+ else{
+ return args.heuristic_selection;
+ }
+ }
+
+ // Use full-search to explore all parameter combinations or random-search to search only a part of
+ // the parameter values. The fraction is set as a command-line argument.
+ if (args.fraction == 1.0 || args.fraction == 0.0) {
+ return size_t{0}; // Full search
+ }
+ else {
+ return args.heuristic_selection;
+ }
+ }
};
// =================================================================================================
@@ -196,49 +226,39 @@ void StartVariation(int argc, char *argv[]) {
}
}
+// Test multiple heuristics if kArgMultiSearchStrategy is enabled
+// Otherwise, run the heuristic specified in kArgMultiSearchStrategy
+void TestHeuristic(int argc, char *argv[]){
-// Main function (not within the clblast namespace)
-int main(int argc, char *argv[]) {
-
-int num_of_strategies = DEFAULT_NUM_OF_STRATEGY;
-
-if(const char* env_p = std::getenv("CK_TUNER_NUM_OF_STRATEGIES"))
-{
- num_of_strategies = atoi(env_p);
- printf("CK_TUNER_NUM_OF_STRATEGIES is: %s\n", env_p );
-}
-else
-{
- printf("CK_TUNER_NUM_OF_STRATEGIES is not defined\n");
-}
-
-printf("num_of_strategies : %d\n",num_of_strategies );
+ auto command_line_args = clblast::RetrieveCommandLineArguments(argc, argv);
+ auto help = std::string{""};
+ auto heuristic_selected = clblast::GetArgument(command_line_args, help, clblast::kArgMultiSearchStrategy, 0);
+ auto multi_search_strategy = clblast::GetArgument(command_line_args, help, clblast::kArgMultiSearchStrategy, 0);
-if( DEFAULT_NUM_OF_STRATEGY != num_of_strategies )
-{
- //FACCIO PRIMA LA FULL SEARCH
- StartVariation<1>(argc, argv);
+ if(multi_search_strategy){
+ StartVariation<1>(argc, argv);
+ StartVariation<2>(argc, argv);
+ }
+ else
+ {
+ switch(heuristic_selected){
+ case 1:
+ case 2:
+ case 3:
+ StartVariation<2>(argc, argv);
+ break;
+ case 0:
+ default:
+ StartVariation<1>(argc, argv);
+ break;
+ }
+ }
}
- auto command_line_args = clblast::RetrieveCommandLineArguments(argc, argv);
- auto help = std::string{"* Options given/available:\n"};
- auto localtStrategy = clblast::GetArgument(command_line_args, help, clblast::tStrategy, DEFAULT_STRATEGY);
- switch(localtStrategy)
- {
- case FULL_SEARCH_STRATEGY:
- StartVariation<1>(argc, argv);
- break;
- case RANDOM_SEARCH_STRATEGY:
- StartVariation<2>(argc, argv);
- break;
- case PSO_STRATEGY:
- StartVariation<3>(argc, argv);
- break;
- case DVDT_STRATEGY:
- StartVariation<2>(argc, argv);
- break;
- }
+// Main function (not within the clblast namespace)
+int main(int argc, char *argv[]) {
+ TestHeuristic(argc, argv);
return 0;
}