Source code for spinn_front_end_common.interface.interface_functions.hbp_max_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 requests
from spinn_machine import Machine
from spinn_machine.virtual_machine import virtual_machine


[docs]class HBPMaxMachineGenerator(object): """ Generates a virtual machine of the width and height of the maximum\ machine a given HBP server can generate. """ __slots__ = []
[docs] def __call__(self, hbp_server_url, total_run_time, max_machine_core_reduction=0): """ :param str hbp_server_url: The URL of the HBP server from which to get the machine :param int total_run_time: The total run time to request :param int max_machine_core_reduction: the number of cores less than :py:const:`~spinn_machine.Machine.DEFAULT_MAX_CORES_PER_CHIP` that each chip should have :rtype: ~spinn_machine.Machine """ max_machine = self._max_machine_request(hbp_server_url, total_run_time) n_cpus_per_chip = (Machine.max_cores_per_chip() - max_machine_core_reduction) # Return the width and height and assume that it has wrap arounds return virtual_machine( width=max_machine["width"], height=max_machine["height"], n_cpus_per_chip=n_cpus_per_chip, validate=False)
def _max_machine_request(self, url, total_run_time): """ :param str url: :param int total_run_time: :rtype: dict """ if url.endswith("/"): url = url[:-1] r = requests.get("{}/max".format(url), params={ 'runTime': total_run_time}) r.raise_for_status() return r.json()