Kann FPGA einen Multi-Core-PC übertreffen?

Ich verstehe nicht, wie FPGA verwendet werden kann, um einen Algorithmus zu beschleunigen. Derzeit lasse ich einen zeitaufwändigen Echtzeitalgorithmus auf einem Quadcore-Laptop laufen, damit vier Berechnungen parallel durchgeführt werden können.

Ich wurde kürzlich darauf aufmerksam gemacht, dass FPGA möglicherweise eine noch bessere Leistung erbringt. Ich verstehe nicht, wie das funktioniert. Kann jemand erklären, wie FPGA einen Algorithmus beschleunigt und ob ich auf eine Xilinx- oder Altera-FPGA-Lösung umsteigen oder die Berechnungen auf meinem Quadcore-Laptop fortsetzen sollte.

Zusätzliche Details: Der Algorithmus betreibt 20 künstliche neuronale Netze unter Verwendung von Eingaben, die durch die Wavelet-Pakettransformation eingespeist werden

Vielen Dank an alle für die tollen Antworten.

Haben Sie darüber nachgedacht, den Algorithmus auf einer Desktop- (oder Server-) CPU auszuführen? Diese sind in der Regel schneller als Laptop-CPUs. (Um einen konstanten Faktor, aber immer noch schneller.)
Denken Sie darüber nach, die GPU für die Verarbeitung neuronaler Netzwerke zu verwenden. GPUs haben viele Einheiten, die Gleitkommazahlen parallel multiplizieren können.
@ntoskrnl Ich gehe davon aus, dass er eine i5- oder bessere CPU (4 Kerne) hat, sodass die Leistung auf dem Desktop oder Server nur proportional zur Taktfrequenz ist. Vielleicht kann er auf Xeon dank riesigem Cache und besserer Speicherbandbreite nur wenig (20%?) Leistung gewinnen, aber das ist nicht viel.
Welche CPU hast du?
Interessantes Timing der Fragen, wir haben eine ähnliche Frage zu networkengineering.SE erhalten

Antworten (5)

Ein Kollege von mir hat dies verglichen und kam zu dem Schluss, dass FPGAs einen PC übertreffen würden, sobald Sie mehr als etwa 100 unabhängige , ganzzahlige Aufgaben hätten, die in das FPGA passen würden. Für Gleitkommaaufgaben schlägt GPGPU FPGA durchweg. Für engen Multithreading- oder SIMD-Betrieb sind CPUs extrem optimiert und laufen mit einer höheren Taktrate, als FPGAs normalerweise erreichen.

Die anderen Vorbehalte: Aufgaben müssen unabhängig sein. Wenn Datenabhängigkeiten zwischen Tasks bestehen, begrenzt dies den kritischen Pfad der Berechnung. FPGAs eignen sich gut für boolesche Auswertungen und ganzzahlige Mathematik sowie für Hardwareschnittstellen mit niedriger Latenz, jedoch nicht für speicherabhängige Workloads oder Gleitkommazahlen.

Wenn Sie die Arbeitslast im DRAM halten müssen, ist dies eher der Engpass als der Prozessor.

Um zu entscheiden, ob DRAM die Grenze ist, muss man auch wissen, dass FPGAs viele kleine verteilte RAMs haben (z. B. 500 unabhängige 9-kbit-RAM-Blöcke), die alle im selben Taktzyklus lesen/schreiben können.

Ein FPGA funktioniert völlig anders als ein Prozessor.

Für einen Prozessor schreiben Sie Software, die der Hardware sagt, was sie tun soll. Auf einem FPGA beschreibt man intern „wie die Hardware aussehen soll“. Es ist, als würden Sie einen speziell für Ihren Algorithmus hergestellten Chip herstellen.

Das beschleunigt vieles und kann den Stromverbrauch senken. Aber es hat seine Nachteile: Die Entwicklung dauert viel länger und ist viel komplizierter. Sie müssen völlig anders denken und können Algorithmen, die in Software funktionieren, nicht direkt verwenden.

Für künstliche neuronale Netze ist das FPGA eine gute Wahl. Auf diesem Gebiet wird viel geforscht.

Tatsächlich wird die FPGA-Entwicklung oft mit Sprachen wie Verilog oder VHDL durchgeführt, die eher das Verhalten als die Implementierung beschreiben – eine Tatsache, die manchmal nützlich ist, aber manchmal das Design asynchroner sequentieller Logik erheblich erschweren kann. Wenn man Implementierungen spezifizieren würde, wären die Ausbreitungsverzögerungen einigermaßen konsistent, aber in Verhaltenssprachen ist nicht einmal garantiert, dass sie positiv sind . Das Wichtigste beim FPGA-Design ist, dass die Sprachen es sehr einfach machen, viele (möglicherweise Hunderte oder Tausende) verschiedene Teile des Chips gleichzeitig einfache Verhaltensweisen ausführen zu lassen.

