Source code for spinn_front_end_common.interface.interface_functions.virtual_machine_generator

# Copyright (c) 2015 The University of Manchester
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import logging
from spinn_utilities.config_holder import get_config_int, get_config_str
from spinn_utilities.log import FormatAdapter
from spinn_machine import json_machine, virtual_machine, Machine
logger = FormatAdapter(logging.getLogger(__name__))


[docs]def virtual_machine_generator(): """ Generates a virtual machine with given dimensions and configuration. :return: The virtual machine. :rtype: ~spinn_machine.Machine :raises Exception: If given bad arguments """ height = get_config_int("Machine", "height") width = get_config_int("Machine", "width") json_path = get_config_str("Machine", "json_path") # For backward compatibility support version in csf files for now version = get_config_int("Machine", "version") 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 ValueError(f"Unknown version {version}") if json_path is None: machine = virtual_machine( width=width, height=height, n_cpus_per_chip=Machine.max_cores_per_chip(), validate=True) else: if (height is not None or width is not None or version is not None or get_config_str("Machine", "down_chips") is not None or get_config_str("Machine", "down_cores") is not None or get_config_str("Machine", "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() logger.info( "Created a virtual machine which has {}", machine.cores_and_link_output_string()) return machine