Source code for pacman.utilities.algorithm_utilities.machine_algorithm_utilities
from spinn_machine import SDRAM, Chip, Link, Processor, Router
import sys
[docs]def create_virtual_chip(machine, link_data, virtual_chip_x, virtual_chip_y):
# If the chip already exists, return the data
if machine.is_chip_at(virtual_chip_x, virtual_chip_y):
if not machine.get_chip_at(virtual_chip_x, virtual_chip_y).virtual:
raise Exception(
"Attempting to add virtual chip in place of a real chip")
return
# Create link to the virtual chip from the real chip
virtual_link_id = (link_data.connected_link + 3) % 6
to_virtual_chip_link = Link(
destination_x=virtual_chip_x,
destination_y=virtual_chip_y,
source_x=link_data.connected_chip_x,
source_y=link_data.connected_chip_y,
multicast_default_from=virtual_link_id,
multicast_default_to=virtual_link_id,
source_link_id=link_data.connected_link)
# Create link to the real chip from the virtual chip
from_virtual_chip_link = Link(
destination_x=link_data.connected_chip_x,
destination_y=link_data.connected_chip_y,
source_x=virtual_chip_x,
source_y=virtual_chip_y,
multicast_default_from=link_data.connected_link,
multicast_default_to=link_data.connected_link,
source_link_id=virtual_link_id)
# create the router
links = [from_virtual_chip_link]
router_object = Router(
links=links, emergency_routing_enabled=False,
clock_speed=Router.ROUTER_DEFAULT_CLOCK_SPEED,
n_available_multicast_entries=sys.maxint)
# create the processors
processors = list()
for virtual_core_id in range(0, 128):
processors.append(Processor(virtual_core_id))
# connect the real chip with the virtual one
connected_chip = machine.get_chip_at(
link_data.connected_chip_x,
link_data.connected_chip_y)
connected_chip.router.add_link(to_virtual_chip_link)
machine.add_chip(Chip(
processors=processors, router=router_object,
sdram=SDRAM(size=0),
x=virtual_chip_x, y=virtual_chip_y,
virtual=True, nearest_ethernet_x=None, nearest_ethernet_y=None))