Warum verwenden die Leute GPUs für Hochleistungsberechnungen anstelle eines spezialisierteren Chips?


105

Nach meinem Verständnis haben die Leute angefangen, GPUs für die allgemeine Datenverarbeitung zu verwenden, da sie eine zusätzliche Quelle für Rechenleistung darstellen. Und obwohl sie als CPU nicht für jede Operation schnell sind, haben sie viele Kerne, so dass sie für die Parallelverarbeitung besser geeignet sind als eine CPU. Dies ist sinnvoll, wenn Sie bereits einen Computer mit einer GPU für die Grafikverarbeitung besitzen, diese jedoch nicht benötigen und mehr Rechenleistung benötigen. Ich verstehe aber auch, dass die Leute GPUs speziell kaufen , um die Rechenleistung zu erhöhen, ohne die Absicht, sie zur Verarbeitung von Grafiken zu verwenden. Dies scheint mir ähnlich zu sein wie die folgende Analogie:

Ich muss mein Gras mähen, aber mein Rasenmäher ist schwach. Also nehme ich den Käfig aus dem Kastenventilator, den ich in meinem Schlafzimmer habe, und schärfe die Klingen. Ich klebe es mit Klebeband auf meinen Mäher und finde, dass es einigermaßen gut funktioniert. Jahre später bin ich Einkaufsbeauftragter für ein großes Rasenpflegegeschäft. Ich habe ein beträchtliches Budget für Grasschneidegeräte. Anstatt Rasenmäher zu kaufen, kaufe ich ein paar Box-Fans. Auch hier funktionieren sie einwandfrei, aber ich muss für zusätzliche Teile (wie den Käfig) bezahlen, die ich nicht verwenden werde. (Für die Zwecke dieser Analogie müssen wir davon ausgehen, dass Rasenmäher und Kastenventilatoren ungefähr gleich viel kosten.)

Warum gibt es also keinen Markt für einen Chip oder ein Gerät mit der Rechenleistung einer GPU, aber nicht den Grafik-Overhead? Ich kann mir ein paar mögliche Erklärungen vorstellen. Welcher von ihnen ist richtig?

  • Eine solche Alternative wäre zu teuer, um sie zu entwickeln, wenn die GPU bereits eine gute Option ist (Rasenmäher gibt es nicht, warum sollte man nicht diesen perfekt geeigneten Box-Lüfter verwenden?).
  • Die Tatsache, dass 'G' für Grafik steht, bezeichnet nur eine beabsichtigte Verwendung und bedeutet nicht, dass der Chip besser an die Grafikverarbeitung angepasst werden muss als jede andere Art von Arbeit (Rasenmäher und Kastenventilatoren sind in diesem Fall identisch) Sie müssen nichts ändern, damit einer wie der andere funktioniert.
  • Moderne GPUs tragen den gleichen Namen wie ihre alten Vorgänger, aber heutzutage sind die High-End-GPUs nicht speziell für die Verarbeitung von Grafiken konzipiert (moderne Box-Lüfter funktionieren meistens als Rasenmäher, auch wenn sie nicht älter sind).
  • Es ist einfach, so ziemlich jedes Problem in die Sprache der Grafikverarbeitung zu übersetzen (Gras kann geschnitten werden, indem Luft sehr schnell darüber geblasen wird).

BEARBEITEN:

Meine Frage wurde beantwortet, aber basierend auf einigen Kommentaren und Antworten sollte ich meine Frage klarer formulieren. Ich frage nicht, warum nicht jeder seine eigenen Berechnungen kauft. Das wäre natürlich die meiste Zeit zu teuer.

Ich habe lediglich festgestellt, dass es Bedarf an Geräten zu geben scheint, die schnell parallele Berechnungen durchführen können. Ich habe mich gefragt, warum es so scheint, als ob das optimale Gerät die Graphics Processing Unit ist, im Gegensatz zu einem Gerät, das für diesen Zweck entwickelt wurde.


66
Weil sie sind für diese Art der Sache spezialisiert; Es ist im Grunde die gleiche Art von Mathematik. Und nVidia hat GPU-reine Boards für diese Art von massiv parallelem Zahlenverdichten gebaut und verkauft.
Heptite

7
Denken Sie daran, dass wir spezialisierte "Einheiten" zu Chips hinzugefügt haben. AES wird in Hardware (glaube ich) auf CPUs durchgeführt. AVX ist auch in Hardware implementiert. Aber wo hörst du auf? Der Chiphersteller weiß nicht, was Sie benötigen, und die meisten Leute verfügen nicht über die Fähigkeiten (technologisch oder finanziell), um ihre eigenen Chips für sehr spezielle Aufgaben zu entwickeln. Grafikkarten sind - wie gesagt - eine Art von Spezialarchitektur, die sich gut für bestimmte Aufgaben eignet. Sie sind nicht für alles gut - sondern für bestimmte Aufgaben und werden dort eingesetzt.
DetlevCM

