@specs-feup/kadabra
Version:
A Java source-to-source compiler written in Typescript
46 lines • 2.28 kB
JavaScript
import EnergyBase from "@specs-feup/lara/api/lara/code/EnergyBase.js";
import Logger from "./Logger.js";
import IdGenerator from "@specs-feup/lara/api/lara/util/IdGenerator.js";
import PrintOnce from "@specs-feup/lara/api/lara/util/PrintOnce.js";
// TODO: Detect if Odroid or Ubuntu?
const EnergyCheckClass = "weaver.kadabra.monitor.pc.ubuntu.UbuntuEnergyCheck";
export default class Energy extends EnergyBase {
measure($start, prefix, $end) {
//Check for valid joinpoints and additional conditions
if (!this.measureValidate($start, $end, "body")) {
return;
}
$end = $end === undefined ? $start : $end;
// Message about dependency
PrintOnce.message("Weaved code has dependency to project jRAPL, which can be found at https://github.com/kliu20/jRAPL");
const logger = new Logger(false, this.filename);
// Build prefix
if (prefix === undefined) {
prefix = "";
}
const energyVar = IdGenerator.next("kadabra_energy_output_");
const codeBefore = _energy_rapl_start(energyVar, EnergyCheckClass);
const codeAfter = _energy_rapl_end(energyVar, EnergyCheckClass);
$start.insertBefore(codeBefore);
logger.append(prefix).appendDouble(energyVar);
if (this.printUnit) {
logger.append(this.getPrintUnit());
}
logger.log($end);
$end.insertAfter(codeAfter);
}
}
//System.out.println("Power consumption of dram: " + (after[0] - before[0]) / 10.0 + " power consumption of cpu: " + (after[1] - before[1]) / 10.0 + " power consumption of package: " + (after[2] - before[2]) / 10.0);
//Will only consider the CPU consumption
function _energy_rapl_start(energyVar, energyClass) {
return `double[] ${energyVar}Before = ${energyClass}.getEnergyStats();`;
}
function _energy_rapl_end(energyVar, energyClass) {
return `double[] ${energyVar}After = ${energyClass}.getEnergyStats();
double ${energyVar} = 0;
for(int ${energyVar}Counter = 0; ${energyVar}Counter < ${energyVar}Before.length; ${energyVar}Counter++){
${energyVar} += ${energyVar}After[ ${energyVar}Counter ] - ${energyVar}Before[ ${energyVar}Counter ]; // /10?
}
//${energyClass}.ProfileDealloc();`;
}
//# sourceMappingURL=Energy.js.map