meerdere apparaten
De planning van OpenCL-apparaten kan op de meeste systemen worden geoptimaliseerd met behulp van de instellingen van het “OpenCL-planningsprofiel”. Als jouw systeem echter uitgerust is met meer dan één GPU, wil je misschien de relatieve apparaatprioriteit handmatig instellen. Om dit te doen, moet je het planningsprofiel “standaard” selecteren en de instellingen wijzigen in de configuratieparameter “opencl_device_priority”.
Het is belangrijk om te begrijpen hoe darktable OpenCL-apparaten gebruikt. Elke verwerkingsreeks van een afbeelding - om een invoer om te zetten in de uiteindelijke uitvoer met behulp van een geschiedenis - wordt uitgevoerd in een pixelpijp. Er zijn vier verschillende soorten pixelpijpen in darktable. Eén type is verantwoordelijk voor het verwerken van de centrale afbeelding (of volledige weergave) in de ontwikkelenmodus, een ander pixelpijp verwerkt de voorbeeldafbeelding (navigatievenster). Er kan op elk moment een van deze twee pixelpijpen actief zijn, waarbij de volledige en preview-pixelpijpen parallel lopen. Daarnaast kunnen er meerdere parallelle pixelpijpen zijn die bestandsexports uitvoeren, evenals meerdere parallelle pixelpijpen die miniaturen genereren. Als een OpenCL-apparaat beschikbaar is, wijst darktable dit dynamisch toe aan één specifieke pixelpijp voor één run en geeft het deze daarna vrij.
De rekentechnische vraag varieert aanzienlijk, afhankelijk van het type pixelpijp dat wordt uitgevoerd. De voorbeeldafbeelding en miniaturen hebben een lage resolutie en kunnen snel worden verwerkt, terwijl het verwerken van de centrale afbeelding veeleisender is. Een volledige export pixelpijp is nog veeleisender.
De configuratieparameter “opencl_device_priority” bevat een string met de volgende structuur: a,b,c.../k,l,m.../o,p,q.../x,y, z...
. Elke letter staat voor een specifiek OpenCL-apparaat. Er zijn vier velden in de parameterreeks, gescheiden door een schuine streep, die elk één type pixelpijp vertegenwoordigen. a,b,c...
definieert de apparaten die de centrale afbeelding (volledige) pixelpijp mogen verwerken. Evenzo kunnen apparaten k,l,m...
de voorweergave pixelpijp verwerken, apparaten o,p,q...
de export pixelpijpen en tenslotte apparaten x,y,z...
de minaturen pixelpijpen. Een leeg veld betekent dat geen enkel OpenCL-apparaat dit type pixelpijp mag bedienen.
darktable heeft een intern nummeringssysteem, waarbij het eerst beschikbare OpenCL-apparaat het nummer 0 krijgt. Alle verdere apparaten worden doorlopend genummerd. Dit nummer wordt samen met de apparaatnaam weergegeven als je darktable start met darktable -d opencl
. Je kan een apparaat specificeren op nummer of op naam (hoofdletters/kleine letters en witruimte doen er niet toe). Als je meer dan één apparaat met dezelfde naam hebt, moet je de apparaatnummers gebruiken om ze te onderscheiden.
Een apparaatspecificatie kan worden voorafgegaan door een uitroepteken !
, in welk geval het apparaat wordt uitgesloten van het verwerken van een bepaalde pixelpijp. Je kan ook een asterisk *
als jokerteken gebruiken, die alle apparaten vertegenwoordigt die niet eerder expliciet in die groep zijn genoemd.
Volgorde binnen een groep is van belang – darktable leest de lijst van links naar rechts en telkens wanneer het probeert een OpenCL-apparaat toe te wijzen aan een pixelpijp, scant het de apparaten in die volgorde, waarbij het eerste vrije apparaat wordt genomen dat het vindt.
Als een pixelpijp-proces wordt gestart en alle GPU’s in de bijbehorende groep zijn bezet, verwerkt darktable standaard automatisch het beeld op de CPU. Je kan GPU-verwerking afdwingen door de lijst met toegestane GPU’s vooraf te laten gaan door een plusteken +
. In dit geval zal darktable de CPU niet gebruiken, maar de verwerking onderbreken totdat het volgende toegestane OpenCL-apparaat beschikbaar is.
darktable’s standaard instelling voor “opencl_device_priority” is */!0,*/*/*
.
Elk gedetecteerd OpenCL-apparaat mag de afbeelding in het centrale afbeeldingweergave verwerken. Het eerste OpenCL-apparaat (0) mag de voorweergave-pixelpijp niet verwerken. Als er dus maar één GPU beschikbaar is op jouw systeem, wordt de voorweergave-pixelpijp altijd op de CPU verwerkt, waardoor jouw enkele GPU exclusief blijft voor de veeleisendere centrale afbeeldingweergave. Dit is een redelijke instelling voor de meeste systemen. Dergelijke beperkingen zijn niet van toepassing op export- en miniatuurpixelpijpen.
De standaardinstelling is een goede keuze als je slechts één apparaat hebt. Als je meerdere apparaten hebt, vormt dit een redelijk uitgangspunt. Aangezien jouw apparaten echter nogal verschillende verwerkingskracht kunnen hebben, is het zinvol om wat tijd te investeren in het optimaliseren van jouw prioriteitenlijst.
Hier is een voorbeeld. Laten we aannemen dat we een systeem hebben met twee apparaten, een snelle Radeon HD7950 en een oudere en langzamere GeForce GTS450. darktable (begonnen met darktable -d opencl
) zal de volgende apparaten rapporteren:
[opencl_init] succesvol geïnitialiseerd.
[opencl_init] hier zijn de interne nummers en namen van
OpenCL-apparaten beschikbaar voor darktable:
[opencl_init] 0 'GeForce GTS 450'
[opencl_init] 1 'Tahiti'
[opencl_init] EINDELIJK: opencl is BESCHIKBAAR op dit systeem.
Hier wordt de GeForce GTS 450 als eerste toestel gedetecteerd en de Radeon HD7950 (‘Tahiti’) als tweede. Deze volgorde zal normaal gesproken niet veranderen tenzij de hardware- of driverconfiguratie wordt gewijzigd, maar het is voor de zekerheid beter om apparaatnamen te gebruiken in plaats van nummers.
Omdat de GTS450 langzamer is dan de HD7950, kan een geoptimaliseerde “opencl_device_priority” er als volgt uitzien: !GeForce GTS450,*/!Tahiti,*/Tahiti,*/Tahiti,*
.
De GTS450 is expliciet uitgesloten van het verwerken van de centrale afbeelding pixelpijp; dit is voorbehouden aan “alle” andere apparaten (d.w.z. de HD7950/Tahiti). Omgekeerd is voor de voorweergave-pixelpijp de Tahiti uitgesloten, zodat alleen de GTS450 het werk mag doen.
Voor bestandsexport en het genereren van miniaturen willen we alle hens aan dek. Darktable moet echter eerst controleren of het Tahiti-apparaat beschikbaar is, omdat het sneller is. Als het niet beschikbaar is, dan worden alle andere apparaten – eigenlijk alleen de GTS450 – aangevinkt.