Warum verwenden wir immer noch CPUs anstelle von GPUs?

370

Es scheint mir, dass heutzutage viele Berechnungen an der GPU durchgeführt werden. Natürlich werden dort Grafiken erstellt, aber mit CUDA und dergleichen, KI, Hashing-Algorithmen (denken Sie an Bitcoins) und anderen wird auch auf der GPU gearbeitet. Warum können wir die CPU nicht einfach loswerden und die GPU alleine verwenden? Was macht die GPU so viel schneller als die CPU?

ell
quelle
3
Woher weiß ich, welche Antworten die richtigen Informationen enthalten? Sollte ich warten, bis andere die Frage beantwortet haben? Ich glaube, ich war zu voreilig bei der Annahme einer Antwort: O
ell
14
Es gibt einige aktuelle Antworten @ell now, die keine "Fehlinformationen" enthalten. Dank des effizienten Marktmechanismus des wunderbar gestalteten StackExchange steigen sie mit steigenden Stimmen allmählich an die Spitze. Ich würde empfehlen, etwas länger zu warten, bevor Sie eine Antwort annehmen. Sieht so aus, als würden Sie genau das mit Bedacht tun. Das ist übrigens eine gute Frage. Es mag offensichtlich erscheinen, aber es ist überhaupt nicht. Danke, dass Sie es gefragt haben!
Ellie Kesselman
124
Ein bisschen wie die Frage "Wenn Boeing 747 schneller und sparsamer ist, warum fahren wir dann immer noch Autos"?
Vartec
7
Nein, weil es nicht RISC versus CISC ist. Es ist eine der anderen Grundlagen der Informatik, leicht getarnt. Es ist "Warum verlagern wir die Arbeit vom zentralen Prozessor auf E / A-Prozessoren?" .
JdeBP
4
@vartec: Ich denke, eine etwas bessere Analogie könnte zwischen Bussen und Taxis bestehen. Wenn es vierzig Leute gibt, die alle vom selben Ort zum selben Ort wollen, ist ein Bus viel effizienter. Wenn es vierzig Leute gibt, deren gewünschter Ursprung und Bestimmungsort weit gestreut sind, kann sogar ein einziges Taxi genauso gut sein wie ein Bus, und für die Kosten des Busses könnte man mehrere Taxis haben.
Superkatze

Antworten:

387

TL; DR-Antwort: GPUs haben weitaus mehr Prozessorkerne als CPUs. Da jedoch jeder GPU-Kern deutlich langsamer als ein CPU-Kern ist und nicht über die für moderne Betriebssysteme erforderlichen Funktionen verfügt, eignen sie sich nicht für die Durchführung eines Großteils der täglichen Verarbeitung rechnen. Sie eignen sich am besten für rechenintensive Vorgänge wie Videoverarbeitung und Physiksimulationen.


GPGPU ist noch ein relativ neues Konzept. GPUs wurden ursprünglich nur zum Rendern von Grafiken verwendet. Mit fortschreitender Technologie wurde die große Anzahl von GPU-Kernen im Vergleich zu CPUs ausgenutzt, um Rechenfunktionen für GPUs zu entwickeln, mit denen viele parallele Datenströme gleichzeitig verarbeitet werden können, unabhängig davon, um welche Daten es sich handelt. Während GPUs Hunderte oder sogar Tausende von Stream-Prozessoren haben können, laufen sie jeweils langsamer als ein CPU-Kern und haben weniger Funktionen (selbst wenn sie vollständig sind und so programmiert werden können, dass jedes Programm ausgeführt werden kann, das eine CPU ausführen kann). Zu den Funktionen, die bei GPUs fehlen, gehören Interrupts und virtueller Speicher, die zur Implementierung eines modernen Betriebssystems erforderlich sind.

Mit anderen Worten, CPUs und GPUs weisen erheblich unterschiedliche Architekturen auf, die sie für unterschiedliche Aufgaben besser geeignet machen. Eine GPU kann große Datenmengen in vielen Streams verarbeiten und relativ einfache Vorgänge ausführen, eignet sich jedoch nicht für die umfangreiche oder komplexe Verarbeitung einzelner oder weniger Datenströme. Eine CPU ist pro Kern viel schneller (in Form von Anweisungen pro Sekunde) und kann komplexe Vorgänge mit einem oder wenigen Datenströmen einfacher ausführen, kann jedoch nicht viele Datenströme gleichzeitig effizient verarbeiten.

