Wie kann ein FPGA eine CPU übertreffen?

Ich höre von Leuten, die FPGAs verwenden, um die Leistung von Systemen zu verbessern, die Dinge wie Bitcoin-Mining, elektronischen Handel und Proteinfaltung tun.

Wie kann ein FPGA bei der Leistung mit einer CPU konkurrieren, wenn die CPU normalerweise mindestens eine Größenordnung schneller läuft (in Bezug auf die Taktgeschwindigkeit)?

Das FPGA erledigt alles auf einmal.

Antworten (5)

CPUs sind sequentielle Verarbeitungsgeräte. Sie zerlegen einen Algorithmus in eine Folge von Operationen und führen sie einzeln aus.

FPGAs sind (oder können als solche konfiguriert werden) Parallelverarbeitungsgeräte. Ein ganzer Algorithmus kann in einem einzigen Takt der Uhr oder im schlimmsten Fall in weit weniger Takten ausgeführt werden, als ein sequentieller Prozessor benötigt. Einer der Kosten für die erhöhte Logikkomplexität ist typischerweise eine untere Grenze, bei der das Gerät getaktet werden kann.

In Anbetracht des oben Gesagten können FPGAs CPUs bei bestimmten Aufgaben übertreffen, da sie die gleiche Aufgabe in weniger Takten erledigen können, wenn auch mit einer niedrigeren Gesamttaktrate. Die erzielbaren Gewinne sind stark vom Algorithmus abhängig, aber zumindest eine Größenordnung ist für so etwas wie eine FFT nicht untypisch.

Da Sie außerdem mehrere parallele Ausführungseinheiten in ein FPGA einbauen können, können Sie, wenn Sie große Datenmengen haben, die denselben Algorithmus durchlaufen möchten, die Daten auf die parallelen Ausführungseinheiten verteilen und einen um weitere Größenordnungen höheren Durchsatz erzielen als selbst mit einer Mehrkern-CPU erreicht werden kann.

Der Preis, den Sie für die Vorteile zahlen, ist der Stromverbrauch und die Kosten.

+1; FPGAs sind jedoch nicht so dynamisch wie CPUs, weshalb CPUs in der Regel besser für PCs geeignet sind
"Der Preis, den Sie für die Vorteile zahlen, ist der Stromverbrauch und die Kosten." -- Das ist oft wahr, aber Sie können eine High-End-Multi-$1000-Intel-Xeon-Maschine mit einem Low-End-$50-Xilinx-Spartan-6 für viele Algorithmen klar schlagen. Aber das nimmt normalerweise viel Entwicklungszeit in Anspruch, und Sie können am Ende ein sehr individuelles Design haben, das nur für eine Anwendung funktioniert und schwer zu ändern ist. Der Kompromiss besteht also nicht nur in Macht und Geld, sondern auch in der Entwicklungszeit des Algorithmus, Wiederverwendbarkeit und Flexibilität. (Obwohl man Zeit == Geld argumentieren kann.)
Markt, zu Ihrem letzten Satz, sind FPGAs nicht viel stromsparender als CPUs? Es gibt eine breite Palette von Geräten sowohl für CPUs als auch für FPGAs, aber wenn wir uns diejenigen ansehen, die für Dinge wie Bitcoin-Mining verwendet werden, sind die CPUs, die für diese Aufgaben verwendet werden, nicht viel stromhungriger als die FPGAs, die es wären benutzt?
@David: Wenn es um Bitcoin-Mining geht, ist die relevante Metrik die Anzahl der Hashes pro Watt. Markt spricht vom Gesamtstromverbrauch. Das heißt, ein bestimmtes FPGA kann dreimal so viel Strom verbrauchen wie eine typische CPU, aber beim Bitcoin-Mining viel mehr als dreimal schneller sein; Für Bitcoin ist das also ein Gewinn.
@Billy: die Anzahl der Hashes pro Watt · Sekunde, nicht pro Watt.
@PaŭloEbermann: Stimmt.
Eher die Anzahl der Hashes pro Joule, wie Strom abgerechnet wird...
Ja, wenn Ihr Bitcoin-Mining-Rig mit einem geothermischen Kraftwerk ausgestattet ist und durch ein arktisches Klima gekühlt wird. Andernfalls neigen wir dazu, in Fiat-Währung abgerechnet zu werden.

