X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/eaecea92dde01d850f6da36ec4cdfe86992a0f68..18b0c9100f020d980f681a3e99eed106fba87804:/src/smpi/smpi_bench.c diff --git a/src/smpi/smpi_bench.c b/src/smpi/smpi_bench.c index 6feda0fcd4..480c391f52 100644 --- a/src/smpi/smpi_bench.c +++ b/src/smpi/smpi_bench.c @@ -127,7 +127,6 @@ void smpi_execute_flops(double flops) { smx_action_t action; smx_host_t host; host = SIMIX_host_self(); - XBT_DEBUG("Handle real computation time: %f flops", flops); action = simcall_host_execute("computation", host, flops, 1); #ifdef HAVE_TRACING @@ -141,8 +140,21 @@ static void smpi_execute(double duration) /* FIXME: a global variable would be less expensive to consult than a call to xbt_cfg_get_double() right on the critical path */ if (duration >= sg_cfg_get_double("smpi/cpu_threshold")) { XBT_DEBUG("Sleep for %f to handle real computation time", duration); - smpi_execute_flops(duration * - sg_cfg_get_double("smpi/running_power")); + double flops = duration * + sg_cfg_get_double("smpi/running_power"); +#ifdef HAVE_TRACING + int rank = smpi_process_index(); + instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1); + extra->type=TRACING_COMPUTING; + extra->comp_size=flops; + TRACE_smpi_computing_in(rank, extra); +#endif + smpi_execute_flops(flops); + +#ifdef HAVE_TRACING + TRACE_smpi_computing_out(rank); +#endif + } else { XBT_DEBUG("Real computation took %f while option smpi/cpu_threshold is set to %f => ignore it", duration, sg_cfg_get_double("smpi/cpu_threshold")); @@ -165,8 +177,18 @@ void smpi_bench_end(void) unsigned int smpi_sleep(unsigned int secs) { + smx_action_t action; + smpi_bench_end(); - smpi_execute_flops((double) secs*simcall_host_get_speed(SIMIX_host_self())); + + double flops = (double) secs*simcall_host_get_speed(SIMIX_host_self()); + XBT_DEBUG("Sleep for: %f flops", flops); + action = simcall_host_execute("computation", SIMIX_host_self(), flops, 1); + #ifdef HAVE_TRACING + simcall_set_category (action, TRACE_internal_smpi_get_category()); + #endif + simcall_host_execution_wait(action); + smpi_bench_begin(); return secs; } @@ -220,6 +242,8 @@ typedef struct { int benching; /* 1: we are benchmarking; 0: we have enough data, no bench anymore */ } local_data_t; +int smpi_sample_is_running = 0; + static char *sample_location(int global, const char *file, int line) { if (global) { return bprintf("%s:%d", file, line); @@ -247,6 +271,8 @@ void smpi_sample_1(int global, const char *file, int line, int iters, double thr local_data_t *data; smpi_bench_end(); /* Take time from previous, unrelated computation into account */ + smpi_sample_is_running++; + if (!samples) samples = xbt_dict_new_homogeneous(free); @@ -301,6 +327,7 @@ int smpi_sample_2(int global, const char *file, int line) data->count, data->iters, data->relstderr, data->threshold, data->mean); smpi_execute(data->mean); + smpi_sample_is_running--; smpi_bench_begin(); // prepare to capture future, unrelated computations return 0; } @@ -397,7 +424,7 @@ void *smpi_shared_malloc(size_t size, const char *file, int line) case EEXIST: xbt_die("Please cleanup /dev/shm/%s", loc); default: - xbt_die("An unhandled error occured while opening %s: %s", loc, strerror(errno)); + xbt_die("An unhandled error occured while opening %s. shm_open: %s", loc, strerror(errno)); } } data = xbt_new(shared_data_t, 1); @@ -406,7 +433,7 @@ void *smpi_shared_malloc(size_t size, const char *file, int line) data->loc = loc; mem = shm_map(fd, size, data); if (shm_unlink(loc) < 0) { - XBT_WARN("Could not early unlink %s: %s", loc, strerror(errno)); + XBT_WARN("Could not early unlink %s. shm_unlink: %s", loc, strerror(errno)); } xbt_dict_set(allocs, loc, data, NULL); XBT_DEBUG("Mapping %s at %p through %d", loc, mem, fd);