The SpiNNakerGraphFrontEnd is a interface to the SpiNNaker software stack that is designed with the intention of allowing developers / users to build applications that run on SpiNNaker machines without having to worry about the low level support of:
- Booting/powering on the SpiNNaker machine.
- Mapping the application onto the SpiNNaker machine.
- Loading the application onto the SpiNNaker machine.
- Buffering data in/out from/to to the SpiNNaker machine during an application run.
- Verifying that the application is running on the SpiNNaker machine.
- Implementing a interface for interacting with the SpiNNaker machine.
- Acquiring Provenance data from the SpiNNaker machine after an application run.
- Acquiring debug data from the SpiNNaker machine after / during an application run.
- Shutting down the SpiNNaker machine correctly after an application run.
How the SpiNNakerGraphFrontEnd supports the developer/user
The SpiNNakerGraphFrontEnd allows a developer / user to write applications by representing the problem as a graph, where the nodes in the graph represent a collection of computation and edges represent communication between these computations.
The developer should read the following presentations to learn how to exploit the software stack to it’s most potential:
A summary is that a developer needs to develop both a Python and c representation of any computation nodes (vertices) and often just a Python version for any unique communication requirements.
SpiNNakerGraphFrontEnd interface
The SpiNNakerGraphFrontEnd supports the following interface for developers to use.
Name | Definition |
---|---|
setup() |
This is the first call that needs to be executed at all times. It sets up all the basic data structures the software stack requires |
add_application_vertex() |
This adds a vertex that can be split over multiple computational nodes |
add_machine_vertex() |
This adds a vertex that can only reside on one computational node |
add_application_edge() |
This adds a edge between vertices that can be split over multiple computational nodes |
add_machine_edge() |
This adds a edge between vertices that can only reside on individual computational nodes |
get_machine_dimensions() |
This function supports inquiring the SpiNNaker machine and being given the dimensions of the machine |
machine() |
This function returns the Python representation of the SpiNNaker machine |
transceiver() |
This function returns the Python communication interface to the SpiNNaker machine |
run() |
This function executes: mapping, loading, running, extraction of provenance and debug data on the SpiNNaker machine |
stop() |
This function shuts down the SpiNNaker machine cleanly |
The best way currently to understand how to write code that uses SpiNNakerGraphFrontEnd is to look at current examples; simple examples can be found in the repository in the examples/ directory of the SpiNNakerGraphFrontEnd repository. More advanced examples can be found in their own repositories; see for example our implementation of MarkovChainnMonteCarlo problems.
To be extended in the future.