Markt hat damit größtenteils Recht, aber ich werde hier meine 2 Cent hineinwerfen:

Stellen Sie sich vor, ich hätte Ihnen gesagt, dass ich ein Programm schreiben möchte, das die Reihenfolge der Bits innerhalb einer 32-Bit-Ganzzahl umkehrt. Etwas wie das:

int reverseBits(int input) {
    output = 0;
    for(int i = 0;i < 32;i++) {
        // Check if the lowest bit is set
        if(input & 1 != 0) {
            output = output | 1; // set the lowest bit to match in the output!
        }

        input = input >> 1;
        output = output << 1;
    }
    return output;
}

Nun, meine Implementierung ist nicht elegant, aber ich bin sicher, Sie stimmen mir zu, dass eine Reihe von Operationen erforderlich wären, um dies zu tun, und wahrscheinlich eine Art Schleife. Dies bedeutet, dass Sie in der CPU viel mehr als 1 Zyklus für die Implementierung dieser Operation aufgewendet haben.

In einem FPGA können Sie dies einfach als Latch-Paar verdrahten. Sie erhalten Ihre Daten in einem Register und verbinden sie dann in umgekehrter Bitreihenfolge mit den anderen Registern. Dies bedeutet, dass die Operation in einem einzigen Taktzyklus im FPGA abgeschlossen wird. Somit hat das FPGS in einem einzigen Zyklus eine Operation abgeschlossen, für deren Abschluss Ihre Allzweck-CPU viele tausend Zyklen benötigt hat! Außerdem können Sie wahrscheinlich einige hundert dieser Register parallel verdrahten. Wenn Sie also ein paar hundert Zahlen auf das FPGA übertragen können, wird es in einem einzigen Zyklus diese Tausende von Operationen hunderte Male ausführen, alles in einem FPGA-Taktzyklus.

Es gibt viele Dinge, die eine Allzweck-CPU tun kann, aber als Einschränkung richten wir verallgemeinerte und einfache Anweisungen ein, die notwendigerweise in Listen einfacher Anweisungen erweitert werden müssen, um einige Aufgaben zu erledigen. Also könnte ich die Allzweck-CPU mit einer Anweisung wie "umgekehrte Bitreihenfolge für 32-Bit-Register" versehen und der CPU die gleichen Fähigkeiten wie dem FPGA geben, das wir gerade gebaut haben, aber es gibt eine unendliche Anzahl solcher möglicher nützlicher Anweisungen, und so wir Setzen Sie nur diejenigen ein, die die Kosten in den gängigen CPUs rechtfertigen.

FPGAs, CPLDs und ASICs geben Ihnen alle Zugriff auf die Rohhardware, mit der Sie verrückte Operationen wie „AES256-verschlüsselte Bytes mit Schlüssel entschlüsseln“ oder „Einzelbild von H.264-Video decodieren“ definieren können. Diese haben Latenzen von mehr als einem Taktzyklus in einem FPGA, aber sie können auf viel effizientere Weise implementiert werden, als die Operation in Millionen von Zeilen von Allzweck-Assemblercode zu schreiben. Dies hat auch den Vorteil, dass die Festzweck-FPGA/ASIC für viele dieser Operationen energieeffizienter werden, da sie nicht so viel Fremdarbeit leisten müssen!

Parallelität ist der andere Teil, auf den Markt hingewiesen hat, und obwohl das ebenfalls wichtig ist, ist die Hauptsache, wenn ein FPGA etwas parallelisiert, was in Bezug auf die für die Ausführung der Operation erforderlichen Zyklen in der CPU bereits teuer war. Wenn Sie anfangen zu sagen: „Ich kann in 10 FPGA-Zyklen eine Aufgabe ausführen, die meine CPU 100.000 Zyklen kostet, und ich kann diese Aufgabe parallel mit 4 Elementen gleichzeitig erledigen“, können Sie leicht erkennen, warum ein FPGA eine Menge sein könnte schneller als eine CPU!

