X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/1b6d36b7082f7cc657eb2473d1ac27d250954688..585c03575926272c32a21202ef0552589aafaa51:/src/smpi/smpi_bench.c diff --git a/src/smpi/smpi_bench.c b/src/smpi/smpi_bench.c index f3926a7758..18e4205c05 100644 --- a/src/smpi/smpi_bench.c +++ b/src/smpi/smpi_bench.c @@ -9,8 +9,11 @@ #include "xbt/sysdep.h" #include "xbt/ex.h" #include "surf/surf.h" +#include "simgrid/sg_config.h" +#ifndef WIN32 #include +#endif #include #include #include @@ -82,6 +85,7 @@ static size_t shm_size(int fd) { return (size_t)st.st_size; } +#ifndef WIN32 static void* shm_map(int fd, size_t size, shared_data_t* data) { void* mem; char loc[PTR_STRLEN]; @@ -92,6 +96,7 @@ static void* shm_map(int fd, size_t size, shared_data_t* data) { xbt_die("Could not truncate fd %d to %zu: %s", fd, size, strerror(errno)); } } + mem = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); if(mem == MAP_FAILED) { xbt_die("Could not map fd %d: %s", fd, strerror(errno)); @@ -107,6 +112,7 @@ static void* shm_map(int fd, size_t size, shared_data_t* data) { XBT_DEBUG("MMAP %zu to %p", size, mem); return mem; } +#endif void smpi_bench_destroy(void) { @@ -131,14 +137,13 @@ void smpi_execute_flops(double flops) { 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 >= xbt_cfg_get_double(_surf_cfg_set, "smpi/cpu_threshold")) { + if (duration >= sg_cfg_get_double("smpi/cpu_threshold")) { XBT_DEBUG("Sleep for %f to handle real computation time", duration); smpi_execute_flops(duration * - xbt_cfg_get_double(_surf_cfg_set, - "smpi/running_power")); + sg_cfg_get_double("smpi/running_power")); } else { XBT_DEBUG("Real computation took %f while option smpi/cpu_threshold is set to %f => ignore it", - duration, xbt_cfg_get_double(_surf_cfg_set, "smpi/cpu_threshold")); + duration, sg_cfg_get_double("smpi/cpu_threshold")); } } @@ -164,14 +169,18 @@ unsigned int smpi_sleep(unsigned int secs) return secs; } -int smpi_gettimeofday(struct timeval *tv, struct timezone *tz) +int smpi_gettimeofday(struct timeval *tv) { double now; smpi_bench_end(); now = SIMIX_get_clock(); if (tv) { tv->tv_sec = (time_t)now; +#ifdef WIN32 + tv->tv_usec = (useconds_t)((now - tv->tv_sec) * 1e6); +#else tv->tv_usec = (suseconds_t)((now - tv->tv_sec) * 1e6); +#endif } smpi_bench_begin(); return 0; @@ -264,7 +273,7 @@ void smpi_sample_1(int global, const char *file, int line, int iters, double thr data->benching = !sample_enough_benchs(data); XBT_DEBUG("XXXX Re-entering the benched nest %s. %s",loc, (data->benching?"more benching needed":"we have enough data, skip computes")); } - free(loc); + xbt_free(loc); } int smpi_sample_2(int global, const char *file, int line) @@ -275,7 +284,7 @@ int smpi_sample_2(int global, const char *file, int line) xbt_assert(samples, "Y U NO use SMPI_SAMPLE_* macros? Stop messing directly with smpi_sample_* functions!"); data = xbt_dict_get(samples, loc); XBT_DEBUG("sample2 %s",loc); - free(loc); + xbt_free(loc); if (data->benching==1) { // we need to run a new bench @@ -304,6 +313,7 @@ void smpi_sample_3(int global, const char *file, int line) xbt_assert(samples, "Y U NO use SMPI_SAMPLE_* macros? Stop messing directly with smpi_sample_* functions!"); data = xbt_dict_get(samples, loc); XBT_DEBUG("sample3 %s",loc); + xbt_free(loc); if (data->benching==0) { THROW_IMPOSSIBLE; @@ -331,6 +341,7 @@ void smpi_sample_3(int global, const char *file, int line) data->benching = 0; } +#ifndef WIN32 void *smpi_shared_malloc(size_t size, const char *file, int line) { char *loc = bprintf("%zu_%s_%d", (size_t)getpid(), file, line); @@ -377,7 +388,6 @@ void *smpi_shared_malloc(size_t size, const char *file, int line) XBT_DEBUG("Malloc %zu in %p (metadata at %p)", size, mem, data); return mem; } - void smpi_shared_free(void *ptr) { char loc[PTR_STRLEN]; @@ -412,6 +422,7 @@ void smpi_shared_free(void *ptr) free(data->loc); } } +#endif int smpi_shared_known_call(const char* func, const char* input) { char* loc = bprintf("%s:%s", func, input);