Infolgedessen sind GPUs nicht für Aufgaben geeignet, die nicht wesentlich von der Parallelisierung profitieren oder nicht parallelisiert werden können, einschließlich vieler gängiger Verbraucheranwendungen wie Textverarbeitungsprogrammen. Darüber hinaus verwenden GPUs eine grundlegend andere Architektur. Man müsste eine Anwendung speziell für eine GPU programmieren, damit sie funktioniert, und zum Programmieren von GPUs sind erheblich andere Techniken erforderlich. Diese verschiedenen Techniken umfassen neue Programmiersprachen, Änderungen an vorhandenen Sprachen und neue Programmierparadigmen, die besser geeignet sind, eine Berechnung als eine von vielen Stream-Prozessoren auszuführende Paralleloperation auszudrücken. Weitere Informationen zu den zum Programmieren von GPUs erforderlichen Techniken finden Sie in den Wikipedia-Artikeln zur Stream-Verarbeitung und zum Parallel-Computing .

Moderne GPUs sind in der Lage, Vektoroperationen und Gleitkomma-Arithmetik auszuführen. Die neuesten Karten können Gleitkommazahlen mit doppelter Genauigkeit verarbeiten. Mit Frameworks wie CUDA und OpenCL können Programme für GPUs geschrieben werden, und aufgrund der Art der GPUs eignen sie sich am besten für hochparallelisierbare Vorgänge, z Computercluster wie bei NVIDIA Tesla Personal Supercomputern . Verbraucher mit modernen GPUs, die Erfahrung mit Folding @ home haben, können mit diesen GPU-Clients Beiträge leisten, die mit sehr hoher Geschwindigkeit Proteinfaltungssimulationen durchführen und mehr Arbeit für das Projekt leisten können (lesen Sie unbedingt die häufig gestellten Fragenerstens vor allem im Zusammenhang mit GPUs). GPUs können auch mithilfe von PhysX eine bessere Physiksimulation in Videospielen ermöglichen, die Kodierung und Dekodierung von Videos beschleunigen und andere rechenintensive Aufgaben ausführen. Es sind diese Arten von Aufgaben, für die sich GPUs am besten eignen.

AMD ist Vorreiter bei einem Prozessordesign namens Accelerated Processing Unit (APU) , das herkömmliche x86-CPU-Kerne mit GPUs kombiniert. Dieser Ansatz ermöglicht eine Grafikleistung, die Grafiklösungen mit integriertem Motherboard weit überlegen ist (obwohl teurere Grafikprozessoren nicht mithalten können), und ermöglicht ein kompaktes, kostengünstiges System mit guter Multimedia-Leistung, ohne dass eine separate GPU erforderlich ist. Die neuesten Intel-Prozessoren bieten auch integrierte Grafik auf dem Chip, obwohl die wettbewerbsfähige integrierte GPU-Leistung derzeit auf die wenigen Chips mit Intel Iris Pro Graphics beschränkt ist. Mit fortschreitender Technologie werden wir einen zunehmenden Grad an Konvergenz dieser einmal getrennten Teile feststellen. AMD-VorstellungenEine Zukunft, in der CPU und GPU eine Einheit bilden und in der die gleiche Aufgabe nahtlos gelöst werden kann .

Dennoch sind viele Aufgaben, die von PC-Betriebssystemen und -Anwendungen ausgeführt werden, noch besser für CPUs geeignet, und es ist viel Arbeit erforderlich, um ein Programm mithilfe einer GPU zu beschleunigen. Da so viele vorhandene Softwareprodukte die x86-Architektur verwenden und GPUs unterschiedliche Programmiertechniken erfordern und mehrere wichtige Funktionen für Betriebssysteme fehlen, ist ein allgemeiner Übergang von der CPU zur GPU für das tägliche Computing sehr schwierig.