4
Eine genauere Analogie würde die Box-Lüfter durch 100 Meter breite Mähdrescher ersetzen.
MooseBoys

6
Mein PC verfügt bereits über eine einsatzbereite GPU. Wenn ich einen dedizierten Chip entwerfe und herstelle, würde ich ein paar Millionen zurückerhalten.
PlasmaHH

19
Versuchen Sie es mit einer anderen Analogie. Angenommen, wir haben Box-Fans und Hubschrauberrotoren. In unserer hypothetischen Welt benötigten Anwendungen für Box-Lüfter immer größere Lüfter mit höheren Drehzahlen, bis wir 20-Meter-Box-Lüfter mit Kohlefaser-Flügeln hatten und diese in Massenproduktion billig wurden. Dann wurde jemandem klar, dass ein 20-Meter-Box-Lüfter im Wesentlichen nur ein Hubschrauberrotor mit einem Käfig ist. Es ist wirklich so ähnlich.
Graham

Antworten:


109

Es ist wirklich eine Kombination all Ihrer Erklärungen. Billiger und einfacher gibt es bereits und das Design hat sich von reinen Grafiken abgewandt.


Eine moderne GPU kann in erster Linie als Stream-Prozessor mit zusätzlicher Grafikhardware (und einigen Beschleunigern mit festen Funktionen, z. B. zum Kodieren und Dekodieren von Videos) angesehen werden. Die GPGPU- Programmierung verwendet heutzutage APIs, die speziell für diesen Zweck entwickelt wurden (OpenCL, Nvidia CUDA, AMD APP).

In den letzten ein oder zwei Jahrzehnten haben sich GPUs von einer Pipeline mit festen Funktionen (fast nur Grafiken) zu einer programmierbaren Pipeline (mit Shadern können Sie benutzerdefinierte Anweisungen schreiben) zu moderneren APIs wie OpenCL entwickelt, die einen direkten Zugriff auf die Shader-Kerne ohne das ermöglichen begleitende Grafik-Pipeline.

Die restlichen Grafikbits sind geringfügig. Sie machen einen so geringen Teil der Kosten der Karte aus, dass es nicht wesentlich billiger ist, sie wegzulassen, und Sie müssen die Kosten für ein zusätzliches Design bezahlen. Daher wird dies normalerweise nicht durchgeführt - es gibt kein rechenorientiertes Äquivalent für die meisten GPUs - außer auf den höchsten Ebenen, und diese sind recht teuer.

Normale "Gaming" -GPUs werden sehr häufig verwendet, da sie aufgrund ihrer Größenvorteile und ihrer relativen Einfachheit billig und einfach zu handhaben sind. Es ist ein ziemlich einfacher Weg von der Grafikprogrammierung zur Beschleunigung anderer Programme mit GPGPU. Es ist auch einfach, die Hardware zu aktualisieren, da im Gegensatz zu den anderen Optionen neuere und schnellere Produkte verfügbar sind.


Grundsätzlich ergeben sich folgende Auswahlmöglichkeiten:

  • Allzweck-CPU, ideal für Verzweigungs- und sequentiellen Code
  • Normale "Gaming" -GPU
  • Computerorientierte GPU, z. B. Nvidia Tesla und Radeon Instinct. Diese unterstützen häufig keine Grafikausgabe, weshalb die GPU eine falsche Bezeichnung ist. Sie verwenden jedoch ähnliche GPU-Kerne wie normale GPUs und OpenCL / CUDA / APP-Code ist mehr oder weniger direkt portierbar.
  • FPGAs, die ein ganz anderes Programmiermodell verwenden und in der Regel sehr teuer sind. Hier besteht eine erhebliche Eintrittsbarriere. Sie sind auch nicht unbedingt schneller als eine GPU, abhängig von der Arbeitsbelastung.
  • ASICs, kundenspezifische Schaltungen (Hardware). Dies ist sehr, sehr teuer und lohnt sich nur in extremer Größenordnung (wir sprechen zumindest von vielen tausend Einheiten) und wo Sie sicher sind, dass das Programm niemals geändert werden muss. Sie sind in der realen Welt selten realisierbar. Außerdem müssen Sie das Ganze bei jedem technologischen Fortschritt neu entwerfen und testen - Sie können nicht einfach einen neuen Prozessor wie bei CPUs und GPUs austauschen.

16
ASICs sind auch dann sinnvoll, wenn sich das Computing im wahrsten Sinne des Wortes bezahlt macht (Crypto Mining)
Ratschenfreak

4
Tatsächlich sind FPGAs oft schlechter als GPUs. Das Problem ist, dass FPGAs sehr flexibel sind. Sie können viele verschiedene Operationen ausführen. Die Berechnung ist jedoch im Allgemeinen eine Form der Mathematik, und tatsächlich besteht der Hauptteil nur aus zwei Operationen: Addition und Multiplikation (Subtraktion und Division sind Varianten der obigen). GPUs beherrschen diese beiden Vorgänge sehr, sehr viel besser als FPGAs.
MSalters

