def __init__(self, socket_addresses, wait_for_read_confirmation): self._socket_addresses = socket_addresses # Determines whether to wait for confirmation that the database # has been read before starting the simulation self._wait_for_read_confirmation = wait_for_read_confirmation self._wait_pool = ThreadPool(processes=1) self._data_base_message_connections = list() for socket_address in socket_addresses: self._data_base_message_connections.append(UDPEIEIOConnection( local_port=socket_address.listen_port, remote_host=socket_address.notify_host_name, remote_port=socket_address.notify_port_no))
def _read_database_callback(self, database_reader): self._handle_possible_rerun_state() vertex_sizes = OrderedDict() run_time_ms = database_reader.get_configuration_parameter_value( "runtime") machine_timestep_ms = \ database_reader.get_configuration_parameter_value( "machine_time_step") / 1000.0 if self._send_labels is not None: self._sender_connection = UDPEIEIOConnection() for send_label in self._send_labels: ip_address, port = None, None if self._partitioned_vertices: ip_address, port = \ database_reader.get_partitioned_live_input_details( send_label) else: ip_address, port = database_reader.get_live_input_details( send_label) self._send_address_details[send_label] = (ip_address, port) if self._partitioned_vertices: key, _ = database_reader.get_partitioned_live_input_key( send_label) self._atom_id_to_key[send_label] = {0: key} vertex_sizes[send_label] = 1 else: self._atom_id_to_key[send_label] = \ database_reader.get_atom_id_to_key_mapping(send_label) vertex_sizes[send_label] = len( self._atom_id_to_key[send_label]) if self._receive_labels is not None: label_id = 0 for receive_label in self._receive_labels: host, port, strip_sdp = None, None, None if self._partitioned_vertices: host, port, strip_sdp = \ database_reader.get_partitioned_live_output_details( receive_label, self._live_packet_gather_label) else: host, port, strip_sdp = \ database_reader.get_live_output_details( receive_label, self._live_packet_gather_label) if strip_sdp: if port not in self._receivers: receiver = UDPEIEIOConnection(local_port=port) listener = ConnectionListener(receiver) listener.add_callback(self._receive_packet_callback) listener.start() self._receivers[port] = receiver self._listeners[port] = listener logger.info( "Listening for traffic from {} on {}:{}".format( receive_label, host, port)) else: raise Exception("Currently, only ip tags which strip the" " SDP headers are supported") if self._partitioned_vertices: key, _ = database_reader.get_partitioned_live_output_key( receive_label, self._live_packet_gather_label) self._key_to_atom_id_and_label[key] = (0, label_id) vertex_sizes[receive_label] = 1 else: key_to_atom_id = \ database_reader.get_key_to_atom_id_mapping( receive_label) for (key, atom_id) in key_to_atom_id.iteritems(): self._key_to_atom_id_and_label[key] = (atom_id, label_id) vertex_sizes[receive_label] = len(key_to_atom_id) label_id += 1 for (label, vertex_size) in vertex_sizes.iteritems(): for init_callback in self._init_callbacks[label]: init_callback(label, vertex_size, run_time_ms, machine_timestep_ms)
import sys import time from spinnman.connections.udp_packet_connections.udp_eieio_connection \ import UDPEIEIOConnection from spinnman.messages.eieio.data_messages.eieio_data_message \ import EIEIODataMessage from spinnman.messages.eieio.data_messages.eieio_32bit.eieio_32bit_data_message\ import EIEIO32BitDataMessage if len(sys.argv) < 4: print "{} <machine-name> <port> <base-key>".format(sys.argv[0]) sys.exit() connection = UDPEIEIOConnection(remote_host=sys.argv[1], remote_port=int(sys.argv[2])) base_key = int(sys.argv[3]) keys_to_send = [[7], [6, 8], [0, 9], [], [0, 5, 9], [], [0, 4, 9], [1, 3], [2], [], [], [], range(0, 10), [], [5, 9], [], [5, 9], [], [5, 9], [6, 8], [7], [], [], [], [0, 9], [], [0, 9], [], range(0, 10), [], [0, 9], [], [0, 9], [], [], [], range(0, 10), [8], [7], [6], [5], [4], [3], [2], [1], range(0, 10), [], [], [], range(0, 10), [8], [7], [6], [5], [4], [3], [2], [1], range(0, 10), [], [], [], [0], [1], [2, 3], [4], [5, 6], [5, 7, 8], [5, 9], [5, 7, 8], [5, 6], [4], [2, 3], [1], [0], [], [], [],