Kann FPGA einen Multi-Core-PC ausführen?

20

Ich verstehe nicht, wie man mit FPGA einen Algorithmus beschleunigen kann. Momentan verwende ich einen zeitaufwändigen Echtzeitalgorithmus auf einem Quadcore-Laptop, sodass vier Berechnungen parallel durchgeführt werden können.

Ich wurde kürzlich darauf hingewiesen, dass FPGA möglicherweise eine noch bessere Leistung liefert. Ich verstehe nicht, wie das funktioniert. Kann mir jemand erklären, wie FPGA einen Algorithmus beschleunigt und ob ich zu einer Xilinx- oder Altera-FPGA-Lösung wechseln 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 über die Wavelet-Pakettransformation eingespeist werden

Vielen Dank für die tollen Antworten.

Carlos - der Mungo - Gefahr
quelle
1
Haben Sie darüber nachgedacht, den Algorithmus auf einer Desktop- (oder Server-) CPU auszuführen? Diese sind normalerweise schneller als Laptop-CPUs. (Durch einen konstanten Faktor, aber immer noch schneller.)
ntoskrnl
1
Denken Sie an die Verwendung einer GPU für die Verarbeitung neuronaler Netzwerke. GPUs haben viele Einheiten, die Gleitkommazahlen parallel multiplizieren können.
Kamil
@ntoskrnl Ich gehe davon aus, dass er über eine i5 oder bessere CPU (4 Kerne) verfügt, sodass die Leistung auf dem Desktop oder Server nur proportional zur Taktrate ist. Vielleicht kann er auf Xeon dank des riesigen Caches und der besseren Speicherbandbreite nur eine geringe Leistung (20%?) Erzielen, aber das ist nicht viel.
Kamil
Welche CPU hast du?
Kamil
Interessantes Timing der Fragen, wir haben eine ähnliche Frage zu Networkengineering.SE
Mike Pennington

Antworten:

23

Ein Kollege von mir bewertete dies und kam zu dem Schluss, dass FPGAs einen PC übertreffen würden, wenn Sie mehr als 100 unabhängige , ganzzahlige Aufgaben hätten, die in den FPGA passen würden. Für Gleitkomma-Aufgaben schlägt GPGPU das FPGA. Für den Narrow-Multithreading- oder SIMD-Betrieb sind die CPUs extrem optimiert und werden mit einer höheren Taktrate betrieben, als dies bei FPGAs normalerweise der Fall ist.

Die anderen Vorbehalte: Aufgaben müssen unabhängig sein. Wenn zwischen den Tasks Datenabhängigkeiten bestehen, wird der kritische Berechnungspfad dadurch eingeschränkt. FPGAs eignen sich für Boolesche Auswertungen und Ganzzahlberechnungen sowie für Hardware-Schnittstellen mit geringer Latenz, nicht jedoch für speicherabhängige Workloads oder Gleitkommazahlen.

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

pjc50
quelle
3
Um zu entscheiden, ob DRAM die Grenze ist, müssen Sie auch wissen, dass FPGAs viele kleine verteilte RAMs (z. B. 500 unabhängige 9-KBit-RAM-Blöcke) haben, die alle während desselben Taktzyklus lesen / schreiben können.
28.
19

Ein FPGA funktioniert ganz anders als ein Prozessor.

Für einen Prozessor schreiben Sie Software, die der Hardware mitteilt, was zu tun ist. Auf einem FPGA beschreiben Sie intern, wie die Hardware aussehen soll. Es ist, als würden Sie einen Chip herstellen, der speziell für Ihren Algorithmus hergestellt wurde.

Dies beschleunigt viele Dinge und kann den Stromverbrauch senken. Aber es hat seine Nachteile: Die Entwicklung dauert viel länger und ist viel komplizierter. Sie müssen ganz anders denken und können keine Algorithmen verwenden, die in Software auf einfache Weise funktionieren.

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