19
Sie müssen mehr über FPGAs klären. Die Vorstellung, dass es einen "Step-up" gibt, ist etwas irreführend. Sie sind eher ein Schritt zur Seite.
Yakk

6
Als letztes Beispiel hat Google eigene "Tensor-Verarbeitungseinheiten" für maschinelles Lernen. Inwieweit sie angepasst werden, ist unklar, wird jedoch als ASIC bezeichnet.
mbrig

4
@MSalters Eines der Hauptverkaufsargumente von FPGAs gegenüber GPUs ist die Leistung / Watt, die an Bedeutung gewinnt, wenn Rechenzentren an die Stromwand geraten (FPGAs sind im Allgemeinen energieeffizienter). In Bezug auf Mathematik sind FPGAs mit GPUs in Festkomma- und Ganzzahlarithmetik vergleichbar, und in Bezug auf Gleitkomma-Mathematik gibt es nur eine Verzögerung.
Wilcroft

32

Meine Lieblingsanalogie:

  • CPU : Ein Polymath-Genie. Kann ein oder zwei Dinge gleichzeitig tun, aber diese Dinge können sehr komplex sein.
  • GPU : Eine Tonne Geringqualifizierte. Jeder von ihnen kann keine großen Probleme lösen, aber in der Masse kann man viel erreichen. Auf Ihre Frage, ja, es gibt einige Grafikkosten, aber ich glaube, es ist marginal.
  • ASIC / FPGA : Ein Unternehmen. Sie können eine Tonne gering qualifizierter Arbeitskräfte oder ein paar Genies oder eine Kombination von gering qualifizierten Arbeitskräften und Genies einstellen.

Was Sie verwenden, hängt von der Kostensensitivität, dem Grad der Parallelisierbarkeit einer Aufgabe und anderen Faktoren ab. Aufgrund der Entwicklung des Marktes sind GPUs die beste Wahl für hochparallele Anwendungen, und CPUs sind die beste Wahl, wenn Stromverbrauch und Stückkosten das Hauptanliegen sind.

Direkt zu Ihrer Frage: Warum eine GPU über einen ASIC / FPGA? Im Allgemeinen kosten. Selbst bei den heutigen überhöhten GPU-Preisen ist es (im Allgemeinen) immer noch billiger, eine GPU zu verwenden, als einen ASIC zu entwerfen, der Ihren Anforderungen entspricht. Wie @ user912264 hervorhebt, gibt es bestimmte Aufgaben, die für ASICs / FPGAs nützlich sein können. Wenn Sie eine einzigartige Aufgabe haben und von der Skalierung profitieren, kann es sich lohnen, einen ASIC / FPGA zu entwerfen. Tatsächlich können Sie FPGA-Designs speziell für diesen Zweck entwerfen / kaufen / lizenzieren. Dies geschieht zum Beispiel, um die Pixel in hochauflösenden Fernsehgeräten mit Strom zu versorgen.


7
Kommentare sind sowieso nicht zum Beantworten gedacht, und dies scheint mir eine vernünftige Antwort zu sein.
Raimund Krämer

1
@BobtheMogicMoose Möglicherweise ist es jedoch um Größenordnungen schneller, ein benutzerdefiniertes FPGA für die Genomanalyse zu verwenden, als den entsprechenden Code in einer GPU zu haben. Wenn Sie Wissenschaftler dafür bezahlen, auf die Ergebnisse zu warten, rechnet sich das schnellere FPGA sehr schnell.
doneal24

FPGAs werden auch für den allgemeinen Entwickler viel zugänglicher - Microsoft bietet beispielsweise eine Cloud AI-Lösung mit FPGAs (Project BrainWave) an. AWS hat auch einige Angebote. Jeder kann einige benutzerdefinierte FPGAs für spezielle Aufgaben vermieten, ohne sie selbst erstellen zu müssen, was für viele Anwendungsfälle noch vor einigen Jahren nicht machbar war.
Brichins

Ja, ich denke, es gibt sogar FPGA-Hobby-Kits, die mit einem Arduino-Himbeer-Pi vergleichbar sind. Ich denke immer noch, dass das Programmieren von FPGAs weitaus teurer ist als die Entwicklung von Architekturen.
BobtheMagicMoose

10

Deine Analogie ist schlecht. In der Analogie, wenn Sie Geräte für ein großes Rasenpflegegeschäft kaufen, gehen Sie davon aus, dass es gute Rasenmäher gibt. Dies ist in der Computerwelt nicht der Fall - GPUs sind das beste verfügbare Tool.

Die F & E-Kosten und möglichen Leistungsgewinne für einen spezialisierten Chip sind wahrscheinlich zu hoch, um einen solchen zu rechtfertigen.

