X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/3f87b9e5de9b132f1141e59f76377db534ad6801..ccedb07575381e28a3143247e9028fe4f73bcd96:/src/smpi/smpi_bench.c diff --git a/src/smpi/smpi_bench.c b/src/smpi/smpi_bench.c index ad115e170e..58c8c5a852 100644 --- a/src/smpi/smpi_bench.c +++ b/src/smpi/smpi_bench.c @@ -4,18 +4,20 @@ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ -#include // sqrt #include "private.h" #include "xbt/dict.h" #include "xbt/sysdep.h" #include "xbt/ex.h" #include "surf/surf.h" +#ifndef WIN32 #include +#endif #include #include #include #include +#include // sqrt #include #include #include @@ -82,6 +84,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 +95,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 +111,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) { @@ -115,8 +120,7 @@ void smpi_bench_destroy(void) xbt_dict_free(&calls); } -static void smpi_execute_flops(double flops) -{ +void smpi_execute_flops(double flops) { smx_action_t action; smx_host_t host; host = SIMIX_host_self(); @@ -172,7 +176,11 @@ int smpi_gettimeofday(struct timeval *tv, struct timezone *tz) 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; @@ -218,8 +226,13 @@ static char *sample_location(int global, const char *file, int line) { } } static int sample_enough_benchs(local_data_t *data) { - int res = (data->iters > 0 && data->count >= data->iters) - || (data->count > 2 && data->threshold > 0.0 && data->relstderr <= data->threshold); + int res = data->count >= data->iters; + if (data->threshold>0.0) { + if (data->count <2) + res = 0; // not enough data + if (data->relstderr > data->threshold) + res = 0; // stderr too high yet + } XBT_DEBUG("%s (count:%d iter:%d stderr:%f thres:%f mean:%fs)", (res?"enough benchs":"need more data"), data->count, data->iters, data->relstderr, data->threshold, data->mean); @@ -237,6 +250,8 @@ void smpi_sample_1(int global, const char *file, int line, int iters, double thr data = xbt_dict_get_or_null(samples, loc); if (!data) { + xbt_assert(threshold>0 || iters>0, + "You should provide either a positive amount of iterations to bench, or a positive maximal stderr (or both)"); data = (local_data_t *) xbt_new(local_data_t, 1); data->count = 0; data->sum = 0.0; @@ -325,11 +340,7 @@ void smpi_sample_3(int global, const char *file, int line) data->benching = 0; } -void smpi_sample_flops(double flops) -{ - smpi_execute_flops(flops); -} - +#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); @@ -376,7 +387,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]; @@ -411,6 +421,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);