Warum verwenden wir also nicht für alles FPGAs, CPLDs und ASICs? Denn im Allgemeinen ist es ein ganzer Chip, der nur eine Operation ausführt. Dies bedeutet, dass Sie zwar einen Prozess in Ihrem FPGA/ASIC um viele Größenordnungen schneller ausführen können, Sie ihn jedoch später nicht mehr ändern können, wenn diese Operation nicht mehr nützlich ist. Der Grund, warum Sie ein FPGA (im Allgemeinen) nicht ändern können, wenn es sich in einer Schaltung befindet, ist, dass die Verdrahtung für die Schnittstelle festgelegt ist und die Schaltung normalerweise keine Komponenten enthält, mit denen Sie das FPGA in eine nützlichere Konfiguration umprogrammieren können. Es gibt einige Forscher, die versuchen, hybride FPGA-CPU-Module zu bauen, bei denen es einen Abschnitt der CPU gibt, der wie ein FPGA neu verdrahtet/neu programmiert werden kann, sodass Sie einen effektiven Abschnitt der CPU "laden" können.

Für das Beispiel des Umkehrens von Bits (und aller anderen Bit-Swap-/Auswahlaufgaben) dauert es nicht wirklich 1 Taktzyklus, sondern 0. In Ihrem Beispiel dauert es 1 Taktzyklus, um Daten in einem Latch zu speichern , was nicht der Fall ist gleiche Bedienung. Es dauert 1 Taktzyklus, ob Sie die Bits umkehren oder nicht. Die Operation zum Umkehren der Bits beträgt 0 Taktzyklen; kein Overhead, nur anderes Routing. Der Unterschied liegt nicht nur in der Semantik, besonders wenn man anfängt, Dinge zu addieren. Wie lange dauert es zum Beispiel, ein 32-Bit-Wort um 3 Bit nach unten zu verschieben, dann jedes zweite Nibble zu tauschen und es dann umzukehren?
„hybrides FPGA-CPU-Modul“ – diese sind schon lange auf dem Markt (siehe xilinx.com/products/silicon-devices/soc/zynq-7000/index.htm für ein modernes erfolgreiches), aber auch ohne Spezielle Unterstützung, die Kombination von Software und HDL wird üblicherweise durch die Implementierung einer Soft-CPU innerhalb des FPGA auf dem Fabric erreicht.
@wjl Sie haben Recht, dass es technisch keine Zyklen dauert, um die Operation selbst durchzuführen. Ich würde argumentieren, dass Ihr Beispiel nur semantisch anders ist, vor allem, weil das Ausführen dieser drei Operationen logisch in ein festes Bitmuster übersetzt wird (dh ich beginne mit b1b2b3b4 und ende mit b3b1b4b2). Das war irgendwie mein Punkt in der ganzen Antwort. Ich wollte darauf hinweisen, dass es häufig nur notwendig ist, eine Operation als eine Reihe von Schritten zu beschreiben, wenn Sie eine feste Befehlssatz-/Gate-Anordnung haben.
@wjl: So wie David-Gardner die Frage gestellt hat, scheint er zu sagen, dass "CPU" einer hochgetakteten, Pipeline- und optimierten CPU von Intel oder AMD x86/x86_64 entspricht. Es gibt viele weiche "CPUs", aber ich habe keine von denen, die für den Einbau in ein FPGA entwickelt wurden, kann wie ein i7 getaktet werden, noch sind sie annähernd so optimiert oder leistungsfähig. Was Hybriden betrifft, meinte ich eher so etwas: newsroom.intel.com/docs/DOC-1512 , das anscheinend existiert
Der Zynq ist wirklich kein schlechter Prozessor (ARM Cortex-A9 – das gleiche Gerät, auf dem Tablet-Computer usw. laufen), aber ich stimme zu, dass es viel großartiger wäre, ein integriertes FPGA mit einem Hochgeschwindigkeits-x86_64 zu haben. =)
@wjl - Ich denke, es ist in der realen Welt nicht richtig , es "0 Zyklen" zu nennen. Das Wiederholen der Operation des Umkehrens der Bits vieler 1000er von 32-Bit-Ganzzahlen (oder sogar eines kleinen Bruchteils davon) wäre eindeutig nicht in "0 Zyklen" machbar .
@KevinFegan - Zyklen sind nur eine quantisierte Zeiteinheit. Also, ja, "0 Zyklen" ist genau die richtige Bezeichnung für die reale Welt. Auch hier würde in einem FPGA oder ASIC das Umkehren von Tausenden von 32-Bit-Ganzzahlen 0 Taktzyklen dauern, wenn das FPGA genügend Platz hätte, um alles parallel zu erledigen. Was Zeit braucht, ist die Speicherung , nicht das Umleiten von Bits, was nur Platz beansprucht.

