Since 2010 we write code that runs on GPUs, but also did a fair share on CPUs and even some FPGAs. Below are the languages we use, and on which devices these languages run.

CUDA is the biggest GPU-language out there.

ROCm HIP is the variation of CUDA that runs on AMD GPUs. Our most common HPC-customer often need a single compute-backend that runs well on multiple architectures of Nvidia and AMD, where we use a combination of CUDA and ROCm/HIP.

Vulkan, and then specifically the compute-part of it, allows to make true multi-OS and multi-vendor GPU-software. We’ve built a whole framework to make programming multi-OS software more convenient.
- Android, natively for all GPUs that support GLES 3.1. Quickly find out with the app Vulkan Capability Viewer.
- Windows, natively. Find devices in the Vulkan Hardware DB.
- Linux, natively. Find devices in the Vulkan Hardware DB.
- MacOS, via a translation layer on top of Metal. This creates support for iPhone, iPad and Mac. Then check capability with the app Vulkan Capability Viewer.

SYCL is a powerful language, that solved the problems by OpenCL and CUDA.

OpenCL has been around since 2009, but has slowly decreased in popularity. We still work on OpenCL-projects, simply because it’s a great language to get good performance out of embedded GPUs. OpenCL runs on many devices and operating systems:
- Android, both CPU and GPU, but depending on the brand of the phone. GPUs included those of Vivante, ARM MALI, Imagination and Qualcomm
- Windows, on GPUs of Nvidia, AMD and Intel. Some drivers still support the CPU
- Linux, on GPUs of Nvidia, AMD and Intel.
- Linux, special purpose DSPs. These often don’t implement the full standard.
- FPGAs, but both Xilinx and Altera have created high level synthesis languages that are better fit for FPGAs.
OpenCL When possible, we use Vulkan Compute now.