OpenCL: Difference between revisions
Line 142: | Line 142: | ||
===C++=== | ===C++=== | ||
[https://github.khronos.org/OpenCL-CLHPP/index.html#intro C++ Bindings]<br> | [https://github.khronos.org/OpenCL-CLHPP/index.html#intro C++ Bindings]<br> | ||
While you can use the C bindings in your C++ application, Khronos also provides a set of C++ bindings in <code>CL/cl2.hpp</code> which are much easier to use alongside std containers such as <code>std::vector</code>. When using C++ bindings, you also do not need to worry about releasing buffers since these are reference-counted. | While you can use the C bindings in your C++ application, Khronos also provides a set of C++ bindings in <code>CL/cl.hpp</code> (or <code>CL/cl2.hpp</code>) which are much easier to use alongside std containers such as <code>std::vector</code>. When using C++ bindings, you also do not need to worry about releasing buffers since these are reference-counted. | ||
{{hidden | C++ example | | {{hidden | C++ example | | ||
<syntaxhighlight lang="cpp"> | <syntaxhighlight lang="cpp"> |
Revision as of 17:27, 31 October 2019
Installation
Windows
If you're using an NVIDIA GPU, install the CUDA Toolkit.
Linux
https://gist.github.com/Brainiarc7/dc80b023af5b4e0d02b33923de7ba1ed
Getting Started
Compiling
OpenCL kernels are compiled at runtime. All you have to do is link OpenCL when compiling your program and include your kernels in your program. For gcc
just add flag -lOpenCL
C
See https://www.eriksmistad.no/getting-started-with-opencl-and-gpu-computing/
C++
C++ Bindings
While you can use the C bindings in your C++ application, Khronos also provides a set of C++ bindings in CL/cl.hpp
(or CL/cl2.hpp
) which are much easier to use alongside std containers such as std::vector
. When using C++ bindings, you also do not need to worry about releasing buffers since these are reference-counted.
Julia
See OpenCL.jl.
Usage
Types
Scalar Data Types
While all OpenCL devices support single-precision floats, not all support double-precision doubles.
Just like glsl, OpenCL supports vector types such
float3 my_vec = (float3)(1.0);
where its elements are accessed using x,y,z as my_vec.x
.
To convert between vector types, use convert_T()