#include #include #include "common.h" #include "executor/firstlevelequi.h" #include "executor/firstlevelgreedy.h" #include "executor/opti.h" void displaySplit(Split const& split) { for(auto const& e: split) std::printf("%zu, ", e); std::puts(""); } std::ostream& operator<<(std::ostream& os, CoresList const& cl) { os << '{'; for(auto k: cl) os << k << ','; return os << '}'; } CoresList coresLinUpTo(std::size_t n) { CoresList cl(n); std::generate_n(std::begin(cl), n, [i=0]() mutable { return ++i; }); return cl; } CoresList coresExpUpTo(std::size_t n) { CoresList cl; std::size_t min = 1; while(min <= n) { cl.push_back(min); min *= 2; } return cl; } /* *** */ void genFixedCores(std::string const& o, CoresList const& coresList, std::size_t first, std::size_t last, SplitFn split) { std::ofstream f{o}; if(!f) return; f << *coresList.rbegin() << ',' << first << ',' << last << '\n'; for(std::size_t n = first; n <= last; ++n) f << n << ',' << split(n, coresList).size() << '\n'; } void genFixedTasksLin(std::string const& o, std::size_t tasks, std::size_t last, SplitFn split) { std::ofstream f{o}; if(!f) return; f << tasks << ',' << 1 << ',' << last << '\n'; for(std::size_t i = 1; i <= last; ++i) f << i << ',' << split(i, coresLinUpTo(i)).size() << '\n'; } void genFixedTasksExp(std::string const& o, std::size_t tasks, std::size_t last, SplitFn split) { std::ofstream f{o}; if(!f) return; f << tasks << ',' << 1 << ',' << last << '\n'; for(std::size_t i = 1; i <= last; i *= 2) f << i << ',' << split(i, coresExpUpTo(i)).size() << '\n'; } void genAll() { #define OUTPREFIX "plot_data/fig" { auto cores = coresLinUpTo(64); constexpr unsigned start = 50; constexpr unsigned num = 1000; genFixedCores(OUTPREFIX "1a", cores, start, start+num, firstLevelEqui); genFixedCores(OUTPREFIX "1b", cores, start, start+num, firstLevelGreedy); genFixedCores(OUTPREFIX "1c", cores, start, start+num, fictiveOpti); } { auto cores = coresLinUpTo(64); constexpr unsigned start = 50; constexpr unsigned num = 1000; genFixedCores(OUTPREFIX "2a", cores, start, start+num, firstLevelEqui); genFixedCores(OUTPREFIX "2b", cores, start, start+num, firstLevelGreedy); genFixedCores(OUTPREFIX "2c", cores, start, start+num, fictiveOpti); } { auto cores = coresLinUpTo(64); constexpr unsigned start = 50; constexpr unsigned num = 1000; genFixedCores(OUTPREFIX "3a", cores, start, start+num, firstLevelEqui); genFixedCores(OUTPREFIX "3b", coresExpUpTo(64), start, start+num, firstLevelEqui); genFixedCores(OUTPREFIX "3c", cores, start, start+num, fictiveOpti); } { constexpr unsigned tasks = 1000; genFixedTasksLin(OUTPREFIX "4a", tasks, 256, firstLevelEqui); genFixedTasksLin(OUTPREFIX "4b", tasks, 256, firstLevelGreedy); } { constexpr unsigned tasks = 10'000; genFixedTasksLin(OUTPREFIX "5a", tasks, 256, firstLevelEqui); genFixedTasksLin(OUTPREFIX "5b", tasks, 256, firstLevelGreedy); } { constexpr unsigned tasks = 1'000'000; genFixedTasksLin(OUTPREFIX "6a", tasks, 256, firstLevelEqui); genFixedTasksLin(OUTPREFIX "6b", tasks, 256, firstLevelGreedy); } } int main() { genAll(); }