Es hängt viel vom Algorithmus ab, aber das Prinzip lässt sich ganz einfach erklären.

Angenommen, Ihr Algorithmus muss viele 8-Bit-Zahlen summieren. Ihre CPU muss weiterhin jede Anweisung abrufen, die Operanden aus dem RAM oder dem Cache-Speicher abrufen, die Summe ausführen, das Ergebnis im Cache speichern und mit der nächsten Operation fortfahren. Die Pipeline hilft, aber Sie können nur so viele Operationen gleichzeitig ausführen, wie Sie Kerne haben.

Wenn Sie ein FPGA verwenden, können Sie eine große Anzahl einfacher Addierer implementieren, die parallel arbeiten und vielleicht Tausende von Summen parallel bearbeiten. Obwohl eine einzelne Operation mehr Zeit in Anspruch nehmen kann, haben Sie ein enormes Maß an Parallelität.

Sie können auch eine GPGPU verwenden, um ähnliche Aufgaben zu erledigen, da sie auch aus vielen einfacheren Kernen bestehen.

GPGPU ist eine großartige Eingabe für die Verwendung von neuronalen Netzwerken!
Es gibt auch neurale Netzwerk-ASICs. Intel hat in den 80er Jahren einen entwickelt, der 16 Neuronen implementierte.
@LiorBilia Nun, ich weiß nichts über sie :). Ich habe noch nie mit neuronalen Netzen gearbeitet und sehr wenig mit FPGA
Das neuronale Netzwerk von @clabacchio Software ist ein Programm, das hauptsächlich Operationen mit Gleitkommazahlen multipliziert und vergleicht. Mit meistens meine ich... 95% oder mehr.
Eine herkömmliche CPU kann ziemlich gut viele 8-Bit-Zahlen zusammenzählen; Auf einer schnellen Maschine würde die Ausführungszeit von den Kosten für das Abrufen von Daten aus dem Speicher dominiert (99 % der Codeabrufe würden von catch kommen). Ein interessanteres Beispiel wäre die Arbeit mit Daten, die unter Verwendung eines Schemas codiert sind, das eher "ungewöhnliche" Anordnungen oder Permutationen von Bits erfordert. Wenn beispielsweise ein Teil der Video-Sampling-Daten verschachtelte Bits für Rot, Grün und Blau zurückgibt, könnte ein FPGA die Bits leicht neu anordnen; eine herkömmliche CPU hätte deutlich mehr Probleme.

Es gibt ungefähr 3 Spezialisierungsstufen für Computerausrüstung:

Die CPU (wie in Ihrem Laptop) ist die allgemeinste von allen. Es kann alles, aber diese Vielseitigkeit hat den Preis einer langsamen Geschwindigkeit und eines hohen Stromverbrauchs. CPU wird unterwegs programmiert, die Befehle kommen aus dem RAM. Programme für die CPU sind schnell, billig und einfach zu schreiben und sehr einfach zu ändern.

FPGA (was Field Programmable Gate Array bedeutet) ist die mittlere Ebene. Wie der Name schon sagt, kann es "vor Ort" programmiert werden, dh außerhalb einer Fabrik. FPGA wird normalerweise einmal programmiert, dieser Prozess kann als Aufbau seiner internen Struktur beschrieben werden. Nach diesem Vorgang verhält es sich wie ein winziger Computer, der auf die eine Aufgabe spezialisiert ist, die Sie ihm ausgewählt haben. Aus diesem Grund kann es besser abschneiden als eine generische CPU. Das Programmieren von FPGAs ist sehr schwierig und teuer, und das Debuggen ist sehr schwierig.

ASIC (was Application Specific Integrated Circuit bedeutet) ist der ultimative Spezialist. Es ist ein Chip, der für eine und nur eine Aufgabe entwickelt und hergestellt wurde – eine Aufgabe, die er extrem schnell und effizient erledigt. Es gibt keine Möglichkeit, ASIC neu zu programmieren, es verlässt die Fabrik vollständig definiert und ist nutzlos, wenn seine Aufgabe nicht mehr benötigt wird. Das Entwerfen von ASICs ist etwas, das sich nur große Unternehmen leisten können, und das Debuggen ist ziemlich unmöglich.

Wenn Sie in „Kernen“ denken, dann sehen Sie es so: CPUs haben 4, 6, vielleicht 8 große Kerne, die alles können. ASICS haben oft Tausende von Kernen, aber sehr kleine, die nur eine Sache können.