Trotzdem ist mir bekannt, dass Nvidia einige GPUs speziell für allgemeine Zwecke herausbringt - sie hatten keine Videoausgänge - ein bisschen wie der Verkauf von Box-Fans mit bereits entfernten Käfigen.


9

Natürlich können Sie spezielle Chips verwenden, entweder aus Gründen der Energieeffizienz oder der Rechengeschwindigkeit. Lassen Sie mich Ihnen die Geschichte des Bitcoin-Bergbaus erzählen:

  • Bitcoin ist neu, meine Geeks mit ihren CPUs.
  • Bitcoin ist etwas neu, Smart Geeks meins mit ihren GPUs.
  • Bitcoin ist mittlerweile (ein bisschen) berühmt, die Leute kaufen FPGAs.
  • Bitcoin ist jetzt berühmt (2013), und sogar Neulinge kaufen ASICs ("Application Specific Integrated Circuits"), um effizient abzubauen.
  • Block Belohnungen fallen (in regelmäßigen Abständen), auch alte ASICs sind nicht mehr rentabel.

Nein, es gibt keinen Grund, eine GPU anstelle eines speziellen "Riesenrechners" zu verwenden. Je größer die wirtschaftlichen Anreize sind, desto spezialisierter wird die Hardware. Sie sind jedoch ziemlich schwer zu konstruieren und lassen sich nicht herstellen, wenn Sie nicht Tausende auf einmal produzieren. Wenn es nicht rentabel ist Chips zu entwerfen, können Sie eine von kaufen diejenigen vom nächsten Walmart.

TL; DR Natürlich können Sie spezialisiertere Chips verwenden.


1
"Natürlich kann man spezialisiertere Chips verwenden" - aber es gibt spezialisierte Chips für Bitcoin (SHA-256), dann für Litecoin (Scrypt) und das ist so ziemlich alles. Leistungsfähige Computerhardware für andere Probleme gibt es nicht. (Das heißt, mit einer höheren Leistung als die aktuellen High-End-GPUs)
Agent_L

8

Was Sie in Ihrer Analogie beschreiben, ist genau das, was passiert ist. Gerade als Sie Ihren Lüfter gepackt und die Klingen geschärft haben, um ihn als Mäher zu verwenden, haben eine Gruppe von Forschungen festgestellt: "Hey, wir haben hier eine hübsche Multi-Core-Verarbeitungseinheit, versuchen Sie, sie für allgemeine Berechnungen zu verwenden! ".

Das Ergebnis war gut und der Ball rollte. Die GPU wurde von einem reinen Grafikgerät zur Unterstützung allgemeiner Berechnungen verwendet, um in den anspruchsvollsten Situationen zu helfen.

Denn die rechenintensivste Operation, die wir von Computern erwarten, ist die Grafik. Es ist genug, um einen Blick auf die erstaunlichen Fortschritte zu werfen, die Spiele heute im Vergleich zu vor wenigen Jahren gemacht haben. Dies bedeutet, dass viel Aufwand und Geld in die Entwicklung der GPUs gesteckt wurden und die Tatsache, dass sie auch verwendet werden könnten, um eine bestimmte Klasse von Allzweckberechnungen (dh extrem parallel) zu beschleunigen, hat zu ihrer Popularität beigetragen.

Zusammenfassend ist die erste Erklärung, die Sie anbieten, die genaueste:

  • Eine solche Alternative wäre zu teuer, um sie zu entwickeln, wenn die GPU bereits eine gute Option ist.

GPUs waren schon da, sie sind für alle verfügbar und sie haben gearbeitet.


5
Ich muss nicht damit einverstanden sein, dass "die rechenintensivste Operation" die Grafik ist, was natürlich davon abhängt, wer genau "wir" sind. Für allgemeine Benutzer, ja, aber in der Wissenschafts- und Ingenieurwelt gibt es viele Dinge, die anspruchsvoller sind als Grafiken. Immerhin können akzeptable Grafiken (wie für Spiele) mit einer einzigen Kombination aus einem PC mit mittlerer Reichweite und einer GPU erstellt werden. Bei schwerwiegenden Problemen werden häufig Hunderte oder Tausende solcher Einheiten kombiniert, um eine Leistung im Petaflop-Bereich zu erzielen. In diesem Fall können Probleme noch Tage oder Wochen an Rechenzeit in Anspruch nehmen.
Jamesqf

Die rechnerisch anspruchsvolle Operation ich von meinem Computer erwarten ist technisch Grafik, aber Struktur-from-Motion - Berechnungen sind nicht das, was die meisten Menschen (oder GPU - Designer) denken, wenn sie das Wort „Grafik“ zu hören.
Mark

5

Insbesondere sind GPUs keine "Kerne" im Sinne von "Task-Parallelität". Zum größten Teil handelt es sich um "Datenparallelität". SIMD ist "Single Instruction Multiple Data". Dies bedeutet, dass Sie dies nicht tun würden:

