OpenGL und OpenCL – Turbolader für ihre Bildbearbeitung?

Eine gebräuchliche Definition für heterogenes Computing ist die Integration einer Graphikeinheit auf dem gleichen Siliziumplättchen, auf dem auch die CPU sitzt, aber Adobe verwendet diesen Terminus nicht so eng. Stattdessen sucht Adobe nach Möglichkeiten, wie Adobe-Software möglichst alle im PC vorhandenen Computing-Ressourcen verwenden kann, und verwendet dieselben dann auch, sofern es Sinn macht. Adobe definiert heterogenes Computing laut eigener Aussage als ‘die Verwendung von unterschiedliche Befehlssätze und Ausführungsparadigmen im vorhandenen System, um dem Anwender die Arbeit zu erleichtern’.

Die neue Photoshop-Version CS6 demonstriert das auch bestechend. Der Multithreading-Pionier von anno dazumal hat sich in Richtung OpenGL-Support und jetzt auch OpenCL-Support weiterentwickelt, denn die Entwickler von Photoshop suchen fast schon fanatisch nach Möglichkeiten, vielbenutzte Programmfunktionen zu beschleunigen. Ihr Ziel ist es, den Arbeitsfluss des Programmanwenders niemals zu unterbrechen. Filter sollen im Idealfall in Echtzeit ablaufen, und ein typischer PC soll mit einem 30-lagigen, 30 Megapixel großen Bild noch locker zurande kommen. Historisch gesehen haben wir immer auf Fortschritte in der CPU-Technologie gewartet, damit Anwendungen schneller ablaufen, aber nach dem, was wir zuletzt von AMD und Intel gesehen haben, muss man da möglicherweise lange warten. Heutzutage kommen die größten Performanceschübe vom Einsatz mehrere Subsysteme, darunter an prominenter Stelle die GPU, aber auch schnelleren Datenbussen, mehr Parallelität etc.

Da unterschiedliche Algorithmen und variierende Rechenlasten in verschiedener Art und Weise von den einzelnen Hardwareeinheiten und APIs profitieren, sollten wir uns kurz mit den beiden APIs, die für die GPU-Beschleunigung verwendet werden können, beschäftigen. Photoshop CS6 beschleunigt die Unschärfe-Filtertools erstmals mit OpenCL, behält aber die bereits in früheren Versionen vorhandene OpenGL-Unterstützung bei und beschleunigt damit unter anderem Liquify, adaptive Weitwinkeltransformation, Warp, Puppet Warp, Beleuchtungseffekte und fast jeden 3D-Effekt (Schatten, Fluchtpunkt, Sketch, usw.), mit Ausnahme des Ray-Tracers. Auch das Ölfarbenfilter wird von OpenGL beschleunigt, während andere Funktionen wie zum Beispiel das im Hintergrund ablaufende Sichern per Multithreading beschleunigt werden, was vor allem bei großen Bildern zu einer spürbaren Beschleunigung führt.

Obwohl Adobe eine große Firma ist und Photoshop quasi als Industriestandard gilt, ist das Photoshop-Team bei Adobe überraschend klein: In Summe weniger als 60 Softwareentwickler und Qualitätssicherungsingenieure. In unseren Gesprächen mit Adobe fiel einmal der Satz: ‘Ein Erhöhen der Quantität an Hirnen erhöht nicht immer die Qualität von Software.’ Es scheint uns beachtenswert, dass es Adobe trotz der relativ überschaubaren Teamgröße geschafft hat, den Produktzyklus von 18 bis 24 Monaten auf 12 Monate zu beschleunigen. Ein schneller Produktzyklus kann aber bewirken, dass von einer Release bis zur nächsten Release neue Technologien, wie beispielsweise OpenCL, nur in relativ bescheidenem Umfang in das Programm aufgenommen werden.

Adobe hat uns zwei Scripts zum Messen der OpenCL- und der OpenGL-Performance zur Verfügung gestellt. Das Script zur Messung der OpenCL-Performance ruft logischerweise die Unschärfe-Galerie auf, denn nur diese wird derzeit per OpenCL beschleunigt. Wir haben einen allgemeinen Unschärfeeffekt auf eine 60,2 MB große PSD-Datei mit 5615 x 3744 Pixeln angewendet, und zwar in vier Varianten: Je zweimal im RGB- und im CMYK-Farbraum, und je zweimal mit einem Unschärfefaktor von 25 bzw. 300. Das Script führt jeden dieser vier Bearbeitungsschritte siebenmal durch und erzeugt eine CSV-Datei, die wir dann in Excel importiert haben, um die vier Durchschnittswerte zu ermitteln.

Adobe gab uns für das auf OpenGL basierende Liquify-Filter ein ähnliches Script, das keine Parametereinstellung aufwies.

Wir haben die GPU-Beschleunigung mit Hilfe der Optionen in Preferences > Performance > Graphics Processor Settings ein- bzw. ausgeschaltet. Dort gibt es dafür eine Checkbox ‘Use Graphics Processor’, die sich sowohl auf OpenGL als auch auf OpenCL bezieht. Mit der ‘Advanced Settings’ Schaltfläche, die ein Pop-Up-Fenster mit je einer Checkbox für OpenGL (nicht ganz eindeutig mit ‘Use Graphics Processor to Accelerate Computation’ betitelt) und OpenCL aufweist, hatten wir weniger Glück: Selbst als wir beide Optionen deselektierten, war OpenGL noch immer aktiviert.

Ebenfalls interessant...