Skip to content
Mark Plagge edited this page Apr 11, 2017 · 8 revisions

Building and Configuring NeMo

Build Requirements

  • CMake >= 2.8
  • A compatible compiler:
    • GCC >= 5.0
    • Clang/LLVM >= 3.8.0
    • IBM XL_C
    • Intel ICC >= 16.0.0
  • A compatible MPI installation:
    Tested with the following MPI configurations:
    • Intel MPI/ICC 16.0.3
    • MPICH >= 3.0

Build Steps

First clone NeMo into a directory.
git clone https://github.com/markplagge/NeMo.git
cd NeMo

Next, you will need to either download ROSS separately, or use the submodule function in git:
git submodule init
git submodule update

If you already downloaded ROSS separately, do the following:
rm -rf ./ROSS
ln -s /path/to/ROSS ./
Which should create a symbolic within the NeMo directory to the downloaded ROSS folder.

Finally, configure cmake and build NeMo:

mkdir build
cd build

ARCH=x86_64 cmake ../ -DCMAKE_C_COMPILER=mpicc Replace "mpicc" with the absolute path to your MPICC script location.

Other options for ARCH include i386 (for 32-bit machines), bgp, and bgq (for blue gene systems)

If you wish to adjust other options, including the number of neurons per core and the number of weights per neuron, the easiest way is to use CCMAKE:

ARCH=x86_64 ccmake ../ -DCMAKE_C_COMPILER=mpicc.

NeMo_NEURONS_IN_CORE set the number of neurons per neurosynaptic core in the simulation. NeMo_NUM_WEIGHTS_IN_NEURON set the number of weights in each neuron. This does not affect the benchmark network, as it only uses 2 weights.

Then run make,
make -j 4

This will build nemo and put it in the ./bin folder

Run Simple Test

./bin/NeMo --end=1000 --cores=16
Runs simple identity matrix workload with 16 neurosynaptic cores.

mpirun -np=2 ./bin/NeMo --end=1000 --cores=16 --synch=3 Runs a simple identity matrix workload across two processes. Replace mpirun -np=2 with your mpirun's proper options.

Runtime Options and Notes

NeMo maps neurosynaptic cores to processes. Cores can not be split up, so make sure that you run NeMo with enough processes to evenly split cores across the simulation. NeMo maps cores evenly across processes, and will fail to run if there are an uneven number of cores on each running process.

For example, if you want to simulate 3 neurosynaptic cores, you can run 1 or 3 processes. If you want to simulate 1024 neurosynaptic cores, you can run NeMo with 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, or 1024 processes.

Useful runtime options

Option Description
--cores=n Sets the number of neurosynaptic cores to simulate.
--svs Saves neuron spike events to csv files
--synch=n Set the ROSS synchronization mode:
1: Non parallel mode, use when running sequentially
2: Conservative mode: NeMo does not benefit from conservative mode currently, not recomended
3: Optimisitc mode: Good performance for parallel runs
5: Optimistic-realtime: Generally gives the best performance on medium/large parallel runs.