From a73f5bc06a63c96e7d7713396a8d60abc52a7c07 Mon Sep 17 00:00:00 2001 From: Augustin Degomme Date: Thu, 2 Oct 2014 14:49:38 +0200 Subject: [PATCH] When display timing is set, also display global simulation time and application times This allows to check if most of the time is spent in the application, or in Simgrid Add a hint if more than 75% of the time is spent inside the application's code (to use replay or sampling) --- src/smpi/smpi_bench.c | 4 ++++ src/smpi/smpi_global.c | 22 ++++++++++++++++------ 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/smpi/smpi_bench.c b/src/smpi/smpi_bench.c index 972795beb7..f7b0c26c86 100644 --- a/src/smpi/smpi_bench.c +++ b/src/smpi/smpi_bench.c @@ -78,6 +78,8 @@ int smpi_loaded_page = -1; char* start_data_exe = NULL; int size_data_exe = 0; int smpi_privatize_global_variables; +double smpi_total_benched_time = 0; + smpi_privatisation_region_t smpi_privatisation_regions; @@ -218,6 +220,8 @@ void smpi_bench_end(void) if (sg_cfg_get_boolean("smpi/simulate_computation")) { smpi_execute(xbt_os_timer_elapsed(timer)); } + + smpi_total_benched_time += xbt_os_timer_elapsed(timer); } /* Private sleep function used by smpi_sleep() and smpi_usleep() */ diff --git a/src/smpi/smpi_global.c b/src/smpi/smpi_global.c index 01f56e9ae0..d16e7c2725 100644 --- a/src/smpi/smpi_global.c +++ b/src/smpi/smpi_global.c @@ -42,8 +42,8 @@ typedef struct s_smpi_process_data { static smpi_process_data_t *process_data = NULL; int process_count = 0; int* index_to_process_data = NULL; - - +extern double smpi_total_benched_time; +xbt_os_timer_t global_timer; MPI_Comm MPI_COMM_WORLD = MPI_COMM_UNINITIALIZED; int MPI_UNIVERSE_SIZE; @@ -334,7 +334,6 @@ void smpi_comm_copy_buffer_callback(smx_action_t comm, void *buff, size_t buff_size) { XBT_DEBUG("Copy the data over"); - if(_xbt_replay_is_active()) return; void* tmpbuff=buff; if((smpi_privatize_global_variables) @@ -405,7 +404,8 @@ void smpi_global_init(void) char name[MAILBOX_NAME_MAXLEN]; int smpirun=0; - + global_timer = xbt_os_timer_new(); + xbt_os_walltimer_start(global_timer); if (process_count == 0){ process_count = SIMIX_process_count(); smpirun=1; @@ -656,9 +656,19 @@ int smpi_main(int (*realmain) (int argc, char *argv[]), int argc, char *argv[]) MC_do_the_modelcheck_for_real(); else SIMIX_run(); + xbt_os_walltimer_stop(global_timer); + if (sg_cfg_get_boolean("smpi/display_timing")){ + double global_time = xbt_os_timer_elapsed(global_timer); + XBT_INFO("Simulated time: %g seconds. \n " + "The simulation took %g seconds (after parsing and platform setup)\n" + "%g seconds were actual computation of the application" + , SIMIX_get_clock(), global_time , smpi_total_benched_time); + + if (smpi_total_benched_time/global_time>=0.75) + XBT_INFO("More than 75%% of the time was spent inside the application code.\n" + "You may want to use sampling functions or trace replay to reduce this."); - if (sg_cfg_get_boolean("smpi/display_timing")) - XBT_INFO("Simulation time: %g seconds.", SIMIX_get_clock()); + } smpi_global_destroy(); -- 2.20.1