for parallel i in range(0,1024): c[i] = a[i] * b[i]

Dies würde bedeuten, dass Sie 1024 Befehlszeiger haben, die alle separate Aufgaben ausführen, die mit unterschiedlichen Raten ausgeführt werden. SIMD oder "Vector Computing" führt Anweisungen über ganze Arrays hinweg auf einmal aus.

c = a * b

Die "Schleifen" befinden sich in den Anweisungen "*" und "=" und nicht außerhalb der Anweisungen. Das obige würde dies für alle 1024 Elemente zur gleichen Zeit tun, am gleichen Befehlszeiger für alle von ihnen. Es ist, als hätte man drei riesige Register für a, b und c. SIMD-Code ist extrem eingeschränkt und funktioniert nur bei Problemen, die nicht übermäßig "verzweigt" sind.

In realistischen Fällen sind diese SIMD-Werte nicht ganz so groß wie 1024 Artikel. Stellen Sie sich eine Variable vor, die aus einer Gruppe von zusammengebundenen int32 besteht. Sie können sich das Multiplizieren als eine echte Maschinenanweisung vorstellen.

int32_x64 c; int32_x64 b; int32_x64 a; c = b * a;

Echte GPUs sind komplizierter als SIMD, aber genau das macht sie aus. Deshalb kann man nicht einfach einen zufälligen CPU-Algorithmus auf eine GPU werfen und eine Beschleunigung erwarten. Je mehr Befehle der Algorithmus verzweigt, desto weniger ist er für eine GPU geeignet.


5

Die anderen Antworten hier sind ziemlich gut. Ich werfe auch meine 2 Cent ein.

Ein Grund für die Verbreitung von CPUs ist ihre Flexibilität. Sie können sie für eine unendliche Vielzahl von Aufgaben neu programmieren. Heutzutage ist es für Unternehmen, die Produkte herstellen, billiger und schneller, eine kleine CPU oder einen kleinen Mikrocontroller in etwas zu stecken und dessen Funktionalität zu programmieren, als benutzerdefinierte Schaltkreise zu entwickeln, um die gleiche Aufgabe zu erfüllen.

Wenn Sie dasselbe Gerät wie andere verwenden, können Sie die bekannten Lösungen für Probleme nutzen, die bei Verwendung desselben Geräts (oder eines ähnlichen Geräts) auftreten. Und während die Plattform reift, entwickeln sich Ihre Lösungen weiter und werden sehr ausgereift und optimiert. Die Personen, die auf diesen Geräten codieren, erwerben auch Fachwissen und beherrschen ihr Handwerk sehr gut.

Wenn Sie einen neuen Gerätetyp von Grund auf neu erstellen, eine Alternative zu einer GPU, würde es Jahre dauern, bis selbst die ersten Anwender tatsächlich wissen, wie man ihn verwendet. Wie optimieren Sie das Auslagern von Berechnungen auf dieses Gerät, wenn Sie einen ASIC an Ihre CPU anschließen?

Die Computerarchitektur-Community ist seit mehreren Jahren begeistert von dieser Idee (offensichtlich war sie schon früher beliebt, erlebte aber vor kurzem eine Renaissance). Diese "Beschleuniger" (ihre Bezeichnung) weisen einen unterschiedlichen Grad an Umprogrammierbarkeit auf. Das Problem ist, wie eng definieren Sie den Umfang des Problems, das Ihr Beschleuniger angehen kann? Ich habe sogar mit einigen Leuten gesprochen, die an der Erstellung eines Beschleunigers arbeiteten, indem sie analoge Schaltkreise mit Operationsverstärkern verwendeten, um Differentialgleichungen zu berechnen. Tolle Idee, aber extrem enger Spielraum.

Nachdem Sie einen funktionierenden Beschleuniger haben, werden die wirtschaftlichen Kräfte über Ihr Schicksal entscheiden. Marktträgheit ist eine unglaubliche Kraft. Auch wenn etwas eine großartige Idee ist, ist es wirtschaftlich machbar, Ihre Arbeitslösungen für die Verwendung dieses neuen Geräts umzugestalten? Vielleicht, vielleicht nicht.

GPUs sind für bestimmte Arten von Problemen furchtbar, daher arbeiten viele Leute / Firmen an anderen Arten von Geräten. Aber GPUs sind bereits so verwurzelt, werden ihre Geräte jemals wirtschaftlich sein? Ich denke wir werden sehen.

Bearbeiten: Erweitern Sie meine Antwort ein wenig, jetzt, da ich aus dem Bus bin.

