Heterogen oder homogen?

Heterogen oder homogen?

Prozessoren und Architekturen für die Highspeed-IBV

Bei einem Formel-1-Rennen muss jedes Detail stimmen, damit das eigene Auto als Sieger ins Ziel kommt. Die ‚Echtzeitbedingungen‘ sind dabei klar definiert. Und wie sieht es bei einem Bildverarbeitungssystem aus? Aus einem Megapixel mit 50fps werden in neuen Anwendungen ‚plötzlich‘ 4MP. Mit 87fps übertragen steigt die Datenrate von 50MB/s auf 1.094MB/s, das heißt um einen Faktor von fast 22.
Hinzu kommen komplexere Algorithmen, da die Anforderungen an Robustheit und Intelligenz von Bildverarbeitungslösungen zunehmen und oft Voraussetzung für die Akzeptanz sind. Angenommen die Mathematik ist mit dem Faktor vier dabei, so steigt der Bedarf an Rechenleistung um den Faktor 88. Die Prozessoren werden zwar schneller, aber abhängig vom Prozessorhersteller waren die Leistungssteigerungen der letzten Jahre nicht so, wie das Mooresche Gesetz vermuten ließe. Somit gibt es genügend Gründe, über die Auswahl von Prozessoren und Architekturen ein paar Worte zu verlieren.

Die richtige Architekur?

Homogene Architekturen skalieren Prozessoren gleichen Typs. Ein Beispiel sind im Servermarkt die Intel-Xeon-Prozessoren, bei denen z.B. zwei Prozessoren auf einem Motherboard arbeiten. Auch High-Performance-Computer werden überwiegend homogen aufgebaut. Bei heterogenen Architekturen wird je nach Aufgabenstellung der Prozessortyp gemischt. Beispiele hierfür sind:

  • • Mehr-Kern-Prozessoren mit z.B. vier ARM- und acht DSP-Prozessoren (z.B. Texas Instruments)
  • • FPGAs bestehend aus FPGA- und ARM-Prozessor(en) (Altera, Xilinx)
  • • x86-PC mit einem FPGA als Coprozessor auf dem Framegrabber
  • • x86-PC mit einer GPU-Karte
  • • x86-Prozessoren mit CPU und GPU (z.B. AMD)
  • • Mehr-Kern-ARM mit GPU (z.B. NVidea)

Fragt man Chip-Experten, so sagen diese, dass eine auf Performance und niedrigem Stromverbrauch getrimmte Architektur nur heterogen machbar ist. Dies ist auch logisch, da Prozessoren unterschiedliche Eigenschaften haben, auf denen Betriebssysteme und Algorithmen unterschiedlich schnell ablaufen. So ist ein ARM-Kern gut für Linux OS geeignet, nutzt jedoch für die Codierung von Bilddaten in einer IP-Kamera seinen DSP-Nachbarn. Ein x86-Prozessor ist schnell und läuft mit mehreren Betriebssystemen. Soll aber aus der Anwendung ein kompakter Sensor werden, so geht dieser Prozessortyp thermisch auf K.O. Fragt man dagegen Softwareentwickler, so träumen diese von homogenen Strukturen, einem Compiler, der automatisch alle Aufgaben intelligent verteilt und dabei robuste Programme erzeugt. Jedoch klappt es bei den heute überwiegend eingesetzten Mehr-Kern-Prozessoren im Alltag oft genug nicht, dass Compiler, OS und Prozessor automatisch perfekt harmonieren. Und dann noch ein heterogenes System?

Verrechnung hoher Datenraten

Die Aufgabe bei Highspeed-Anwendungen ist es in der Regel, die Kameradaten in Echtzeit zu verrechnen. 87fps sind in heutigen Maschinen eher Mittelklasse, schnell müssen auch mal 200fps verrechnet werden. 1GByte/s ‚wegzurechnen‘ ist jedoch eine Herausforderung, bei der die Gesamtkosten nicht in die Höhe schnellen dürfen. 1GB/s=1GP/s, das heißt für jedes Pixel steht im Mittel die Zeit von 1ns zur Verfügung. Wird der Prozessor mit z.B. 3GHz getaktet, so darf die Anwendung nur drei Prozessorzyklen rechnen. Abseits möglicher Flaschenhälse auf den Datenbussen oder Speichern sind drei Zyklen quasi nichts. Daher müssen Ideen her, damit die hohe Datenrate beherrscht wird. Im Folgenden sollen kurz verschiedene Varianten bewertet werden:

FPGA-x86: Sozusagen der klassische Ansatz; FPGAs rechnen parallel, programmiert in VHDL und parametriert über ein blockbasiertes Werkzeug. Mehr Code bedeutet größere und damit teurere FPGAs sowie langes Kompilieren. Er ist gut geeignet, wenn die Vorverarbeitung und damit die Reduktion der Bilddaten nicht häufig geändert werden muss. Dies ist aber bei den heutigen flexiblen Maschinen immer seltener der Fall.

x86-GPU: Die GPUs sind sehr schnell, aber nicht für jeden Algorithmus geeignet. Manche Bibliotheken (z.B. Halcon) unterstützen GPUs. Ansonsten erfolgt die Programmierung in Cuda oder Open CL. Sehr leistungsstarke GPUs benötigen viel Strom und müssen daher aktiv gekühlt werden. Aufgrund ihrer Herkunft sind sie i. Allg. nicht langzeitverfügbar. Anders sieht es bei in CPUs integrierten GPUs aus. Diese bringen nicht die Performance einer Grafikkarten-GPU, könnten aber einen Kompromiss darstellen. Für Bildverarbeitung ausgelegte Embedded-Rechner gibt es inzwischen mit CPU-GPU-Verbund.

Dual-Mehr-Kern-DSPs: Neueste Prozessoren mit bis zu acht DSP-Kernen – inkl. starker Gleitkomma-Rechenleistung – können eine Lösung sein, zumal sie per Prozessor-Highspeed-Interface auch mehrfach auf dem Board vorhanden sein können. Für das oben genannte Beispiel mit 1GP/s bedeutet dies: Verteilt auf zweimal acht Kerne sind es pro Kern 62,5MB/s an Datenrate. Programmiert wird in C++ mit einer Eclipse-basierten Entwicklungsumgebung. Ergänzend gibt es die Prozessoren in Kombination mit Zwei-Kern-x86-Prozessoren.

FPGA-ARM: Da der ARM innerhalb eines FPGAs nicht die komplexen Aufgaben übernehmen kann, muss die Rechenleistung im FPGA stattfinden mit den dafür geschilderten Vor- und Nachteilen. Es können kompakte Systeme aufgebaut werden. Bei 1GPixel/Sekunde wird es aber stark von der FPGA-Größe abhängig sein, ob der Ansatz auch funktioniert.

Mehrfach x86: Per PCIe können x86-Prozessoren/-PCs verbunden werden, entwickelt wird dann auf mehreren Maschinen. Allerdings muss der Datenaustausch organisiert und programmiert werden. Insgesamt wird der Systemaufbau mächtig und stromhungrig. Vorteilhaft ist aber, dass alles mit den typischen Microsoft-Werkzeugen entwickelt wird.

Seiten: 1 2Auf einer Seite lesen

Das könnte Sie auch Interessieren