nengo-loihi icon indicating copy to clipboard operation
nengo-loihi copied to clipboard

Error when adding energy probes inside Simulator context

Open drasmuss opened this issue 4 years ago • 1 comments

Running this code

import nengo
import nengo_loihi
from nxsdk.graph.monitor.probes import PerformanceProbeCondition
from nxsdk.api.n2a import ProbeParameter

with nengo.Network() as net:
    a = nengo.Ensemble(10, 1)
    p = nengo.Probe(a)

run_time = 0.1
dt = 0.001

with nengo_loihi.Simulator(net, dt=dt) as sim:
    board = sim.sims["loihi"].nxsdk_board
    probe_cond = PerformanceProbeCondition(
        tStart=1, tEnd=int(run_time / dt) * 10, bufferSize=1024 * 5, binSize=4
    )
    e_probe = board.probe(ProbeParameter.ENERGY, probe_cond)
    sim.run(run_time)

gives the error

Traceback (most recent call last):
  File "test.py", line 22, in <module>
    sim.run(run_time)
  File ".../nengo-loihi/nengo_loihi/simulator.py", line 330, in run
    self.run_steps(steps)
  File ".../nengo-loihi/nengo_loihi/simulator.py", line 343, in run_steps
    self._runner.run_steps(steps)
  File ".../nengo-loihi/nengo_loihi/simulator.py", line 518, in loihi_only
    self.loihi.run_steps(steps)
  File ".../nengo-loihi/nengo_loihi/hardware/interface.py", line 253, in run_steps
    d_get(self.nxsdk_board, b"cnVu")(steps, **{d(b"YVN5bmM="): not blocking})
  File ".../miniconda3/envs/drasmuss/lib/python3.5/site-packages/nxsdk/graph/nxboard.py", line 262, in run
    traceDirectory=traceDirectory)
  File ".../miniconda3/envs/drasmuss/lib/python3.5/site-packages/nxsdk/graph/nxboard.py", line 233, in _run
    self.executor.start(numSteps, aSync)
  File ".../miniconda3/envs/drasmuss/lib/python3.5/site-packages/nxsdk/driver/executor.py", line 83, in start
    self.finish()
  File ".../miniconda3/envs/drasmuss/lib/python3.5/site-packages/nxsdk/driver/executor.py", line 121, in finish
    self._notifyListeners(ExecutionEventEnum.POST_EXECUTION)
  File ".../miniconda3/envs/drasmuss/lib/python3.5/site-packages/nxsdk/driver/executor.py", line 147, in _notifyListeners
    listener.postExecution()
  File ".../miniconda3/envs/drasmuss/lib/python3.5/site-packages/nxsdk/driver/listeners/composite_monitor.py", line 56, in postExecution
    [m.postExecution() for m in self._collection.values()]
  File ".../miniconda3/envs/drasmuss/lib/python3.5/site-packages/nxsdk/driver/listeners/composite_monitor.py", line 56, in <listcomp>
    [m.postExecution() for m in self._collection.values()]
  File ".../miniconda3/envs/drasmuss/lib/python3.5/site-packages/nxsdk/driver/listeners/monitors/performance_monitor.py", line 43, in postExecution
    self._energyTimeMonitor.updateProbes()
  File ".../miniconda3/envs/drasmuss/lib/python3.5/site-packages/nxsdk/graph/nxenergy_time.py", line 833, in updateProbes
    prb._updateProbe(probeData)
  File ".../miniconda3/envs/drasmuss/lib/python3.5/site-packages/nxsdk/graph/nxenergy_time.py", line 385, in _updateProbe
    tProbeData = super()._updateProbe(rawTimeProbeData)
  File ".../miniconda3/envs/drasmuss/lib/python3.5/site-packages/nxsdk/graph/nxenergy_time.py", line 55, in _updateProbe
    etMonitor=self.etMonitor)
  File ".../miniconda3/envs/drasmuss/lib/python3.5/site-packages/nxsdk/graph/nxtime.py", line 33, in __init__
    self._postProcessData(data)
  File ".../miniconda3/envs/drasmuss/lib/python3.5/site-packages/nxsdk/graph/nxtime.py", line 64, in _postProcessData
    self._processBins()
  File ".../miniconda3/envs/drasmuss/lib/python3.5/site-packages/nxsdk/graph/nxtime.py", line 91, in _processBins
    self._unpackTimeBins(begin, end, tileSize, tStart)
  File ".../miniconda3/envs/drasmuss/lib/python3.5/site-packages/nxsdk/graph/nxtime.py", line 128, in _unpackTimeBins
    return endTimeStamps[-1]
IndexError: index -1 is out of bounds for axis 0 with size 0

This is using NxSDK 0.9.

This issue doesn't occur when using Nengo Loihi 0.10.0, so it is caused by some change in master since then.

drasmuss avatar Jun 16 '20 15:06 drasmuss

As pointed out by @hunse, this is caused by the change where we run connect in __enter__ (NxSDK doesn't like it if you try to add energy probes after connect).

drasmuss avatar Jun 16 '20 16:06 drasmuss