Resolution: Won't Fix
Affects Version/s: None
Fix Version/s: None
OpenCL is an established API for accelerating computations. Several aspects are advantageous compared to Numba and other numerical libraries:
- Both GPU & CPUs can be used, so new hardware is not a hard requirement
- CPU usage is highly optimzied, using all cores and 4 or 8-way SIMD instructions without any additional programmer effort
- Core kernel code is reusable in other applications or lagnauges with OpenCL libraries
The primary disadvantage to OpenCL is that a "platform" must be available in order to use it, which usually requires a suitable driver from a hardware vendor. Apple ships these with Mac OS X, but Windows and Linux users will need to install Intel's OpenCL driver and whichever GPU vendor driver is required, and we won't be able to ship it with TVB.
I've started discussion with Andreas Kloeckner, the author of PyOpenCL, on building his binding against the PortableCL project, so that such a binding wouldn't need any driver installed, but this is not yet ready..
This epic includes the following (to be converted into tasks)
- Check PyOpenCL and its dependencies for library version and license compatibility.
- Reimplement and test relevant algorithms including simulator, monitors, metrics and analyzers
- Add framework support for querying OpenCL availability and configuring preference for OpenCL devices
- Possibly autobenchmark available devices for choosing which to use
- Add support for mapping specific tasks like parameter sweeps to OpenCL that are currently handled by batch simulator jobs
- Install OpenCL drivers on cluster (Intel for CPUs and Nvidia for GPUs)
- Add support for new OAR job configurations on cluster where relevant (i.e. use a GPU, use an entire node for CPU OpenCL work)
- Document installation of common OpenCL drivers & configure device preferences.