Manual usage¶
Use a EnergyMeter to measure energy consumption without decorator or context manager¶
If you want need more flexibility and measure energy consumption of piece of
code that can’t be bound inside a decorated function of a context manager, you
can use an instance of EnergyMeter
.
Instance of EnergyMeter
is the underlayer tool used by context manager and
decorator to measure energy consumption.
Create the EnergyMeter¶
Before using an energy meter, you have to create it with devices that it have to monitor. For this, use an DeviceFactory
to create and configure the monitored devices
The following piece of code show how to create an EnergyMeter
that monitor CPU, DRAM and GPU energy consumption.
domains = [RaplPackageDomain(0), RaplDramDomain(0), NvidiaGPUDomain(0)]
devices = DeviceFactory.create_devices(domains)
meter = EnergyMeter(devices)
Tips : call the DeviceFactory.create_devices
without parameter to get the list of all monitorable devices.
Use the EnergyMeter¶
When you have your EnergyMeter
you can use it to measure energy consumption of piece of code.
An EnergyMeter
have three main method :
The following piece of code show how to use an EnergyMeter
to monitor piece of code:
meter.start(tag='foo')
foo()
meter.record(tag='bar')
bar()
meter.stop()
Get the EnergyTrace¶
When you finished to measure the energy consumed during execution of your piece of code, you can retrieve its energy trace using the EnergyMeter.get_trace
method
This will return an iterator on some EnergySample
. Each energy sample contains energy consumption information measured between each call to start
, record
and stop
method.
For example, the trace of the previous example contains two EnergySample
. One that contains the energy measured between start
and record
methods (during foo
method execution) and the second that contains energy measured between record
and stop
method (during bar
method execution) .
Energy sample contains :
a tag
a timestamp (the beginning of the measure)
the duration of the measure
the energy consumed during the measure
Full Example¶
from pyJoules.device import DeviceFactory
from pyJoules.device.rapl_device import RaplPackageDomain, RaplDramDomain
from pyJoules.device.nvidia_device import NvidiaGPUDomain
from pyJoules.energy_meter import EnergyMeter
domains = [RaplPackageDomain(0), RaplDramDomain(0), NvidiaGPUDomain(0)]
devices = DeviceFactory.create_devices(domains)
meter = EnergyMeter(devices)
meter.start(tag='foo')
foo()
meter.record(tag='bar')
bar()
meter.stop()
trace = meter.get_trace()