Source code for spinn_front_end_common.interface.interface_functions.virtual_machine_generator

# 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_machine import json_machine, virtual_machine, Machine, Router

logger = FormatAdapter(logging.getLogger(__name__))


[docs]class VirtualMachineGenerator(object): """ Generates a virtual machine with given dimensions and configuration. """ __slots__ = [] def __call__( self, width=None, height=None, version=None, down_chips=None, down_cores=None, down_links=None, max_sdram_size=None, router_entries_per_chip=Router.ROUTER_DEFAULT_AVAILABLE_ENTRIES, json_path=None): """ :param width: The width of the machine in chips :param height: The height of the machine in chips :param version: The version of board to create :param with_monitors: If true, CPU 0 will be marked as a monitor :param down_chips: The set of chips that should be considered broken :param down_cores: The set of cores that should be considered broken :param down_links: The set of links that should be considered broken :param max_sdram_size: The SDRAM that should be given to each chip """ # For backward compatibily support version in csf files for now if version is not None: if version in [2, 3]: if height is None: height = 2 else: assert height == 2 if width is None: width = 2 else: assert width == 2 logger.warning("For virtual Machines version is deprecated." "use width=2, height=2 instead") elif version in [4, 5]: if height is None: height = 8 else: assert height == 8 if width is None: width = 8 else: assert width == 8 logger.warning("For virtual Machines version is deprecated." "use width=8, height=8 instead") else: raise Exception("Unknown version {}".format(version)) if json_path is None: # pylint: disable=too-many-arguments machine = virtual_machine( width=width, height=height, n_cpus_per_chip=Machine.max_cores_per_chip(), down_chips=down_chips, down_cores=down_cores, down_links=down_links, sdram_per_chip=max_sdram_size, router_entries_per_chip=router_entries_per_chip, validate=True) else: if (height is not None or width is not None or version is not None or down_chips is not None or down_cores is not None or down_links is not None): logger.warning("As json_path specified all other virtual " "machine settings ignored.") machine = json_machine.machine_from_json(json_path) # Work out and add the SpiNNaker links and FPGA links machine.add_spinnaker_links() machine.add_fpga_links() return machine