Skip to content

Commit

Permalink
Merge pull request #153 from project-rig/interposer-changes-rebased
Browse files Browse the repository at this point in the history
Use interposers to reduce network traffic
  • Loading branch information
mundya committed Feb 2, 2017
2 parents 5afa93f + 33f43f9 commit bccca27
Show file tree
Hide file tree
Showing 25 changed files with 1,447 additions and 1,697 deletions.
14 changes: 7 additions & 7 deletions nengo_spinnaker/builder/builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,11 @@ def build(self, network, **kwargs):
with self.decoder_cache:
self._build_network(network)

# Insert interposers
interposers, connection_map = self.connection_map.insert_interposers()
self.extra_operators.extend(interposers)
self.connection_map = connection_map

def _build_network(self, network):
# Get the seed for the network
self.seeds[network] = get_seed(network, np.random)
Expand Down Expand Up @@ -319,11 +324,6 @@ def make_netlist(self, *args, **kwargs):
A netlist which can be placed and routed to simulate this model on
a SpiNNaker machine.
"""
# Remove any passthrough Nodes which don't connect to anything
from nengo_spinnaker import operators
removed_operators = model.remove_sinkless_objects(self.connection_map,
operators.Filter)

# Call each operator to make vertices
operator_vertices = dict()
load_functions = collections_ext.noneignoringlist()
Expand All @@ -336,8 +336,8 @@ def make_netlist(self, *args, **kwargs):

for op in itertools.chain(itervalues(self.object_operators),
self.extra_operators):
# Skip any operators that were previously removed
if op in removed_operators:
# If the operator is a passthrough Node then skip it
if isinstance(op, model.PassthroughNode):
continue

# Otherwise call upon the operator to build vertices for the
Expand Down
3 changes: 2 additions & 1 deletion nengo_spinnaker/builder/connection.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import nengo
from .builder import Model, ObjectPort, spec
from .model import ReceptionParameters, InputPort, OutputPort
from .model import ReceptionParameters
from .ports import InputPort, OutputPort


@Model.source_getters.register(nengo.base.NengoObject)
Expand Down
30 changes: 15 additions & 15 deletions nengo_spinnaker/builder/ensemble.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,10 @@
import numpy as np

from .builder import BuiltConnection, Model, ObjectPort, spec
from .transmission_parameters import EnsembleTransmissionParameters
from .model import InputPort, OutputPort
from .ports import EnsembleInputPort, EnsembleOutputPort
from .transmission_parameters import Transform, EnsembleTransmissionParameters
from .ports import (
EnsembleInputPort, EnsembleOutputPort, InputPort, OutputPort
)
from .. import operators
from ..utils import collections as collections_ext

Expand All @@ -39,11 +40,10 @@ def get_ensemble_source(model, conn):


@Model.source_getters.register(nengo.ensemble.Neurons)
def get_neurons_source(model, connection):
def get_neurons_source(model, conn):
"""Get the source for connections out of neurons."""
raise NotImplementedError(
"SpiNNaker does not currently support neuron to neuron connections"
)
ens = model.object_operators[conn.pre_obj.ensemble]
return spec(ObjectPort(ens, EnsembleOutputPort.neurons))


@Model.sink_getters.register(nengo.Ensemble)
Expand Down Expand Up @@ -241,19 +241,19 @@ def build_from_ensemble_connection(model, conn):
transform=transform,
solver_info=solver_info)

return EnsembleTransmissionParameters(decoders.T,
conn.post_obj.size_in,
conn.post_slice,
conn.learning_rule,
transform)
t = Transform(size_in=decoders.shape[1],
size_out=conn.post_obj.size_in,
transform=transform,
slice_out=conn.post_slice)
return EnsembleTransmissionParameters(
decoders.T, t, conn.learning_rule
)


@Model.transmission_parameter_builders.register(nengo.ensemble.Neurons)
def build_from_neurons_connection(model, conn):
"""Build the parameters object for a connection from Neurons."""
raise NotImplementedError(
"SpiNNaker does not currently support connections from Neurons"""
)
return object()


@Model.probe_builders.register(nengo.Ensemble)
Expand Down

0 comments on commit bccca27

Please sign in to comment.