darktable page lede image
darktable page lede image

Configurare OpenCL per dispositivi AMD/ATI

10.2.6. Configurare OpenCL per dispositivi AMD/ATI

Mentre le schede NVIDIA e la maggior parte delle moderne schede ATI/AMD funzionano immediatamente, non è così semplice con le schede più vecchie ATI/AMD soprattutto con quelle precedenti alla serie HD7xxx. Il motivo è che queste schede comunicano a darktable solamente parte della memoria della loro GPU. Per una memoria da 1GB viene solitamente comunicato un valore di 512MB che darktable, nella sua configurazione standard, non può accettare in quanto insufficiente per un buon funzionamento. Di conseguenza la scheda grafica non verrà utilizzata.

Per casi come questo potreste trovare sul web suggerimenti che vi indicano di impostare la variabile GPU_MAX_HEAP_SIZE a 100. In questo modo, infatti, il driver ATI/AMD comunicherà a darktable l'esatto ammontare della memoria. Tuttavia nasce un altro problema. Su parecchie (o forse la maggior parte?) delle schede grafiche questa impostazione farà sì che i buffers vengano allocati sul vostro PC e non sulla scheda stessa! In questo caso tutti gli accessi alla memoria dovranno necessariamente passare attraverso i bus PCIe che sono lenti. Potreste pagare questa cosa con un rallentamento delle prestazioni fino a 10x rendendo OpenCL assolutamente inutile, specialmente durante l'operazione di esportazione dei files.

Un'altra variabile di ambiente che modifica il comportamento del driver è GPU_MAX_ALLOC_PERCENT. Potreste impostarla a 100 per permettere allocazioni di memoria fino ad 1GB sulla vostra scheda ATI/AMD. Il problema è che darktable prima o poi tende ad andare in crash.

La nostra raccomandazione è quella di non toccare queste impostazioni. Spesso la vostra scheda grafica verrà riconosciuta con 512MB di memoria e con una dimensione massima di allocazione di 128MB. Ci sono tre parametri di configurazione che potete impostare in $HOME/.config/darktable/darktablerc per fare funzionare il tutto. Ecco i dettagli:

opencl_memory_requirement

Impostate questo parametro a 500 per fare in modo che darktable accetti i 512MB di memoria della vostra scheda grafica.

opencl_memory_headroom

Questo parametro controlla la quantità di memoria (oltre a quella riportata) darktable debba lasciare libera per i drivers e il monitor. Per ATI/AMD possiamo disporre solamente della metà della RAM perciò questo parametro deve essere impostato a zero. In questo modo darktable potrà disporre di tutti i 512MB.

opencl_avoid_atomics

Le operazioni cosiddette 'atomic' in OpenCL sono modi speciali per sincronizzare i dati. Vengono utilizzate solo da pochi kernel. Sfortunatamente alcune (o la maggior parte?) delle schede ATI/AMD sono estremamente lente a processare le atomics. E' quindi meglio processare alcuni moduli con la CPU piuttosto che con la GPU in modo estremamente lento. Impostate questo parametro a TRUE se notate estrema lentezza in alcuno moduli quali ombre e alte luci, monocromia, contrasto locale, or mappatura dei toni globale oppure se sperimentate dei blocchi del sistema intermittenti.

Queste raccomandazioni non si applicano alle più recenti Radeon HD7xxx con architettura GCN. A parte il fatto che sono schede molto veloci in termini di calcolo GPU, normalmente funzionano molto bene senza particolari regolazioni. Potete comunque considerare di provare alcune ottimizzazioni descritte nella sezione che segue.