39 std::pair<MultRunData, std::vector<RunSpeedupAvgMedian>>
43 size_t data_size)
const
46 const bool p_params_optimized{
51 auto run_imp_opt_results = run_results;
52 const auto speedup_over_baseline =
53 GetSpeedupOverBaseline(
57 const auto speedup_over_baseline_subsets =
58 GetSpeedupOverBaselineSubsets(
64 std::vector<RunSpeedupAvgMedian> run_imp_speedups;
65 run_imp_speedups.insert(run_imp_speedups.cend(),
66 speedup_over_baseline.cbegin(),
67 speedup_over_baseline.cend());
68 run_imp_speedups.insert(run_imp_speedups.cend(),
69 speedup_over_baseline_subsets.cbegin(),
70 speedup_over_baseline_subsets.cend());
74 if (p_params_optimized) {
75 const std::string speedup_header_optimized_p_params =
78 const auto opt_p_params_speedups =
79 GetAvgMedSpeedupOptPParams(
81 speedup_header_optimized_p_params,
83 run_imp_speedups.insert(
84 run_imp_speedups.end(),
85 opt_p_params_speedups.begin(),
86 opt_p_params_speedups.end());
94 const std::string speedup_header_loop_iters_templated =
97 const auto speedups_templated_iters = GetAvgMedSpeedupLoopItersInTemplate(
98 run_imp_opt_results, speedup_header_loop_iters_templated,
100 run_imp_speedups.insert(
101 run_imp_speedups.end(),
102 speedups_templated_iters.begin(),
103 speedups_templated_iters.end());
108 return {run_imp_opt_results, run_imp_speedups};
112 std::vector<RunSpeedupAvgMedian> EvaluateImpResults::SpeedupsAllRuns(
117 const bool p_params_optimized{
121 std::vector<RunSpeedupAvgMedian> speedups_all_runs;
126 const auto speedup_over_baseline = GetAvgMedSpeedupOverBaseline(
129 speedups_all_runs.insert(
130 speedups_all_runs.cend(),
131 speedup_over_baseline.cbegin(),
132 speedup_over_baseline.cend());
137 if (p_params_optimized) {
138 const auto opt_p_params_speedups =
139 GetAvgMedSpeedupOptPParams(
144 speedups_all_runs.insert(
145 speedups_all_runs.end(),
146 opt_p_params_speedups.begin(),
147 opt_p_params_speedups.end());
155 const auto speedups_templated_iters = GetAvgMedSpeedupLoopItersInTemplate(
160 speedups_all_runs.insert(
161 speedups_all_runs.end(),
162 speedups_templated_iters.begin(),
163 speedups_templated_iters.end());
167 return speedups_all_runs;
174 const std::unordered_map<size_t, MultRunDataWSpeedupByAcc>&
175 run_results_mult_runs,
183 std::unordered_map<size_t, MultRunDataWSpeedupByAcc> run_result_mult_runs_opt =
184 run_results_mult_runs;
187 for (
const auto& [acc, run_results_w_speedups] : run_result_mult_runs_opt.begin()->second) {
190 for (
const auto& [data_size, run_results_w_speedups_by_acc] : run_results_mult_runs) {
191 run_results_acc.insert(
192 run_results_w_speedups_by_acc.at(acc).first.begin(),
193 run_results_w_speedups_by_acc.at(acc).first.end());
197 WriteRunResultsForAcc(
205 std::unordered_map<size_t, std::vector<RunSpeedupAvgMedian>> alt_imp_speedup;
215 const auto [alt_acc_speedup, opt_run_results] = GetAltAccelSpeedups(
216 run_result_mult_runs_opt.at(data_size),
217 run_imp_settings, data_size,
225 if (!(alt_acc_speedup.empty())) {
227 alt_imp_speedup.insert({data_size, alt_acc_speedup});
230 run_result_mult_runs_opt.at(data_size).at(opt_imp_acc).first =
240 std::vector<RunSpeedupAvgMedian> speedups_alt_datatypes;
243 if ((data_size !=
sizeof(
float)) &&
244 (run_result_mult_runs_opt.contains(
sizeof(
float))))
248 const auto alt_datatype_speedups = GetAvgMedSpeedupBaseVsTarget(
249 run_result_mult_runs_opt.at(
sizeof(
float)).at(opt_imp_acc).first,
250 run_result_mult_runs_opt.at(data_size).at(opt_imp_acc).first,
251 (data_size >
sizeof(
float)) ?
256 speedups_alt_datatypes.insert(
257 speedups_alt_datatypes.begin(),
258 alt_datatype_speedups.begin(),
259 alt_datatype_speedups.end());
265 const size_t first_datatype_size =
267 auto [run_results, run_speedups] =
268 run_result_mult_runs_opt.at(first_datatype_size).at(opt_imp_acc);
274 if (run_datatype_size == first_datatype_size) {
275 if (alt_imp_speedup.contains(run_datatype_size)) {
276 run_speedups.insert(run_speedups.cend(),
277 alt_imp_speedup.at(run_datatype_size).cbegin(),
278 alt_imp_speedup.at(run_datatype_size).cend());
282 run_speedups.insert(run_speedups.cend(),
283 run_result_mult_runs_opt.at(run_datatype_size).at(opt_imp_acc).second.cbegin(),
284 run_result_mult_runs_opt.at(run_datatype_size).at(opt_imp_acc).second.cend());
285 if (alt_imp_speedup.contains(run_datatype_size)) {
286 run_speedups.insert(run_speedups.cend(),
287 alt_imp_speedup.at(run_datatype_size).cbegin(),
288 alt_imp_speedup.at(run_datatype_size).cend());
296 if (run_datatype_size != first_datatype_size) {
298 run_result_mult_runs_opt.at(run_datatype_size).at(opt_imp_acc).first.cbegin(),
299 run_result_mult_runs_opt.at(run_datatype_size).at(opt_imp_acc).first.cend());
304 const auto speedups_all_runs =
305 SpeedupsAllRuns(run_results, run_imp_settings);
308 speedups_all_runs.cbegin(),
309 speedups_all_runs.cend());
315 speedups_alt_datatypes.cbegin(),
316 speedups_alt_datatypes.cend());
319 WriteRunOutput({run_results, run_speedups}, run_imp_settings, opt_imp_acc);
324 void EvaluateImpResults::WriteRunResultsForAcc(
330 const auto imp_results_fp = GetImpResultsPath();
333 if (!(std::filesystem::is_directory(
336 std::filesystem::create_directory(
341 const auto path_acc_results =
344 std::filesystem::path(run_imp_settings.
run_name +
350 std::ofstream out_results_str(path_acc_results);
355 const auto first_success_run_iter =
356 std::ranges::find_if(run_results,
357 [](
const auto& run_result) {
return run_result.second.has_value(); } );
361 auto headers_in_order = first_success_run_iter->second->at(
365 for (
const auto& [_, run_sig_data] : run_results) {
367 for (
const auto& curr_header : run_sig_data->at(
370 if (
auto header_iter = std::ranges::find(headers_in_order,
372 header_iter == headers_in_order.cend())
374 headers_in_order.push_back(curr_header);
382 for (
const auto& curr_header : headers_in_order) {
383 out_results_str << curr_header <<
',';
385 out_results_str << std::endl;
389 for (
const auto& [_, run_sig_data] : run_results) {
393 for (
const auto& curr_header : headers_in_order) {
399 out_results_str <<
',';
401 out_results_str << std::endl;
405 std::cout <<
"Run results for using "
407 <<
" acceleration written to " << path_acc_results << std::endl;
410 out_results_str.close();
415 void EvaluateImpResults::WriteRunOutput(
416 const std::pair<
MultRunData, std::vector<RunSpeedupAvgMedian>>&
417 run_results_w_speedups,
422 const auto& [run_results, speedup_headers_w_data] = run_results_w_speedups;
425 const bool p_params_optimized{
431 const auto first_success_run_iter =
432 std::ranges::find_if(run_results,
433 [](
const auto& run_result) {
return run_result.second.has_value(); } );
436 if (first_success_run_iter != run_results.cend())
440 const auto& parallel_param_settings =
442 std::set<run_environment::ParallelParamsSetting>{
445 std::set<run_environment::ParallelParamsSetting>{
450 auto headers_in_order = first_success_run_iter->second->at(
455 std::vector<std::string> speedup_headers;
456 for (
const auto& [speedup_header, _] : speedup_headers_w_data) {
457 speedup_headers.push_back(speedup_header);
462 for (
const auto& speedup_header : speedup_headers) {
463 if (
auto speedup_header_iter = std::ranges::find(headers_in_order,
465 speedup_header_iter != headers_in_order.cend())
467 headers_in_order.erase(speedup_header_iter);
472 headers_in_order.insert(
473 headers_in_order.cend(),
474 speedup_headers.cbegin(),
475 speedup_headers.cend());
479 std::map<run_environment::ParallelParamsSetting, std::ostringstream>
481 for (
const auto& p_param_setting : parallel_param_settings) {
482 run_data_sstr.insert({p_param_setting, std::ostringstream()});
487 for (
const auto& curr_header : headers_in_order) {
488 for (
const auto& p_param_setting : parallel_param_settings) {
489 run_data_sstr.at(p_param_setting) << curr_header <<
',';
492 for (
const auto& p_param_setting : parallel_param_settings) {
493 run_data_sstr.at(p_param_setting) << std::endl;
499 for (
const auto& p_param_setting : parallel_param_settings) {
500 for (
const auto& [_, run_sig_data] : run_results) {
504 for (
const auto& curr_header : headers_in_order) {
505 if (run_sig_data->at(p_param_setting).IsData(curr_header))
507 run_data_sstr.at(p_param_setting) <<
508 run_sig_data->at(p_param_setting).GetDataAsStr(curr_header);
510 run_data_sstr.at(p_param_setting) <<
',';
512 run_data_sstr.at(p_param_setting) << std::endl;
523 const auto imp_results_fp = GetImpResultsPath();
527 std::map<run_eval::OutResults, const std::filesystem::path> output_file_paths;
532 if (!(std::filesystem::is_directory(imp_results_fp / file_info.dir_path))) {
533 std::filesystem::create_directory(imp_results_fp / file_info.dir_path);
535 output_file_paths.insert(
537 imp_results_fp / file_info.dir_path /
538 std::filesystem::path(run_imp_settings.
run_name +
"_" +
539 std::string(file_info.desc_file_name) +
546 std::map<run_eval::OutResults, std::ofstream> results_stream;
547 for (
const auto& [out_results_type, file_path] : output_file_paths) {
548 results_stream.insert(
550 std::ofstream(file_path)});
556 if (p_params_optimized) {
583 for (
const auto& [speedup_header, _] : speedup_headers_w_data) {
589 for (
const auto& [middle_val_desc, middle_val_enum] :
590 {std::pair<std::string_view, run_eval::MiddleValData>{
592 std::pair<std::string_view, run_eval::MiddleValData>{
596 middle_val_desc <<
',';
597 for (
const auto& [_, speedup_data] : speedup_headers_w_data) {
598 if (speedup_data.contains(middle_val_enum)) {
600 speedup_data.at(middle_val_enum) <<
',';
611 "Speedup Results,Average Speedup,Median Speedup" << std::endl;
612 for (
const auto& [speedup_header, speedup_data] : speedup_headers_w_data) {
627 for (
auto& [_, curr_results_stream] : results_stream) {
628 curr_results_stream.close();
632 for (
const auto& [out_results_type, out_results_desc_str] :
635 std::cout << out_results_desc_str <<
" in " <<
636 output_file_paths.at(out_results_type) << std::endl;
644 GetCombResultsTopText(),
645 GetInputParamsShow());
648 std::cout <<
"Error, no runs completed successfully" << std::endl;
657 std::pair<std::vector<RunSpeedupAvgMedian>,
MultRunData>
658 EvaluateImpResults::GetAltAccelSpeedups(
661 size_t data_type_size,
664 if (run_imp_results_by_acc_setting.size() == 1) {
668 return {{}, run_imp_results_by_acc_setting.at(fastest_acc).first};
674 auto run_imp_opt_results =
675 run_imp_results_by_acc_setting.at(fastest_acc).first;
678 std::vector<RunSpeedupAvgMedian> alt_acc_speedups;
679 for (
auto& [acc_setting, acc_results] : run_imp_results_by_acc_setting) {
680 if (acc_setting != fastest_acc) {
683 alt_acc_speedups.push_back(
684 GetAvgMedSpeedupBaseVsTarget(
686 run_imp_results_by_acc_setting.at(fastest_acc).first,
695 for (
auto& [run_input_sig, opt_sig_run_results] : run_imp_opt_results)
697 if (opt_sig_run_results && acc_results.first.at(run_input_sig))
703 const double opt_result_time =
704 *opt_sig_run_results->at(
707 const double alt_acc_result_time =
708 *acc_results.first.at(run_input_sig)->at(
711 if (alt_acc_result_time < opt_result_time) {
714 opt_sig_run_results = acc_results.first.at(run_input_sig);
720 return {alt_acc_speedups, run_imp_opt_results};
725 std::vector<RunSpeedupAvgMedian> EvaluateImpResults::GetSpeedupOverBaseline(
728 size_t data_type_size)
const
731 std::vector<RunSpeedupAvgMedian> speedup_results;
736 const auto speedup_over_baseline = GetAvgMedSpeedupOverBaseline(
740 speedup_results.insert(
741 speedup_results.cend(),
742 speedup_over_baseline.cbegin(),
743 speedup_over_baseline.cend());
746 return speedup_results;
751 std::vector<RunSpeedupAvgMedian>
752 EvaluateImpResults::GetSpeedupOverBaselineSubsets(
755 size_t data_type_size)
const
759 return GetAvgMedSpeedupOverBaselineSubsets(
767 return std::vector<RunSpeedupAvgMedian>();
773 std::pair<std::string, std::map<InputSignature, std::string>>
774 EvaluateImpResults::GetBaselineRuntimeData(
775 const std::array<std::string_view, 2>& baseline_runtimes_path_desc,
776 std::string_view key_runtime_data)
const
779 return std::pair<std::string, std::map<InputSignature, std::string>>{
780 std::string(baseline_runtimes_path_desc.at(1)),
781 baseline_run_results.InputsToKeyVal(key_runtime_data)};
785 RunSpeedupAvgMedian::second_type EvaluateImpResults::GetAvgMedSpeedup(
786 const std::vector<double>& speedups_vect)
const
788 const double average_speedup =
790 speedups_vect.cbegin(),
791 speedups_vect.cend(),
793 (double)speedups_vect.size();
794 auto speedups_vect_sorted = speedups_vect;
795 std::ranges::sort(speedups_vect_sorted);
796 const double median_speedup =
797 ((speedups_vect_sorted.size() % 2) == 0) ?
798 ((speedups_vect_sorted.at((speedups_vect_sorted.size() / 2) - 1) +
799 speedups_vect_sorted.at(speedups_vect_sorted.size() / 2)) / 2.0) :
800 speedups_vect_sorted.at(speedups_vect_sorted.size() / 2);
807 std::vector<RunSpeedupAvgMedian>
808 EvaluateImpResults::GetAvgMedSpeedupOverBaselineSubsets(
810 std::string_view data_type_str,
811 const std::array<std::string_view, 2>& baseline_runtimes_path_desc,
812 const std::vector<std::pair<
813 std::string, std::vector<InputSignature>>>& subset_desc_input_sig)
const
816 std::vector<RunSpeedupAvgMedian> speedup_data;
820 const auto [baseline_name, baseline_runtimes_to_sig] =
821 GetBaselineRuntimeData(
822 baseline_runtimes_path_desc,
829 for (
const auto& [subset_desc, subset_inputs] : subset_desc_input_sig)
832 std::vector<double> speedups_vect;
835 const std::string speedup_header =
"Speedup relative to " +
836 std::string(baseline_name) +
" - " + std::string(data_type_str) +
837 " on " + std::string(subset_desc);
840 for (
const auto& subset_input_signature : subset_inputs)
844 for (
auto& [run_sig, run_sig_results] : run_results)
851 if (run_sig.EqualsUsingAny(subset_input_signature)) {
852 speedups_vect.push_back(
853 std::stod(baseline_runtimes_to_sig.at(run_sig)) /
854 *run_sig_results->at(
857 for (
auto& [_, run_data] : *run_sig_results) {
858 run_data.AddDataWHeader(
859 std::string(speedup_header),
860 speedups_vect.back());
866 if (!(speedups_vect.empty())) {
867 speedup_data.push_back(
868 {speedup_header, GetAvgMedSpeedup(speedups_vect)});
878 std::vector<RunSpeedupAvgMedian> EvaluateImpResults::GetAvgMedSpeedupOverBaseline(
880 std::string_view data_type_str,
881 const std::array<std::string_view, 2>& baseline_runtimes_path_desc)
const
885 const std::array<std::string_view, 2> baseline_opt_start_info_runtime_header{
886 "Speedup relative to",
888 const std::array<std::string_view, 2> baseline_s_thread_start_info_runtime_header{
889 "Single-Thread (Orig Imp) speedup relative to",
894 std::vector<RunSpeedupAvgMedian> speedup_data;
899 for (
const auto& start_info_runtime_header :
900 {baseline_opt_start_info_runtime_header,
901 baseline_s_thread_start_info_runtime_header})
904 const auto [baseline_name, baseline_runtimes_to_sig] =
905 GetBaselineRuntimeData(
906 baseline_runtimes_path_desc,
907 start_info_runtime_header.at(1));
908 const std::string speedup_header =
909 std::string(start_info_runtime_header.at(0)) +
910 " " + baseline_name +
" - " + std::string(data_type_str);
911 std::vector<double> speedups_vect;
912 for (
auto& [run_sig, run_sig_results] : run_results)
916 if (run_sig_results && (baseline_runtimes_to_sig.contains(run_sig)))
919 const auto runtime_input_sig = *run_sig_results->at(
921 start_info_runtime_header.at(1));
924 const auto baseline_runtime =
925 std::stod(baseline_runtimes_to_sig.at(run_sig));
929 speedups_vect.push_back(baseline_runtime / runtime_input_sig);
930 for (
auto& [_, run_data] : *run_sig_results) {
931 run_data.AddDataWHeader(speedup_header, speedups_vect.back());
935 if (!(speedups_vect.empty())) {
938 speedup_data.push_back(
939 {speedup_header, GetAvgMedSpeedup(speedups_vect)});
949 std::vector<RunSpeedupAvgMedian> EvaluateImpResults::GetAvgMedSpeedupOptPParams(
950 MultRunData& run_results, std::string_view speedup_header,
951 const std::optional<std::vector<std::pair<std::string, std::vector<InputSignature>>>>& eval_subsets)
const
954 std::vector<RunSpeedupAvgMedian> speedups_base_v_target;
957 std::vector<std::pair<std::string, std::vector<InputSignature>>> eval_sets
959 std::string(), std::vector<InputSignature>{
InputSignature({}, {}, {})})};
964 eval_sets.end(), eval_subsets->begin(), eval_subsets->end());
969 for (
const auto& [subset_desc, subset_inputs] : eval_sets)
972 std::vector<double> speedups_vect;
975 const std::string speedup_header_set =
976 (subset_desc.size() == 0) ?
977 std::string(speedup_header) :
978 std::string(speedup_header) +
" on " + std::string(subset_desc);
980 for (
auto& [input_sig, sig_run_results] : run_results)
984 if (std::ranges::any_of(
986 [&input_sig](
const auto& subset_sig) {
987 return input_sig.EqualsUsingAny(subset_sig);}) &&
992 speedups_vect.push_back(
993 (*(sig_run_results->at(
996 (*(sig_run_results->at(
1001 sig_run_results->at(
1003 std::string(speedup_header), speedups_vect.back());
1004 sig_run_results->at(
1006 std::string(speedup_header), speedups_vect.back());
1009 if (!(speedups_vect.empty())) {
1012 speedups_base_v_target.push_back({RunSpeedupAvgMedian::first_type(speedup_header_set), GetAvgMedSpeedup(speedups_vect)});
1013 speedups_vect.clear();
1017 return speedups_base_v_target;
1023 std::vector<RunSpeedupAvgMedian> EvaluateImpResults::GetAvgMedSpeedupBaseVsTarget(
1026 std::string_view speedup_header,
1028 const std::optional<std::vector<std::pair<std::string, std::vector<InputSignature>>>>& eval_subsets)
const
1031 std::vector<RunSpeedupAvgMedian> speedups_base_v_target;
1034 std::vector<std::pair<std::string, std::vector<InputSignature>>> eval_sets
1036 std::string(), std::vector<InputSignature>{
InputSignature({}, {}, {})})};
1041 eval_sets.end(), eval_subsets->begin(), eval_subsets->end());
1046 for (
const auto& [subset_desc, subset_inputs] : eval_sets)
1050 std::vector<double> speedups_vect;
1053 const std::string speedup_header_set =
1054 (subset_desc.size() == 0) ?
1055 std::string(speedup_header) :
1056 std::string(speedup_header) +
" on " + std::string(subset_desc);
1059 for (
auto& [input_sig_base, sig_run_results_base] : run_results_base)
1063 if (std::ranges::any_of(
1065 [&input_sig_base](
const auto& subset_sig) {
1066 return input_sig_base.EqualsUsingAny(subset_sig);
1072 for (
auto& [input_sig_target, sig_run_results_target] : run_results_target)
1078 base_in_sig_adjusted.RemoveDatatypeSetting();
1079 target_in_sig_adjusted.RemoveDatatypeSetting();
1084 base_in_sig_adjusted.RemoveTemplatedLoopIterSetting();
1085 target_in_sig_adjusted.RemoveTemplatedLoopIterSetting();
1087 if (base_in_sig_adjusted == target_in_sig_adjusted) {
1090 if (sig_run_results_base &&
1091 sig_run_results_target)
1093 speedups_vect.push_back(
1094 *sig_run_results_base->at(
1097 *sig_run_results_target->at(
1102 sig_run_results_base->at(
1104 std::string(speedup_header), speedups_vect.back());
1105 sig_run_results_target->at(
1107 std::string(speedup_header), speedups_vect.back());
1113 if (!(speedups_vect.empty())) {
1116 speedups_base_v_target.push_back(
1117 {RunSpeedupAvgMedian::first_type(speedup_header_set), GetAvgMedSpeedup(speedups_vect)});
1118 speedups_vect.clear();
1122 return speedups_base_v_target;
1128 std::vector<RunSpeedupAvgMedian> EvaluateImpResults::GetAvgMedSpeedupLoopItersInTemplate(
1130 std::string_view speedup_header,
1135 std::array<MultRunData, 2> templated_non_templated_loops_data;
1136 for (
const auto data_index : {0, 1}) {
1137 std::ranges::copy_if(run_results,
1138 std::inserter(templated_non_templated_loops_data[data_index],
1139 templated_non_templated_loops_data[data_index].end()),
1140 [data_index](
const auto& input_sig_run_results) {
1141 if (input_sig_run_results.first.TemplatedLoopIters()) {
1144 if (data_index == 0) {
1145 return *input_sig_run_results.first.TemplatedLoopIters();
1147 if (data_index == 1) {
1148 return (!(*input_sig_run_results.first.TemplatedLoopIters()));
1164 std::erase_if(subsets_eval, [](
const auto& subset_desc_sigs)
1166 return std::ranges::any_of(
1167 subset_desc_sigs.second, [](
const auto& input_sig)
1169 return input_sig.TemplatedLoopIters().has_value();
1175 const std::vector<RunSpeedupAvgMedian> speedups_header_data =
1176 GetAvgMedSpeedupBaseVsTarget(
1177 templated_non_templated_loops_data[1],
1178 templated_non_templated_loops_data[0],
1187 for (
const auto& run_data_updated : templated_non_templated_loops_data) {
1188 for (
const auto& curr_run_data : run_data_updated) {
1189 run_results.at(curr_run_data.first) = curr_run_data.second;
1194 return speedups_header_data;
Declares class with operator function to evaluate implementation runs across multiple architectures....
std::unordered_map< run_environment::AccSetting, std::pair< MultRunData, std::vector< RunSpeedupAvgMedian > >> MultRunDataWSpeedupByAcc
Mapping of acceleration setting to run and speedup data.
std::map< InputSignature, std::optional< std::map< run_environment::ParallelParamsSetting, RunData > >> MultRunData
Alias mapping input signature to run data for each parallel parameters setting Run data is null if r...
Declares class with operator function to evaluate implementations of the same algorithm across differ...
BaseTargetDiff
Enum to define difference between "base" and "target" result sets when evaluating speedup.
Declares class to load and store run results data including speedups from evaluation.
Class with operator function to evaluate implementation runs across multiple architectures....
void EvalAllResultsWriteOutput(const std::unordered_map< size_t, MultRunDataWSpeedupByAcc > &run_results_mult_runs, const run_environment::RunImpSettings &run_imp_settings, run_environment::AccSetting opt_imp_acc) const
Evaluate results for all implementation runs on multiple inputs with the runs potentially having diff...
std::pair< MultRunData, std::vector< RunSpeedupAvgMedian > > EvalResultsSingDataTypeAcc(const MultRunData &run_results, const run_environment::RunImpSettings &run_imp_settings, size_t data_size) const
Evaluate results for implementation runs on multiple inputs with all the runs having the same data ty...
Class to load and store run results data including speedups from evaluation.
constexpr std::string_view AccelerationString()
Get string corresponding to acceleration method at compile time.
AccSetting
Enum for acceleration setting.
const std::map< std::size_t, std::string_view > kDataSizeToNameMap
Mapping from data size to data type string.
@ kRunTemplatedAndNotTemplated
const std::map< run_environment::AccSetting, const std::string_view > kAltAccToSpeedupDesc
constexpr std::string_view kImpResultsRunDataAccFolderName
constexpr std::string_view kSingleThreadRuntimeHeader
const std::map< OutResults, const std::string_view > kOutResultsDesc
constexpr std::string_view kAllRunsStr
Constant for "all runs" string.
constexpr std::string_view kCsvFileExtension
constexpr std::string_view kSpeedupDoubleHeader
constexpr std::string_view kRunResultsDescFileName
constexpr std::string_view kOptimizedRuntimeHeader
const std::map< OutResults, const OutFileInfo > kOutResultsFileInfo
constexpr std::string_view kSpeedupHalfHeader
constexpr std::string_view kSpeedupOptParParamsHeader
constexpr std::string_view kSpeedupLoopItersCountTemplate
Structure that stores settings for current implementation run.
TemplatedItersSetting templated_iters_setting
std::optional< std::array< std::string_view, 2 > > baseline_runtimes_path_desc
std::vector< unsigned int > datatypes_eval_sizes
std::pair< std::array< unsigned int, 2 >, std::set< std::array< unsigned int, 2 > > > p_params_default_alt_options
std::vector< std::pair< std::string, std::vector< InputSignature > > > subset_desc_input_sig
bool run_alt_optimized_imps