Automatic Optimization of the Computation Graph in the Nengo Neural Network Simulator

One critical factor limiting the size of neural cognitive models is the time required to simulate such models. To reduce simulation time, specialized hardware is often used. However, such hardware can be costly, not readily available, or require specialized software implementations that are difficult to maintain. Here, we present an algorithm that optimizes the computational graph of the Nengo neural network simulator, allowing simulations to run more quickly on commodity hardware. This is achieved by merging identical operations into single operations and restructuring the accessed data in larger blocks of sequential memory. In this way, a time speed-up of up to 6.8 is obtained. While this does not beat the specialized OpenCL implementation of Nengo, this optimization is available on any platform that can run Python. In contrast, the OpenCL implementation supports fewer platforms and can be difficult to install.

[1]  Raymond Reiter,et al.  Scheduling Parallel Computations , 1968, J. ACM.

[2]  Raymond E. Miller,et al.  A Comparison of Some Theoretical Models of Parallel Computation , 1973, IEEE Transactions on Computers.

[3]  David E. Culler,et al.  Dataflow architectures , 1986 .

[4]  Bruce Hendrickson,et al.  An Improved Spectral Graph Partitioning Algorithm for Mapping Parallel Computations , 1995, SIAM J. Sci. Comput..

[5]  Krishna M. Kavi,et al.  Design of cache memories for dataflow architecture , 1998, J. Syst. Archit..

[6]  R. J. Millar,et al.  Advances in dataflow programming languages , 2004, CSUR.

[7]  Chris Eliasmith,et al.  Neural Engineering: Computation, Representation, and Dynamics in Neurobiological Systems , 2004, IEEE Transactions on Neural Networks.

[8]  Pearu Peterson,et al.  F2PY: a tool for connecting Fortran and Python programs , 2009, Int. J. Comput. Sci. Eng..

[9]  John E. Stone,et al.  GPU clusters for high-performance computing , 2009, 2009 IEEE International Conference on Cluster Computing and Workshops.

[10]  Stefan Behnel,et al.  Cython: The Best of Both Worlds , 2011, Computing in Science & Engineering.

[11]  Gaël Varoquaux,et al.  The NumPy Array: A Structure for Efficient Numerical Computation , 2011, Computing in Science & Engineering.

[12]  Trevor Bekolay,et al.  A Large-Scale Model of the Functioning Brain , 2012, Science.

[13]  Kent-Andre Mardal,et al.  Instant: just-in-time compilation of C/C++ in Python , 2012 .

[14]  Chris Eliasmith,et al.  How to Build a Brain: A Neural Architecture for Biological Cognition , 2013 .

[15]  Steve B. Furber,et al.  The SpiNNaker Project , 2014, Proceedings of the IEEE.

[16]  Rodrigo Alvarez-Icaza,et al.  Neurogrid: A Mixed-Analog-Digital Multichip System for Large-Scale Neural Simulations , 2014, Proceedings of the IEEE.

[17]  Trevor Bekolay,et al.  Nengo: a Python tool for building large-scale functional brain models , 2014, Front. Neuroinform..

[18]  Sacha Jennifer van Albada,et al.  Full-density multi-scale account of structure and dynamics of macaque visual cortex , 2015, 1511.09364.

[19]  Chris Eliasmith,et al.  A Spiking Neural Model of the n-Back Task , 2015, CogSci.

[20]  John Salvatier,et al.  Theano: A Python framework for fast computation of mathematical expressions , 2016, ArXiv.

[21]  Chris Eliasmith,et al.  Optimizing Semantic Pointer Representations for Symbol-Like Processing in Spiking Neural Networks , 2016, PloS one.

[22]  Manish Kumar Large-scale neuromorphic computing systems , 2016 .

[23]  Markus Diesmann,et al.  A multi-scale layer-resolved spiking network model of resting-state dynamics in macaque visual cortical areas , 2018, PLoS Comput. Biol..