OpenCL acceleration is now available in QGIS and allows to take advantage of high speed parallel computing capabilities of modern GPUs and CPUs. For now only a few common QGIS core raster processing algorithms have been ported but the framework is in place and opens the doors for more OpenCL-Accelerated algorithms!
What is OpenCL?
OpenCL (Open Computing Language) is a framework for writing programs that execute across heterogeneous platforms consisting of central processing units (CPUs), graphics processing units (GPUs), digital signal processors (DSPs), field-programmable gate arrays (FPGAs) and other processors or hardware accelerators. OpenCL specifies programming languages (based on C99 and C++11) for programming these devices and application programming interfaces (APIs) to control the platform and execute programs on the compute devices. OpenCL provides a standard interface for parallel computing using task- and data-based parallelism.
Basically, you write a program and you execute it on a GPU (or, less frequently, on a CPU or on a DSP) taking advantage of the huge parallel programming capabilities of the modern graphic cards.
Depending on many different factors, the speed gain can vary to a great extent, but it is typically around one order of magnitude.
How QGIS benefits from OpenCL?
The work I’ve done consisted in integrating OpenCL support into QGIS and writing all the utilities to load, build and run OpenCL programs.
For now, I’ve ported the following QGIS core algorithms, all of them are availabe in processing:
Since the framework to support OpenCL is now in place, I think that more algorithms will be ported over the time.
During this development, even if was not in scope, the hillshade renderer has been optimized for speed and it can also benefit of OpenCL acceleration.
How to activate OpenCL support
OpenCL support is optional and opt-in, to use it, you need to activate it into the QGIS options dialog like shown in the screenshot below:
How much performance gain can I expect?
Well, YMMV, but here are some figures for a big DEM raster, low values mean faster execution.
GDAL means CPU execution using the GDAL processing algorithm.
How to install the OpenCL drivers?
Of course it depends on your specific hardware and on your O.S., AMD, NVidia and Intel have different distributions channels, in general the driver for your graphic card will also provide the OpenCL driver, if your GPU is compatible, if OpenCL is not available on your current machine, try to Google for OpenCL, your O.S. and graphic card.
If there is no OpenCL support for your graphic card, you might try to install a driver for your GPU (Intel for example provides them) and you will probably have a decent acceleration even if not as much as you can get on a real graphic card.
This fact worths some more explanation: you might ask your self why running and algorithm directly on the CPU and running it on the same CPU but using OpenCL would make any difference and the reason why it is generally faster by using OpenCL is that OpenCL will run the algorithm in parallel on all cores of your CPU, while a normal application (and QGIS does not make an exception here) will use a single core.
I started this work as a proof of concept in my spare time (that it is not much, lately) and when I realized that it was promising, I submitted a QGIS grant proposal in order to allocate some working time to port more algorithms, write tests and polish the implementation.
This work would not be possible without all the generous sponsors and donors that feed the QGIS grant program year after year, many thanks to the QGIS community for this amazing support!
Jürgen Fischer was as usual very helpful and took care of the windows builds, now available in OSGeo4W packages.
Nyall Dawson helped with the code review and with testing the implementation on different cards and machines.
Matthias Kuhn reviewed the code.
Even Rouault pointed me to some highly efficient GDAL algorithm optimizations that I’ve been able to integrate in QGIS.