Alle anderen hier vorgestellten populären Antworten sprechen von wörtlichen Unterschieden zwischen FPGAs und CPUs. Sie weisen auf die parallele Natur des FPGA gegenüber der sequentiellen Natur einer CPU hin oder geben Beispiele dafür, warum bestimmte Algorithmen auf einem FPGA gut funktionieren könnten. All das ist gut und wahr, aber ich würde dennoch vorschlagen, dass es einen grundlegenderen Unterschied zwischen CPUs und FPGAs gibt.

Was ist der gemeinsame Nenner zwischen einem FPGA und einer CPU? Es ist so, dass sie beide auf Silizium aufgebaut sind. Und in einigen Fällen buchstäblich die gleichen Siliziumprozesse.

Der grundlegende Unterschied sind die Abstraktionen, die wir auf dieses Silizium stapeln. Es ist nicht möglich, dass ein einzelner Mensch alle Details eines einzelnen modernen CPU-Designs vom Silizium bis zum verpackten IC versteht. Als Teil des Engineering-Prozesses unterteilen wir dieses komplexe Problem in kleinere handhabbare Probleme, um die sich Menschen kümmern können.

Überlegen Sie, was nötig ist, um dieses Silizium in eine funktionierende CPU zu verwandeln. Hier ist eine etwas vereinfachte Ansicht der für dieses Ziel erforderlichen Abstraktionsebenen:

  1. Erstens haben wir Ingenieure, die wissen, wie man Transistoren aus Silizium herstellt. Sie wissen, wie man winzige Transistoren entwirft, die Strom schlucken und mit einer Rate von 10 oder sogar 100 Gigahertz schalten, und sie wissen, wie man kräftige Transistoren entwirft, die Signale mit genug Leistung treiben können, um sie aus einem IC-Gehäuse und über eine Leiterplatte zu senden zu einem anderen Chip.

  2. Dann haben wir Designer für digitale Logik, die wissen, wie man diese Transistoren zu Bibliotheken mit Hunderten von verschiedenen Logikzellen zusammenfügt. Logikgatter, Flipflops, Multiplexer und Addierer, um nur einige zu nennen. Alle in einer Vielzahl von Konfigurationen.

  3. Als nächstes haben wir verschiedene Gruppen von Ingenieuren, die wissen, wie man diese digitalen (und manchmal analogen) Blöcke zusammensetzt, um Funktionsblöcke auf höherer Ebene wie Hochgeschwindigkeits-Transceiver, Speichercontroller, Verzweigungsprädiktor, ALUs usw. zu bilden.

  4. Dann haben wir CPU-Designer, die High-End-CPU-Designs entwerfen, indem sie diese Funktionseinheiten zu einem vollständigen System zusammenführen.

