OpenCL-based Nengo Simulator
This project is an OpenCL-based simulator for
brain models built using Nengo.
It can be orders of magnitude faster than the reference simulator
nengo for large models.
To use the
nengo_ocl project's OpenCL simulator,
build a Nengo model as usual,
nengo_ocl.Simulator when creating a simulator for your model:
import numpy as np import matplotlib.pyplot as plt import nengo import nengo_ocl # define the model with nengo.Network() as model: stim = nengo.Node(np.sin) a = nengo.Ensemble(100, 1) b = nengo.Ensemble(100, 1) nengo.Connection(stim, a) nengo.Connection(a, b, function=lambda x: x**2) probe_a = nengo.Probe(a, synapse=0.01) probe_b = nengo.Probe(b, synapse=0.01) # build and run the model with nengo_ocl.Simulator(model) as sim: sim.run(10) # plot the results plt.plot(sim.trange(), sim.data[probe_a]) plt.plot(sim.trange(), sim.data[probe_b]) plt.show()
If you are running within
nengo_gui make sure the
environment variable has been set. If this variable is not set it will open
an interactive prompt which will cause
nengo_gui to get stuck during build.
Dependencies and Installation
The requirements are the same as Nengo, with the additional Python packages
pyopencl (where the latter requires installing OpenCL).
- Python 2.7+ or Python 3.3+ (same as Nengo)
- One or more OpenCL implementations (test with e.g. PyOpenCl)
A working installation of OpenCL is the most difficult part of installing Nengo OCL. See below for more details on how to install OpenCL.
In the ideal case, all of the Python dependencies
will be automatically installed when installing
pip install nengo-ocl
If that doesn't work, then do a developer install to figure out what's going wrong.
pip install nengo.
For best performance, first make sure a fast version of Numpy is installed
by following the instructions in the
This repository can then be installed with:
git clone https://github.com/nengo/nengo-ocl.git cd nengo-ocl python setup.py develop --user
If you’re using a
then you can omit the
Check the output to make sure everything installed correctly.
Some dependencies (e.g.
pyopencl) may require manual installation.
How you install OpenCL is dependent on your hardware and operating system. A good resource for various cases is found in the PyOpenCL documentation:
- Installing PyOpenCL on Windows
- Installing PyOpenCL on Mac OS X
- Installing PyOpenCL on Linux, and a more detailed guide
Below are instructions that have worked for the Nengo OCL developers at one point in time.
AMD OCL on Debian Unstable
On Debian unstable (sid) there are packages in non-free and contrib
to install AMD's OCL implementation easily.
Actually, the easiest thing would be to apt-get install
But if you're using a virtual environment, you can
sudo apt-get install opencl-headers libboost-python-dev amd-opencl-icd amd-libopencl1
pip install pyopencl.
Nvidia OCL on Debian/Ubuntu Linux
On Debian unstable (sid) there are packages for installing the Nvidia OpenCL implementation as well.
sudo apt-get install nvidia-opencl-common nvidia-libopencl1
Ensure that the Nvidia driver version matches the OpenCL library version.
You can check the Nvidia driver version by running
nvidia-smi in the
command line. You can find the OpenCL library version by looking at the
libnvidia-opencl.so.XXX.XX file in the
Intel OCL on Debian/Ubuntu Linux
nengo-ocl source directory, run:
py.test nengo_ocl/tests --pyargs nengo -v
This will run the tests using the default context. If you wish to use another
context, configure it with the
PYOPENCL_CTX environment variable
(run the Python command
pyopencl.create_some_context() for more info).