From: Martin Quinson Date: Mon, 10 Oct 2016 12:49:41 +0000 (+0200) Subject: Merge branches, and adapt the new code to the new refactoring. X-Git-Tag: v3_14~350 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/c8017d49035c1ccdcd6b49f09162a4836b8d45a8 Merge branches, and adapt the new code to the new refactoring. --- c8017d49035c1ccdcd6b49f09162a4836b8d45a8 diff --cc src/surf/plugins/energy.cpp index c3b623d929,45ba1866ae..82248cd160 --- a/src/surf/plugins/energy.cpp +++ b/src/surf/plugins/energy.cpp @@@ -153,8 -153,25 +153,25 @@@ double HostEnergy::getCurrentWattsValue if (cpu_load > 0) { /* Something is going on, the machine is not idle */ double min_power = range.min; double max_power = range.max; - double power_slope = max_power - min_power; - current_power = min_power + cpu_load * power_slope; + + /** + * The min_power states how much we consume when only one single + * core is working. This means that when cpu_load == 1/coreCount, then + * current_power == min_power. + * + * The maximum must be reached when all cores are working (but 1 core was + * already accounted for by min_power) + * i.e., we need min_power + (maxCpuLoad-1/coreCount)*power_slope == max_power + * (maxCpuLoad is by definition 1) + */ + double power_slope; - int coreCount = host->coresCount(); ++ int coreCount = host->coreCount(); + if (coreCount > 1) + power_slope = (max_power - min_power) / (1 - 1 / coreCount); + else + power_slope = 0; // Should be 0, since max_power == min_power (in this case) + + current_power = min_power + (cpu_load - (1 / coreCount)) * power_slope; } else { /* Our machine is idle, take the dedicated value! */ current_power = range.idle;