
22-Dec-2010: updated article, now Qt’s OpenCL plugin needs Qt 4.6 or higher. Also provided binary for Linux-32 X86.
More and more ways are getting available to bring easy OpenCL to you. Most of the convenience libraries are wrappers for other languages, so it seems that C and C++ programmers have the hardest time. Since a while my favourite way to go is Qt: it is multi-platform, has a good IDE, is very extensive, has good multi-core and OpenGL-support and… has an extension for OpenCL: http://labs.trolltech.com/blogs/2010/04/07/using-opencl-with-qt
Other multi-platform choices are Anjuta, CodeLite, Netbeans and Eclipse. I will discuss them later, but wanted to give Qt an advantage because it also simplifies your OpenCL-development. While it is great for learning OpenCL-concepts, please know that the the commercial version costs you at least €2995,- a year. I must also warn the plugin is still in beta.
My own build (Ubuntu 10.10 X86-32, QT 4.7, NVIDIA) can be downloaded here: http://dl.dropbox.com/u/13708312/lib_QtOpenCL_Ubuntu32_Qt4.7_2010.12.22.zip (22 Dec 2010). Use at your own risk! It should work on all 32bit X86 Linux-distributions. Below describes how it can be built.
StreamComputing.eu is not affiliated with Qt.
Getting it all
Qt Creator is available in most Linux-repositories: install packages ‘qtcreator’ and ‘qt4-qmake’. For Windows, MAC and the other Linux-distributions there are installers available: http://qt.nokia.com/downloads. People who are not familiar with Qt, really should take a look around on http://qt.nokia.com/.
You can get the source for the plugin QtOpenCL, by using GIT:
git clone http://git.gitorious.org/qt-labs/opencl.git QtOpenCL
See http://qt.gitorious.org/qt-labs/opencl for more information about the status of the project.
You can download it here: http://dl.dropbox.com/u/13708312/QtOpenCL_2010.12.22.zip (22 Dec 2010)
Building the plugin
For Linux and MAC you need to have the ‘build-essentials’. For Windows it might be a lot harder, since you need make, gcc and a lot of other build-tools which are not easily packaged for the Windows-OS. If you’ve made a win32-binary and/or a Windows-specific how-to, let me know.
You might have seen that people have problems building the plugin. The trick is to use the options -qmake and -I (capital i) with the configure-script:
./configure -qmake <location of qmake 4.6 or higher> -I<location of directory CL with OpenCL-headers>
make
Notice the spaces. The program qmake is provided by Qt (package ‘qt4-qmake’), the OpenCL-headers by the SDK of ATI or NVidia (you’ll need the SDK anyway), or by Khronos. By example, on my laptop (NVIDIA, Ubuntu 32bit, with Qt 4.7):
./configure -qmake /usr/bin/qmake-qt4 -I/opt/NVIDIA_GPU_Computing_SDK_3.2/OpenCL/common/inc/
make
This should work. On MAC the directory is not CL, but OpenCL – I haven’t tested it if Qt took that into account.
After building , test it by setting a environment-setting “LD_LIBRARY_PATH” to the lib-directory in the plugin, and run the provided example-app ‘clinfo’. By example, on Linux:
export LD_LIBRARY_PATH=`pwd`/lib:$LD_LIBRARY_PATH
cd util/clinfo/
./clinfo
This should give you information about your OpenCL-setup. If you need further help, please go to the Qt forums.
Configuring Qt Creator
Now it’s time to make a new project with support for OpenCL. This has to be done in two steps.
First make a project and edit the .pro-file by adding the following:
LIBS += -L<location of opencl-plugin>/lib -L<location of OpenCL-SDK libraries> -lOpenCL -lQtOpenCL
INCLUDEPATH += <location of opencl-plugin>/lib/\
<location of OpenCL-SDK include-files>\
<location of opencl-plugin>/src/opencl/
By example:
LIBS += -L/opt/qt-opencl/lib -L/usr/local/cuda/lib -lOpenCL -lQtOpenCL
INCLUDEPATH += /opt/qt-opencl/lib/\
/usr/local/cuda/include/\
/opt/qt-opencl/src/opencl/
The following screenshot shows how it could look like:

Second we edit (or add) the LD_LIBRARY_PATH in the project-settings (click on ‘Projects’ as seen in screenshot):
/usr/lib/qtcreator:location of opencl-plugin>:<location of OpenCL-SDK libraries>:
By example:
/usr/lib/qtcreator:/opt/qt-opencl/lib:/usr/local/cuda/lib:
As you see, we now also need to have the Qt-creator-libraries and SDK-libraries included.
The following screenshot shows the edit-field for the project-environment:

Testing your setup
Just add something from the clinfo-source to your project:
printf("OpenCL Platforms:\n"); QList platforms = QCLPlatform::platforms(); foreach (QCLPlatform platform, platforms) { printf(" Platform ID : %ld\n", long(platform.platformId())); printf(" Profile : %s\n", platform.profile().toLatin1().constData()); printf(" Version : %s\n", platform.version().toLatin1().constData()); printf(" Name : %s\n", platform.name().toLatin1().constData()); printf(" Vendor : %s\n", platform.vendor().toLatin1().constData()); printf(" Extension Suffix : %s\n", platform.extensionSuffix().toLatin1().constData());printf(" Extensions :\n"); QStringList extns = platform.extensions(); foreach (QString ext, extns) printf(" %s\n", ext.toLatin1().constData()); printf("\n");
If it gives errors during programming (underlined includes, etc), focus on INCLUDEPATH in the project-file. If it complaints when building the application, focus on LIBS. If it complaints when running the successfully built application, focus on LD_LIBRARY_PATH.
Ok, it is maybe not that easy to get it running, but I promise it gets easier after this. Check out our Hello World, the provided examples and http://doc.qt.nokia.com/opencl-snapshot/ to start building.