Eine vorsichtige Fallstudie ist das Intel Larrabee-Projekt. Es begann als Parallelverarbeitungsgerät, das Grafiken in Software erstellen konnte. Es gab keine spezielle Grafikhardware. Ich habe mit jemandem gesprochen, der an dem Projekt gearbeitet hat, und ein Hauptgrund, warum er sagte, es sei fehlgeschlagen und abgebrochen worden (abgesehen von schrecklicher interner Politik), war, dass er den Compiler einfach nicht dazu bringen konnte, guten Code dafür zu produzieren. Natürlich hat es funktionierenden Code erzeugt, aber wenn der gesamte Punkt Ihres Produkts die maximale Leistung ist, ist es besser, einen Compiler zu haben, der ziemlich optimalen Code erzeugt. Dies lässt sich auf meinen früheren Kommentar zurückführen, dass ein Mangel an fundiertem Fachwissen in Bezug auf Hardware und Software für Ihr neues Gerät ein großes Problem darstellt.

Einige Elemente des Larrabee-Designs haben es in das Xeon Phi / Intel MIC geschafft. Dieses Produkt hat es tatsächlich auf den Markt gebracht. Es konzentrierte sich ausschließlich auf die Parallelisierung wissenschaftlicher und anderer HPC-Berechnungen. Es sieht so aus, als wäre es jetzt ein kommerzieller Misserfolg. Eine andere Person, mit der ich bei Intel gesprochen habe, hat angedeutet, dass das Preis-Leistungs-Verhältnis nicht mit denen von GPUs konkurriert.

Die Leute haben versucht, die Logiksynthese für FPGAs in Compiler zu integrieren, damit Sie automatisch Code für Ihre FPGA-Beschleuniger generieren können. Sie funktionieren nicht so gut.

Ein Ort, der wirklich fruchtbarer Boden für Beschleuniger oder andere Alternativen zu GPUs zu sein scheint, ist die Wolke. Aufgrund der Skaleneffekte, die bei diesen großen Unternehmen wie Google, Amazon und Microsoft bestehen, lohnt es sich, in alternative Berechnungsschemata zu investieren. Jemand hat bereits die Tensor-Verarbeitungseinheiten von Google erwähnt. Microsoft verfügt über FPGAs und andere Komponenten in seiner Bing- und Azure-Infrastruktur. Gleiche Geschichte mit Amazon. Es ist absolut sinnvoll, wenn die Waage Ihre Investition in Zeit, Geld und Ingenieurstränen ausgleichen kann.

Zusammenfassend lässt sich sagen, dass die Spezialisierung mit vielen anderen Dingen im Widerspruch steht (Wirtschaftlichkeit, Reifegrad der Plattform, technische Fachkenntnisse usw.). Eine Spezialisierung kann Ihre Leistung erheblich verbessern, schränkt jedoch den Anwendungsbereich Ihres Geräts ein. Meine Antwort konzentrierte sich auf viele negative Aspekte, aber Spezialisierung hat auch eine Menge Vorteile. Es sollte unbedingt verfolgt und untersucht werden, und wie ich bereits erwähnte, verfolgen viele Gruppen es ziemlich aggressiv.

Entschuldigung, bitte nochmal bearbeiten: Ich denke, Ihre ursprüngliche Prämisse ist falsch. Ich glaube, es ging weniger darum, nach zusätzlichen Quellen für Rechenleistung zu suchen, als vielmehr darum, dass Menschen eine Chance erkennen. Grafikprogrammierung ist sehr algebralastig und die GPU wurde entwickelt, um allgemeine Operationen wie Matrix-Multiplikation, Vektoroperationen usw. effizient auszuführen. Operationen, die auch im wissenschaftlichen Rechnen häufig vorkommen.

Das Interesse an GPUs begann, als die Leute erkannten, dass die Versprechungen des Intel / HP EPIC-Projekts (Ende der 90er Jahre, Anfang der 2000er Jahre) stark übertrieben waren. Es gab keine generelle Lösung für die Compiler-Parallelisierung. Anstatt also zu sagen "Wo finden wir mehr Rechenleistung, oh wir könnten die GPU ausprobieren", war es meiner Meinung nach eher "Wir haben etwas, das sich gut für parallele Berechnungen eignet, können wir dies allgemeiner programmierbar machen". Viele der beteiligten Personen waren Mitglieder der Scientific Computing-Community, die bereits parallelen Fortran-Code hatten, den sie auf Cray- oder Tera-Computern ausführen konnten (Tera MTA hatte 128 Hardware-Threads). Vielleicht gab es Bewegung aus beiden Richtungen, aber ich habe nur von den Ursprüngen von GPGPU aus dieser Richtung gehört.


Mit "Beschleunigern" meinen Sie maßgeschneiderte Hardware oder Super-Cluster von Low-Power-Rechenknoten? Können Sie dies anhand eines Beispiels für eine Beschleunigerhardware erläutern?
Manav mn

