arbor icon indicating copy to clipboard operation
arbor copied to clipboard

Coupling to NEST

Open thorstenhater opened this issue 2 years ago • 2 comments

This is one stepping stone towards a CoSim workflow as described by HBP:SGA3 T5.5.

Minimalist Steering

  • Receive KILL command
    • hard kill: UNIX signal
    • soft kill: command via, will stop after current call to simulation::run finishes
  • Send heartbeat
    • 1st implementation via stdio
    • can leverage #1870
  • Output minimal delay
    • via stdio
    • maybe JSON

Coupling

  • Open a connection to another spiking simulator (or its proxies)
    • MPI_Comm_connect (https://www.mpich.org/static/docs/v3.2/www3/MPI_Comm_connect.html)
    • Metadata for connect must be transferred via stdio or similar measures
  • Receive remote spikes in our native format over said intercommunicator
    • likely Intercomm Allgather works, but these are weird, so do some reading
    • one or two rounds of exchange? So, Arbor -> Arbor and then Arbor -> NEST, or do all in one
  • Allow 'remote' connections during setup.
    • Will need an extra tag and/or method on recipe

Notes

  • There's prior work by @apeyser in https://github.com/apeyser/arbor/tree/feature/nestio
    • Ideas look sane, but not mergeable anymore
  • As said Intercomm collectives are weird, but here they do what we want?!
    • After the AllgatherV both Arbor and the coupled application have all slices of spikes
    • However the semantics imply that we need two rounds anyhow, so maybe AllgatherV(intra) and Broadcast(inter) is better? Screenshot 2022-06-22 at 09 40 17

thorstenhater avatar Jun 22 '22 07:06 thorstenhater

Great write down. No specific remarks from my side. Mainly commenting so I get registered to the updates on this topic

w-klijn avatar Jun 22 '22 08:06 w-klijn

@w-klijn Any experience and/or suggestion on how to provide identifiers of the remote endpoints across the airgap? Since we do not know what lives on the other side assuming a simple integer is not enough (Arbor uses (cell_gid, offset_on_cell)). For the time being I'd go with a free form (ie string) field here, but this disables some optimisations on filtering spikes.

Also, related: Do we foresee N:M coupling, so for example Arbor, NEST, TVB in a triangle? Then we'd have to offer a way to dynamically attach more partners.

thorstenhater avatar Aug 10 '22 10:08 thorstenhater