Frage

Ich entwickle ein Produkt mit umfangreichen 3D-Grafikberechnungen. weitgehend die Suche nach nächstgelegenen Punkten und Entfernungen.Eine gewisse Hardwareoptimierung wäre sinnvoll.Obwohl ich wenig darüber weiß, befürwortet mein Chef (der keine Softwareerfahrung hat) FPGA (weil es maßgeschneidert werden kann), während unser Junior-Entwickler GPGPU mit CUDA befürwortet, weil es billig, heiß und offen ist.Obwohl ich das Gefühl habe, dass es mir in dieser Frage an Urteilsvermögen mangelt, glaube ich, dass CUDA der richtige Weg ist, auch weil ich mir Sorgen um die Flexibilität mache, da sich unser Produkt noch in der starken Entwicklung befindet.

Um die Frage anders zu formulieren: Gibt es überhaupt Gründe, sich für FPGA zu entscheiden?Oder gibt es eine dritte Möglichkeit?

War es hilfreich?

Lösung

Ich untersuchte die gleiche Frage eine Weile zurück. Nachdem im Chat an Menschen, die auf FPGAs gearbeitet haben, ist das, was ich bekommen:

  • FPGAs sind für Echtzeit-Systeme, bei denen sogar 1ms Verzögerung könnte zu lang sein. Dies gilt nicht in Ihrem Fall zutreffen;
  • kann FPGAs sehr schnell sein, espeically für die digitale Signalverarbeitung Verwendungen gut definierte (zum Beispiel Radardaten), aber die guten sind viel teurer und spezialisierter als auch professioneller GPGPUs;
  • FPGAs sind recht umständlich zu programmieren. Da gibt es eine Hardware-Konfigurationskomponente zu kompilieren, es könnte Stunden dauern. Es scheint Elektroniker besser geeignet zu sein (die in der Regel diejenigen sind, die auf FPGAs arbeiten) als Software-Entwickler.

Wenn Sie CUDA Arbeit für Sie machen können, ist es wahrscheinlich die beste Option im Moment. Es wird sicherlich flexibler als ein FPGA.

Weitere Optionen sind Brook von ATI, aber bis etwas Großes passiert, es ist einfach nicht so gut wie CUDA angenommen. Danach ist alles da noch die traditionellen HPC-Optionen (Cluster von x86 / PowerPC / Cell), aber sie sind alle ziemlich teuer.

Ich hoffe, das hilft.

Andere Tipps

Wir haben einige Vergleich zwischen FPGA und CUDA. Eine Sache, wo CUDA leuchtet, wenn Sie wirklich kann Ihr Problem in einer Art und Weise SIMD formulieren und kann Zugriff auf die Speicher koalesziert. Wenn die Speicherzugriffe nicht verschmolzen sind (1), oder wenn Sie in verschiedenen Threads unterschiedlichen Steuerfluss haben die GPU verlieren drastisch seine Leistung und die FPGA es übertreffen können. Eine andere Sache ist, wenn Ihr Betrieb ist realtive klein, aber Sie haben eine riesige Menge davon. Aber man kann nicht (zum Beispiel aufgrund Synchronisation) keinen Start es in einer Schleife in einem Kernel, dann Aufruf Zeiten für den GPU-Kernel der Rechenzeit überschreitet.

Auch die Leistung des FPGA könnte besser sein (abhängig von Ihrer Anwendung scenarion, dh. Die GPU (in Watt / Flop nur billiger sind), wenn seine ganze Zeit Berechnung).

Offcourse FPGA hat auch einige Nachteile: IO sein kann (wir hatten hier eine Anwendung erforderlich waren wir 70 GB / s, kein Problem für die GPU, aber diese Menge an Daten in ein FPGA Sie für konventionelles Design brauchen, um mehr Stifte als verfügbar). Ein weiterer Nachteil ist die Zeit und Geld. Ein FPGA ist viel teurer als die beste GPU und die Entwicklungszeiten sind sehr hoch.

(1) greift simultan aus unterschiedlichem Thread zu Speicher zu aufeinanderfolgenden Adressen sein. Das ist manchmal wirklich schwer zu erreichen.

Ich würde mit CUDA gehen.
Ich arbeite in der Bildverarbeitung und haben Hardware-Add-ons seit Jahren versucht. Zuerst hatten wir i860, dann Transputer, dann DSP, dann ist das FPGA und Direktbasierte Zusammenstellung-to-Hardware.
Was innevitably passierte, war, dass die Hardware-Boards durch die Zeit waren wirklich debuggt und zuverlässig und der Code war sie portiert - regelmäßiger CPUs hatte vorgeschoben, sie zu schlagen, oder die Hosting-Maschinenarchitektur verändert und wir konnten die alten Platten nicht verwenden, oder die Macher des Brettes pleite ging.