Und es hört hier nicht auf. An diesem Punkt haben wir eine funktionierende CPU, die Assembler-Code ausführt, aber das ist keine Sprache, die die meisten Programmierer heutzutage schreiben.

  1. Wir könnten einen C-Compiler haben, der in Assembler-Code kompiliert (wahrscheinlich durch eine Zwischendarstellung)
  2. Wir könnten eine weitere Abstraktion über C hinzufügen, um eine objektorientierte Sprache zu erhalten
  3. Wir könnten sogar eine virtuelle Maschine auf C oder C++ schreiben, damit wir Dinge wie Java-Bytecode interpretieren können

Und die Abstraktionsschichten können von dort aus weitergehen. Der wichtige Punkt hier ist, dass diese Abstraktionsschichten kombiniert werden, um ein CPU-basiertes System zu ergeben, das massiv skaliert und einen winzigen Bruchteil eines benutzerdefinierten Siliziumdesigns kostet.

Wichtig ist hier jedoch, dass jede Abstraktion auch selbst Kosten verursacht. Der Transistordesigner baut nicht für jeden Anwendungsfall den perfekten Transistor. Er baut eine vernünftige Bibliothek, und so wird manchmal ein Transistor verwendet, der etwas mehr Strom oder etwas mehr Silizium verbraucht, als für die jeweilige Aufgabe wirklich benötigt wird. Und ebenso bauen die Logikdesigner nicht jede mögliche Logikzelle. Sie könnten ein NAND-Gatter mit 4 Eingängen und ein NAND-Gatter mit 8 Eingängen bauen, aber was passiert, wenn ein anderer Ingenieur ein NAND mit 6 Eingängen benötigt? Er verwendet ein NAND-Gatter mit 8 Eingängen und bindet 2 ungenutzte Eingänge ab, was zu verlorenen Siliziumressourcen und verschwendeter Leistung führt. Und so geht es die Kette der Abstraktionen hinauf. Jede Schicht gibt uns eine Möglichkeit, die Komplexität zu bewältigen, stellt uns aber gleichzeitig zusätzliche zusätzliche Kosten in Bezug auf Silizium und Strom in Rechnung.

Vergleichen Sie nun diese Abstraktionen mit dem, was für ein FPGA benötigt wird. Im Wesentlichen enden die FPGA-Abstraktionen bei Nr. 2 in der obigen Liste. Das FPGA ermöglicht es Entwicklern, auf der digitalen Logikschicht zu arbeiten. Es ist etwas ausgefeilter als das, da CPUs auf dieser Ebene „fest codiert“ sind und FPGAs zur Laufzeit konfiguriert werden müssen (was übrigens der Grund dafür ist, dass CPUs normalerweise viel höhere Frequenzen ausführen), aber die wesentliche wichtige Wahrheit ist, dass dies weit ist wenige Abstraktionen für FPGAs als für CPUs.

Warum kann ein FPGA also schneller sein als eine CPU? Im Wesentlichen liegt es daran, dass das FPGA viel weniger Abstraktionen verwendet als eine CPU, was bedeutet, dass der Designer näher am Silizium arbeitet. Er zahlt nicht die Kosten für all die vielen Abstraktionsschichten, die für CPUs erforderlich sind. Er codiert auf einem niedrigeren Niveau und muss härter arbeiten, um ein gewisses Maß an Funktionalität zu erreichen, aber als Belohnung erhält er eine höhere Leistung.

Aber natürlich gibt es auch eine Kehrseite für weniger Abstraktionen. All diese CPU-Abstraktionen gibt es aus gutem Grund. Sie geben uns ein viel einfacheres Kodierungsparadigma, was bedeutet, dass mehr Leute leicht für sie entwickeln können. Das wiederum bedeutet, dass es viel mehr CPU-Designs gibt und wir daher massive Preis-/Skalierungs-/Time-to-Market-Vorteile von CPUs haben.

Da haben Sie es also. FPGAs haben weniger Abstraktionen und können daher schneller und energieeffizienter sein, sind aber schwer zu programmieren. CPUs haben viele Abstraktionsdesigns, um sie einfach zu entwickeln, skalierbar und billig zu machen. Aber sie geben Geschwindigkeit und Macht im Handel für diese Vorteile auf.

