Skip to content

Xavier0301/cmontyll

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

cmontyll: A high-performance C implementation of Montyll, a novel Thousand Brains System

montyll architecture

Montyll stands for Monty low-level, as it is inspired by N. Leadholm, V. Clay et al.'s implementation named Monty (code, paper), but integrates elements of low-level neocortical processing e.g. accurate neuron models 12 and grid cells to represent location 34. Montyll was explicitly designed to be aligned with the long term goals of the Thousand Brains Project (website, paper). It is written in C for performance and to be amenable to architectural studies.

Our goal with Montyll was to study the consequences of scaling Thousand Brains Systems on computing systems. As such, Montyll is not designed to be useful or solve a specific problem. It is rather designed to be a good representation of Thousand Brains Systems computations, especially as they integrate more low-level elements of neocortical processing.

Getting started

To compile the code

git clone git@github.com:Xavier0301/cmontyll.git cmontyll
cd cmontyll
make

To run Montyll for 100 steps:

./main 100

Printing stuff

To enable printing the states and other useful informations, use PRINT=0 (none), PRINT=1 (standard) or PRINT=2 (verbose) at compile time:

PRINT=2 make main
./main 10

Multiple learning modules mode

For many learning modules:

NUM_NEIGHBORS=20 make scale-out

compiles the code and assumes each LM is connected to 20 other LMs. To run the code for 100 steps, across 50 learning modules:

OMP_NUM_THREADS=50 ./scale-out 100

On macos on an m2 pro 12-core chip, libopenmp somehow limits the number of threads to 248. To escape this limitation, compiles with gcc

brew install gcc
GCC_BIN=/path/to/gcc
OMP_NUM_THREADS=50 ./scale-out-gcc 100

although the performance is not great since sys time explodes around 250 learning modules.

Footnotes

  1. J. Hawkins and S. Ahmad, “Why neurons have thousands of synapses, a theory of sequence memory in neocortex,” Frontiers in neural circuits, vol. 10, p. 23, 2016

  2. S. Ahmad, A. Lavin, S. Purdy, and Z. Agha, “Unsupervised real-time anomaly detection for streaming data,” Neurocomputing, vol. 262, pp. 134–147, 2017

  3. M. Lewis, S. Purdy, S. Ahmad, and J. Hawkins, “Locations in the neocortex: A theory of sensorimotor object recognition using cortical grid cells,” Frontiers in neural circuits, vol. 13, p. 22, 2019

  4. N. Leadholm, M. Lewis, and S. Ahmad, “Grid cell path integration for movement-based visual object recognition,” arXiv preprint arXiv:2102.09076, 2021

About

C implementation of a novel Thousand Brains System with elements of low-level cortical processing

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors