Vulkan back end coming to SYCL AdaptiveCpp has added a Vulkan backend and Android cross-compilation support to SYCL, bringing portable GPU compute to Android devices that ship with Vulkan implementations. The project's GitHub CI now tests the Vulkan backend on Linux, Windows, and macOS on every commit, using Mesa llvmpipe on Linux and Windows and MoltenVK on macOS, with Ubuntu native builds requiring the LunarG Vulkan SDK 1.4.357.0, a Vulkan driver, the clspv compiler, and AdaptiveCpp itself. The backend closes a gap in SYCL's performance-portability story on mobile, where OpenCL-over-Vulkan projects such as clvk, pocl, and ANGLE had previously seen more success. Bringing SYCL to Android: A Vulkan backend for portable GPU compute https://adaptivecpp.github.io/hipsycl/adaptivecpp/sycl/vulkan/android/vulkan-android/ Introduction SYCL’s promise is performance portability: write modern C++ once and execute across many different accelerators. But that promise only goes as far as the available backends. While desktop and HPC platforms capitalize on established OpenCL, CUDA, HIP, and Level Zero backends for accelerating SYCL applications on the GPU, mobile isn’t a domain commonly associated with SYCL. Yet almost every Android device ships with a capable Vulkan implementation, making mobile an unfulfilled chapter of the SYCL performance portability story. While projects such as Sylkan https://dl.acm.org/doi/10.1145/3456669.3456683 have demonstrated that SYCL over Vulkan is feasible, the space has remained relatively unexplored in terms of feature completeness, Android support, and integration with the wider SYCL ecosystem. OpenCL has had more success in this area, with projects such as clvk https://github.com/kpet/clvk , pocl https://github.com/pocl/pocl , and ANGLE https://github.com/google/angle successfully layering the OpenCL compute API over Vulkan. AdaptiveCpp closes this SYCL gap with its new Vulkan backend and Android cross-compilation support. Here is what we’ll cover in this blog post: - Getting Started getting-started : How to build AdaptiveCpp with the Vulkan backend on desktop so you can try it yourself. - Benchmarks android-benchmarks : Early performance results from bringing SYCL GPU acceleration to Android. - Under the Hood under-the-hood : A deep dive into how AdaptiveCpp layers over Vulkan, exploring the runtime and the compiler. Getting Started When it comes to using the Vulkan AdaptiveCpp backend, thanks to the proliferation of Vulkan drivers, there are many platforms on which the backend can be tested. We’re proud that AdaptiveCpp GitHub CI now has all of Linux, Windows, and macOS operating systems tested on the Vulkan backend on every commit, using Mesa llvmpipe https://docs.mesa3d.org/drivers/llvmpipe.html for Linux and Windows, and MoltenVK https://github.com/KhronosGroup/MoltenVK for macOS. In this article, we’ll only cover how to build and use the backend on Ubuntu using a native build flow. Android requires a more complex build process using the Android Native Development Kit NDK to cross-compile AdaptiveCpp and other dependencies. You can find the in-depth instructions for how to do that here https://github.com/AdaptiveCpp/AdaptiveCpp/blob/develop/doc/install-android.md . Building AdaptiveCpp With The Vulkan Backend There are four main pieces to assemble before you can compile and run your first SYCL program for Vulkan: the LunarG SDK lunarg-sdk , a Vulkan driver vulkan-driver , the clspv compiler clspv , and AdaptiveCpp adaptivecpp itself. The first build dependency is the LunarG Vulkan SDK which contains SPIR-V Tools, Vulkan layers and the loader, and the VulkanHpp headers. The second is a clspv executable, which can be built following the GitHub repo instructions. A Vulkan driver is also required to run the backend. Finally, we need to build AdaptiveCpp with the Vulkan backend enabled. LunarG SDK Download the Vulkan SDK tarball from the LunarG website https://vulkan.lunarg.com/sdk/home and decompress it. The LunarG SDK can then be made available in your system path after sourcing the setup-env.sh script that it ships we recommend automatically sourcing this as part of your .bashrc . bash $ wget https://sdk.lunarg.com/sdk/download/1.4.357.0/linux/vulkansdk-linux-x86 64-1.4.357.0.tar.xz $ tar -xvf vulkansdk-linux-x86 64-1.4.357.0.tar.xz $ source 1.4.357.0/setup-env.sh Vulkan Driver The Vulkan SDK comes with a vulkaninfo tool for printing the Vulkan drivers on your system. At least one driver is required to use as a SYCL backend device. If you don’t have any installed then the easiest way to reliably get a supported driver is to install the Mesa drivers with apt install mesa-vulkan-drivers . This will provide at least the llvmpipe CPU Vulkan driver which provides all the necessary capabilities for SYCL. For example: bash $ vulkaninfo --summary GPU0: apiVersion = 1.4.318 driverVersion = 25.2.8 vendorID = 0x10005 deviceID = 0x0000 deviceType = PHYSICAL DEVICE TYPE CPU deviceName = llvmpipe LLVM 20.1.8, 256 bits driverID = DRIVER ID MESA LLVMPIPE driverName = llvmpipe driverInfo = Mesa 25.2.8-0ubuntu0.25.10.2 LLVM 20.1.8 conformanceVersion = 1.3.1.1 clspv A clspv executable is required to be invoked at runtime as part of runtime kernel compilation, and can be built from source https://github.com/google/clspv . The exact commit of clspv should be checked in AdaptiveCpp CI or doc/install-vulkan.md https://github.com/AdaptiveCpp/AdaptiveCpp/blob/develop/doc/install-vulkan.md requirements for the SHA hash. bash $ git clone https://github.com/google/clspv $ cd clspv $ git checkout