bwDraco
quelle
39
Ich denke, der Hauptgrund für diese Antwort ist, dass wir keine guten Programmiersprachen für den Mainstream haben, um mit solchen parallelen Architekturen umzugehen. Wir haben jahrzehntelang gekämpft, um die Multi-Thread-Programmierung voranzutreiben, und die Leute nennen Multi-Threading immer noch "böse". Trotzdem sind Multi-Core-CPUs und GPUs Realität, und wir müssen uns neue Programmierparadigmen einfallen lassen, um damit fertig zu werden.
Soren
Bemerkenswert ist, dass Intel (viel zu lange) an der Larrabee- Architektur gearbeitet hat, bei der es sich im Wesentlichen um einen Chip mit einer großen Anzahl von x86-Kernen handelt.
Chris S
Gute Antwort für die Diskussion der Hardware-Gründe und der APUs und wie sie dies ändern werden. Allerdings gibt @Soren einen sehr guten Punkt auf der Softwareseite. In Wirklichkeit ist es die Kombination aus Hardware- und Softwareproblemen und der Tatsache, dass CPUs funktionieren. Wenn bekannt ist, dass etwas funktioniert, ist es schwierig, die Leute dazu zu bringen, es zu ersetzen.
Nich Del
3
"Wir haben keine guten Mainstream-Programmiersprachen, um mit solchen parallelen Architekturen fertig zu werden." - Haskell, OCaml, Scheme, F #, Erlang und so ziemlich jede andere funktionale Programmiersprache beherrschen Multithreading sehr gut. Alle diejenigen, die ich erwähnt habe, sind Mainstream.
BlueRaja - Danny Pflughoeft
1
@BlueRaja - wir kennen diese Sprachen, Ihre Definition des Hauptstroms muss anders sein als meine :-)
Soren
252

Was macht die GPU so viel schneller als die CPU?

Die GPU ist nicht schneller als die CPU. CPU und GPU sind mit zwei unterschiedlichen Zielen und unterschiedlichen Kompromissen konzipiert, sodass sie unterschiedliche Leistungsmerkmale aufweisen. Bestimmte Aufgaben sind in einer CPU schneller, während andere Aufgaben in einer GPU schneller berechnet werden. Die CPU zeichnet sich durch komplexe Manipulationen an einer kleinen Datenmenge aus, die GPU durch einfache Manipulationen an einer großen Datenmenge.

Die GPU ist eine Spezial-CPU, die so konzipiert ist, dass ein einzelner Befehl über einen großen Datenblock (SIMD / Single Instruction Multiple Data) funktioniert, wobei alle denselben Vorgang anwenden. Das Arbeiten in Datenblöcken ist mit Sicherheit effizienter als das gleichzeitige Arbeiten mit einer einzelnen Zelle, da das Decodieren der Anweisungen einen erheblich geringeren Aufwand bedeutet. Das Arbeiten in großen Blöcken bedeutet jedoch, dass mehr parallele Arbeitseinheiten vorhanden sind, sodass viel mehr Transistoren verwendet werden einen einzelnen GPU-Befehl zu implementieren (was zu Einschränkungen der physischen Größe führt, mehr Energie verbraucht und mehr Wärme erzeugt).

Die CPU ist darauf ausgelegt, eine einzelne Anweisung auf einem einzelnen Datum so schnell wie möglich auszuführen. Da es nur mit einem einzelnen Datum arbeiten muss, ist die Anzahl der Transistoren, die zum Implementieren eines einzelnen Befehls erforderlich sind, viel geringer, sodass sich eine CPU einen größeren Befehlssatz, eine komplexere ALU, eine bessere Verzweigungsvorhersage und eine bessere Virtualisierung leisten kann Architektur und ein ausgefeilteres Caching / Pipeline-Schema. Die Befehlszyklen sind auch schneller.

Der Grund, warum wir immer noch CPU verwenden, ist nicht, dass x86 der König der CPU-Architektur ist und Windows für x86 geschrieben wurde. Der Grund, warum wir immer noch CPU verwenden, ist, dass die Art von Aufgaben, die ein Betriebssystem ausführen muss, dh Entscheidungen wird auf einer CPU-Architektur effizienter ausgeführt. Ein Betriebssystem muss Hunderte verschiedener Datentypen betrachten und verschiedene Entscheidungen treffen, die alle voneinander abhängen. Diese Art von Job lässt sich nicht leicht parallelisieren, zumindest nicht in eine SIMD-Architektur.

Was wir in Zukunft sehen werden, ist eine Konvergenz zwischen der CPU- und der GPU-Architektur, wenn die CPU die Fähigkeit erlangt, über Datenblöcke, z. B. SSE, zu arbeiten. Da sich die Herstellungstechnologie verbessert und die Chips kleiner werden, kann es sich die GPU leisten, komplexere Anweisungen zu implementieren.

