From 3a7d1e60c83664f284907189286dcf64f7d700fa Mon Sep 17 00:00:00 2001 From: "Kurt A. O'Hearn" <ohearnku@msu.edu> Date: Sun, 27 Jan 2019 17:08:20 -0800 Subject: [PATCH] PuReMD-old: fix issue where nonbonded time was incorrect when energy_update_freq > 1. Update tools/run_sim.py to include both total simulation time and mean time per step. --- PuReMD/src/forces.c | 2 +- PuReMD/src/io_tools.c | 2 +- tools/run_sim.py | 28 ++++++++++++++++------------ 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/PuReMD/src/forces.c b/PuReMD/src/forces.c index c9d71e82..fbd7acf9 100644 --- a/PuReMD/src/forces.c +++ b/PuReMD/src/forces.c @@ -2425,7 +2425,7 @@ void Compute_Forces( reax_system *system, control_params *control, if ( system->my_rank == MASTER_NODE ) { t_end = MPI_Wtime( ); - data->timing.nonb += t_end - t_start + data->timing.cm;; + data->timing.nonb += t_end - t_start; t_start = t_end; } #endif diff --git a/PuReMD/src/io_tools.c b/PuReMD/src/io_tools.c index b86f82a7..1c878f6e 100644 --- a/PuReMD/src/io_tools.c +++ b/PuReMD/src/io_tools.c @@ -1128,7 +1128,7 @@ void Output_Results( reax_system *system, control_params *control, data->timing.init_cm * denom, data->timing.init_bond * denom, data->timing.bonded * denom, - data->timing.nonb * denom, + (data->timing.nonb + data->timing.cm) * denom, data->timing.cm * denom, data->timing.cm_sort * denom, (double)(data->timing.cm_solver_iters * denom), diff --git a/tools/run_sim.py b/tools/run_sim.py index d18b2fde..d77771ab 100644 --- a/tools/run_sim.py +++ b/tools/run_sim.py @@ -431,6 +431,7 @@ restart_freq 0 ! 0: do not output any restart f step_0_cnt = 0 total_time = 0.0 + step_time = 0.0 comm = 0.0 neighbors = 0.0 init = 0.0 @@ -461,6 +462,7 @@ restart_freq 0 ! 0: do not output any restart f for line in fp: line = line.split() try: + _step_time = float(line[1]) _comm = float(line[2]) _neighbors = float(line[3]) _init = float(line[4]) @@ -483,6 +485,7 @@ restart_freq 0 ! 0: do not output any restart f (min_step and not max_step and cnt_valid >= min_step) or \ (not min_step and max_step and cnt_valid <= max_step) or \ (cnt_valid >= min_step and cnt_valid <= max_step): + step_time = step_time + _step_time comm = comm + _comm neighbors = neighbors + _neighbors init = init + _init @@ -512,6 +515,7 @@ restart_freq 0 ! 0: do not output any restart f line_cnt = line_cnt + 1 if cnt > 0: + step_time = step_time / cnt comm = comm / cnt neighbors = neighbors / cnt init = init / cnt @@ -551,7 +555,7 @@ restart_freq 0 ! 0: do not output any restart f param['cm_solver_q_err'], param['reneighbor'], param['cm_solver_pre_comp_sai_thres'], - total_time, comm, neighbors, init, init_dist, init_cm, init_bond, + total_time, step_time, comm, neighbors, init, init_dist, init_cm, init_bond, bonded, nonbonded, cm, cm_sort, s_iters, pre_comp, pre_app, s_comm, s_allr, s_spmv, s_vec_ops)) else: @@ -952,7 +956,7 @@ if __name__ == '__main__': if param[0] in control_params_dict: control_params_dict[param[0]] = param[1].split(',') else: - print("ERROR: Invalid parameter {0}. Terminating...".format(param[0])) + print("[ERROR] Invalid parameter {0}. Terminating...".format(param[0])) exit(-1) test_cases = setup_test_cases(args.data_sets, data_dir, control_params_dict) @@ -982,7 +986,7 @@ if __name__ == '__main__': if param[0] in control_params_dict: control_params_dict[param[0]] = param[1].split(',') else: - print("ERROR: Invalid parameter {0}. Terminating...".format(param[0])) + print("[ERROR] Invalid parameter {0}. Terminating...".format(param[0])) exit(-1) geo_base, geo_ext = path.splitext(args.geo_file[0]) @@ -995,7 +999,7 @@ if __name__ == '__main__': elif geo_ext.lower() == '.geo': geo_format = ['0'] else: - print("ERROR: unrecognized geometry format {0}. Terminating...".format(ext)) + print("[ERROR] unrecognized geometry format {0}. Terminating...".format(ext)) exit(-1) test_case = TestCase(geo_base, args.geo_file[0], args.ffield_file[0], @@ -1006,16 +1010,16 @@ if __name__ == '__main__': def parse_results(args): if args.run_type[0] == 'serial' or args.run_type[0] == 'openmp': header_fmt_str = '{:15}|{:5}|{:5}|{:5}|{:5}|{:5}|{:5}|{:5}|{:5}|{:5}|{:5}|{:5}|{:10}|{:10}|{:10}|{:10}|{:10}|{:3}|{:10}\n' - header_str = ['Data Set', 'Steps', 'CM', 'Solvr', 'Q Tol', 'QDS', 'PreCT', 'PreCD', 'PreCS', 'PCSAI', 'PreAT', 'PreAJ', 'Pre Comp', - 'Pre App', 'Iters', 'SpMV', 'CM', 'Thd', 'Time (s)'] + header_str = ['Data Set', 'Steps', 'CM', 'Solvr', 'Q_Tol', 'QDS', 'PreCT', 'PreCD', 'PreCS', 'PCSAI', 'PreAT', 'PreAJ', 'Pre_Comp', + 'Pre_App', 'Iters', 'SpMV', 'CM', 'Thd', 'Time (s)'] body_fmt_str = '{:15} {:5} {:5} {:5} {:5} {:5} {:5} {:5} {:5} {:5} {:5} {:5} {:10.3f} {:10.3f} {:10.3f} {:10.3f} {:10.3f} {:3} {:10.3f}\n' elif args.run_type[0] == 'mpi': header_fmt_str = '{:15} {:5} {:5} {:5} {:5} {:5} {:5} {:10} {:10} {:10} {:10} {:10} {:10} {:10} {:10} {:10} {:10} {:10} {:10} {:10} {:10} {:10} {:10} {:10} {:10}\n' - header_str = ['Data_Set', 'Proc', 'Steps', 'PreCt', 'Q_Tol', 'Ren', 'PCSAI', - 'total', 'comm', 'neighbors', 'init', 'init_dist', 'init_cm', 'init_bond', + header_str = ['Data_Set', 'Proc', 'Steps', 'PreCT', 'Q_Tol', 'Ren', 'PCSAI', + 'total_time', 'step_time', 'comm', 'neighbors', 'init', 'init_dist', 'init_cm', 'init_bond', 'bonded', 'nonbonded', 'cm', 'cm_sort', 's_iters', 'pre_comm', 'pre_app', 's_comm', 's_allr', 's_spmv', 's_vec_ops'] - body_fmt_str = '{:15} {:5} {:5} {:5} {:5} {:5} {:5} {:10.3f} {:10.3f} {:10.3f} {:10.3f} {:10.3f} {:10.3f} {:10.3f} {:10.3f} {:10.3f} {:10.3f} {:10.3f} {:10.3f} {:10.3f} {:10.3f} {:10.3f} {:10.3f} {:10.3f} {:10.3f}\n' + body_fmt_str = '{:15} {:5} {:5} {:5} {:5} {:5} {:5} {:10.3f} {:10.3f} {:10.3f} {:10.3f} {:10.3f} {:10.3f} {:10.3f} {:10.3f} {:10.3f} {:10.3f} {:10.3f} {:10.3f} {:10.3f} {:10.3f} {:10.3f} {:10.3f} {:10.3f} {:10.3f} {:10.3f}\n' elif args.run_type[0] == 'mpi+gpu': #TODO pass @@ -1035,7 +1039,7 @@ if __name__ == '__main__': if param[0] in control_params_dict: control_params_dict[param[0]] = param[1].split(',') else: - print("ERROR: Invalid parameter {0}. Terminating...".format(param[0])) + print("[ERROR] Invalid parameter {0}. Terminating...".format(param[0])) exit(-1) geo_base, geo_ext = path.splitext(args.geo_file[0]) @@ -1048,7 +1052,7 @@ if __name__ == '__main__': elif geo_ext.lower() == '.geo': geo_format = ['0'] else: - print("ERROR: unrecognized geometry format {0}. Terminating...".format(ext)) + print("[ERROR] unrecognized geometry format {0}. Terminating...".format(ext)) exit(-1) if args.out_file: @@ -1095,7 +1099,7 @@ if __name__ == '__main__': if param[0] in control_params_dict: control_params_dict[param[0]] = param[1].split(',') else: - print("ERROR: Invalid parameter {0}. Terminating...".format(param[0])) + print("[ERROR] Invalid parameter {0}. Terminating...".format(param[0])) exit(-1) test_cases = setup_test_cases(args.data_sets, data_dir, control_params_dict) -- GitLab