NengoOCL is an OpenCL-based simulator for brain models built using Nengo. It can be orders of magnitude faster than the reference simulator in nengo
for large models.
To use the nengo_ocl
project's OpenCL simulator, build a Nengo model as usual, but use 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 PYOPENCL_CTX
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.
The requirements are the same as Nengo, with the additional Python packages mako
and pyopencl
(where the latter requires installing OpenCL).
General:
- 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 NengoOCL. See below for more details on how to install OpenCL.
Python packages:
- NumPy
- nengo
- mako
- PyOpenCL
In the ideal case, all of the Python dependencies will be automatically installed when installing nengo_ocl
with
pip install nengo-ocl
If that doesn't work, then do a developer install to figure out what's going wrong.
First, pip install nengo
. For best performance, first make sure a fast version of Numpy is installed by following the instructions in the Nengo README.
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 virtualenv
(recommended!) then you can omit the --user
flag. 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 NengoOCL developers at one point in time.
On Debian unstable (sid) there are packages in non-free and contrib to install AMD's OpenCL implementation easily. Actually, the easiest thing would be to apt-get install python-pyopencl. But if you're using a virtual environment, you can sudo apt-get install opencl-headers libboost-python-dev amd-opencl-icd amd-libopencl1
and then pip install pyopencl
.
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 /usr/lib/x86_64-linux-gnu/
folder.
The Intel SDK for OpenCL is no longer available. Intel OpenCL drivers can be found on Intel's website. See the PyOpenCL wiki for instructions.
From the 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).