Außerdem werden FPGAs unter Verwendung einfacher sich wiederholender Blöcke entworfen, die einfache logische Aufgaben ausführen sollen. Sie sind für bestimmte Arten von Aufgaben maßgeschneidert. CPUs, OTOH, haben viele komplexe Funktionsteile, die alle unterschiedliche Dinge tun. Man könnte sich vorstellen, dass eine CPU eine Gruppe vieler verschiedener FPGA-ähnlicher Geräte ist (schließlich besteht alles nur aus Silizium, Elektronik und Mathematik). Es geht also nicht um Abstraktionen, es geht um Komplexität. CPUs sind komplexe Geräte, die aus vielen verschiedenen Arten von elektrischen Geräten bestehen, während ein FPGA aus einigen wenigen besteht. Eine CPU ist eine Schrotflinte, während ein FPGA ein Gewehr ist.

Während die anderen Antworten alle richtig sind, geht keine von ihnen auf das Bitcoin-Mining-Beispiel aus Ihrer Frage ein, das in der Tat ein anständiges Beispiel ist. Beim Bitcoin-Mining wird wiederholt eine kryptografische Hash-Funktion, SHA-256, aus dem Ergebnis einer anderen SHA-256-Berechnung von Daten berechnet, bei denen sich nur eine einzige 32-Bit-Ganzzahl ändert, bis der resultierende Hash bestimmte Eigenschaften aufweist. Jeder SHA-256 besteht aus 64 Wiederholungen desselben Algorithmus, der 32-Bit-Additionen, Bitverschiebungen und einige weitere Bit-Mangling-Operationen beinhaltet.

Wenn Sie diese Schleife auf einer 32-Bit-CPU (oder mehr) programmieren, werden Sie feststellen, dass ihr Befehlssatz sehr gut für die Aufgabe geeignet ist – SHA-256 wurde entwickelt, um effizient auf CPUs ausgeführt zu werden. Dennoch werden Sie nur vielleicht 2 % der Siliziumfläche einer modernen CPU verwenden, wobei flächenintensive Funktionen wie Caching, Multiplikation, Division, Gleitkommaoperation, Verzweigung und Brach-Vorhersage usw. entweder überhaupt nicht verwendet werden oder nicht in der Lage sind, signifikante Leistungen zu erbringen Leistungssteigerung für diese spezielle Aufgabe.

In konfigurierbarer Hardware wie einem FPGA implementieren Sie einfach nur diese 2 % und optimieren weiter, indem Sie die gesamte Codeausführung vergessen und stattdessen Gates entwerfen, um jede dieser oft wiederholten Unterfunktionen direkt zu berechnen. So geleitet, dass jeder von ihnen in jedem Taktzyklus ein Ergebnis an den nächsten weitergibt und 128-mal wiederholt wird (und mit einer speziellen zusätzlichen Logik, wo jeder SHA-256 beginnt und endet), erhalten Sie am Ende jeden Taktzyklus ein Ergebnis (für vielleicht 100 Millionen Hashes pro Sekunde auf einem FPGA, das für die Unterstützung von 300 MHz bei einer einfacheren Logik als dieser beworben wird), während Sie auf einer modernen CPU alle paar tausend Taktzyklen pro Kern ein Ergebnis erwarten können, sagen wir 10 Millionen Hashes pro Sekunde auf einem Multi-Core-Multi -GHz-CPU.

Wenn dieses spezielle Beispiel für Sie von Interesse ist, sollten Sie sich meine verwandte Antwort zu den Interna von ASIC-Minern auf bitcoin.stackexchange ansehen, da viele FPGA-Miner auf die gleiche Weise arbeiten und eher konfigurierbare als maßgeschneiderte Hardware verwenden. Nur der Vollständigkeit halber: Es gibt andere Möglichkeiten, wie das Einschränken oder Vermeiden des von mir beschriebenen Pipelining zugunsten einer trivialeren Parallelisierung durch die Verwendung mehrerer unabhängiger SHA-256-Hasher. Abhängig von den Einschränkungen, die durch die Interna Ihres FPGAs und seine Gesamtgröße gegeben sind, kann dies sogar eine bessere Leistung liefern, obwohl es in Bezug auf die Gate-Anzahl und den Routing-Overhead weniger effizient wäre, wenn Sie vollkommene Freiheit beim Design des gesamten Chips hätten, nicht nur bei der Konfiguration eines FPGA .