Sie können sich die Bitcoin-Mining-Community ansehen. Sie machen SHA256-Hashes.

  • CPU Core i7: 0,8-1,5 M Hash/s
  • FPGA: 5–300 Millionen Hash/s
  • ASIC: 12000M Hash/s pro winzigem Chip, 2000000M (ja, diese 2T) Hash/s für ein 160-Chip-Gerät

Natürlich kosten diese ASIC-Babys in Massenproduktion fast 2000 Dollar, aber es gibt Ihnen eine Vorstellung davon, wie ein Tausendsassa gegen einen Spezialisten abschneiden kann.

Die einzige Frage ist: Kann FPGA Ihnen mehr Einsparungen bringen, als die Entwicklung kosten würde? Anstatt es auf EINEM Laptop auszuführen, können Sie natürlich versuchen, es auf 20 PCs auszuführen.

Hashing ist jedoch ein ganz besonderer Fall; Beachten Sie, dass kryptobasierte Coins (absichtlich) durch spezialisierte Hardware nicht sehr beschleunigbar sind.
& ASIC-Debugging wird typischerweise in der Simulation vor dem Versand an die Fertigung durchgeführt. Von der Spezifikation bis zur Fertigung vergehen also in der Regel 6 Monate oder mehr. Die Diagnose von Fehlern nach der Herstellung ist ... teuer, aber nicht unmöglich.
Und obwohl es schwierig ist, tatsächlich sehr, sehr schwierig sein kann, gibt es Dinge wie Boundary Scan, JTAG-Test und direkte Techniken mit FIB usw. Es ist also alles andere als unmöglich, sie zu debuggen, Sie müssen nur wissen, was Sie tun . Heutzutage bezieht sich ASIC mehr auf einen Design-Flow (HDL, Synthesis, P&R) als auf ein tatsächliches Gerät, da die meisten Geräte ASICs sind, einschließlich solcher Dinge wie ARM-Prozessoren.
@ pjc50 Ja, das war mein Punkt - in besonderen Fällen ist der Geschwindigkeitsunterschied enorm. Aber verschlüsseln Sie Asics immer noch pwn CPUs und GPUs. Nicht um den Faktor Million (wie bei sha), aber immer noch weit über 100.
@placeholder ja, aber selbst wenn Sie den Fehler finden, nützen all die bereits hergestellten Chips nicht viel. Ich meinte "Debuggen" wie "den Fehler entfernen", nicht nur "hier ist er".

Ja, FPGA kann moderne CPUs (wie Intel i7) bei einigen spezifischen Aufgaben übertreffen, aber es gibt einfachere und billigere Methoden, um die Leistung neuronaler Netzwerke zu verbessern.

Mit billiger - ich meine den Gesamtaufwand, nicht die FPGA-IC-Kosten, sondern auch einen sehr schnellen Speicher für FPGA (Sie würden ihn für ein neuronales Netzwerk benötigen) und den gesamten Entwicklungsprozess.

  1. Verwenden Sie SSE - Ich habe ziemlich einfache Implementierungen neuronaler Netzwerke mit 2-3x besserer Leistung gesehen. Dies könnte eine gute Idee sein, wenn Sie keine dedizierte GPU in Ihrem Laptop haben.

    Verbesserung der Geschwindigkeit neuronaler Netze auf CPUs von Vincent Vanhoucke und Andrew Senior

  2. Verwenden Sie GPGPU (Allzweck-Computing auf Grafikprozessoren) – ich denke, Sie können eine 100- bis 200-fache Leistungssteigerung auf einer Laptop-GPU der Mittelklasse wie der GeForce 730M erreichen.

    Hier ist die Implementierung eines neuronalen Netzwerks (und kostenloser Code). Es verwendet Nvidia CUDA.

    Der GPGPU-Ansatz ist sehr skalierbar, wenn Sie irgendwann feststellen, dass Sie mehr Rechenleistung benötigen, können Sie einfach einen Desktop-Computer mit einer stärkeren GPU oder sogar Nvidia Tesla K80 mit 4992 Kernen verwenden (das ist teuer).

Das Problem hier ist, Leistung zu definieren. Wenn wir schneller meinen, dann ja, FPGA kann schneller sein als normale CPUs. FPGA sind jedoch nicht so flexibel wie die CPU. Sie sind so konzipiert, dass sie nur eine vordefinierte Aufgabe effizient ausführen. Das Ausführen einer anderen Aufgabe würde bedeuten, dass die interne Verkabelung geändert und tatsächlich ein anderes FPGA implementiert wird