OpenCl

Der Hintergrund

Die Verarbeitung von hochauflösenden Bildern ist eine herausfordernde Aufgabe, die moderne Rechner erfordert. Hinsichtlich Speicherbedarf und Prozessorleistung kann bereits die optimale Bearbeitung eines typischen 15, 20 oder 25 Megapixel Bilds einen Rechner schnell an seine Grenzen bringen.

Die Anforderungen von Ansel sind da keine Ausnahme. Alle Berechnungen werden in 4 x 32-Bit Gleitkommazahlen ausgeführt. Das ist langsamer als die “gewöhnliche” 8- oder 16-Bit Integer-Algebra, aber alle Probleme mit Tonwertabbrüchen oder Informationsverlust werden beseitigt.

Wie OpenCl funktioniert

Wie du dir vorstellen kannst, kann die Architektur von Grafikprozessoren deutlich variieren. Es gibt unterschiedliche Hersteller und sogar unterschiedliche Generationen von GPUs des gleichen Herstellers können nicht vergleichbar sein. Gleichzeitig legen die Grafikprozessorhersteller normalerweise nicht alle Hardwaredetails gegenüber der Öffentlichkeit offen. Eine dieser Konsequenzen ist, die Notwendigkeit proprietäre Treiber unter Linux zu benutzen, wenn du deine Grafikkarte voll ausnutzen willst.

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.

Aktivierung von OpenCL in Ansel

Das Brauchen von OpenCL in Ansel erfordert es, dass dein Computer mit einer geeigneten Grafikkarte mit den erforderlichen Libraries ausgerüstet ist. Die meisten modernen Grafikkarten von NIVIDIA und AMD kommen mit vollem Support für OpenCL. Der Compiler für OpenCL wird normalerweise als Teil des proprietären Grafik-Treibers und wird als dynamische Library mit Namen libOpenCL.so gebraucht. Diese Library muss in einem Ordner sein, wo diese vom System-Linker deines Systems gefunden werden kann.

OpenCL konfigurieren

Die riesige Vielfalt der Systeme und deutliche Unterschiede zwischen OpenCL-Anbietern und Treiberversionen macht es unmöglich einen umfassenden Überblick darüber zu geben, wie man OpenCL konfiguriert. Wir können dir nur ein Beispiel geben, in diesem Fall für den NVIDIA-Treiber 331.89 für Ubuntu 14.04. Wir hoffen, dass dies als eine grundlegende Anleitung dienen kann und dir helfen wird, spezifische Probleme für dein Setup zu lösen.

Der prinzipielle OpenCL-Funktionsablauf sieht so aus:

Ansel > libOpenCL.so > libnvidia-opencl.so.1 > kernel-Treibermodul(e)> GPU

Mögliche Probleme und Lösungen

Ansel entdeckt OpenCL-Laufzeitfehler automatisch. Nach einem Fehler wird alles erneut über die CPU berechnet. Das verringert zwar die Verarbeitungsgeschwindigkeit, sollte aber nicht das Endergebnis ändern.

Es gibt unterschiedliche Gründe, warum OpenCL während der Initialisierung fehlschlägt. OpenCL hängt von den Hardware-Anforderungen ab und von gewissen Treibern und Bibliotheken. Zusätzlich müssen alle diese hinsichtlich Hersteller, Modell und Revisionsnummer zusammenpassen. Falls etwas nicht stimmt (z.B. der Grafiktreiber, als Kernel Modul geladen, passt nicht zur Version der libOpenCL.so), wird eine OpenCL-Unterstützung wohl nicht verfügbar sein.

Scheduling-Profil

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).
Sehr schnelle GPU
Mit diesem Scheduling-Profil verarbeitet Ansel das Hauptbildfenster und Vorschaufenster auf dem Grafikprozessor sequentiell. Dies ist die bevorzugte Einstellung für Systeme, bei denen die GPU die CPU leistungsmäßig deutlich übertrifft.
Mehrere GPUs
Diese Einstellung betrifft Systeme mit mehreren Grafikprozessoren, deren Performance sich nicht deutlich voneinander unterscheidet. Immer wenn ein Verarbeitungsjob gestartet wird, benutzt Ansel eine zum jeweiligen Zeitpunkt gerade unbeschäftigte GPU, aber nicht die CPU. Benutzer mit verschiedenen GPUs brauchen eine bessere Kontrolle hinsichtlich der relativen Priorität der GPUs. Sie werden besser mit der Auswahl “Standard” Profil zurechtkommen und dann über den “opencl_device_priority” Konfigurationsparameter (siehe mehrere GPUs) ihr System feineinstellen.

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.

Mehrere Einheiten

Die Disposition von OpenCL-Einheiten kann auf den meisten Systemen mit den Einstellungen von “OpenCL scheduling profile” optimiert werden. Wenn aber dein System mit mehr als einer GPU ausgestattet ist, solltest du die entsprechenden Prioritäten der Einheiten manuell setzen. Um das zu tun, musst du das “Standard” Disposition-Profil setzen und die Einstellungen in den Konfigurations-Parametern der “opencl_device_priority” ändern.

Es ist wichtig zu verstehen, wie Ansel die OpenCL-Geräte nutzt. Jede Bearbeitungsfolge für ein Bildes, d.h. die Umwandlung einer Eingabe mit einem Verlaufsstapel in die abschließende Ausgabe, wird in einer Pixelpipe durchgeführt. Es gibt vier verschiedenen Arten von Pixelpipes in Ansel. Ein Typ ist verantwortlich für die Erzeugung der zentralen Großansicht des Bildes, ein weiterer erzeugt das Vorschaubild (in der Navigation). Eine dieser Pixelpipes kann jederzeit laufen, und die Pixelpipes für die Großansicht und das Vorschaubild gleichzeitig. Zusätzlich können gleichzeitig mehrere Pixelpipes Dateiexporte oder Vorschaubilder erzeugen. Falls ein OpenCL-Gerät vorhanden ist, wird Ansel dieses dynamisch einer spezifische Pixelpipe für eine Berechnungn zuweisen und nachher wieder freigeben.

OpenCL funktioniert bei mir immer noch nicht

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..

Viele der möglichen Probleme treten nur bei bestimmten Kombinationen dieser Faktoren auf. Wir bitten um Verständnis, dass Ansel-Entwickler nur ein kleiner Teil dieser Varianten zur Verfügung steht und daher möglicherweise ein spezifisches Problem nicht gelöst werden kann. Es ist uns nicht möglich ein Problem zu beheben, das wir nicht reproduzieren können.

Search

You can also ask Chantal, the AI search engine.