opencl

de achtergrond

Het verwerken van afbeeldingen met een hoge resolutie is een veeleisende taak die een moderne computer vereist. In termen van zowel geheugen als CPU-kracht, kan jouw computer snel tot het uiterste gaan als je het beste uit een typische 15, 20 of 25 Megapixel afbeelding haalt.

De vereisten van Ansel zijn geen uitzondering. Alle berekeningen worden uitgevoerd op 4 x 32bit floating point getallen. Dit is langzamer dan “gewone” 8 of 16 bit integer algebra, maar elimineert alle problemen van tonale onderbrekingen of verlies van informatie.

hoe opencl werkt

Zoals je jou kan voorstellen, kan de hardware-architectuur van GPU’s aanzienlijk variëren. Er zijn verschillende fabrikanten en zelfs verschillende generaties GPU’s van dezelfde fabrikant zijn mogelijk niet vergelijkbaar. Tegelijkertijd onthullen GPU-fabrikanten normaal gesproken niet alle hardwaredetails van hun producten aan het publiek. Een van de gevolgen hiervan is de noodzaak om propriëtaire stuurprogramma’s onder Linux te gebruiken, als je volledig wilt profiteren van jouw grafische kaart.

Fortunately an industry consortium lead by The Khronos Group has developed an open, standardized interface called OpenCL, which allows your GPU to be used as a numerical processing device. OpenCL offers a C99-like programming language with a strong focus on parallel computing. An application that wants to use OpenCL will need OpenCL source code that it hands over to a hardware-specific compiler at run-time. This way applications can use OpenCL on different GPU architectures (even at the same time). All of the hardware “secrets” are hidden in this compiler and are normally not visible to the user (or the application). The compiled OpenCL code is loaded onto your GPU and – with certain API calls – it is ready to perform calculations for you.

opencl activeren in Ansel

Het gebruik van OpenCL in Ansel vereist dat jouw pc is uitgerust met een geschikte grafische kaart en dat deze over de vereiste bibliotheken beschikt. De meeste moderne grafische kaarten van NVIDIA en AMD worden geleverd met volledige OpenCL-ondersteuning. De OpenCL-compiler wordt normaal gesproken geleverd als onderdeel van het propriëtaire grafisch stuurprogramma en wordt gebruikt als een dynamische bibliotheek genaamd libOpenCL.so. Deze bibliotheek moet zich in een map bevinden waar deze kan worden gevonden door de dynamische linker van jouw systeem.

opencl configureren

De enorme diversiteit aan systemen en de duidelijke verschillen tussen OpenCL-leveranciers en stuurprogrammaversies maken het onmogelijk om een uitgebreid overzicht te geven van hoe OpenCL moet worden ingesteld. We kunnen jou alleen een voorbeeld geven, in dit geval voor NVIDIA-stuurprogrammaversie 331.89 op Ubuntu 14.04. We hopen dat dit een basisintroductie zal zijn en jou zal helpen bij het oplossen van eventuele problemen die specifiek zijn voor jouw installatie.

Het principe van de OpenCL-functiestroom is als volgt:

mogelijke problemen & oplossingen

Ansel detecteert automatisch OpenCL-runtime-fouten. Bij het detecteren van een fout, zal het vervolgens alles op de CPU opnieuw verwerken. Hoewel dit de verwerking vertraagt, mag dit het eindresultaat niet beïnvloeden.

Er kunnen verschillende redenen zijn waarom OpenCL tijdens de initialisatiefase zou kunnen mislukken. OpenCL is afhankelijk van hardwarevereisten en van de aanwezigheid van bepaalde stuurprogramma’s en bibliotheken. Bovendien moeten deze allemaal passen qua maker, model en revisienummer. Als iets niet past (bijv. jouw grafisch stuurprogramma (driver) – geladen als een kernelmodule – komt niet overeen met de versie van jouw libOpenCL.so), is OpenCL-ondersteuning waarschijnlijk niet beschikbaar.

planningsprofiel

Ansel can use the CPU and one or several OpenCL capable GPUs. Depending on the relative performance of these devices, users can choose among certain scheduling profiles to optimize performance. This is achieved by setting the configuration parameter Preferences > Processing > CPU, GPU, Memory > OpenCL scheduling profile, which offers the following choices:

default
If an OpenCL-capable GPU is found Ansel uses it for processing the center image view while the navigation preview window is processed on the CPU in parallel. This is the preferred setting for systems with a reasonably fast CPU and a moderately fast GPU. The exact allocation of devices to the various pixelpipe types can be finetuned with the “opencl_device_priority” configuration parameter (see multiple devices).
zeer snelle GPU
Met dit planningsprofiel verwerkt Ansel achtereenvolgens de centrale afbeeldingsweergave en het voorbeeldvenster op de GPU. Dit is de voorkeursinstelling voor systemen met een GPU die sterk beter presteert dan de CPU.
meerdere GPU’s
Deze instelling is van toepassing op systemen met meerdere GPU’s waarvan de relatieve prestaties niet significant verschillen. Wanneer een verwerkingstaak wordt gestart, gebruikt Ansel een momenteel niet-actieve GPU, maar niet de CPU. Gebruikers van systemen met verschillende GPU’s hebben meer controle nodig over hun relatieve prioriteit. Ze zouden beter het “standaard” profiel kunnen selecteren en hun systeem kunnen verfijnen met de “opencl_device_priority” configuratieparameter (zie meerdere apparaten).

On first start-up or after any detected change in the GPU configuration of your system Ansel tries to identify the best suited profile for you. You can change it at any time in Preferences > Processing > CPU, GPU, Memory.

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 Ansel 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 Ansel. 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 Ansel dit dynamisch toe aan één specifieke pixelpijp voor één run en geeft het deze daarna vrij.

opencl werkt nog steeds niet voor mij

As has been mentioned, OpenCL systems come with a huge variety of setups: different GPU manufacturers and models, varying amounts of GPU memory, different drivers, different distributions etc..

Veel van de potentiële problemen zullen zich alleen voordoen bij zeer specifieke combinaties van deze factoren. Aangezien de Ansel-ontwikkelaars slechts toegang hebben tot een klein deel van deze variaties, moet je begrijpen dat we jouw specifieke probleem mogelijk niet kunnen oplossen. We kunnen niet veel doen als we jouw probleem niet kunnen reproduceren.

Search

You can also ask Chantal, the AI search engine.