diff --git a/Makefile b/Makefile index 7be939a4bdee10c64e773ad5f4cad0d64e6c86a2..d19613a240284aba55464e55370f33b3c99b328a 100644 --- a/Makefile +++ b/Makefile @@ -341,7 +341,7 @@ paraver_experiment: $(paraver_dependencies) # Collect information and produce a json file with it. .json.done: .scalability.done paramedir_experiment paradim_experiment - python cfg/parser/collector.py test_*/*.timing trace_*/*pm -n ${configuration_name} + python cfg/parser/collector.py test_*/*.timing trace_*/*pm dimemas_traces/*dm -n ${configuration_name} touch $@ json: .json.done diff --git a/cfg/parser/reporter.py b/cfg/parser/reporter.py index 7f51ab81fca646a4a23a4442598229c9ab405fcb..9cbf30c65cfc53ee36057551b2f01f76cc125f19 100644 --- a/cfg/parser/reporter.py +++ b/cfg/parser/reporter.py @@ -54,6 +54,13 @@ def get_command_line_instructions(): help="Produce functions report", default=None, ) + parser.add_option( + "--dimemas", + dest="dimemas_file", + help="Produce dimemas report", + default=None, + ) + # OptParser will parse the text provided as command line arguments and will distringuish between the options # and other arguments @@ -77,6 +84,7 @@ if __name__ == "__main__": sypd_file = options.sypd_file sypd_plot_file = options.sypd_plot_file functions_file = options.functions_file + dimemas_file = options.dimemas_file # Load the json file provided experiment_results = TimingInformation( @@ -93,5 +101,7 @@ if __name__ == "__main__": experiment_results.simulated_years_per_day_plot(sypd_plot_file) if functions_file is not None: experiment_results.function_summary().save(functions_file) + if dimemas_file is not None: + experiment_results.dimemas_summary().save(dimemas_file) # To create a new diagnostic/plot you need to create the function in curation.py and add the call inside parsers.py diff --git a/cfg/parser/utils/curation.py b/cfg/parser/utils/curation.py index 282e84f9e7d94ea55b0df351e5941816b93b4b34..3f415e7d1b6c05b13109a12996d8e26846e91481 100644 --- a/cfg/parser/utils/curation.py +++ b/cfg/parser/utils/curation.py @@ -1,7 +1,6 @@ # Imports import numpy as np - class Log: """ Object to store the Logs (info to be printed). @@ -67,6 +66,46 @@ def function_curated_summary(experiment_data): return log +def dimemas_curated_summary(experiment_data): + """ + This is an example of a function to curate the results and return something understandable + :param experiment_data: + :return: text with a summary of functions scalability in the experiment. + """ + from cfg.parser.utils.parsers import dictionary_pointer + + log = Log() + cases = experiment_data.cases + base_case = experiment_data.base_case + dimemas_experiments = list(experiment_data[base_case]["Dimemas"]) + information_types = list(experiment_data[base_case]["Dimemas"][dimemas_experiments[0]].keys()) + information_types = ["Wallclock"] + log_text = "Cores" + for de in dimemas_experiments: + log_text += ",%s" % de + log_text += "\n" + + for case in cases: + log_text += "%i" % case + for exp in dimemas_experiments: + for it in information_types: + address = (case, + "Dimemas", + exp, + it, + "data", + "Maximum", + ) + + section = dictionary_pointer(experiment_data.data, address) + wallclock_time = section[0]/10.**6 + log_text += ", %.2f" % wallclock_time + log_text += "\n" + log.add(log_text) + + return log + + def save_function_summary_csv(experiment_data, csv_folder): """ Function to save the results as a csv which will be used in the latex report diff --git a/cfg/parser/utils/histograms.py b/cfg/parser/utils/histograms.py index 8a383c751949e6db3d3389390c5c66d84b397cff..09abc67b99c70283d4f587b42df3b4e8724eb7f6 100644 --- a/cfg/parser/utils/histograms.py +++ b/cfg/parser/utils/histograms.py @@ -36,6 +36,10 @@ def split_3d_histogram(text3d): name = case_lines[0].strip() histogram = "\n".join(case_lines[1:]) histograms[name] = histogram + # In case of having a single histogram, fix it + if len(histograms) == 1: + for key in histograms.keys(): + histograms = {"data": key + "\n" + histograms[key]} return histograms diff --git a/cfg/parser/utils/parsers.py b/cfg/parser/utils/parsers.py index aad659cab528f04dc55bbef4fcacd8c14f1c2da7..5f5a7b3ced15becbb658d7e38b4c75586cc1efad 100644 --- a/cfg/parser/utils/parsers.py +++ b/cfg/parser/utils/parsers.py @@ -1,8 +1,11 @@ # This script takes several timing.output logs and computes several stats import re import numpy as np -from cfg.parser.utils.curation import function_curated_summary, simulated_years_per_day_summary, \ - save_function_summary_csv, simulated_years_per_day_plot +from cfg.parser.utils.curation import function_curated_summary,\ + dimemas_curated_summary, \ + simulated_years_per_day_summary, \ + save_function_summary_csv,\ + simulated_years_per_day_plot from os.path import basename from cfg.parser.utils.histograms import process_category_histogram, split_3d_histogram @@ -303,6 +306,7 @@ def parse_paramedir_files(files): for filename in files: # Get core count and information type from filename cores, information_type = parse_paramedir_filename(filename) + cores = int(cores) # Initialize dictionary in case it does not exists # Retrieve the section to store the data address = (cores, @@ -330,6 +334,7 @@ def parse_dimemas_files(files): for filename in files: # Get core count and information type from filename cores, simulation_type, information_type = parse_dimemas_filename(filename) + cores = int(cores) # Retrieve the section to store the data address = (cores, @@ -455,7 +460,8 @@ class TimingInformation: # Adding calls to different ways of processing the data def function_summary(self): return function_curated_summary(self) - + def dimemas_summary(self): + return dimemas_curated_summary(self) # Saves functions' info to csv def function_info_csv(self, csv_folder): save_function_summary_csv(self, csv_folder) diff --git a/cfg/trace_analysis/paradim_configurations/Wallclock.dm.cfg b/cfg/trace_analysis/paradim_configurations/Wallclock.dm.cfg new file mode 100644 index 0000000000000000000000000000000000000000..6374113070727ccef0aa520151e4e86e06c08dbb --- /dev/null +++ b/cfg/trace_analysis/paradim_configurations/Wallclock.dm.cfg @@ -0,0 +1,74 @@ +#ParaverCFG +ConfigFile.Version: 3.4 +ConfigFile.NumWindows: 1 + + +################################################################################ +< NEW DISPLAYING WINDOW Useful > +################################################################################ +window_name Useful +window_type single +window_id 1 +window_position_x 153 +window_position_y 380 +window_width 600 +window_height 134 +window_comm_lines_enabled false +window_flags_enabled false +window_noncolor_mode true +window_logical_filtered true +window_physical_filtered true +window_comm_fromto true +window_comm_tagsize true +window_comm_typeval true +window_units Microseconds +window_maximum_y 1.000000000000 +window_minimum_y 0.000000000000 +window_compute_y_max false +window_level thread +window_scale_relative 1.000000000000 +window_end_time_relative 1.000000000000 +window_object appl { 1, { All } } +window_begin_time_relative 0.000000000000 +window_open false +window_drawmode draw_maximum +window_drawmode_rows draw_maximum +window_pixel_size 1 +window_labels_to_draw 1 +window_selected_functions { 14, { {cpu, Active Thd}, {appl, Adding}, {task, Adding}, {thread, Useful}, {node, Adding}, {system, Adding}, {workload, Adding}, {from_obj, None}, {to_obj, None}, {tag_msg, All}, {size_msg, All}, {bw_msg, All}, {evt_type, None}, {evt_value, All} } } +window_compose_functions { 9, { {compose_cpu, As Is}, {compose_appl, As Is}, {compose_task, As Is}, {compose_thread, As Is}, {compose_node, As Is}, {compose_system, As Is}, {compose_workload, As Is}, {topcompose1, As Is}, {topcompose2, As Is} } } + +< NEW ANALYZER2D > +Analyzer2D.Name: WallclockTime +Analyzer2D.X: 1143 +Analyzer2D.Y: 242 +Analyzer2D.Width: 315 +Analyzer2D.Height: 195 +Analyzer2D.ControlWindow: 1 +Analyzer2D.DataWindow: 1 +Analyzer2D.Accumulator: Semantic +Analyzer2D.Statistic: Time +Analyzer2D.CalculateAll: True +Analyzer2D.HideCols: False +Analyzer2D.HorizVert: Horizontal +Analyzer2D.Color: True +Analyzer2D.SemanticColor: False +Analyzer2D.Zoom: Disabled +Analyzer2D.SortCols: False +Analyzer2D.SortCriteria: Average +Analyzer2D.Parameters: 4 -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000000000 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000000000 -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000000000 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000000000 +Analyzer2D.AnalysisLimits: Alltrace +Analyzer2D.ComputeYScale: False +Analyzer2D.Minimum: 0.000000000000 +Analyzer2D.Maximum: 1.000000000000 +Analyzer2D.Delta: 2.000000000000 +Analyzer2D.ComputeGradient: True +Analyzer2D.MinimumGradient: 476533.780000000028 +Analyzer2D.MaximumGradient: 476533.780000000028 +Analyzer2D.DrawModeObjects: draw_maximum +Analyzer2D.DrawModeColumns: draw_maximum +Analyzer2D.PixelSize: 1 +Analyzer2D.ColorMode: window_in_gradient_mode +Analyzer2D.ShowOnlyTotals: True +Analyzer2D.ShortHeaderLabels: True +