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.
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.
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.
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.
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.
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.
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.
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
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).
ntoskrnl
Kamil
Kamil
Kamil
Mike Pennington