EDLUT Engine

The EDLUT Engine brings the possibility to connect the EDLUT simulator to NRP-core.

The engine implementation is based on the Protobuf over gRPC communication protocol and it accepts two distinct Datapack types which are described below : EdlutDataSpikesDatapack and EdlutDataCurrentsDatapack.

By default there are two datapacks registered for data exchange with an EDLUT engine: “spikes_datapack” and “currents_datapack”. “spikes_datapack” is of type EdlutDataSpikesDatapack and allows users to both inject spikes into the simulated Neural Network and read spikes from it. “currents_datapack” is of type EdlutDataCurrentsDatapack and can only be used for injecting currents into the simulated Neural Network. When “currents_datapack” is requested from the Engine, an empty datapack is returned.

When using the “spikes_datapack” to read spikes, which is done by using it as an input argument of a TF, the datapack contains all spike events that occurred in the EDLUT simulation during the last timestep. The “spikes_time” attribute of the datapack stores an array of spike times, while the “neuron_indexes” attribute contains an array with the indexes of the neurons that produced the spikes.

On the other hand, when the “spikes_datapack” is used to inject spikes into the simulated neural network, typically when it is returned from a TF, the “spikes_time” and “neuron_indexes” attributes must be used to precisely specify which neurons should spike and when the spike events should occur. It is important to note that the “spikes_time” values must be expressed in the global simulation timeframe, rather than being relative to the current simulation time. To achieve the desired behavior, the current simulation time and the length of the Engine timestep must be considered and taken into account when computing the values of the “spikes_time” array.

Similarly, the “currents_datapack” can be used to inject currents into the simulated neural network. In this case, there are also “spikes_time” and “neuron_indexes” attributes in the datapack, which still indicate which neurons should spike and when the event should occur. However, there is an additional attribute,”current_values”, which specifies the amplitude of the spike, behaving the latter as a current.

EDLUT Datapacks

This gRPC implementation uses Protobuf DataPacks. Below is shown the protobuf message definition used by the EDLUT Engine:

syntax = "proto3";

package EdlutData;

/*
 * Data coming from edlut datapack
 */
message Spikes
{
    repeated float spikes_time = 5;
    repeated uint32 neuron_indexes = 6;
}

/*
 * Data input to edlut through currents_datapack
 */
message Currents
{
    repeated float spikes_time = 5;
    repeated uint32 neuron_indexes = 6;
    repeated float current_values = 7;
}

Attribute

Description

Python Type

C type

spikes_time

Spikes Firing Time

numpy.array(numpy.float32)

std::array<float>

neuron_indexes

Neuron Indexes Firing

numpy.array(numpy.uint32)

std::array<uint32>

Attribute

Description

Python Type

C type

time

Simulation Time

float

float

spikes_time

Spikes Firing Time

numpy.array(numpy.float32)

std::array<float>

neuron_indexes

Neuron Indexes Firing

numpy.array(numpy.uint32)

std::array<uint32>

current_values

Current Values

numpy.array(numpy.float32)

std::array<float>

Each of these attributes can be accessed under their respective names from the data attribute of both Edlut Datapack types.

Engine Configuration Parameters

This Engine type parameters are defined in EDLUT schema (listed here), which in turn is based on EngineBase and EngineGRPC schemas and thus inherits all parameters from them.

To use this engine in an experiment, set EngineType to “edlut_grpc_engine”.

Name

Description

Type

Default

Required

Array

EngineName

Name of the engine

string

X

EngineType

Engine type. Used by

string

X

EngineProcCmd

Engine Process Launch command

string

EngineProcStartParams

Engine Process Start Parameters

string

[]

X

EngineEnvParams

Engine Process Environment Parameters

string

[]

X

EngineLaunchCommand

object

{“LaunchType”:”BasicFork”}

EngineTimestep

Engine Timestep in seconds

number

0.01

EngineCommandTimeout

Engine Timeout (in seconds). It tells how long to wait for the completion of the engine runStep. 0 or negative values are interpreted as no timeout

number

0.0

  • Parameters inherited from the EngineGRPC schema:

Name

Description

Type

Default

Required

Array

ServerAddress

gRPC Server address. Should this address already be in use, simulation initialization will fail

string

localhost:9004

  • Parameters specific to this engine type:

Name

Description

Type

Default

Required

Array

NetworkFile

Path to the storage of file with the architecture of the network

string

X

WeightsFile

Path to the storage of file containing initial weights of neurons

string

X

NumThreads

Number of threads used for parallel computing

integer

1

SensorialDelay

Sensorial delay needed by EDLUT to compensate delays in communication and compute future spikes

float

0.00

SaveWeightsPeriod

Period of time to save synaptic weights in a file

float

0.00

Schema

As explained above, the schema used by the EDLUT engine inherits from EngineBase and EngineGRPC schemas. A complete schema for the configuration of this engine is given below:

{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "title": "Edlut Grpc Engine",
    "description": "Edlut Grpc Engine configuration schema.",
    "$id": "#EdlutGRPCEngine",
    "allOf": [
      { "$ref": "json://nrp-core/engines/engine_comm_protocols.json#/engine_grpc" },
      {
        "properties": {
          "EngineType": { "enum": ["edlut_grpc_engine"] },
          "ProtobufPackages": { "default": ["EdlutData"]},
          "NetworkFile": {
            "type": "string",
            "description": "Path to Edlut Network configuration file"
          },
          "WeightsFile": {
            "type": "string",
            "description": "Path to Neuron Weights file"
          },
          "NumThreads": {
            "type": "integer",
            "default": 1,
            "description": "Number of threads to use if available"
          },
          "SensorialDelay": {
            "type": "number",
            "default": 0.00,
            "description": "Sensorial delay used to compute future spikes"
          },
          "SaveWeightsPeriod": {
            "type": "number",
            "default" : 0.00,
            "description": "Period of time to save synaptic weights in a file"
          }
        },
        "required": ["NetworkFile", "WeightsFile"]
      }
    ]
  }