浏览代码

papi_starpu

Mariem makni 4 年之前
父节点
当前提交
7e60f71982
共有 2 个文件被更改,包括 12 次插入4 次删除
  1. 12 3
      src/core/perfmodel/energy_model.c
  2. 0 1
      tests/perfmodels/test_papi.c

+ 12 - 3
src/core/perfmodel/energy_model.c

@@ -49,12 +49,15 @@ static const char* event_names[] = { "rapl::RAPL_ENERGY_PKG:cpu=%d",
 
 static int add_event(int EventSet, int socket);
 
+/* PAPI variables*/
+
 /*must be initialized to PAPI_NULL before calling PAPI_create_event*/
 int EventSet = PAPI_NULL;
 
 /*This is where we store the values we read from the eventset */
 static long long *values;
 
+double t1;
   
 int starpu_energy_start()
 { 
@@ -96,7 +99,8 @@ int starpu_energy_start()
     if ( (retval = PAPI_start(EventSet)) != PAPI_OK)
                 ERROR_RETURN(retval);
 
-    
+    t1 = starpu_timing_now();
+
 return retval;
 
 }
@@ -109,6 +113,11 @@ int starpu_energy_stop(struct starpu_perfmodel *model, struct starpu_task *task,
     unsigned workerid = 0;
     unsigned cpuid = 0;
 
+
+    double t2 = starpu_timing_now();
+  
+    double t = t2 - t1;
+
  /* Stop counting and store the values into the array */
     if ( (retval = PAPI_stop(EventSet, values)) != PAPI_OK)
          ERROR_RETURN(retval);
@@ -124,14 +133,14 @@ int starpu_energy_stop(struct starpu_perfmodel *model, struct starpu_task *task,
              printf("%-40s%12.6f J\t(Average Power %.1fW)\n",
              event_names[k],
              (energy/1.0e9),
-             (energy/1.0e9) // FIXME: diviser par le temps en secondes (utiliser starpu_timing_now() qui retourne le temps en microsecondes
+             ((energy/1.0e9)/(t*1.0E-6)) 
 );
              
 
                 }
              }
 
-     energy=energy / ntasks;
+     energy = energy / ntasks;
 
      struct starpu_perfmodel_arch *arch = starpu_worker_get_perf_archtype(workerid, STARPU_NMAX_SCHED_CTXS);
      starpu_perfmodel_update_history(model, task, arch, cpuid, 0, energy);

+ 0 - 1
tests/perfmodels/test_papi.c

@@ -88,7 +88,6 @@ static void test_memset(int nelems, struct starpu_codelet *codelet)
        
         struct starpu_task *task;
     
-// TODO: faire plutôt un tableau[nloops] de handles, et on fait unregister dans une boucle séparée, pour laisser les tâches tourner en parallèle
         starpu_data_handle_t tab_handle[ntasks];
 
         for (loop = 0; loop < ntasks; loop++)