multiples périphériques

Sur la plupart des systèmes, la planification des périphériques OpenCL peut être optimisée en utilisant le réglage du «profil de planification OpenCL». Cependant, si votre système est équipé de plus d’un GPU, vous pourriez souhaiter fixer manuellement la priorité relative des périphériques. Pour ce faire, vous devez sélectionner le profil de planification «par défaut» et définir vos paramètres dans le paramètre de configuration «opencl_device_priority».

Il est important de comprendre comment darktable utilise les périphériques OpenCL. Chaque séquence de traitement d’une image – pour convertir une entrée en une sortie finale en utilisant un certain historique – est exécutée dans ce qu’on appelle un pipeline graphique. Il y a quatre types de pipelines graphiques différents dans darktable. Un type est responsable du traitement de l’image du panneau central (ou vue complète) dans le mode chambre noire, un autre pipeline graphique traite l’image de prévisualisation de la fenêtre de navigation. Il peut y avoir une instance de chacun de ces deux pipelines graphiques en cours d’exécution à un instant donné, avec le pipeline graphique de prévisualisation et celui de l’image complète tournant en parallèle. De plus, il peut y avoir plusieurs pipelines graphiques tournant en parallèle pour effectuer l’exportation et il peut y avoir plusieurs pipelines graphiques qui génèrent les miniatures. Si un dispositif OpenCL est disponible, darktable va l’allouer dynamiquement à un pipeline graphique spécifique pour une exécution et le libérer ensuite.

La demande en calcul dépend beaucoup du type de pipeline. L’image de prévisualisation et les miniatures ont une basse résolution et peuvent être traitées rapidement. Par contre l’image du panneau central est plus gourmande. Le pipeline réalisant l’exportation complète l’est encore plus.

Le paramètre de configuration «opencl_device_priority» contient une chaîne de caractères ayant la structure suivante : a,b,c.../k,l,m.../o,p,q.../x,y,z.... Chaque lettre représente un périphérique OpenCL spécifique. Il y a quatre champs dans la chaîne des paramètres séparés par une barre oblique, chacun représente un type de pipeline graphique. a,b,c...définit les périphériques qui seront autorisés à effectuer le traitement (complet) du pipeline graphique de l’image centrale. De la même manière, des périphériques comme k,l,m... peuvent traiter le pipeline graphique de prévisualisation, les périphériques o,p,q... le pipeline graphique d’exportation, et finalement les périphériques x,y,z... le pipeline graphique de traitement des miniatures. Un champ vide signifie qu’aucun périphérique OpenCL ne peut traiter ce type de pipeline graphique.

darktable possède un système de numérotation interne, où le premier périphérique OpenCL disponible recevra le numéro « 0 ». Les périphériques suivants seront numérotés consécutivement. Ce numéro, utilisé conjointement avec le nom du périphérique, est affiché lorsque vous démarrez darktable avec darktable -d opencl. Vous pouvez indiquer un dispositif soit par son numéro, soit par son nom (la casse et les espaces ne sont pas pris en compte). Si vous avez plus d’un dispositif ayant le même nom vous devrez utiliser les numéros de périphérique afin de les différencier.

Un indicateur de périphérique peut être précédé d’un point d’exclamation !, dans ce cas, le périphérique ne pourra pas exécuter ce pipeline graphique. Vous pouvez aussi utiliser un astérisque* comme joker, qui représentera tous les périphériques non encore mentionnés explicitement dans ce groupe.

L’ordre dans un groupe a une importance – darktable va lire la liste de la gauche vers la droite et lorsqu’il cherche à allouer un périphérique OpenCL à un pipeline graphique, il va balayer les périphériques dans cet ordre et prendra le premier périphérique libre qu’il trouvera

Si un pipeline est sur le point d’être lancé et si tous les GPUs du groupe correspondant sont occupés, darktable, par défaut, traite automatiquement l’image sur le CPU. Vous pouvez forcer le traitement sur GPU en préfixant la liste des GPUs autorisés par un signe plus +. darktable n’utilisera pas le CPU mais suspendra le traitement jusqu’à ce que le premier périphérique OpenCL soit disponible.

Le paramétrage par défaut de darktable pour «opencl_device_priority» is */!0,*/*/*.

Tout périphérique OpenCL détecté est autorisé à traiter l’image du panneau central. Le premier périphérique OpenCL (0) n’est pas autorisé à traiter le pipeline graphique de prévisualisation. En conséquence, s’il n’y a qu’un seul GPU sur votre système, le pipeline graphique de prévisualisation sera toujours traité par le CPU, réservant exclusivement votre unique GPU au panneau central contenant l’image qui demande davantage de ressources. Ceci est un paramétrage raisonnable pour la plupart des systèmes. Aucune restriction de ce type ne s’applique au pipeline de l’exportation et au pipeline des miniatures.

La valeur par défaut est un bon choix si vous n’avez qu’une carte. Si vous en avez plusieurs, cela reste un bon point de départ. Cependant, comme vos cartes peuvent avoir un niveau de puissance de calcul assez différent, cela vaut le coup de passer un peu de temps à optimiser votre liste de priorités.

Voici un exemple. Supposons que nous ayons un système avec deux périphériques, une Radeon HD7950 rapide et une GeForce GTS450 plus ancienne et plus lente. darktable (démarré avec darktable -d opencl) signalera les appareils suivants :

[opencl_init] successfully initialized.
[opencl_init] here are the internal numbers and names of
                          OpenCL devices available to darktable:
[opencl_init]           0       'GeForce GTS 450'
[opencl_init]           1       'Tahiti'
[opencl_init] FINALLY: opencl is AVAILABLE on this system.

Ici, la GeForce GTS 450 est détectée comme le premier périphérique et la Radeon HD7950 («Tahiti») comme le second. Cet ordre ne changera normalement pas à moins que la configuration du matériel ou du pilote ne soit modifiée, mais il est préférable d’utiliser des noms de périphériques plutôt que des numéros pour être en sécurité.

Comme la GTS450 est plus lente que la HD7950, un «opencl_device_priority"» optimisé devrait ressembler à : !GeForce GTS450,*/!Tahiti,*/Tahiti,*/Tahiti,*.

La GTS450 est explicitement exclue du traitement de l’image centrale, ceci est réservé à «tous» les autres périphériques (c’est à dire la HD7950/Tahiti). A l’inverse, pour le pipeline graphique de prévisualisation, le Tahiti est exclu, de sorte que seul le GTS450 est autorisé à faire le travail.

Nous souhaitons que l’exportation des fichiers et la génération des miniatures se fassent sans toucher à rien. Cependant, darktable va d’abord vérifier que le dispositif Tahiti est libre parce qu’il est le plus rapide. Si cela n’est pas le cas, il va vérifier tous les autres périphériques – en fait, uniquement la GTS450.

translations