Lüge Ryan
quelle
23
Dies ist wahrscheinlich die beste Antwort hier. Es ist wichtig, die grundlegenden Unterschiede zwischen den beiden Paradigmen zu verstehen. Wenn GPUs CPUs überholen sollen, bedeutet dies in Anbetracht der heutigen Workloads im Wesentlichen, dass eine GPU zu einer CPU werden muss. Und damit ist die Frage die Antwort.
Surfasb
2
+1 dafür ist die beste Antwort. Sowohl dies als auch die akzeptierte Antwort sind richtig, aber diese erklärt es viel deutlicher.
Ich bin überrascht, dass niemand in diesem Thread den Aufwand für das Senden von Daten an die GPU erwähnt hat. Durch die begrenzte Bandbreite über PCI-Express-Busse werden einige parallele Vorgänge auf einer GPU erheblich langsamer ausgeführt als auf der CPU. Ein einfacher Fall lässt sich beobachten, in dem das Variieren der Größe einer FFT einen signifikanten Unterschied in der Leistung der GPU im Vergleich zur CPU ausmachte , da beim Einrichten eines Kontexts und Zurücklesen der Ergebnisse ein erheblicher Aufwand für das Senden von Daten anfiel : stackoverflow.com/a/8687732/303612 Kleinere Operationen können im Cache auf CPUs ausgeführt werden, und die Speicherbandbreite ist der aktuellen PCI-E-Architektur bei weitem überlegen
Dr. Andrew Burnett-Thompson,
1
@ Dr.AndrewBurnett-Thompson: das liegt daran, dass das für die Frage irrelevant ist. Derzeit wird die GPU als zusätzliche Verarbeitungseinheit betrachtet, weshalb das Verschieben von Daten von / zu einer GPU notwendig und teuer ist. Wenn wir die GPU als erstklassige Prozessoreinheit behandeln, müssen keine Daten zwischen dem Hauptspeicher und dem GPU-Speicher gemarshallt werden.
Lie Ryan
1
Nicht optimistisch, es ist kein Overhead von null Bandbreite. Wenn ein Prozessor mit einer GPU-Architektur die gesamte Show ausführt, muss nichts verschoben werden, der GPU-Speicher ist der Hauptspeicher. Es gibt in erster Linie keinen zu diskutierenden Übertragungsaufwand, da es keine Übertragungen gibt. Dies ist übrigens nicht hypothetisch. Die APUs von AMD verwenden HSA (heterogene Systemarchitektur) mit einem einheitlichen Hauptspeicher, der ein Null-Kopieren zwischen der CPU und der GPU ermöglicht.
Lie Ryan
75

GPUs fehlen:

  1. Virtueller Speicher (!!!)
  2. Adressierungsmittel für andere Geräte als Speicher (z. B. Tastaturen, Drucker, Sekundärspeicher usw.)
  3. Interrupts

Sie benötigen diese, um so etwas wie ein modernes Betriebssystem zu implementieren.

Sie sind auch (relativ) langsam bei doppeltgenauer Arithmetik (im Vergleich zu ihrer einfachgenauen Rechenleistung) * und viel größer (in Bezug auf die Siliziumgröße). Ältere GPU-Architekturen unterstützen keine indirekten Aufrufe (über Funktionszeiger), die für die meisten allgemeinen Programmieraufgaben benötigt werden, und neuere Architekturen, die dies nur langsam tun. Schließlich verlieren GPUs bei Aufgaben, die nicht parallelisiert werden können, im Vergleich zu CPUs bei gleicher Auslastung (wie in anderen Antworten angegeben).

EDIT : Bitte beachten Sie, dass diese Antwort im Jahr 2011 geschrieben wurde - GPU Tech ist ein Bereich, der sich ständig ändert. Die Dinge können sehr unterschiedlich sein, je nachdem, wann Sie dies lesen: P

* Einige GPUs, wie NVidias Quadro- oder Tesla-Linien (Fermi-Generation oder neuer) oder AMDs FirePro-Linie (GCN-Generation oder neuer), sind bei doppelter Rechengenauigkeit nicht langsam. Diese sind jedoch nicht in den meisten Verbrauchermaschinen enthalten.

