Source code for spinn_front_end_common.utility_models.chip_power_monitor

# Copyright (c) 2017-2019 The University of Manchester
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

from spinn_utilities.overrides import overrides
from pacman.executor.injection_decorator import inject_items
from pacman.model.graphs.application import ApplicationVertex
from spinn_front_end_common.abstract_models import (
    AbstractGeneratesDataSpecification, AbstractHasAssociatedBinary)
from .chip_power_monitor_machine_vertex import ChipPowerMonitorMachineVertex


[docs]class ChipPowerMonitor( ApplicationVertex, AbstractHasAssociatedBinary, AbstractGeneratesDataSpecification): """ Represents idle time recording code in a application graph. """ __slots__ = ["_n_samples_per_recording", "_sampling_frequency"] def __init__( self, label, constraints, n_samples_per_recording, sampling_frequency): """ :param label: vertex label :type label: str :param constraints: constraints for the vertex :type constraints: \ iterable(~pacman.model.constraints.AbstractConstraint) :param n_samples_per_recording: \ how many samples to take before recording to SDRAM the total :type n_samples_per_recording: int :param sampling_frequency: how many microseconds between sampling :type sampling_frequency: int """ super(ChipPowerMonitor, self).__init__(label, constraints, 1) self._n_samples_per_recording = n_samples_per_recording self._sampling_frequency = sampling_frequency @property @overrides(ApplicationVertex.n_atoms) def n_atoms(self): return 1
[docs] @overrides(ApplicationVertex.create_machine_vertex) def create_machine_vertex( self, vertex_slice, resources_required, # @UnusedVariable label=None, constraints=None): return ChipPowerMonitorMachineVertex( constraints=constraints, label=label, n_samples_per_recording=self._n_samples_per_recording, sampling_frequency=self._sampling_frequency)
[docs] @overrides(AbstractHasAssociatedBinary.get_binary_file_name) def get_binary_file_name(self): return ChipPowerMonitorMachineVertex.binary_file_name()
[docs] @inject_items({"time_scale_factor": "TimeScaleFactor", "machine_time_step": "MachineTimeStep", "n_machine_time_steps": "PlanNTimeSteps"}) @overrides( AbstractGeneratesDataSpecification.generate_data_specification, additional_arguments={ "machine_time_step", "time_scale_factor", "n_machine_time_steps"}) def generate_data_specification( self, spec, placement, machine_time_step, time_scale_factor, n_machine_time_steps): # pylint: disable=too-many-arguments, arguments-differ # pylint: disable=protected-access # generate spec for the machine vertex placement.vertex._generate_data_specification( spec, machine_time_step, time_scale_factor, n_machine_time_steps)
[docs] @overrides(AbstractHasAssociatedBinary.get_binary_start_type) def get_binary_start_type(self): return ChipPowerMonitorMachineVertex.binary_start_type()
[docs] @inject_items({ "machine_time_step": "MachineTimeStep", "time_scale_factor": "TimeScaleFactor"}) @overrides(ApplicationVertex.get_resources_used_by_atoms, additional_arguments={"machine_time_step", "time_scale_factor"}) def get_resources_used_by_atoms( self, vertex_slice, # @UnusedVariable machine_time_step, time_scale_factor): # pylint: disable=arguments-differ return ChipPowerMonitorMachineVertex.get_resources( machine_time_step, time_scale_factor, self._n_samples_per_recording, self._sampling_frequency)