In power_monitor.py lines 496 to 499:
"gpu_energy_per_response": gpu_energy_joules / len(self.cpu_power_readings) if len(self.cpu_power_readings) > 0 else 0,
"cpu_energy_per_response": cpu_energy_joules / len(self.cpu_power_readings) if len(self.cpu_power_readings) > 0 else 0,
"dram_energy_per_response": dram_power_watts * duration / len(self.cpu_power_readings) if len(self.cpu_power_readings) > 0 else 0,
"total_energy_per_response": total_energy_joules / len(self.cpu_power_readings) if len(self.cpu_power_readings) > 0 else 0
results in energy per response values not actually determined by number of responses. This seems like it might be intended behaviour in some cases, as from line 478:
"responses": num_responses if num_responses is not None else len(self.cpu_power_readings),
but it would seem that the energy per response denominator should just be num_responses if num_responses is not None.
In power_monitor.py lines 496 to 499:
"gpu_energy_per_response": gpu_energy_joules / len(self.cpu_power_readings) if len(self.cpu_power_readings) > 0 else 0,
"cpu_energy_per_response": cpu_energy_joules / len(self.cpu_power_readings) if len(self.cpu_power_readings) > 0 else 0,
"dram_energy_per_response": dram_power_watts * duration / len(self.cpu_power_readings) if len(self.cpu_power_readings) > 0 else 0,
"total_energy_per_response": total_energy_joules / len(self.cpu_power_readings) if len(self.cpu_power_readings) > 0 else 0
results in energy per response values not actually determined by number of responses. This seems like it might be intended behaviour in some cases, as from line 478:
"responses": num_responses if num_responses is not None else len(self.cpu_power_readings),
but it would seem that the energy per response denominator should just be num_responses if num_responses is not None.