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 mobile operating systems. Platforms without first party support (e.g. Apple macOS/iOS) have compatibility layers available that seamlessly make everything work regardless.
At Stream HPC, we have been using Vulkan for the last few years for any problem that requires portability. So much so that we have been building a library to streamline the use of Vulkan for HPC applications. As part of our library we’re been implementing a set of example compute problems you can solve with Vulkan.
In this blog post we will detail the implementation of one of these examples: neural upscaling using convolutional networks. We’ll briefly introduce how convolutional neural networks work, but will mostly focus on how to implement those in Vulkan compute shaders. We’ll also be leaving out some of the Vulkan scaffolding necessary to make this a full standalone application. There’s some great guides available for that already.
Neural upscaling
Many neural methods exist to upscale images from lower resolution to higher resolutions. Over the last years it has seen extensive use in games and image processing applications. To keep the scope of this example manageable we’ll use a technique from 2016, introduced in “Real-Time Single Image and Video Super-Resolution Using an Efficient Sub-Pixel Convolutional Neural Network” [1].
Continue reading “Image upscaling using convolutional neural networks in Vulkan”















