Vorheriger Beitrag: Lernen mit Crytek: Deshalb ist Crysis erfolgreich
Skalierende Filter: Nik Software setzt auf Multicore
Wir haben über das Thema schon mal berichtet: Datenparallelität, also das simultane Berechnen von unabhängigen Daten, wie sie beispielsweise in der Bildbearbeitung anfallen. Denn einem Pixelgebilde, das aus mehreren Millionen Bildpunkten besteht, ist es völlig wurscht, ob nun Bildpunkt 1 oder 599 oder 122.921 zuerst oder zuletzt manipuliert wird.
Daher steckt eine ganze Menge Multicore-Potenzial in der Manipulation von Bildern, vor allem dann, wenn es sich um große Digitalfotos handelt. Dabei ist die Parallelisierbarkeit völlig unabhängig vom Format, so dass Bilder im sogenannten RAW-Format genauso von parallelisierten Algorithmen profitieren wie JPEG- oder TIFF-Dateien.
Wie wichtig in solch einem Fall das optimale Zusammenspiel von Hard- und Software ist, hat unter anderem Nik Software erkannt, ein Anbieter von Bildbearbeitungstools, die sich an professionelle Fotografen und ähnliche Menschen richten. Eines der Highlight-Produkte von Nik Software nennt sich Silver Efex Pro. Dabei handelt es um einen Schwarzweiß-Filter für Adobe Photoshop und Apple Aperture, mit dem sich Farbbilder in S/W-Kunstwerke verwandeln lassen. Hierfür setzt Nik Software auf die eigene Manipulationstechnik U Point, die es erlaubt, anhand definierter Bildbereiche (sogenannter Kontrollpunkte) diese separat zu bearbeiten.
Für eine bestmögliche Skalierung von Silver Efex Pro auf Multicore-Plattformen musste Nik Software allerdings eine ganze Menge tun. Hierzu gehörte unter anderem eine gründliche Analyse des Quellcodes mit VTune Performance Analyzer, um die Hotspots, also die kritischen Programmstellen, zu identifizieren.
Anschließend haben die Software-Entwickler die verschiedenen technischen Möglichkeiten geprüft, mit welchen Methoden die vorhandene Datenparallelität optimal in entsprechende Algorithmen umgesetzt werden kann. In Frage kamen hierfür OpenMP, die Threading Building Blocks und eine selbst implementierte Lösung auf Basis von Boost und Posix Threads.
Die Wahl fiel am Ende auf die selbst implementierte Lösung, da sie ein Maximum an Kontrolle, Flexibilität und Portierbarkeit gewährleistet. Die fertige Implementation des Thread pool pattern erlaubt hierbei eine relativ problemlose Übersetzung der Algorithmen in eine parallele Formulierung sowohl unter Windows als auch auf dem Mac.
Und klar, anschließend musste noch auf Teufel komm raus debuggt werden, und zwar mit den passenden Tools wie dem Thread Checker und Thread Profiler. Damit der parallelisierte Quellcode auch wirklich optimal auf mehreren Threads sprich Prozessorkernen skaliert. Und die Mühe hat sich offensichtlich gelohnt: Das Fotomagazin “Foto Video Digital” aus dem Hause Chip hat Silver Efex Pro als eine der besten Bildbearbeitungsprogramme des Jahres 2008 gekürt. Na also!



Trackbacks & Pingbacks