Entschuldigung, ich dachte, ich hätte das aus dem Zusammenhang deutlich gemacht. Accelerator ist nur ein Überbegriff für einen Coprozessor oder eine Offload-Karte. Der Gleitkommawert befand sich ursprünglich in einem Coprozessor und nicht in der Haupt-CPU, und er wäre als Beschleuniger angesehen worden. GPUs, DSPs, das Xeon Phi, FPGAs, wenn sie auf einer PCIe-Karte oder ähnlichem sind, die analoge Differentialgleichung, die ich erwähnte, es gibt Geräte, die die Virtualisierung unterstützen, es gibt aktuelle Forschungen zu neuronalen Netzwerkbeschleunigern. Das sind alles Beispiele für Beschleuniger.
NerdPirate

4

Bildbeschreibung hier eingeben

Ein ASIC (Custom Silicon) ist sehr schnell, aber in der Konstruktion und Herstellung sehr teuer. Früher waren ASICs zweckspezifisch, und die CPU war ein Ansatz, mit dem Computer "programmiert" werden konnten, damit Computeraufgaben von Software ausgeführt werden konnten. Frühe CPU's gaben den Leuten die Möglichkeit, die Leistung von ASIC ohne die massiven Kosten zu nutzen, indem sie den Chip vor Ort programmierten. Dieser Ansatz wurde so erfolgreich, dass er zu dem (sehr) schnellen Computer führte, den Sie gerade verwenden.

Warum also GPUs?

Mitte der 90er Jahre erkannte 3DFX, dass 3D-Rendering-Aufgaben so spezifisch waren, dass ein kundenspezifischer ASIC VIEL bessere Leistungen erbrachte als eine CPU. Sie erstellten einen Computer-Coprozessor, der 3D-Rendering-Aufgaben von der CPU auf diesen Coprozessor verlagerte, den sie als "GPU" bezeichneten. Wettbewerb und Marktnachfrage trieben Innovationen in diesem Bereich an einen Punkt, an dem GPUs Berechnungen VIEL schneller ausführten als CPUs. Daher stellte sich die Frage: "Warum kann ich die GPU nicht verwenden, um meine Zahlen anstelle der CPU zu berechnen?" GPU-Hersteller sahen eine Nachfrage und eine Möglichkeit, mehr Geld zu verdienen, und begannen, ihre Plattformen zu ändern, damit Entwickler ihre Hardware nutzen können. Aber die Hardware-Hardware war so zweckspezifisch, dass es Einschränkungen gab und immer noch gibt, wozu Sie die GPU auffordern können. Ich werde hier nicht näher darauf eingehen, warum.

Warum gab es also kein spezifischeres Silizium? Warum NUR Grafiken?

Zwei Gründe: 1) Preis. GPUs hatten einen guten Markt und konnten es rechtfertigen, aber schon damals war es ein großes Risiko. Niemand wusste wirklich, ob 3DFX einen Gewinn erzielen konnte (es stellte sich heraus, dass dies nicht der Fall war und dass 3DFX nicht mehr funktioniert). Sogar jetzt, mit der Größe des GPU-Marktes, gibt es wirklich nur 3 Konkurrenten. 2) CPUs erfüllten tatsächlich den Bedarf an "benutzerdefiniertem Silizium" mit Befehlserweiterungen. Denken Sie an MMX zurück - dies war eigentlich Intels Versuch, die Grafik in der CPU zu beschleunigen, als 3DFX an Geschwindigkeit gewann. Seitdem ist der x86-Befehlssatz mit all diesen benutzerdefinierten Erweiterungen ziemlich umfangreich geworden. Viele dieser Erweiterungen machten zu der Zeit Sinn (wie MMX), sind aber im Prozessor jetzt größtenteils nur noch Eigengewicht. Sie können sie jedoch nicht entfernen, da dadurch vorhandene Software beschädigt wird. Es' Tatsächlich ist ARM eines der Verkaufsargumente - ARM ist ein abgespeckter Befehlssatz. Es gibt nicht so viele Befehlserweiterungen, aber dies macht das Silizium kleiner und billiger in der Herstellung.

Mir scheint, Sie könnten eine Menge Geld verdienen, wenn Sie die Kosten für kundenspezifisches Silizium senken könnten. Arbeitet nicht jemand daran?

Es gibt eine Technologie namens FPGA - Field Programmable Gate Array, die es seit den Anfängen des Rechnens gibt. Es handelt sich im Wesentlichen um einen Mikrochip, den Sie "vor Ort" mithilfe von Software entwerfen können. Es ist eine sehr coole Technologie, aber die gesamte Struktur, die benötigt wird, um den Chip programmierbar zu machen, verbraucht eine Menge Silizium und bewirkt, dass die Chips mit viel niedrigeren Taktgeschwindigkeiten laufen. FPGAs KÖNNEN schneller sein als CPUs, wenn Sie genug Silizium auf dem Chip haben UND die Aufgabe effektiv parallelisieren können. Aber sie haben nur eine begrenzte Logik, mit der Sie sie belegen können. Alle bis auf die teuersten FPGAs waren langsamer als GPUs für den frühen Bitcoin-Abbau, aber ihre ASIC-Gegenstücke haben die Rentabilität des GPU-Abbaus effektiv beendet. Andere Kryptowährungen haben spezielle Algorithmen verwendet, die nicht parallelisiert werden können.