Billy ONeal
quelle
@Cicada: Hast du eine Referenz dafür? Selbst wenn dies der Fall ist, wird selbst die neueste Hardware in diesem Fall keine gute Leistung erbringen. (zB hätte nicht zu viel einen Perf-Vorteil gegenüber einer CPU - und einen Stromverbrauchsnachteil)
Billy ONeal
3
Ja, die Fermi-Geräte, wie Sie sagten (mit CUDA 4.0 und sm_20), unterstützen indirekte Sprünge (und daher virtuelle C ++ - Methoden, Vererbung usw.).
Angry Lettuce
544 GigaFLOPS von einer $ 300 2 Jahre alten GPU sind langsam?
Ben Voigt
2
@Ben: Diese Leistung erhalten Sie nur in datenparallelen Anwendungen. Allgemeine sequentielle Operationen sind ein ganz anderes Ballspiel. (Das ist nur so, wenn alle 1600 Kerne auf diesem Chip parallel laufen und im Wesentlichen immer wieder den gleichen Befehl
ausführen
@Billy: Aber das ist Langsamkeit für eine bestimmte Klasse von Algorithmen, nicht Langsamkeit für Arithmetik mit doppelter Genauigkeit (was Sie behauptet haben). (Und CPUs erzielen normalerweise auch keine Benchmark-
Ben Voigt
37

Eine CPU ist wie ein Arbeiter, der superschnell arbeitet. Eine GPU ist wie eine Gruppe von Klonarbeitern, die schnell arbeiten, aber alle genau dasselbe tun müssen (mit der Ausnahme, dass Sie einige Klone untätig lassen können, wenn Sie möchten).

Was hätten Sie lieber als Mitentwickler, einen superschnellen Typ oder 100 schnelle Klone, die eigentlich nicht so schnell sind, aber alle die gleichen Aktionen gleichzeitig ausführen müssen?

Für einige Aktionen sind die Klone ziemlich gut, z. B. den Boden fegen - sie können jeweils einen Teil davon fegen.

Bei einigen Aktionen stinken die Klone, z. B. schreiben Sie den wöchentlichen Bericht - alle Klone außer einem sitzen im Leerlauf, während ein Klon den Bericht schreibt (ansonsten erhalten Sie nur 100 Kopien desselben Berichts).

John Robertson
quelle
4
Könnte ich auch ... beides haben?
Kevin Panko
22
@ Kevin: Ja, aber Sie würden einen Computer mit benötigen sowohl eine CPU und eine GPU! Wenn es nur so etwas gäbe!
Joachim Sauer
3
Großartige Analogie. Ich werde mich daran erinnern.
Mayo
23

Weil GPUs so konstruiert sind, dass sie viele kleine Dinge gleichzeitig erledigen, und CPUs so konstruiert sind, dass sie jeweils eine Sache erledigen. Wenn Ihr Prozess wie beim Hashing massiv parallel ausgeführt werden kann, ist die GPU um Größenordnungen schneller, andernfalls wird dies nicht der Fall sein.

Ihre CPU kann einen Hash viel, viel schneller berechnen als Ihre GPU - aber die Zeit, die Ihre CPU dafür benötigt, könnte Ihre GPU einige hundert Hashes durchlaufen. GPUs sind so konzipiert, dass sie eine Menge Dinge gleichzeitig erledigen, und CPUs sind so konzipiert, dass sie eine Sache gleichzeitig erledigen, jedoch sehr schnell.

Das Problem ist, dass CPUs und GPUs sehr unterschiedliche Lösungen für sehr unterschiedliche Probleme darstellen. Es gibt eine kleine Überlappung, aber im Allgemeinen bleibt das, was sich in ihrer Domäne befindet, in ihrer Domäne. Wir können die CPU nicht durch eine GPU ersetzen, da die CPU dort viel besser arbeitet als eine GPU es jemals könnte, einfach weil eine GPU nicht für diese Aufgabe ausgelegt ist und eine CPU dies tut.

Eine kleine Randnotiz, wenn es möglich wäre, die CPU zu verschrotten und nur eine GPU zu haben, denken Sie nicht, wir würden sie umbenennen? :)

Phoshi
quelle
Ich denke, die meisten modernen CPUs sind für die gleichzeitige Ausführung von 2, 4 oder 8 Aufgaben ausgelegt.
Danielcg
@ danielcg25: Und die meisten modernen GPUs können 256, 512, 1024 Dinge gleichzeitig ausführen (die GTX 680 verfügt über 1536 CUDA-Kerne). Jeder einzelne CPU-Kern ist konzeptionell eine eigenständige Entität, dies gilt jedoch nicht für eine GPU.
Phoshi
@ danielcg25: Mir ist bewusst, aber ein Kommentar mit einem fundamentalen (wenn auch absichtlichen) Missverständnis der Antwort könnte schädlich sein, wenn jemand es liest, ohne das Thema bereits zu kennen. "Ein Arsch sein" in diesem Sinne wird auf SE nicht wirklich geschätzt, da es das Signal-Rausch-Verhältnis senkt.
Phoshi
Ich habe nur ein paar Informationen geliefert. Die meisten Computer sind heutzutage tatsächlich in der Lage, 2-8 Dinge gleichzeitig zu verarbeiten. Einige Prozessoren können noch mehr. Es kommt immer noch nicht an GPUs heran, die Hunderte von Dingen auf einmal erledigen.
Danielcg
@ danielcg25: Es ist jedoch eine andere Art der Verarbeitung, worum es bei der Frage geht. Jeder CPU-Kern ist praktisch separat und arbeitet mit eigenen Datenblöcken und eigenen Prozessen. Jeder CPU-Kern führt eine andere, separate Aufgabe aus und sie skalieren nicht linear nach oben - ein Octo-Kern ist nicht doppelt so nützlich wie ein Quad-Kern ist nicht doppelt so nützlich wie ein Dual-Kern. Auf der anderen Seite führen GPU-Kerne dieselbe Aufgabe für verschiedene Daten aus und skalieren linear. Es ist offensichtlich, dass es Mehrkern-CPUs gibt, aber das ist nicht dasselbe .
Phoshi
14

Fragen Sie sich wirklich, warum wir keine GPU-ähnlichen Architekturen in der CPU verwenden?

GPU ist nur eine spezialisierte CPU einer Grafikkarte. Wir verleihen der GPU keine Grafikberechnung, da Allzweck-CPUs bei der parallelen Ausführung und der Gleitkomma-Ausführung einfach nicht auf dem neuesten Stand sind.

Wir verwenden tatsächlich verschiedene (mehr GPU-gerechte) CPU-Architekturen. Niagara- Prozessoren sind z. B. ziemlich multitasking. SPARC T3 führt 512 gleichzeitige Threads aus.

jkj
quelle
Warum eine Gegenstimme?
JKJ
3
Ich denke, die letzte Zeile ist einfach falsch. Tatsächlich kann ich nur an ein einziges x86-Mainstream-Betriebssystem denken. und selbst dieser wurde auf Alpha- und ARM-Prozessoren portiert, die derzeit nur nicht kommerziell angeboten werden.
Javier
OK. Der letzte Abschnitt, der meiner Meinung nach die Unterstützung von Mainstream-Betriebssystemen für die Umstellung auf neue Architekturen behinderte, wurde entfernt. Könnte nicht im Rahmen der Antwort liegen.
JKJ
11

Ich könnte mich hier schrecklich irren und spreche von wenig oder keiner Autorität in diesem Thema, aber hier ist:

  • Ich glaube, dass jede GPU-Ausführungseinheit ("Core") im Vergleich zu einer CPU einen sehr begrenzten Adressraum hat.

  • GPU-Ausführungseinheiten können nicht effizient verzweigen.

  • GPU-Ausführungseinheiten unterstützen Hardware-Interrupts nicht wie CPUs.

Ich habe immer gedacht, dass die GPU-Ausführungseinheiten so etwas wie die "SPEs" der Playstation 3 sind. Sie möchten einen Datenblock erhalten, eine Reihe von sequentiellen Vorgängen ausführen und dann einen weiteren Block ausspucken Daten, spülen, wiederholen. Sie haben nicht so viel adressierbaren Speicher wie das Haupt- "CPE", aber die Idee ist, jede "SPE" einer bestimmten, sequentiellen Aufgabe zu widmen. Der Ausgang einer Einheit kann den Eingang einer anderen Einheit speisen.

Die Ausführungseinheiten funktionieren nicht gut, wenn sie versuchen, die Daten zu "analysieren" und basierend auf diesen Daten eine Reihe von Entscheidungen zu treffen.

Diese "Datenblöcke" können Teil eines Streams sein, z. B. eine Liste von Scheitelpunkten aus der Statustabelle eines Spiels, MPEG-Daten von einer Festplatte usw.

Wenn etwas nicht zu diesem "Streaming" -Modell passt, haben Sie eine Aufgabe, die nicht effizient paralelliert werden kann, und die GPU ist nicht unbedingt die beste Lösung dafür. Ein gutes Beispiel ist die Verarbeitung von "externen Ereignissen" wie Tastaturen, Joysticks oder Netzwerkeingaben. Es gibt nicht viele Dinge, die nicht zu diesem Modell passen, aber es wird immer ein paar geben.

LawrenceC
quelle
Guter Punkt zur Optimierung der Branchenvorhersage - das hätte ich nie in Betracht gezogen, aber Sie haben Recht.
Jimmy Breck-McKye
6

Hier geht es nicht um die Taktrate oder den Zweck. Sie sind beide gleichermaßen in der Lage, die meisten, wenn nicht alle Aufgaben zu erledigen. Einige sind jedoch für einige Aufgaben etwas besser geeignet als andere.

Es gab eine sehr alte Auseinandersetzung darüber, ob es besser ist, viele dumme Kerne oder eine kleine Gruppe sehr kluger Kerne zu haben. Dies geht leicht in die 80er zurück.

In einer CPU gibt es viele mögliche Berechnungen, die durchgeführt werden können. Die intelligenteren Kerne können viele verschiedene Berechnungen gleichzeitig ausführen (ähnlich wie Multi-Core, aber nicht kompliziert; siehe Parallelität auf Befehlsebene ). Ein intelligenter Kern kann mehrere Berechnungen gleichzeitig ausführen (Addition, Subtraktion, Multiplikation, Division, Speicheroperation), jedoch immer nur eine. Aus diesem Grund sind sie physisch größer (und daher viel teurer) als stumpfe Kerne.

Ein dummer Kern ist viel kleiner und daher können einem einzelnen Chip mehr hinzugefügt werden, aber es können nicht so viele Berechnungen gleichzeitig durchgeführt werden. Es gibt ein feines Gleichgewicht zwischen vielen dummen Kernen und einigen intelligenten Kernen.

Multi-Core-Architekturen eignen sich gut für Grafiken, da die Berechnungen leicht auf Hunderte von Kernen aufgeteilt werden können. Sie hängen jedoch auch von der Qualität des Codes ab und davon, ob sich anderer Code auf das Ergebnis einer Berechnung stützt.

Dies ist eine viel kompliziertere Frage, als es erscheinen mag. Weitere Informationen finden Sie in diesem Artikel zum CPU-Design:

Moderne Mikroprozessoren - Eine 90-minütige Anleitung

http://www.lighterra.com/papers/modernmicroprocessors/

Silberfeuer
quelle
Bitte entschuldigen Sie die schlechte Grammatik und den allgemein unterdurchschnittlichen Schreibstil, den ich oben verwendet habe. Ich habe meinen Kaffee nicht getrunken. Es ist ein ziemlich kompliziertes Konzept und der enthaltene Link ist der Ort, an den Sie gehen sollten, wenn Sie mehr verstehen möchten. Nicht meine schlechte Erklärung
Silverfire
1
Ich habe es für Sie behoben und auch einen Link hinzugefügt.
bwDraco
5

Ich möchte einen syntaktischen Punkt ansprechen: Die Begriffe CPU und GPU sind funktionale Namen, keine architektonischen Namen.

Wenn ein Computer eine GPU als Hauptprozessor verwenden würde, würde er unabhängig von Architektur und Design zu einer "zentralen Prozessoreinheit" (CPU).

Andrew Neely
quelle
4

Es ist wichtig zu bedenken, dass es im Architekturraum keine magische Trennlinie gibt, die einen Prozessor zum "zentralen" und einen anderen zum "grafischen" Prozessor macht. (Nun, einige GPUs sind möglicherweise zu verkrüppelt, um ganz allgemein zu sein, aber das sind nicht die, über die wir hier sprechen.)

Die Unterscheidung besteht darin, wie sie auf der Platine installiert sind und welche Aufgaben ihnen übertragen werden. Natürlich verwenden wir einen Allzweckprozessor (oder eine Reihe von Allzweckprozessoren) für den Hauptdatenträger und eine spezielle, parallelisierte Einheit mit vielen Pipelines (z. B. Grafiken), um sie optimal nutzen zu können.

Die meisten pfiffigen Tricks, mit denen GPUs ihre Sache sehr schnell erledigen, wurden zuerst von Leuten entwickelt, die versuchen, schnellere und bessere CPUs zu entwickeln. Es stellt sich heraus, dass Word, Excel, Netscape und viele andere Dinge, für die Benutzer ihre Computer verwenden, nicht nur die von Grafikspezialchips angebotenen Funktionen nicht voll ausnutzen, sondern auf diesen Architekturen sogar langsamer laufen, da die Verzweigung sehr ursächlich ist (sehr teuer) und langsam) Pipeline wird gelöscht.

