Source code for pacman.operations.routing_table_generators.basic_routing_table_generator
from pacman.model.routing_tables \
import MulticastRoutingTable, MulticastRoutingTables
from spinn_machine import MulticastRoutingEntry
from spinn_utilities.progress_bar import ProgressBar
MAX_KEYS_SUPPORTED = 2048
MASK = 0xFFFFF800
[docs]class BasicRoutingTableGenerator(object):
""" An basic algorithm that can produce routing tables
"""
__slots__ = []
def __call__(
self, routing_infos, routing_table_by_partitions,
machine):
"""
:param routing_infos:
:param routing_table_by_partitions:
:param machine:
"""
progress = ProgressBar(machine.n_chips, "Generating routing tables")
routing_tables = MulticastRoutingTables()
for chip in progress.over(machine.chips):
partitions_in_table = routing_table_by_partitions.\
get_entries_for_router(chip.x, chip.y)
if len(partitions_in_table) != 0:
routing_table = MulticastRoutingTable(chip.x, chip.y)
for partition in partitions_in_table:
r_info = routing_infos.get_routing_info_from_partition(
partition)
entry = partitions_in_table[partition]
for key_and_mask in r_info.keys_and_masks:
multicast_routing_entry = MulticastRoutingEntry(
routing_entry_key=key_and_mask.key_combo,
defaultable=entry.defaultable,
mask=key_and_mask.mask,
link_ids=entry.out_going_links,
processor_ids=entry.out_going_processors)
routing_table.add_multicast_routing_entry(
multicast_routing_entry)
routing_tables.add_routing_table(routing_table)
return routing_tables