In the world of high-performance programming, true portable code has been a goal for a long time. Vulkan has been very successful at this, with Vulkan drivers being provided by every major GPU vendor and available for all common desktop and…
RDNA and CDNA: similarities and differences
In 2019 AMD announced the Radeon™ RX 5700 XT, a GPU that sported its brand-new at the time architecture named RDNA. It aimed to provide upgrades compared to the older GCN-based cards. Then one year later, AMD announced another GPU architecture…
Basic Concepts: Writing OpenCL code for single and double precision
Support for double precision floating-point type double in OpenCL kernels requires an extension. AMD provides cl_khr_fp64 for newer high-edn hardware, but also a non-fully compliant cl_amd_fp64 extension for other hardware. NVIDIA and Intel support the cl_khr_fp64, so no exceptions need to…
Basic Concepts: out of resources with clEnqueueReadBuffer
In the series “Basic Concepts” various basics of GPGPU and OpenCL are discussed. This time we go into a typical one: when an error does not imply the actual problem. It is therefore good to have an overview of all errors…
OpenCL error codes (1.x and 2.x)
Knowing all errors by heart is good for quick programming, but not always the best option. Therefore I started to create a full list with extra info, taken from cl.h and the reference documentation. The problem with many error-codes is that…
OpenCL Basics: Flags for the creating memory objects
In OpenCL large memory objects, residing in the main memory of the host or the global memory at the accelerator/GPU, need special treatment. First reason is that these memories are relatively slow. Second reason is that the most times serial copy…
Targetting various architectures in OpenCL and CUDA
The question we aim to answer in this post is: “How to do you make software that performs on several platforms?”. Note: This article is not fully finished – I’ll add more information during the coming months. It’s busy here! Even…