dmckee
quelle
1
Ich denke, dass der Pipeline-Overhead ein grundlegendes Detail ist, da höherrangige Antworten fehlen.
Steve
2

Der springende Punkt bei der Einführung einer GPU war, die CPU von teuren Grafikberechnungen zu entlasten.
Wenn Sie sie wieder zu einem einzigen Prozessor kombinieren, kehren Sie dorthin zurück, wo alles angefangen hat.

Petruza
quelle
Ja, einen Schritt vorwärts, zwei Schritte zurück.
Randolf Richardson
2

Aus einem einfachen Grund: Die meisten Anwendungen sind nicht multithreaded / vektorisiert.

Grafikkarten setzen zumindest im Konzept stark auf Multi-Threading.

Vergleichen Sie ein Auto mit einem einzigen Motor, ein Auto mit einem kleineren Motor pro Rad. Bei letzterem Auto müssen Sie alle Motoren steuern, was aus Sicht der Systemprogrammierung nicht berücksichtigt wurde.

Mit der AMD-Fusion wird sich jedoch ändern, wie wir die Verarbeitungsleistung nutzen müssen: entweder vektorisiert, oder schnell für einen Thread.

jokoon
quelle
2

Der Grund, warum wir immer noch CPUs verwenden, ist, dass sowohl CPUs als auch GPUs ihre einzigartigen Vorteile haben. Weitere Informationen finden Sie in meinem folgenden Artikel, der in ACM Computing Surveys 2015 angenommen wurde und eine abschließende und umfassende Diskussion zum Übergang von der Debatte „CPU vs. GPU“ zu „CPU-GPU Collaborative Computing“ bietet.

