Moderne Bildverarbeitungs-Software verteilt die Aufgaben zwischen CPU und GPU Die GPU als Co-Prozessor der CPU

Eine GPU des Typs GeForce3 Ti 200 von Nvidia
Eine GPU des Typs GeForce3 Ti 200 von Nvidia

Dank leistungsfähiger Software lassen sich Bildverarbeitungs-Algorithmen mittlerweile von der CPU im Rechner zur GPU auf der Grafikkarte auslagern, sofern sie hochparallel aufgebaut sind. Für sequentielle Abläufe eignen sich GPUs jedoch nicht, so dass CPUs in der Bildverarbeitung auch künftig ihre Berechtigung haben werden.

Die Abarbeitung von Bildverarbeitungs-Algorithmen ist meist sehr rechenaufwändig. Um die Aufgaben in der vorgegebenen Zeit zu bewältigen, reicht die Leistung der CPUs (Central Processing Units) in den Bildverarbeitungs-PCs zwar häufig aus, zumal die Rechenleistung der Bausteine permanent wächst. Dennoch gibt es aber viel schnellere Wege, etwa die Verteilung der Rechenaufgaben auf mehrere Multicore-Prozessoren oder die Nutzung spezialisierter FPGAs. Eine weitere Methode ist es, Teile der Bildverarbeitung in den schnellsten im System vorhandenen Prozessor auszulagern, nämlich in die GPU (Graphics Processing Unit) auf der Grafikkarte des PCs.

In Bildverarbeitungs-PCs, die über eine Grafikkarte und damit über eine GPU verfügen, kann ein Parallel Processing von CPU und GPU stattfinden. Beide Bausteine übernehmen dann ganz bestimmte Funktionen: »Die CPU steuert die Abläufe und vergibt Aufgaben an die GPU, so dass die GPU quasi als Co-Prozessor der CPU zu sehen ist«, erläutert Alexander Balz, Entwicklungsleiter von IDS Imaging Development Systems. »Die CPU sorgt für die Bildaufnahme und die Kommunikation mit den Kameras. Sie übergibt Aufgaben oder Teilaufgaben der Bildverarbeitung an die GPU und übernimmt die Weiterverarbeitung der Ergebnisse bzw. Teilergebnisse.« Im konkreten Fall des Treibers für die »uEye«-Kameras von IDS übernehme die GPU das De-Bayering von Farbbildern und lasse sich beispielsweise für das Entrauschen des Bildes verwenden.

Bilder: 4

GPU oder CPU: Das sagen die Experten

In der Bildverarbeitung kann die Software mittlerweile die Aufgaben zwischen GPU und CPU verteilen. Für welche Aufgaben eignet sich die GPU besonders?

Verantwortlich für die Interaktion zwischen CPU und GPU ist jedoch letztlich die Software: »Welcher Baustein welche Funktionen übernimmt, bestimmt die Software - in unserem Fall die Bibliothek 'Common Vision Blox’ (CVB) - abhängig von der Aufgabenstellung«, verdeutlicht Martin Kersting, Technischer Direktor und Prokurist von Stemmer Imaging. »Beide Bausteine stehen zur Verfügung und arbeiten asynchron zueinander. Weil GPUs schneller rechnen können als CPUs, bietet es sich an, rechenintensive Operationen nach Möglichkeit von der GPU durchzuführen zu lassen.« Wenn die Anwendung aber beispielsweise einen wahlfreien Zugriff benötige, so lasse man besser die CPU arbeiten. »CVB GPU ist hier sehr flexibel, weil nicht einzelne Operatoren zur GPU ausgelagert werden, sondern rechenintensive Teile der Anwendung in Form einer Pipeline«, hebt Kersting hervor. »Funktionen zur Synchronisierung der Abläufe in GPU und CPU sind in CVB natürlich vorhanden.«

Was das parallele Arbeiten von CPU und GPU anbelangt, unterscheiden sich freilich die von den einzelnen Herstellern angebotenen Implementierungen: »Der Kunde muss im Einzelfall prüfen, ob es unterstützt wird«, betont Dr. Wolfgang Eckstein, Geschäftsführer von MVTec Software. »In unserer Bildverarbeitungs-Software 'Halcon’ beispielsweise ist Parallel Processing so realisiert, dass der Aufruf eines Operators für die CPU nach dem Aufruf eines Operators für die GPU automatisch parallel ausgeführt wird - auch ohne Thread-Programmierung. Daneben gibt es die Möglichkeit, zwei oder mehr Threads zu haben, wobei ein Thread die Operatoren auf der GPU steuert, während der andere Thread diejenigen Operatoren auf der CPU ausführt, die für die GPU nicht geeignet sind.« In diesem Zusammenhang weist Eckstein auch auf die Möglichkeit hin, mehr als eine Grafikkarte zu verwenden, was 'Halcon’ unterstütze.