partition_action_t Struct Reference
+ Inheritance diagram for partition_action_t:

Public Member Functions

virtual const charinvokation_name () const override
 
virtual void run (const vector< string > &input_filenames) const override
 
- Public Member Functions inherited from action_t
virtual ~action_t ()
 
virtual void run () const
 
virtual ~action_t ()
 

Member Function Documentation

◆ invokation_name()

virtual const char* partition_action_t::invokation_name ( ) const
inlineoverridevirtual

Reimplemented from action_t.

516 { return "partition"; }

◆ run()

virtual void partition_action_t::run ( const vector< string > &  input_filenames) const
inlineoverridevirtual

Reimplemented from action_t.

517  {
518  vector<preprocessed_inputfile_t> preprocessed_inputfiles;
519 
520  if (input_filenames.empty()) {
521  cerr << "The " << invokation_name() << " action needs a list of input files." << endl;
522  exit(1);
523  }
524 
525  for (auto it = input_filenames.begin(); it != input_filenames.end(); ++it) {
526  inputfile_t inputfile(*it);
527  switch (inputfile.type) {
529  preprocessed_inputfiles.emplace_back(inputfile);
530  break;
532  cerr << "The " << invokation_name() << " action only uses measurements for all pot sizes, and "
533  << "has no use for " << *it << " which contains measurements for default sizes." << endl;
534  exit(1);
535  break;
536  default:
537  cerr << "Unrecognized input file: " << *it << endl;
538  exit(1);
539  }
540  }
541 
542  check_all_files_in_same_exact_order(preprocessed_inputfiles);
543 
544  float required_efficiency_to_beat = 0.0f;
545  vector<vector<vector<size_t>>> partitions;
546  cerr << "searching for partitions...\r" << flush;
547  while (true) {
548  vector<vector<size_t>> partition;
549  find_partition_with_efficiency_higher_than(preprocessed_inputfiles, required_efficiency_to_beat, partition);
550  float actual_efficiency = efficiency_of_partition(preprocessed_inputfiles, partition);
551  cerr << "partition " << preprocessed_inputfiles.size() << " files into " << partition.size() << " subsets for "
552  << 100.0f * actual_efficiency << " % efficiency"
553  << " \r" << flush;
554  partitions.push_back(partition);
555  if (partition.size() == preprocessed_inputfiles.size() || actual_efficiency == 1.0f) {
556  break;
557  }
558  required_efficiency_to_beat = actual_efficiency;
559  }
560  cerr << " " << endl;
561  while (true) {
562  bool repeat = false;
563  for (size_t i = 0; i < partitions.size() - 1; i++) {
564  if (partitions[i].size() >= partitions[i + 1].size()) {
565  partitions.erase(partitions.begin() + i);
566  repeat = true;
567  break;
568  }
569  }
570  if (!repeat) {
571  break;
572  }
573  }
574  for (auto it = partitions.begin(); it != partitions.end(); ++it) {
575  print_partition(preprocessed_inputfiles, *it);
576  }
577  }
int i
Definition: BiCGSTAB_step_by_step.cpp:9
void check_all_files_in_same_exact_order(const vector< preprocessed_inputfile_t > &preprocessed_inputfiles)
Definition: analyze-blocking-sizes.cpp:215
void find_partition_with_efficiency_higher_than(const vector< preprocessed_inputfile_t > &preprocessed_inputfiles, float required_efficiency_to_beat, vector< vector< size_t >> &out_partition)
Definition: analyze-blocking-sizes.cpp:470
float efficiency_of_partition(const vector< preprocessed_inputfile_t > &preprocessed_inputfiles, const vector< vector< size_t >> &partition)
Definition: analyze-blocking-sizes.cpp:341
void print_partition(const vector< preprocessed_inputfile_t > &preprocessed_inputfiles, const vector< vector< size_t >> &partition)
Definition: analyze-blocking-sizes.cpp:488
Scalar Scalar int size
Definition: benchVecAdd.cpp:17
constexpr array< t, n > repeat(t v)
Definition: MoreMeta.h:583
Definition: analyze-blocking-sizes.cpp:67
virtual const char * invokation_name() const override
Definition: analyze-blocking-sizes.cpp:516

References inputfile_t::all_pot_sizes, check_all_files_in_same_exact_order(), inputfile_t::default_sizes, efficiency_of_partition(), find_partition_with_efficiency_higher_than(), i, print_partition(), Eigen::internal::repeat(), size, and inputfile_t::type.


The documentation for this struct was generated from the following file: