Usando OpenCL en Fedora (28) con darktable &c

Acá va un post bien técnico.

La motivación

  • Usás Fedora u otra distro basada en rpm, versión reciente (Fedora 28 o más nueva)
  • Tenés una tarjeta gráfica AMD (ejemplo: GPU RX560)
  • Usás darktable y GIMP para procesar fotos
  • Querés usar OpenCL para acelerar darktable/GIMP (500% más rápido en muchas operaciones), pero no querés arriesgar tu desktop/workstation instalando el driver propietario amdgpu-pro
  • En tu desktop, para OpenGL etc (aceleración gráfica normal) y para juegos, querés seguir usando el driver amdgpu open-source, que es más rápido y está mucho mejor soportado que el propietario
  • Tampoco podrías usar el driver propietario porque sólo soporta RedHat or CentOS con kernels viejísimas
  • Te diste cuenta de que la implementación open-source que viene en tu distro es tan mala que darktable la ignora y no te deja activar OpenCL
    • en otras palabras, el comando darktable-cltest te dice que no encuentra ninguna implementación OpenCL que valga la pena activar. Así, sin anestesia.

La solución

  • Utilizar solamente las librerías OpenCL que vienen en el driver propietario amdgpu-pro versión CentOS, y hacer que tu sistema las vea, sin modificar nada más

El procedimiento

  • download a recent amdgpu-pro (tested with 18.20), CentOS flavor, for example: this one; store it somewhere where it can stay
  • Extract the content of the .tar.xz file to a folder; inside that folder navigate to ./RPMS/x86_64, and «Open a Terminal» in it (or: inside any terminal, ‘cd’ to this same folder)
  • Now we will unpack the RPMs to extract the libraries; this procedure will generate a lot of files and may take a minute or two in a slower machine; run this in the terminal:
for i in *.rpm; do rpm2cpio $i | cpio -idmv; done
  • A bunch of new subdirectories are created; navigate to this one: ./RPMS/x86_64/etc/OpenCL  – it contains two files: amdocl64.icd and amdocl-orca64.icd
  • Copy both files to /etc/OpenCL/vendors
  • Now navigate back to x86_64, and forward to: ./opt/amdgpu-pro/lib64; make sure this folder exists and that it contains a bunch of libraries (.so files); note the full path to this folder; for example
/opt/amdgpu-pro/amdgpu-pro-18.20-606296/RPMS/x86_64/opt/amdgpu-pro/lib64
  • Before the final step, confirm that darktable-cltest can use these libraries, this can be done easily like so:
LD_LIBRARY_PATH=/opt/amdgpu-pro/amdgpu-pro-18.20-606296/RPMS/x86_64/opt/amdgpu-pro/lib64 darktable-cltest
  • if all went well, darktable-cltest will find the OpenCL libraries and your card, and compile all its «opencl kernels», showing a bunch of «successfully loaded kernel» messages
  • At this point you could launch darktable or GIMP with the same LD_LIBRARY_PATH trick as above, modify your launchers etc, and you will get OpenCL acceleration exposed to the apps you want.
  • Test performance directly with darktable after enabling OpenCL (Options > Core Options > Activate OpenCL) – two darktable modules particularly impacted are «denoise (profiled)» and JPG exports – I measured 5X improvement in performance in the latter.

 

Tantas vueltas para usar OpenCL en Fedora y otras distros seguramente se van a simplificar de acá a uno o dos años, cuando la nueva implementación OpenCL open-source de AMD (ROCm) sea finalmente incluída en las distribuciones. Al parecer esto puede tomar un tiempo. He aquí el procedimiento que se puede usar en el ínterin.

Deja una respuesta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.