Ein Überblick über heterogene CPU-GPU-Rechentechniken

user984260
quelle
1

Um es einfach auszudrücken: Die GPU kann mit dem Anhänger im Auto verglichen werden. Wie gewöhnlich ist Kofferraum für die meisten Menschen ausreichend, mit Ausnahme von Fällen, in denen sie etwas wirklich Großes kaufen. Dann können sie Trailer brauchen. Das gleiche gilt für die GPU, da normalerweise eine normale CPU ausreicht, um die meisten Aufgaben zu erledigen. Wenn Sie jedoch einige intensive Berechnungen in vielen Threads benötigen, benötigen Sie möglicherweise eine GPU

Yuriy Zaletskyy
quelle
1

GPUS sind gute Stream-Prozessoren. Sie können sich die Stream-Verarbeitung so vorstellen, dass Sie eine lange Reihe von Zahlen nacheinander multiplizieren. cpus verfügt auch über Stream-Verarbeitungsfunktionen (es werden SIMD-Erweiterungen genannt), aber Sie können nicht die gesamte Programmierlogik als Stream-Verarbeitung implementieren, und Compiler haben die Möglichkeit, Btyecode zu erstellen, der nach Möglichkeit die Verwendung von simd-Anweisungen erfordert.

Nicht alles ist ein Array von Zahlen. Bilder und Videos sind, vielleicht auch Ton (es gibt hier und da OpenCl-Encoder). so kann gpus bilder, videos und ähnliches verarbeiten, kodieren und dekodieren. ein nachteil ist, dass man in spiele nicht alles auf gpus auslagern kann, weil es stottern würde, gpus mit grafiken beschäftigt sind und der engpass im system sein sollen, wenn spiele gespielt werden. die optimale lösung wäre, alle komponenten in einem pc voll auszunutzen. So führt beispielsweise die Physx-Engine von NVIDIA standardmäßig Berechnungen für die CPU durch, wenn die GPU voll ausgelastet ist.

Uğur Gümüşhan
quelle