Mit dem Festhalten an etwas wie CUDA Sie sind nicht auf einen kleinen Spezialhersteller von FPGA-Boards gebunden. Die performence von GPUs verbessert sich schneller als CPUs und wird von den Spielern finanziert. Es ist eine Mainstream-Technologie und so wird wahrscheinlich mit Multi-Core-CPUs in Zukunft verschmelzen und so Ihre Investition zu schützen.

FPGAs

  • Was Sie brauchen:
    • Lernen VHDL / Verilog (und glauben Sie mir, Sie werden nicht)
    • Kaufen hw für die Prüfung, Lizenzen auf Synthese-Tools
    • Wenn Sie einen guten Rahmen wählen (zB:. RSOC )
      • Entwickeln Design (und es kann Jahre dauern)
    • Wenn Sie dies nicht tun:
      • DMA, hw Treiber, ultra teuren Synthese-Tools
      • Tonnen von Wissen über Busse, Speicher-Mapping, hw Synthese
      • bauen die hw, kaufen die IP-Cores
      • Entwickeln Design
  • Zum Beispiel Durchschnitt FPGA PCIe-Karte mit Chip von Xilinx Virtex-6 kostet mehr als 3000 $
  • Ergebnis:
    • Wenn Sie nicht von der Regierung bezahlt werden, haben Sie nicht genug Geld.

GPGPU (CUDA / OpenCL)

  • Sie haben bereits hw zu testen, auf.
  • Vergleichen auf FPGA-Material:
    • Alles ist gut dokumentiert.
    • Alles ist billig
    • Alles funktioniert
    • Alles ist gut integriert Programmiersprachen
  • Es gibt GPU Cloud als auch.
  • Ergebnis:
    • Sie müssen nur sdk herunterladen und Sie können beginnen.

FPGA-basierte Lösung ist wahrscheinlich viel teurer als CUDA sein.

Natürlich ist dies eine komplexe Frage. Die Frage könnte auch den Cell-Prozessor. Und es ist wahrscheinlich nicht eine einzige Antwort, die für andere damit zusammenhängende Fragen korrekt ist.

Nach meiner Erfahrung, jede Implementierung in abstrakter Art und Weise durchgeführt, das heißt kompilierte Hochsprache vs. Maschine-Level-Implementierung, wird unweigerlich auf Kosten die Leistung hat, besonders in einer komplexen Algorithmus-Implementierung. Dies gilt sowohl für FPGAs und Prozessoren jeglicher Art. Ein FPGA speziell einen komplexen Algorithmus zu implementieren, wird eine bessere Leistung als ein FPGA, dessen Verarbeitungselemente sind generisch, es ein gewisses Maß an Programmierbarkeit von Eingangssteuerregister ermöglicht, Daten I / O usw.

Ein weiteres allgemeines Beispiel, wo ein FPGA wesentlich höhere Leistung in kaskadierten Prozessen sein kann, ist, wo auf der Prozessausgänge die Eingänge zum anderen werden und sie können nicht gleichzeitig durchgeführt werden. Prozesse in einem FPGA Kaskadierung ist einfach, und dramatisch niedriger Speicher kann I / O-Anforderungen, während der Prozessor-Speicher effektiv zwei oder mehr Verfahren verwendet werden, kaskadieren, wo Datenabhängigkeiten sind.

Das gleiche kann von einem GPU und CPU gesagt werden. Algorithms in C implementiert, die auf einer CPU ohne Rücksicht auf die inhärenten Leistungseigenschaften des Cache-Speichers oder des Hauptspeichers System durchführen wird nicht so gut wie ein implementiert entwickelt, welche die Ausführung der Fall ist. Zugegeben, nicht diese Leistungseigenschaften unter Berücksichtigung vereinfacht die Implementierung. Aber bei einer Leistungskosten.

keine direkte Erfahrung mit einer GPU zu haben, aber seine inhärenten Speichersystem Performance-Probleme zu wissen, wird es auch zu Leistungsproblemen ausgesetzt werden.

Das ist ein alter Thread gestartet im Jahr 2008, aber es wäre gut, zu erzählen, was ich seitdem in der FPGA-Programmierung passiert: 1. C-Gates in FPGA ist die Mainstream-Entwicklung für viele Unternehmen mit enorm viel Zeit vs. Verilog / SystemVerilog HDL zu speichern. In C bis Design Gatter Systemebene ist der schwierige Teil. 2. OpenCL auf FPGA ist für 4 + Jahre einschließlich Gleitkommazahl und „Wolke“ Bereitstellung von Microsoft (Asure) und Amazon F1 (Ryft API). Mit OpenCL ist System-Design relativ einfach, weil sehr gut definierte Speichermodell und API zwischen Host und Rechengeräte.

