Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
and now, get the execution sampling macros work also when the user gives a maximal...
[simgrid.git] / src / smpi / smpi_bench.c
index ad115e1..c3628c8 100644 (file)
@@ -115,8 +115,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();
@@ -218,8 +217,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 +241,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 +331,6 @@ void smpi_sample_3(int global, const char *file, int line)
   data->benching = 0;
 }
 
-void smpi_sample_flops(double flops)
-{
-  smpi_execute_flops(flops);
-}
-
 void *smpi_shared_malloc(size_t size, const char *file, int line)
 {
   char *loc = bprintf("%zu_%s_%d", (size_t)getpid(), file, line);