Source code for spinn_front_end_common.interface.interface_functions.spalloc_max_machine_generator

from spalloc import ProtocolClient


[docs]class SpallocMaxMachineGenerator(object): """ Generates the width and height of the maximum machine a given\ allocation server can generate """ __slots__ = [] def __call__( self, spalloc_server, spalloc_port=22244, spalloc_machine=None): with ProtocolClient(spalloc_server, spalloc_port) as client: machines = client.list_machines() # Close the context immediately; don't want to keep this particular # connection around as there's not a great chance of this code # being rerun in this process any time soon. max_width = None max_height = None max_area = -1 for machine in self._filter(machines, spalloc_machine): # Get the width and height in chips, and logical area in chips**2 width, height, area = self._get_size(machine) # The "biggest" board is the one with the most chips if area > max_area: max_area = area max_width = width max_height = height # Return the width and height, and make no assumption about wrap- # arounds or version. return max_width, max_height, None, None @staticmethod def _filter(machines, filter): # @ReservedAssignment if filter is None: return (m for m in machines if "default" in m["tags"]) else: return (m for m in machines if m["name"] == filter) @staticmethod def _get_size(machine): # Get the width and height in chips width = machine["width"] * 12 height = machine["height"] * 12 # A specific exception is the 1-board machine, which is represented as # a 3 board machine with 2 dead boards. In this case the width and # height are 8. if (machine["width"] == 1 and machine["height"] == 1 and len(machine["dead_boards"]) == 2): width = 8 height = 8 return width, height, width * height