Software Leute brauchen nur ein wenig über FPGA-Architektur zu lernen, um Dinge zu tun, die mit GPUs und CPUs aus Gründen des beides festen Silizium auch gar nicht möglich sind und nicht mit Breitband (100GB +) Schnittstellen zur Außenwelt. Verkleinerung Spangeometrie ist nicht mehr möglich, noch mehr Wärme aus dem Single-Chip-Paket zu extrahieren, ohne es zu schmelzen, so aussieht wie das Ende der Straße für einzelne Paket-Chips. Meine These ist, dass die Zukunft der Programmierung von Multi-Chip-Systemen parallel angehört und FPGAs haben eine große Chance, vor dem Spiel zu sein. Schauen Sie sich http://isfpga.org/ wenn Sie Bedenken bezüglich Leistung, etc.

CUDA verfügt über eine ziemlich umfangreiche Codebasis an Beispielen und a SDK, einschließlich ein BLAS-Backend.Versuchen Sie, einige Beispiele zu finden, die Ihrer Arbeit ähneln, und schauen Sie sich vielleicht auch die an GPU-Juwelen Buchreihe, um zu beurteilen, wie gut CUDA zu Ihren Anwendungen passt.Aus logistischer Sicht würde ich sagen, dass die Arbeit mit CUDA einfacher und viel, viel günstiger ist als mit jedem professionellen FPGA-Entwicklungs-Toolkit.

Irgendwann habe ich mich mit CUDA für die Simulationsmodellierung von Schadensreserven befasst.Zum Lernen gibt es eine ziemlich gute Vorlesungsreihe, die außerhalb der Website verlinkt ist.Unter Windows müssen Sie sicherstellen, dass CUDA auf einer Karte ohne Displays läuft, da das Grafiksubsystem über einen Watchdog-Timer verfügt, der jeden Prozess, der länger als 5 Sekunden läuft, blockiert.Dies tritt unter Linux nicht auf.

Jeder Rechner mit zwei PCI-e x16-Steckplätzen sollte dies unterstützen.Ich habe einen HP XW9300 verwendet, den man recht günstig bei eBay kaufen kann.Wenn Sie dies tun, stellen Sie sicher, dass es über zwei CPUs verfügt (nicht über eine Dual-Core-CPU), da die PCI-e-Steckplätze auf separaten Hypertransport-Bussen laufen und Sie zwei CPUs in der Maschine benötigen, damit beide Busse aktiv sind.

Ich bin ein CUDA-Entwickler mit sehr littel Erfahrungen mit FPGA: s, aber ich habe versucht, Vergleiche zwischen den beiden zu finden

.

Was ich bisher geschlossen:

Die GPU hat bei weitem höher (barrierefrei) Spitzenleistung Es hat ein günstigeres FLOP / Watt-Verhältnis. Es ist günstiger Es entwickelt sich schneller (sehr bald werden Sie buchstäblich eine „echte“ TFLOP zur Verfügung haben). Es ist einfacher zu programmieren (Artikel auf dieser nicht persönlichen Meinung lesen)

Beachten Sie, dass ich sage, real / zugänglich von den Zahlen unterscheiden Sie sich in einem GPGPU kommerziellen sehen.

ABER die gpu ist nicht günstiger, wenn Sie zufällige Zugriffe auf Daten müssen tun. Das wird sich hoffentlich mit der neuen Nvidia Fermi-Architektur ändern, die einen optionalen L1 / L2-Cache hat.

my 2 cents

FPGA wird durch diejenigen, die nicht mit einer Software-Bias begünstigt werden, da sie eine HDL oder zumindest verstehen SystemC lernen müssen.

Für die mit einem Hardware-Bias-FPGA wird die erste Option betrachtet.

ein gutes Verständnis für beide In Wirklichkeit ist erforderlich und dann eine objektive Entscheidung getroffen werden kann.

OpenCL ist so konzipiert, sowohl FPGA & GPU laufen, auch CUDA können FPGA portiert werden.

FPGA & GPU-Beschleuniger zusammen verwendet werden können,

Es ist also nicht ein Fall von dem, was ist besser, das eine oder das andere. Es besteht auch die Debatte über CUDA vs OpenCL

Auch wenn Sie optimiert & gebenchmarkt sowohl auf Ihre spezifische Anwendung können Sie nicht mit 100% iger Sicherheit wissen.

Viele werden einfach mit CUDA gehen wegen seiner kommerziellen Natur & Ressourcen. Andere werden mit OpenCL gehen wegen seiner Vielseitigkeit.

Was bereitstellen Sie? Wer ist Ihr Kunde? Ohne auch nur die Antworten auf diese Fragen kennt, würde ich nicht einen FPGA verwenden, wenn Sie ein Echtzeit-System bauen und habe elektrische / Computertechniker in Ihrem Team, das Wissen über Hardware-Beschreibungssprachen wie VHDL und Verilog haben. Es gibt eine Menge zu, und es nimmt eine andere Gemütsverfassung als herkömmliche Programmierung.