Das ist ein sehr guter Punkt zur Verwendung von Silizium.
Aber vielleicht (ungewollt!) irreführend, wenn man bedenkt, dass ein FPGA aus etwas komplexen Zellen mit vielen physikalischen Gattern besteht, von denen eine typische Anwendung wiederum nur einen Bruchteil verwendet, was es ihren Herstellern ermöglicht, gleichwertige Gatterzahlen zu bewerben, um Ihnen zu sagen, wie viel alle davon könnte sich in einer "typischen" Anwendung lohnen ...

Die obigen Antworten sind zwar richtig, verfehlen aber den Punkt, warum FPGAs (und benutzerdefinierte ASICs) besonders gut für Bitcoin-Berechnungen geeignet sind.

Der wirkliche Vorteil besteht darin, dass ein großer Teil der SHA-256-Berechnungen logische Operationen (z. B. Bitverschiebungen) sind, die in der Verkabelung durchgeführt werden können. Auf diese Weise benötigen sie 0 Taktzyklen.

Ein weiterer wichtiger Vorteil besteht darin, dass FPGAs viel energieeffizienter sind (dh MIPS pro Watt) als CPUs, sodass die für die Berechnungen benötigte Energiemenge viel geringer ist. Dies ist wichtig, da die Kosten für das Schürfen eines Bitcoins davon abhängen, wie viel Strom Sie für seine Herstellung verbrauchen.

ASIC-Chips sind energieeffizienter als FPGAs, sodass sie den gleichen Code viel billiger ausführen können. Sie können auch mehr Exekutionseinheiten an Bord stopfen, um sie schneller zu machen. Der Nachteil ist, dass die Kosten für die Herstellung eines benutzerdefinierten ASIC sehr hoch sind, sodass Sie einige Chips verkaufen müssten, um die Herstellungskosten zu decken.

GPUs werden auch zur Herstellung von Bitcoins verwendet, aber da sie viel weniger energieeffizient sind, haben sie gegenüber FPGAs und kundenspezifischen ASICs an Boden verloren.

Wenn Sie sich den Monero-Hashing-Algorithmus, auch bekannt als Cryptonight, ansehen, werden Sie feststellen, dass eine FPGA-Implementierung aufgrund der hohen Speichermenge, die für den zufälligen Zugriff erforderlich ist (2 MB), nahezu unmöglich ist. Hier ist eine CPU im Vorteil.
@ lucas92 können Sie RAM nicht in FPGA integrieren, um die benötigte Speichermenge aufzunehmen?
Sie werden wahrscheinlich nicht genügend Logikelemente im FPGA dafür haben.
@GENIVI-LEARNER, aber dann können Sie nur einen oder zwei Mining-Threads pro FPGA haben, da der On-Chip-Speicher und die Off-Chip-Speicherbandbreite nicht billig sind
@ user253751 ok macht Sinn. Und wenn Sie sagen, dass On-Chip-Speicher nicht billig ist, liegt das an Fertigungsbeschränkungen?
@GENIVI-LEARNER Das würde ich vermuten. Schauen Sie sich einige FPGAs an und vergleichen Sie den Preis und die Menge an On-Chip-Speicher. Sie können externe Speicherchips verwenden (fast wie Computer-RAM-Sticks), aber dann müssen Sie die Daten zu und von den Speicherchips übertragen, und das hat eine begrenzte Bandbreite.
@GENIVI-LEARNER Monero verwendet jetzt (ich denke, es war 2017 anders) einen Algorithmus namens RandomX, bei dem der Mining-Algorithmus eine CPU ist und der beste Weg zum Mining darin besteht, eine CPU zu erstellen! Sie haben es speziell so entworfen, dass es keinen besseren Weg zum Minen gibt.