Source code for spinn_front_end_common.interface.interface_functions.buffer_extractor

# 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/>.

import logging
from spinn_utilities.log import FormatAdapter
from spinn_utilities.progress_bar import ProgressBar
from spinn_front_end_common.interface.buffer_management.buffer_models \
    import (
        AbstractReceiveBuffersToHost)

logger = FormatAdapter(logging.getLogger(__name__))


[docs]class BufferExtractor(object): """ Extracts data in between runs """ __slots__ = [] def __call__(self, machine_graph, placements, buffer_manager): # Count the regions to be read n_regions_to_read, recording_placements = self._count_regions( machine_graph, placements) if not n_regions_to_read: logger.info("No recorded data to extract") return # Read back the regions progress = ProgressBar( n_regions_to_read, "Extracting buffers from the last run") try: buffer_manager.get_data_for_placements( recording_placements, progress) finally: progress.end() @staticmethod def _count_regions(machine_graph, placements): # Count the regions to be read n_regions_to_read = 0 recording_placements = list() for vertex in machine_graph.vertices: if isinstance(vertex, AbstractReceiveBuffersToHost): n_regions_to_read += len(vertex.get_recorded_region_ids()) placement = placements.get_placement_of_vertex(vertex) recording_placements.append(placement) return n_regions_to_read, recording_placements