FPGAs haben in Ungnade im HPC-Sektor gefallen, weil sie ein horrorterror zu programmieren sind. CUDA ist in, weil es viel viel schöner zu programmieren ist und werden Sie noch einige gute Leistung. Ich würde mit dem, was die HPC-Community hat gegangen mit und tut es in CUDA. Es ist einfacher, es ist billiger, es ist besser verwaltbar.

Andere haben gute Antworten gegeben, nur eine andere Perspektive hinzufügen wollte. Hier ist meine Umfrage Papier in ACM Computing Surveys veröffentlicht 2015 (seine permalink ist hier ), die metrische GPU mit FPGA und CPU auf Energieeffizienz vergleicht. Die meisten Zeitungen berichten: FPGA energieeffizienter als GPU ist, die wiederum energieeffizienter als CPU ist. Da Leistungsbudgets festgelegt werden (abhängig von der Kühlleistung) bedeutet Energieeffizienz von FPGA kann man mit FPGA mehr Berechnungen innerhalb gleichen Leistungsbudget zu tun, und damit eine bessere Leistung mit FPGA bekommen als mit GPU. Natürlich auch die Ursache für FPGA-Einschränkungen, wie von anderen erwähnt.

  • FPGAs sind parallel als GPUs, um drei Größenordnungen. Während gute GPU Tausende von Kernen verfügt, FPGA Millionen von programmierbaren Gates haben.
  • Während CUDA-Cores sehr ähnliche Berechnungen tun müssen produktiv, FPGA-Zellen voneinander wirklich unabhängig sind zu sein.
  • FPGA kann mit einigen Gruppen von Aufgaben sehr schnell sein und wird oft verwendet, wo eine Millisekunde bereits als lange Dauer gesehen wird.
  • GPU-Kern ist viel mächtiger als FPGA-Zelle und viel einfacher zu programmieren. Es ist ein Kern, kann kein Problem teilen und vermehren, wenn FPGA-Zelle nur in der Lage eher einfacher Boolesche Logik ist.
  • Als GPU-Kern ist ein Kern , es ist effizient es in C ++ zu programmieren. Auch sie ist es auch möglich FPGA in C ++ zu programmieren, ist es ineffizient (nur „produktive“). Specialized Sprachen wie VDHL oder Verilog verwendet werden - sie sind schwierig und schwer zu meistern.
  • Die meisten der wahren und versuchte Instinkte eines Software-Ingenieur sind nutzlos, mit FPGA. Sie wollen eine für Schleife mit diesen Toren? Welche Galaxie sind Sie? Sie müssen sich in die Mentalität der Elektroniker ändern, um diese Welt zu verstehen.

auf neueste GTC'13 viele HPC Menschen einig, dass CUDA ist hier zu bleiben. FPGA ist umständlich sind, CUDA wird immer ganz reifere Python unterstützt / C / C ++ / ARM .. oder so, das war eine datierte Frage

eine GPU in CUDA-Programmierung ist auf jeden Fall einfacher. Wenn Sie es mit ziemlicher Sicherheit auch keine Erfahrung mit der Programmierung von FPGAs in HDL haben für Sie große Herausforderung sein, aber man kann sich immer noch mit OpenCL programmieren, die auf CUDA irgendwie ähnlich ist. Es ist jedoch schwieriger zu implementieren und wahrscheinlich viel teurer als GPUs Programmierung.

Welche ist schneller?

GPU läuft schneller, aber FPGA kann effizienter sein.

GPU hat das Potenzial, sich mit einer Geschwindigkeit laufen höher als FPGA jemals erreichen kann. Aber nur für Algorithmen, die speziell dafür geeignet. Wenn der Algorithmus nicht optimal ist, wird die GPU viel Leistung verlieren.

FPGA auf der anderen Seite läuft viel langsamer, aber Sie können problemspezifische Hardware implementieren, die sehr effizient sein und Sachen in weniger Zeit erledigen.

Es ist ein bisschen wie die Suppe mit einer Gabel sehr schnell im Vergleich zu essen es mit einem Löffel langsamer zu essen.

Beide Geräte basieren ihre Leistung auf Parallelisierung, aber jeder auf eine etwas andere Art und Weise. Wenn der Algorithmus in eine Menge Stücke granuliert wird, die die gleichen Operationen (Stichwort: SIMD) ausführen, wird der GPU schneller sein. Wenn der Algorithmus kann als eine lange Pipeline implementiert wird, wird das FPGA schneller sein. Auch, wenn Sie Floating-Point verwenden möchten, FPGA wird nicht sehr glücklich sein mit ihm:)

Ich habe meine ganze Masterarbeit gewidmet dieses Thema. Algorithmus Beschleunigung auf FPGA mit OpenCL

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top