Source code for spinn_front_end_common.interface.interface_functions.load_executable_images
from spinn_utilities.progress_bar import ProgressBar
# front end common imports
from spinn_front_end_common.utilities.exceptions import ConfigurationException
from spinnman.messages.scp.enums import Signal
from spinnman.model.enums import CPUState
# general imports
import logging
logger = logging.getLogger(__name__)
[docs]class LoadExecutableImages(object):
__slots__ = []
def __call__(self, executable_targets, app_id, transceiver,
loaded_application_data_token):
""" Go through the executable targets and load each binary to \
everywhere and then send a start request to the cores that \
actually use it
"""
if not loaded_application_data_token:
raise ConfigurationException(
"The token for having loaded the application data token is set"
" to false and therefore I cannot run. Please fix and try "
"again")
progress = ProgressBar(
executable_targets.total_processors + 1,
"Loading executables onto the machine")
for binary in executable_targets.binaries:
progress.update(self._launch_binary(
executable_targets, binary, transceiver, app_id))
self._start_simulation(executable_targets, transceiver, app_id)
progress.update()
progress.end()
return True
def _launch_binary(self, executable_targets, binary, txrx, app_id):
core_subset = executable_targets.get_cores_for_binary(binary)
txrx.execute_flood(
core_subset, binary, app_id, wait=True, is_filename=True)
return len(core_subset)
def _start_simulation(self, executable_targets, txrx, app_id):
txrx.wait_for_cores_to_be_in_state(
executable_targets.all_core_subsets, app_id, [CPUState.READY])
txrx.send_signal(app_id, Signal.START)