607 if (input_filenames.size() != 2) {
610 inputfile_t inputfile_default_sizes(input_filenames[0]);
611 inputfile_t inputfile_all_pot_sizes(input_filenames[1]);
613 cerr << inputfile_default_sizes.filename <<
" is not an input file with default sizes." << endl;
617 cerr << inputfile_all_pot_sizes.filename <<
" is not an input file with all POT sizes." << endl;
620 vector<results_entry_t>
results;
621 vector<results_entry_t> cubic_results;
624 auto it_all_pot_sizes = inputfile_all_pot_sizes.entries.begin();
625 for (
auto it_default_sizes = inputfile_default_sizes.entries.begin();
626 it_default_sizes != inputfile_default_sizes.entries.end(); ++it_default_sizes) {
627 if (it_default_sizes->product_size == product_size) {
630 product_size = it_default_sizes->product_size;
631 while (it_all_pot_sizes != inputfile_all_pot_sizes.entries.end() &&
632 it_all_pot_sizes->product_size != product_size) {
635 if (it_all_pot_sizes == inputfile_all_pot_sizes.entries.end()) {
639 float best_pot_gflops = 0;
640 for (
auto it = it_all_pot_sizes; it != inputfile_all_pot_sizes.entries.end() && it->product_size == product_size;
642 if (it->gflops > best_pot_gflops) {
643 best_pot_gflops = it->gflops;
644 best_pot_block_size = it->pot_block_size;
647 results_entry_t entry;
648 entry.product_size = product_size;
649 entry.default_block_size = it_default_sizes->nonpot_block_size;
650 entry.best_pot_block_size = best_pot_block_size;
651 entry.default_gflops = it_default_sizes->gflops;
652 entry.best_pot_gflops = best_pot_gflops;
653 entry.default_efficiency = entry.default_gflops / entry.best_pot_gflops;
657 if (
t.k ==
t.m &&
t.m ==
t.n) {
658 cubic_results.push_back(entry);
662 cout <<
"All results:" << endl;
670 const size_t n = min<size_t>(20,
results.size());
671 cout <<
n <<
" worst results:" << endl;
672 for (
size_t i = 0;
i <
n;
i++) {
677 cout <<
"cubic results:" << endl;
678 for (
auto it = cubic_results.begin(); it != cubic_results.end(); ++it) {
686 vector<float>
a = {0.5f, 0.20f, 0.10f, 0.05f, 0.02f, 0.01f};
687 for (
auto it =
a.begin(); it !=
a.end(); ++it) {
689 cout << (100.0f *
n / (
results.size() - 1))
690 <<
" % of product sizes have default efficiency <= " << 100.0f *
results[
n].default_efficiency <<
" %"
int i
Definition: BiCGSTAB_step_by_step.cpp:9
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11
const int default_precision
Definition: analyze-blocking-sizes.cpp:26
#define min(a, b)
Definition: datatypes.h:22
std::map< std::string, Array< float, 1, 8, DontAlign|RowMajor > > results
Definition: dense_solvers.cpp:10
const Scalar * a
Definition: level2_cplx_impl.h:32
std::uint16_t uint16_t
Definition: Meta.h:38
t
Definition: plotPSD.py:36
void show_usage_and_exit() const
Definition: analyze-blocking-sizes.cpp:600
static bool lower_efficiency(const results_entry_t &e1, const results_entry_t &e2)
Definition: analyze-blocking-sizes.cpp:596
Definition: analyze-blocking-sizes.cpp:45