GPU acceleration
NixOS provides various APIs that benefit from GPU hardware
acceleration, such as VA-API and VDPAU for video playback; OpenGL and
Vulkan for 3D graphics; and OpenCL for general-purpose computing.
This chapter describes how to set up GPU hardware acceleration (as far
as this is not done automatically) and how to verify that hardware
acceleration is indeed used.
Most of the aforementioned APIs are agnostic with regards to which
display server is used. Consequently, these instructions should apply
both to the X Window System and Wayland compositors.
OpenCL
OpenCL is a
general compute API. It is used by various applications such as
Blender and Darktable to accelerate certain operations.
OpenCL applications load drivers through the Installable Client
Driver (ICD) mechanism. In this mechanism, an ICD file
specifies the path to the OpenCL driver for a particular GPU family.
In NixOS, there are two ways to make ICD files visible to the ICD
loader. The first is through the OCL_ICD_VENDORS
environment variable. This variable can contain a directory which
is scanned by the ICL loader for ICD files. For example:
$ export \
OCL_ICD_VENDORS=`nix-build '<nixpkgs>' --no-out-link -A rocm-opencl-icd`/etc/OpenCL/vendors/
The second mechanism is to add the OpenCL driver package to
. This links the
ICD file under /run/opengl-driver, where it will
be visible to the ICD loader.
The proper installation of OpenCL drivers can be verified through
the clinfo command of the clinfo
package. This command will report the number of hardware devides
that is found and give detailed information for each device:
$ clinfo | head -n3
Number of platforms 1
Platform Name AMD Accelerated Parallel Processing
Platform Vendor Advanced Micro Devices, Inc.AMD
Modern AMD Graphics
Core Next (GCN) GPUs are supported through the
rocm-opencl-icd package. Adding this package to
enables OpenCL
support. However, OpenCL Image support is provided through the
non-free rocm-runtime-ext package. This package can
be added to the same configuration option, but requires that
allowUnfree option is is enabled for nixpkgs. Full
OpenCL support on supported AMD GPUs is thus enabled as follows:
= [
rocm-opencl-icd
rocm-runtime-ext
];
It is also possible to use the OpenCL Image extension without a
system-wide installation of the rocm-runtime-ext
package by setting the ROCR_EXT_DIR environment
variable to the directory that contains the extension:
$ export \
ROCR_EXT_DIR=`nix-build '<nixpkgs>' --no-out-link -A rocm-runtime-ext`/lib/rocm-runtime-ext
With either approach, you can verify that OpenCL Image support
is indeed working with the clinfo command:
$ clinfo | grep Image
Image support Yes