Source code for spinn_front_end_common.interface.interface_functions.graph_binary_gatherer

from spinn_utilities.progress_bar import ProgressBar

from spinn_front_end_common.utilities import exceptions
from spinn_front_end_common.abstract_models import AbstractHasAssociatedBinary
from spinnman.model import ExecutableTargets


[docs]class GraphBinaryGatherer(object): """ Extracts binaries to be executed """ __slots__ = [] def __call__( self, placements, graph, executable_finder, graph_mapper=None): executable_targets = ExecutableTargets() progress = ProgressBar(graph.n_vertices, "Finding binaries") for vertex in progress.over(graph.vertices): placement = placements.get_placement_of_vertex(vertex) self._get_binary( placement, vertex, executable_targets, executable_finder) if graph_mapper is not None: associated_vertex = graph_mapper.get_application_vertex(vertex) self._get_binary( placement, associated_vertex, executable_targets, executable_finder) return executable_targets @staticmethod def _get_binary( placement, associated_vertex, executable_targets, executable_finder): # if the vertex cannot generate a DSG, ignore it if not isinstance(associated_vertex, AbstractHasAssociatedBinary): return None # Get name of binary from vertex binary_name = associated_vertex.get_binary_file_name() # Attempt to find this within search paths binary_path = executable_finder.get_executable_path(binary_name) if binary_path is None: raise exceptions.ExecutableNotFoundException(binary_name) executable_targets.add_processor( binary_path, placement.x, placement.y, placement.p)