Skip to content

Limitations

The current implementation covers feedforward, fully-connected SNN topologies. The constraints below are not dead ends — they're the most useful places to contribute. Each one maps to a concrete extension point, and we'd be glad to help you tackle any of them (see Contributing).

We group them by which half of the project they live in.

Python / NIR frontend

Linear-chain graphs only

The graph walker (_graph.parse_graph) follows a single path from input to output. Branching, residual connections, and recurrent edges are not yet supported.

No convolutional / pooling nodes

NIR nodes such as nir.Conv2d, nir.AvgPool2d, and nir.SumPool2d operate on [channels, height, width] feature maps and have no SNN equivalent yet. Adding them is a contained task — see Adding a NIR node type.

Uniform neuron parameters per layer

All neurons in a layer share the same decay constants and threshold (the parser enforces this). Per-neuron parameter arrays are not yet supported.

MLIR dialect & lowering

1-D activations only

All ops require 1-D activation vectors — memref<Nxf32> or memref<Nxi32>. Neuron populations are flat arrays, not spatial maps. The verifiers enforce this, so a 2-D feature map yields a clear error rather than a silent miscompilation. The neuron dynamics ops are already rank-agnostic at the lowering level, so extending to N-D is mostly blocked on the convolutional synapse op above.

Batch size 1

Each call to the compiled function processes one input sample. Batched inference would need 2-D activation memrefs, which is blocked by the 1-D constraint.

One reference backend (CPU)

The only shipped lowering is SNNToLinalg (CPU via linalg/arith). Additional targets — FPGA, ASIC, other accelerators — are exactly what the lowering-pass extension point is for.


Want one of these lifted for your use case? We'd love your help — or send us the NIR graph and we'll take a look.