|
@@ -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);
|