Botnic
quelle
Tatsächlich wird die FPGA-Entwicklung häufig 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 den Entwurf asynchroner sequentieller Logik erheblich erschweren kann. Wenn man Implementierungen spezifizieren würde, wären Ausbreitungsverzögerungen etwas konsistent, aber in Verhaltenssprachen ist nicht einmal garantiert, dass sie positiv sind . Das Entscheidende beim FPGA-Design ist, dass die Sprachen es sehr einfach machen, dass viele (möglicherweise Hunderte oder Tausende) verschiedene Teile des Chips gleichzeitig einfache Verhaltensweisen ausführen.
Supercat
13

Es hängt sehr vom Algorithmus ab, aber das Prinzip kann ganz einfach erklärt werden.

Angenommen, Ihr Algorithmus muss viele 8-Bit-Zahlen summieren. Ihre CPU muss weiterhin jeden Befehl 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 gleichzeitige Vorgänge ausführen, wie Sie über Kerne verfügen.

Wenn Sie ein FPGA verwenden, können Sie eine große Anzahl einfacher Addierer implementieren, die parallel arbeiten und möglicherweise Tausende von Summen parallel verarbeiten. Obwohl eine einzelne Operation mehr Zeit in Anspruch nimmt, besteht ein hohes Maß an Parallelität.

Sie können auch eine GPGPU verwenden, um ähnliche Aufgaben auszuführen, da diese auch aus vielen einfacheren Kernen bestehen.

Clabacchio
quelle
GPGPU ist ein großartiger Eingang für neuronale Netze mit!
Botnic
Es gibt auch neuronale Netzwerk-ASICs. Intel hat früher eines hergestellt, das in den 80er Jahren 16 Neuronen implementiert hat.
Lior Bilia
@LiorBilia Nun, ich weiß nichts über sie :). Ich habe noch nie mit neuronalen Netzen und sehr wenig mit FPGA gearbeitet
clabacchio
@clabacchio Software Neural Network ist ein Programm, das hauptsächlich Operationen mit Gleitkommazahlen multipliziert und vergleicht. Meistens meine ich ... 95% oder mehr.
Kamil
Eine herkömmliche CPU kann ziemlich gut viele 8-Bit-Zahlen summieren. Auf einer schnellen Maschine wird die Ausführungszeit von den Kosten für das Abrufen von Daten aus dem Speicher dominiert (99% der Code-Abrufe würden von catch stammen). Ein interessanteres Beispiel wäre die Arbeit mit Daten, die unter Verwendung eines Schemas codiert wurden, das eher "ungewöhnliche" Anordnungen oder Permutationen von Bits erfordert. Wenn beispielsweise ein Teil der Videoabtastdaten Interleave-Bits für Rot, Grün und Blau zurückgibt, kann ein FPGA die Bits leicht neu anordnen. Eine herkömmliche CPU hätte viel mehr Probleme.
Supercat
6

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

CPU (wie in Ihrem Laptop) ist die allgemeinste von allen. Es kann alles, aber diese Vielseitigkeit geht mit langsamer Geschwindigkeit und hohem Stromverbrauch einher. Die CPU ist unterwegs programmiert, die Anweisungen kommen aus dem RAM. Programme für die CPU sind schnell, billig und einfach zu schreiben und sehr einfach zu ändern.

FPGA (Field Programmable Gate Array) ist die mittlere Ebene. Wie der Name schon sagt, kann es "vor Ort", also außerhalb einer Fabrik, programmiert werden. 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 von Ihnen ausgewählte Aufgabe spezialisiert ist. Aus diesem Grund kann es besser abschneiden als eine generische CPU. Das Programmieren von FPGA ist sehr schwierig und teuer, und das Debuggen ist sehr schwierig.

