The OpenCL Extension Wrangler Library
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
clewTest
include add various OpenCL API Calls Sep 28, 2015
src copy dynamic library opening from blender Sep 12, 2016
.gitignore builds on windows as dll now Jun 28, 2015
CMakeLists.txt
LICENSE.md
README.md

README.md

clew

The OpenCL Extension Wrangler Library

This basically works like glew, but for OpenCL

  • you can build opencl code without needing any opencl library or include files!
  • at runtime, even if there is no opencl-enabled device present, your code will still run! Of course, you wont be able to do anything opencl-related, but you wont get any errors about missing dlls and stuff, no linker errors (at least, not until you try to use a non-existent opencl-enabled device of course)

Code history

  • The code was originally part of a larger project, then was factorized out into a standalone github project

To use in your code

Include it

#include "clew.h"

Initialize it

bool clpresent = 0 == clewInit();
if( !clpresent ) {
    throw std::runtime_error("OpenCL library not found");
}

Use standard OpenCL method calls, as though you were linking directly with OpenCL:

context = new cl_context();
*context = clCreateContext(0, 1, &device, NULL, NULL, &error);
if (error != CL_SUCCESS) {
   throw std::runtime_error( "Error creating context: " + errorMessage(error) );
}
// Command-queue
queue = new cl_command_queue;
*queue = clCreateCommandQueue(*context, device, 0, &error);
if (error != CL_SUCCESS) {
   throw std::runtime_error( "Error creating command queue: " + errorMessage(error) );
}
// etc ...
  • link with libclew.so/.a/.dll/.lib (as appropriate, according to platform and build options)

To build

On linux

You'll need:

  • cmake
  • gcc, g++

Procedure:

mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=../dist
make -j 4 install

To test it works ok. You'll need at least one OpenCL-enabled device to do this bit:

LD_LIBRARY_PATH=../dist/lib ../dist/bin/clewTest

=> should see something like 'num platforms: 1'

On Windows

You'll need:

  • cmake
  • Visual Studio 2010 (actually, can probably use any version, but this was tested with this version)

Procedure:

  • first do the cmake part:
    • open cmake, set the source directory to the location of this source code
    • set the build directory to new subdirectory 'build'
    • click 'configure'
    • choose a generator, eg visual studio 2010
    • change the CMAKE_INSTALL_PREFIX to new sub-directory 'dist'
    • click 'configure' then 'generate'
  • now open visual studio, and open the solution from the build directory
  • change build type from 'Debug' to 'Release'
  • build the solution
  • build the project 'INSTALL'

To test it works ok. You'll need at least one OpenCL-enabled device to do this bit:

  • open a cmd
  • change into the 'dist' directory you created
  • type 'clewTest' => should see something like 'num platforms: 1'

Build options

  • BUILD_TESTS: build test executable, default ON
  • BUILD_SHARED_LIBRARY: build dll/so, instead of .lib/.a. default OFF
  • INSTALL_CL_HEADER: creates include files directory proxy-opencl, which you can give eg to clBLAS during build, and it will build ok, without needing opencl headers installed