darktable page lede image
darktable page lede image

Paramétrage d’OpenCL pour les machines AMD/ATI

10.2.6. Paramétrage d’OpenCL pour les machines AMD/ATI

Alors que les cartes NVIDIA et la plupart des cartes AMD/ATI modernes fonctionnent immédiatement la plupart du temps, il y a un peu plus de travail à faire pour les cartes graphiques AMD/ATI plus anciennes, c’est-à-dire celles avant les séries HD7xxx. Ceci commence avec le fait que ces cartes ne reportent à darktable qu’une partie de la mémoire du GPU. Pour un système possédant 1GB de mémoire, ceci donne typiquement une valeur de 512MB, une valeur que darktable refuse dans sa configuration standard parce qu'elle est insuffisante pour exécuter ses tâches. En conséquence le GPU ne sera pas utilisé.

Sur le web, vous trouverez peut-être une astuce indiquant de fixer la valeur de la variable d’environnement GPU_MAX_HEAP_SIZE à 100 dans ce cas. Bien entendu cela fera que le pilote AMD/ATI va signaler toute la mémoire installée à darktable. Cependant, il y a un problème. Sur de nombreuses (toutes ?) cartes, ceci va entraîner l’allocation des tampons sur votre ordinateur (hôte) et non sur la carte vidéo ! Dans ce cas, les accès mémoire auront besoin de passer par le bus PCI qui est lent. Ceci va vous coûter un facteur de 10 ou davantage dans les performances et rendra OpenCL inutile pour vous, particulièrement lors de l’exportation de fichiers.

Une autre variable d’environnement qui modifie le comportement du pilotes est GPU_MAX_ALLOC_PERCENT. Vous pourriez la mettre à 100 de manière à autoriser des allocations mémoire aussi importantes que 1 Go sur votre carte AMD/ATI. Le problème est que cela tend à faire planter darktable tôt ou tard.

Notre recommandation est de laisser ces paramètres inchangés. Souvent, votre carte sera reconnue avec 512 Mo de mémoire et une taille maximum d’allocation de 128 Mo. Il existe trois paramètres de configuration que vous pouvez assigner dans le fichier $HOME/.config/darktable/darktablerc afin que les choses fonctionnent. En voici les détails :

opencl_memory_requirement

Définir ce paramètre à 500 de manière à ce que darktable accepte les 512 Mo de mémoire graphique comme étant une quantité de mémoire suffisante.

opencl_memory_headroom

Ce paramètre contrôle la quantité de mémoire graphique (parmi celle qui est reportée) que darktable doit laisser libre pour les pilotes et l’écran. Comme pour les systèmes AMD/ATI nous n'avons, de toutes manières, que la moitié de la mémoire disponible, on peut mettre cette valeur à 0. De cette manière, les 512 Mo pourront être utilisés par darktable.

opencl_avoid_atomics

Les opérations atomiques d’OpenCL sont une manière particulière d’effectuer la synchronisation de données. Elles ne sont utilisées qu’avec certains noyaux. Malheureusement, certains (la plupart ?) dispositifs AMD/ATI sont très lents dans le traitement atomique. Il est préférable de traiter les modules concernés par la CPU plutôt que d’accepter cette voie de code GPU très lente. Définissez ce paramètre à TRUE si vous rencontrez un traitement lent de modules comme : ombres et hautes lumières, monochrome, contraste local ou mappage global des tonalités ou encore si vous avez des blocages intermittents du système.

Ces recommandations ne s’appliquent pas aux cartes Radeon plus récentes des séries HD7xxx avec l’architecture GCN. En plus d’être très rapides en termes de calcul GPU, elles fonctionnent normalement directement. Vous ne devrez vous intéresser qu’à quelques options d’optimisation qui sont décrites dans la section suivante.