ASIC (Application Specific Integrated Circuit) ist der ultimative Spezialist. Es ist ein Chip, der für eine einzige Aufgabe entwickelt und hergestellt wurde - eine Aufgabe, die extrem schnell und effizient erledigt wird. Es gibt keine Möglichkeit, den ASIC neu zu programmieren. Er verlässt das Werk vollständig und ist unbrauchbar, wenn der Job nicht mehr benötigt wird. Das Entwerfen von ASICs ist etwas, das sich nur große Unternehmen leisten können, und das Debuggen ist praktisch 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 zu einer Sache fähig sind.

Sie können sich die Bitcoin-Mining-Community ansehen. Sie führen SHA256-Hashes durch.

  • CPU-Kern i7: 0,8-1,5 M Hash / s
  • FPGA: 5-300 M Hash / s
  • ASIC: 12000 M Hash / s pro kleinstem Chip, 2000000 M (yep, dass 2 T) Hash / s für ein 160-Chip-Gerät

Natürlich kosten diese ASIC-Babys bei Massenproduktion fast 2000 US-Dollar, aber es gibt Ihnen eine Vorstellung davon, wie sich ein Alleskönner gegen einen Spezialisten behaupten kann.

Die Frage ist nur: Kann FPGA Ihnen mehr Einsparungen bringen, als das Design kosten würde? Anstatt es auf EINEM Laptop auszuführen, können Sie es natürlich auch auf 20 PCs ausführen.

Agent_L
quelle
Hashing ist jedoch ein ganz besonderer Fall. Beachten Sie, dass verschlüsselte Münzen durch spezielle Hardware (absichtlich) nicht sehr beschleunigt werden können.
pjc50
1
& ASIC-Debugging wird in der Regel in der Simulation vor dem Versand an die Fertigung durchgeführt. So ist es in der Regel 6 Monate oder länger von der Spezifikation bis zur Herstellung. Die Diagnose von Fehlern nach der Herstellung ist teuer, aber nicht unmöglich.
pjc50
Und obwohl es schwierig ist, kann es in der Tat sehr schwierig sein, gibt es Dinge wie Boundary Scan, JTAG-Test und direkte Techniken unter Verwendung von FIB usw. Es ist also keineswegs unmöglich, sie zu debuggen, Sie müssen nur wissen, was Sie tun . Heutzutage bezieht sich ASIC eher auf einen Entwurfsablauf (HDL, Synthesis, P & R) als auf ein tatsächliches Gerät, da die meisten Geräte ASICs sind, einschließlich ARM-Prozessoren.
Platzhalter
@ pjc50 Ja, das war mein Punkt - in besonderen Fällen ist der Geschwindigkeitsunterschied enorm. Aber scrypt asics pwn immer noch CPUs und GPUs. Nicht millionenfach (wie bei sha), aber immer noch weit über 100.
Agent_L
@placeholder ja, aber selbst wenn Sie den Fehler finden, nützt es nicht viel für all die Chips, die bereits hergestellt wurden. Ich meinte "Debuggen" als "Entfernen des Fehlers", nicht nur "hier ist es".
Agent_L
5

Ja, FPGA kann moderne CPUs (wie Intel i7) bei bestimmten Aufgaben übertreffen, aber es gibt einfachere und kostengünstigere Methoden zur Verbesserung der Leistung neuronaler Netzwerke.

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

  1. Verwenden Sie SSE - Ich habe ziemlich einfache Implementierungen von neuronalen Netzen mit 2-3x besserer Leistung gesehen. Dies ist möglicherweise eine gute Idee, 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 100-200x Leistungssteigerung auf einer GPU mittlerer Klasse für Laptops wie GeForce 730M erzielen.

    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 - Sie können nur Desktop-Computer mit einer leistungsstärkeren GPU oder sogar Nvidia Tesla K80 mit 4992 Kernen (das ist teuer) verwenden.

Kamil
quelle
1
Das Problem hierbei ist, die Leistung zu definieren. Wenn wir schneller meinen als ja, kann fpga schneller sein als normaler 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 wird, um tatsächlich eine andere FPGA zu implementieren
Gianluca Ghettini,