Der Hauptbegrenzer bei FPGAs ist die Siliziumgröße - wie viel Logik kann auf den Chip gepasst werden? Die zweite ist die Taktrate, da es schwierig ist, Dinge wie Hotspots, Leckagen und Übersprechen in einem FPGA zu optimieren. Neuere Fertigungsmethoden haben diese Probleme minimiert, und Intel hat sich mit Altera zusammengetan, um ein FPGA bereitzustellen , mit dem Ingenieure die Vorteile von "benutzerdefiniertem Silizium" als Co-Prozessor in einem Server nutzen können. In gewisser Weise kommt es also.

Werden FPGAs jemals CPUs und GPUs ersetzen?

Wahrscheinlich nicht so bald. Die neuesten CPUs und GPUs sind MASSIVE und das Silizium in hohem Maße auf thermische und elektrische Leistung abgestimmt. Sie können FPGAs nicht auf die gleiche Weise optimieren wie einen benutzerdefinierten ASIC. Mit Ausnahme einiger bahnbrechender Technologien wird die CPU wahrscheinlich der Kern Ihres Computers mit FPGA- und GPU-Coprozessoren bleiben.


1
Viele dieser Erweiterungen machten zu der Zeit Sinn (wie MMX), sind aber im Prozessor jetzt größtenteils nur noch Eigengewicht. 3D-Rendering ist bei weitem nicht der einzige Anwendungsfall für SIMD. Das meiste "Gewicht" von MMX sind die Ausführungseinheiten, und diese können mit breiteren Vektoren wie SSE2, AVX2 und AVX512 geteilt werden. Diese werden häufig für die hochwertige Videokodierung auf CPUs und für viele andere Aufgaben, einschließlich Hochleistungsrechnen, verwendet. Aber auch Bibliotheksimplementierungen von memchr, strlen und vielen anderen Sachen. zB ein Array mehr als ein Element gleichzeitig filtern
Peter Cordes

3

Tatsächlich gibt es spezielle Boards für Hochgeschwindigkeits-Computing, z. B. hat Xilinx eine Liste von 178 PCI-e-Boards, die ihre FPGAs verwenden, und etwa ein Drittel dieser Boards sind "Number Cruncher" mit einem oder mehreren leistungsstarken FPGA-Chips und vielen On-One-Chips. Board DDR-Speicher. Es gibt auch Hochleistungs-DSP-Karten ( Beispiel ) für Hochleistungs-Computing-Aufgaben.

Ich denke, die Popularität von GPU-Boards ergibt sich aus ihrem Ziel, eine breitere Kundengruppe anzusprechen. Sie müssen nicht in spezielle Hardware investieren, um mit Nvidia CUDA zu spielen. Wenn Sie also eine Aufgabe haben, die spezielle Hardware erfordert, haben Nvidia-GPUs einen Wettbewerbsvorteil, da Sie bereits wissen, wie man sie programmiert.


2

Ich denke, die Antwort auf Ihre Frage hängt davon ab, wie Hochleistungsberechnungen definiert werden.

Im Allgemeinen hängt die Hochleistungsberechnung mit der Rechenzeit zusammen. In diesem Fall möchte ich die Verknüpfung des Hochleistungs-Computing-Clusters teilen .

Über den Link wird der Verwendungsgrund der GPU angegeben; Die Verwendung von Grafikkarten (oder besser gesagt deren GPUs) zur Berechnung von Grid-Computing-Vorgängen ist trotz der geringeren Genauigkeit weitaus wirtschaftlicher als die Verwendung von CPUs.


2
High-End-GPGPUs bieten einen guten Durchsatz für 64-Bit double-Präzision und nicht nur 32-Bit-Präzision float. (Einige normale GPUs sparen HW für double). Die wichtigsten Anbieter unterstützen alle IEEE-FP-Mathematik (ich denke sogar mit Denormalen). Es gibt also keinen Präzisionsverlust, es sei denn, Sie möchten Präzision gegen Leistung eintauschen, z. B. mit 16-Bit-FP mit halber Präzision, das auf einigen Hardwarekomponenten einen noch besseren Durchsatz aufweist (und natürlich die Hälfte der Speicherbandbreite). Hochleistungscode auf CPUs verwendet häufig auch 32-Bit float, um doppelt so viele Elemente pro SIMD-Vektor und die Hälfte der Speicherbandbreite zu erhalten.
Peter Cordes

1
@PeterCordes Ich habe einige Arbeiten im Bereich der ungefähren Berechnung gesehen, die sogar bis zu 8-Bit-Gleitkommazahlen reichen, obwohl ich glaube, dass viele GPUs dies in Bezug auf Hardware nicht unterstützen.
JAB
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.