Warum verwenden wir immer noch CPUs statt GPUs?

200168
ell

Mir scheint, dass heutzutage viele Berechnungen auf der GPU gemacht werden. Offensichtlich werden dort Grafiken erstellt, aber unter Verwendung von CUDA und dergleichen werden AI, Hash-Algorithmen (denken Sie Bitcoins) und andere auch auf der GPU ausgeführt. Warum können wir die CPU nicht einfach loswerden und die GPU alleine verwenden? Was macht die GPU so viel schneller als die CPU?

356
Woher weiß ich, welche Antworten richtige Informationen enthalten? Soll ich warten, bis andere abstimmen? Ich glaube, ich war zu voreilig, eine Antwort zu akzeptieren: O ell vor 13 Jahren 3
@Ell gibt jetzt einige Antworten, die keine "Fehlinformationen" enthalten. Dank effizienter Marktmechanismen des wundervoll gestalteten StackExchange steigen sie mit steigenden Stimmen allmählich an die Spitze ;-) Ich würde vorschlagen, etwas länger zu warten, bevor sie eine Antwort akzeptieren. Sieht so aus, als würden Sie genau das tun. Das ist übrigens eine gute Frage. Es mag offensichtlich erscheinen, ist es aber überhaupt nicht. Danke, dass du es fragst! Ellie Kesselman vor 13 Jahren 14
Es gibt keinen Grund, warum man zB aus Sicht der Codegenerierung keine Java-JITC für eine GPU erstellen konnte. Und der größte Teil des Betriebssystemcodes ist jetzt in C / C ++ geschrieben, das leicht neu ausgerichtet werden kann. Man ist also nicht wirklich bedeutungsvoll an das x86-Erbe gebunden (es sei denn, Sie betreiben Windoze). Das Problem ist, dass wenige GPUs (wenn überhaupt) für die allgemeine Verarbeitung geeignet sind. Daniel R Hicks vor 13 Jahren 0
@DanH Außer, dass Java eine schlechte Sprache ist, speziell zum Erstellen von Programmen mit einem hohen Grad an Parallelität. Wir brauchen Mainstream-Sprachen, wie zum Beispiel für die funktionale Programmierung, bei der Parallelität die natürliche Art ist, ein Programm auszudrücken. Außerdem müssen die Programmiersprachen gut geeignet sein, um mit sehr wenig Speicher für jede Recheneinheit zu arbeiten Die GPU arbeitet effizient. Wie in der Frage erwähnt, gibt es nur wenige Probleme wie KI und dergleichen, die dies natürlich ohne eine neue Programmiersprache tun Soren vor 13 Jahren 0
Sie müssen jedoch kein Java ausführen. Der Punkt ist, dass Sie nicht an eine Prozessorarchitektur gebunden sind. Was eine neue Sprache für die parallele Verarbeitung angeht, haben die Menschen seit nunmehr 30 Jahren versucht, eine zu entwickeln, und es wurden keine wesentlichen Fortschritte erzielt. Nach 30 Jahren der Entwicklung sequentieller Programmiersprachen hatten wir Fortran, COBOL, Modula-2, C, Pascal, Ada, PL / I, C ++ und viele andere. Daniel R Hicks vor 13 Jahren 0
Zugehörige Frage von Stack Overflow: [Warum programmieren wir nicht auf der GPU?] (Http://stackoverflow.com/questions/2569797/why-arent-we-programming-on-the-gpu) Kobi vor 13 Jahren 1
Ein bisschen wie die Frage "Wenn die Boeing 747 schneller und sparsamer ist, warum fahren wir dann noch Autos?" vartec vor 13 Jahren 118
Kommt Ihnen das bekannt vor (RISC vs. CISC)? Aki vor 13 Jahren 0
Nein, weil es kein RISC im Vergleich zu CISC ist. Es ist eine der anderen Grundlagen der Informatik, etwas verkleidet. Es ist ** "Warum verlagern wir die Arbeit vom zentralen Prozessor auf E / A-Prozessoren?" **. JdeBP vor 13 Jahren 7
@vartec als erfahrener CUDA-Entwickler, denke ich, ist dies möglicherweise die genaueste Analogie, die ich je gesehen habe *. Ich speichere das :) Breakthrough vor 10 Jahren 0
@ vartec: Ich denke, eine etwas bessere Analogie könnte zwischen Bussen und Taxis bestehen. Wenn es vierzig Menschen gibt, die alle vom selben Ort zum selben Ort fahren möchten, ist ein Bus wesentlich effizienter. Wenn es vierzig Personen gibt, deren angestrebte Herkunft und Ziele weit verstreut sind, kann sogar ein einzelnes Taxi genauso gut wie ein Bus sein, und für den Preis eines Busses kann es mehrere Taxis geben. supercat vor 9 Jahren 4
Wie bei allen wichtigen technischen Fragen hat sich [Mybusters damit befasst] (https://www.youtube.com/watch?v=-P28LKWTzrI) (Und es ist keine schlechte Analogie) Basic vor 9 Jahren 0
Verwandte: [Der Unterschied zwischen GPU und CPU] (http://superuser.com/questions/100866/the-difference-between-gpu-and-cpu) Ƭᴇcʜιᴇ007 vor 8 Jahren 0

15 Antworten auf die Frage

376
bwDraco

Antwort von TL; DR: GPUs haben weit mehr Prozessorkerne als CPUs, aber da jeder GPU-Kern wesentlich langsamer als ein CPU-Kern ausgeführt wird und nicht über die für moderne Betriebssysteme erforderlichen Funktionen verfügt, eignen sie sich nicht für die meisten Verarbeitungsvorgänge im Alltag rechnen. Sie eignen sich am besten für rechenintensive Vorgänge wie Videoverarbeitung und Physik-Simulationen.


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 Kernen in GPUs im Vergleich zu CPUs ausgenutzt, indem Rechenfunktionen für GPUs entwickelt wurden, so dass sie viele parallele Datenströme gleichzeitig verarbeiten können, unabhängig von den Daten. 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 in Turing sind und so programmiert werden können, dass sie alle Programme ausführen, die eine CPU ausführen kann). Zu den fehlenden Funktionen von GPUs gehören Interrupts und virtueller Speicher, die zur Implementierung eines modernen Betriebssystems erforderlich sind.

Mit anderen Worten, CPUs und GPUs verfügen über deutlich unterschiedliche Architekturen, die sie für unterschiedliche Aufgaben besser geeignet machen. Eine GPU kann große Datenmengen in vielen Datenströmen verarbeiten und führt relativ einfache Vorgänge aus. Sie eignet sich jedoch nicht für die umfangreiche oder komplexe Verarbeitung einzelner oder weniger Datenströme. Eine CPU ist pro Kern wesentlich schneller (in Bezug auf Anweisungen pro Sekunde) und kann komplexe Vorgänge für einen einzelnen oder wenige Datenströme einfacher ausführen, kann jedoch nicht viele Streams gleichzeitig effizient verarbeiten.

Infolgedessen sind GPUs nicht geeignet, Aufgaben zu erledigen, die nicht wesentlich von der Parallelisierung profitieren oder nicht parallelisiert werden können, einschließlich vieler gängiger Verbraucheranwendungen, wie z. B. Textprozessoren. 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 unterschiedlichen Techniken umfassen neue Programmiersprachen, Modifikationen an vorhandenen Sprachen und neue Programmierparadigmen, die besser geeignet sind, eine Berechnung als Paralleloperation auszudrücken, die von vielen Stream-Prozessoren ausgeführt wird. Weitere Informationen zu den zum Programmieren von GPUs erforderlichen Techniken finden Sie in den Wikipedia-Artikeln zu Stream-Verarbeitung und parallelem Computing .

Moderne GPUs sind in der Lage, Vektoroperationen und Fließkomma-Arithmetik auszuführen. Die neuesten Karten können Fließkommazahlen mit doppelter Genauigkeit bearbeiten. Frameworks wie CUDA und OpenCL ermöglichen das Schreiben von Programmen für GPUs. Aufgrund der Beschaffenheit von GPUs eignen sie sich am besten für hochgradig parallelisierbare Vorgänge, z. B. für das Scientific Computing, bei denen eine Reihe spezialisierter GPU-Computerkarten einen brauchbaren Ersatz für einen kleinen Computer darstellen kann Computing-Cluster wie in NVIDIA Tesla Personal Supercomputers . Kunden mit modernen GPUs, die mit Folding @ home vertraut sind, können mit GPU-Kunden beitragen, die Simulationen der Proteinfaltung mit sehr hohen Geschwindigkeiten durchführen und mehr Arbeit in das Projekt einbringen können (lesen Sie die FAQsvor allem diejenigen, die sich auf GPUs beziehen). GPUs können mit PhysX auch eine bessere Physiksimulation in Videospielen ermöglichen, die Videocodierung und -decodierung beschleunigen und andere rechenintensive Aufgaben ausführen. GPUs eignen sich am besten für diese Aufgaben.

AMD ist Vorreiter bei einem Prozessorkonzept mit der Bezeichnung Accelerated Processing Unit (APU), das herkömmliche x86-CPU-Kerne mit GPUs kombiniert. Dieser Ansatz ermöglicht eine Grafikleistung, die den Motherboard-integrierten Grafiklösungen weit überlegen ist (obwohl dies mit teureren separaten GPUs nicht möglich ist) 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 Grafikchips auf dem Chip, obwohl die wettbewerbsfähige integrierte GPU-Leistung derzeit auf die wenigen Chips mit Intel Iris Pro Graphics beschränkt ist. Mit dem fortschreitenden Fortschritt der Technologie wird sich die Konvergenz dieser einmal getrennten Teile zunehmend erhöhen. AMD sieht voreine Zukunft, in der CPU und GPU eine Einheit sind, die in der Lage ist, nahtlos an derselben Aufgabe zu arbeiten .

Trotzdem sind viele Aufgaben, die von PC-Betriebssystemen und -Anwendungen ausgeführt werden, immer noch besser für CPUs geeignet, und es ist viel Arbeit erforderlich, um ein Programm mit einer GPU zu beschleunigen. Da so viel vorhandene Software die x86-Architektur verwendet, und da GPUs unterschiedliche Programmiertechniken erfordern und einige wichtige Funktionen fehlen, die für Betriebssysteme erforderlich sind, ist ein allgemeiner Übergang von der CPU zur GPU für das alltägliche Rechnen sehr schwierig.

Ich denke, wie diese Antwort, liegt der Hauptgrund darin, dass wir keine guten Programmiersprachen für Mainstream haben, um mit solchen parallelen Architekturen fertig zu werden. Wir haben jahrzehntelang Schwierigkeiten gehabt, die Multi-Threading-Programmierung voranzutreiben. Trotzdem sind Multi-Core-CPUs und GPUs Realität, und wir werden neue Programmierparadigmen entwickeln müssen, um damit umzugehen. Soren vor 13 Jahren 39
Erwähnenswert ist, dass Intel (viel zu lange) an der [Larrabee] (http://en.wikipedia.org/wiki/Larrabee_ (microarchitecture)) -Architektur gearbeitet hat, die im Wesentlichen aus einem Chip besteht, auf dem sich eine riesige Anzahl von x86-Kernen befindet . Chris S vor 13 Jahren 0
Eine großartige Antwort für die Erörterung der Hardwaregründe und der APUs und wie sie dies ändern werden. @Soren liefert jedoch einen sehr guten Punkt auf der Softwareseite. In der Realität handelt es sich dabei um die Kombination der Hardwareprobleme, der Softwareprobleme und der Tatsache, dass CPUs funktionieren. Wenn bekannt ist, dass etwas funktioniert, ist es schwer, die Leute dazu zu bringen, es zu ersetzen. Nich Del vor 13 Jahren 0
Alle sehr guten Punkte, ich möchte hinzufügen, dass sich das meiste auf computergestützte Lösungen konzentriert. Ich möchte darauf hinweisen, dass die Hersteller von Mobiltelefonen mehr oder weniger ein zusammengeführtes Produkt herstellen, bei dem Grafik und CPU neben vielen anderen Dingen auf einem Chip untergebracht sind. Mein EVO 3D verfügt über eine Dual-Core- und beeindruckende Grafikunterstützung. Sie können darauf wetten, dass sobald ein Rooting verfügbar ist, ein Dual-Boot für ein Desktop-Betriebssystem (wie Ubuntu) installiert ist. Ich behaupte also, dass anstelle des einen oder des anderen die Differenzlinie mehr verwischt wird. CenterOrbit vor 13 Jahren 0
* "Wir haben keine guten Mainstream-Programmiersprachen, um mit parallelen Architekturen wie dieser umzugehen." * - Haskell, OCaml, Scheme, F #, Erlang und so ziemlich jede andere funktionale Programmiersprache beherrschen das Multithreading sehr gut. Alle die ich erwähnt habe, sind Mainstream. BlueRaja - Danny Pflughoeft vor 13 Jahren 3
Ich würde die Antwort von Billy ONeal hier einbinden, sie fügt einen sehr relevanten Aspekt hinzu (für heute, da die Konvergenz auftritt, wird sie verschwinden). Vinko Vrsalovic vor 13 Jahren 0
Ich habe meine Antwort basierend auf Ihren Kommentaren erweitert. Vielen Dank für Ihr Feedback! bwDraco vor 13 Jahren 0
Ich sehe noch niemanden, der die Position der beiden Prozessoren im Verhältnis zum Video-RAM als beitragenden Faktor genannt hat, bei dem "schneller" ist. JdeBP vor 13 Jahren 0
@BlueRaja - Wir kennen diese Sprachen, Ihre Definition des Hauptstroms muss anders sein als meine :-) Soren vor 13 Jahren 1
@dlikhten: Was Sie vorgeschlagen haben, ist äußerst technisch, da es sich um die Mikroarchitektur der beteiligten Chips handelt. Ich möchte den Leser nicht in diesen Details versenken. bwDraco vor 12 Jahren 0
Ich stimme Ihnen zu, weil Sie vergessen haben, die Transferzeit und den Kostenunterschied zu erwähnen. Sie können einen Tesla-Lauf so schnell wie einen einzelnen i3-Thread ausführen, aber das Geld schadet nicht. Kopierzeiten bedeuten, dass Jobs ziemlich groß sein müssen. Viele Jobs dieser Größe existieren in regulären Computerjobs einfach nicht. Mikhail vor 12 Jahren 0
246
Lie Ryan

Was macht die GPU so viel schneller als die CPU?

Die GPU ist nicht schneller als die CPU. CPU und GPU haben zwei unterschiedliche Ziele, mit unterschiedlichen Kompromissen, so dass sie unterschiedliche Leistungseigenschaften haben. 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 einem kleinen Datensatz aus, die GPU zeichnet sich durch einfache Manipulationen an einem großen Datensatz aus.

Die GPU ist eine spezielle CPU, die so ausgelegt ist, dass ein einzelner Befehl über einen großen Datenblock (SIMD / Single Instruction Multiple Data) arbeitet und alle dieselbe Operation ausführt. Das Arbeiten in Datenblöcken ist sicherlich effizienter als das Arbeiten mit einer einzelnen Zelle, da bei der Dekodierung der Befehle ein viel geringerer Aufwand anfällt. Das Arbeiten in großen Blöcken bedeutet jedoch, dass mehr parallel arbeitende Einheiten vorhanden sind, so dass viel mehr Transistoren verwendet werden Implementieren einer einzelnen GPU-Anweisung (verursacht physikalische Größenbeschränkung, verbraucht mehr Energie und erzeugt mehr Wärme).

Die CPU ist so ausgelegt, dass ein einzelner Befehl so schnell wie möglich auf ein einzelnes Datum ausgeführt wird. Da nur ein einziges Datum verwendet werden muss, ist die Anzahl der Transistoren, die zum Implementieren eines einzelnen Befehls erforderlich ist, viel geringer, so dass sich eine CPU einen größeren Befehlssatz, eine komplexere ALU, eine bessere Verzweigungsvorhersage und eine bessere Virtualisierung leisten kann Architektur und komplexere Caching / Pipeline-Schemata. Seine Befehlszyklen sind auch schneller.

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

In der Zukunft wird es eine Konvergenz zwischen der CPU- und GPU-Architektur geben, da die CPU die Fähigkeit erhält, Datenblöcke, z. B. SSE, zu bearbeiten. Da sich die Fertigungstechnologie verbessert und die Chips kleiner werden, kann sich die GPU auch die Implementierung komplexerer Anweisungen leisten.

Dies ist wahrscheinlich die beste Antwort hier. Es ist wichtig, die grundlegenden Unterschiede zwischen den beiden Paradigmen zu verstehen. Damit GPUs unter Berücksichtigung der heutigen Workloads CPUs überholen können, bedeutet dies im Wesentlichen, dass sich eine GPU in eine CPU verwandeln muss. Und so ist die Frage die Antwort. surfasb vor 13 Jahren 21
+1 dafür ist die beste Antwort. Sowohl diese als auch die akzeptierte Antwort sind richtig, aber diese erklärt es viel deutlicher. vor 13 Jahren 2
Ich bin überrascht, dass niemand in diesem Thread den Aufwand für das Senden von Daten an die GPU erwähnt hat - begrenzte Bandbreite über PCI-Express-Busse macht einige parallele Operationen an einer GPU wesentlich langsamer als an der CPU. Ein einfacher Fall ist der Fall, in dem das Ändern der Größe einer FFT einen signifikanten Unterschied in der Leistung auf der GPU im Vergleich zu der CPU hatte, da das Senden von Daten, das Einrichten eines Kontextes und das Ablesen der Ergebnisse erheblich sind: http://stackoverflow.com/a / 8687732/303612 Kleinere Operationen können auf CPUs im Cache ausgeführt werden, und die Speicherbandbreite ist der aktuellen PCI-E-Architektur deutlich überlegen Dr. Andrew Burnett-Thompson vor 9 Jahren 0
@ Dr.AndrewBurnett-Thompson: das liegt daran, dass das für die Frage irrelevant ist. Gegenwärtig wird GPU als zusätzliche Verarbeitungseinheit betrachtet. Daher ist das Verschieben von Daten von / zu einer GPU notwendig und teuer. Wenn wir GPU als erste Klasse verarbeiten, müssen Sie keine Daten zwischen dem Hauptspeicher und dem GPU-Speicher marshallen. Lie Ryan vor 9 Jahren 1
Oh ok, also hat eine GPU an Bord einer CPU eine Datenübertragungsrate von null Bandbreite zwischen den beiden. Das ist optimistisch :) Dr. Andrew Burnett-Thompson vor 9 Jahren 0
Nicht optimistisch, es ist kein Overhead mit 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 keinen Transfer-Overhead, über den überhaupt gesprochen werden muss, da keine Transfers vorhanden sind. Dies ist übrigens nicht hypothetisch. AMDs APUs verwenden HSA (heterogene Systemarchitektur) mit vereinheitlichtem Hauptspeicher, der ein Null-Kopieren zwischen CPU und GPU ermöglicht. Lie Ryan vor 9 Jahren 1
Über VRAM-Routing-Technologie zu sprechen, ist im Allgemeinen ein Fremdwort. Wenn sich ein Standard für die Verwendung einer GPU anstelle einer CPU entschieden hat, wird der Speicher nicht durch PCI-E geleitet. Gleiches gilt für das Gegenteil. j riv vor 6 Jahren 0
75
Billy ONeal

GPUs fehlen:

  1. Virtueller Speicher (!!!)
  2. Mittel zur Adressierung anderer Geräte als Speicher (z. B. Tastaturen, Drucker, Sekundärspeicher usw.)
  3. Unterbricht

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

Sie sind auch (relativ) langsam bei der Arithmetik mit doppelter Genauigkeit (verglichen mit ihrer arithmetischen Leistung mit einfacher Genauigkeit) * und sind viel größer (in Bezug auf die Größe des Siliziums). Ältere GPU-Architekturen unterstützen keine indirekten Aufrufe (über Funktionszeiger), die für die meisten Universalprogramme erforderlich sind, und neuere Architekturen, die dies langsam tun. (Wie andere Antworten bereits festgestellt haben), verlieren GPUs bei Aufgaben, die nicht parallelisiert werden können, im Vergleich zu CPUs bei gleicher Auslastung.

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

* Einige GPUs sind bei Double-Precision-Arithmetik nicht langsam, wie NVidias Quadro- oder Tesla-Linien (Fermi-Generation oder neuer) oder AMDs FirePro-Linie (GCN-Generation oder neuer). Dies ist jedoch bei den meisten Verbrauchermaschinen nicht der Fall.

@Cicada: Hast du einen Hinweis dafür? In jedem Fall wird selbst neuere Hardware in diesem Fall keine gute Leistung erbringen, selbst wenn das stimmt. (zB hätte einen überdurchschnittlichen Vorteil gegenüber einer CPU nicht - und einen Energieverbrauch nachteilig) Billy ONeal vor 13 Jahren 0
Ja, die Fermi-Geräte unterstützen, wie Sie sagten (mit CUDA 4.0 und sm_20), indirekte Sprünge (und damit virtuelle C ++ -Methoden, Vererbung usw.). Angry Lettuce vor 13 Jahren 3
[544 GigaFLOPS] (http://www.tomshardware.com/reviews/radeon-hd-5870,2422-3.html) von einer 300-jährigen, 2-jährigen GPU ist langsam? Ben Voigt vor 13 Jahren 0
@Ben: Diese Leistung erhalten Sie nur in datenparallelen Anwendungen. Allgemeine sequentielle Operationen sind ein ganz anderes Ballspiel. (Das ist nur, wenn alle 1600 Kerne auf diesem Chip parallel laufen und im Wesentlichen immer wieder dieselbe Anweisung ausführen ... und das ist sogar theoretisch und nicht die tatsächliche Leistung.) Billy ONeal vor 13 Jahren 2
@Billy: Aber das ist Langsamkeit bei einer bestimmten Klasse von Algorithmen, nicht Langsamkeit bei Double-Precision-Arithmetik (was Sie behauptet haben). (Und CPUs erreichen in der Regel auch keine Benchmark-Durchsätze) Ben Voigt vor 13 Jahren 0
@Ben: Ihr verlinkter Artikel sagt nichts über doppelte Präzision aus. Die angekündigten FLOPs sind für die Einzelgenauigkeit bestimmt. Doppelpräzisionsoperationen auf den meisten GPUs sind heutzutage mindestens ein Sechstel der Geschwindigkeit der einfachen Genauigkeit (die bemerkenswerte Ausnahme sind die Quadro- und Tesla-Fermi-Geräte). Ich habe nie gesagt, dass die CPUs einen Benchmark-Durchsatz erzielten. Billy ONeal vor 13 Jahren 0
@Ben: Sorry, ich sehe jetzt den doppelten Präzisionskommentar. Auf jeden Fall, wenn ich "langsam mit doppelter Genauigkeit" sagte, sprach ich im Vergleich zur einfachen Genauigkeit, nicht im Vergleich zu CPUs. Billy ONeal vor 13 Jahren 0
@Billy: Aber diese ganze Frage bezieht sich auf GPU vs. CPU, nicht auf doppelte Präzision gegenüber einfacher Genauigkeit (auch bei CPUs gibt es ähnliche Geschwindigkeitsunterschiede zwischen einfacher und doppelter Genauigkeit). Ben Voigt vor 13 Jahren 0
37
John Robertson

Eine CPU ist wie ein Arbeiter, der sehr schnell geht. Eine GPU ist wie eine Gruppe von Clone-Workern, die schnell gehen, die aber alle das Gleiche tun müssen (mit der Ausnahme, dass Sie einige Clones im Leerlauf haben können, wenn Sie möchten).

Was hätten Sie als Mitentwickler, einen superschnellen Kerl 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, zB 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 (andernfalls erhalten Sie nur 100 Kopien desselben Berichts).

Könnte ich auch ... beides haben? Kevin Panko vor 13 Jahren 4
@Kevin: Ja, aber du brauchst einen Computer mit * einer * CPU * und * einer GPU! Wenn es nur so etwas gäbe! Joachim Sauer vor 13 Jahren 22
Große Analogie. Werde mich daran erinnern Mayo vor 9 Jahren 3
23
Phoshi

Weil GPUs viele kleine Dinge gleichzeitig erledigen können und CPUs eine Sache zu einem Zeitpunkt. Wenn Ihr Prozess massiv parallel ausgeführt werden kann, wie beim Hashing, ist die GPU um Größenordnungen schneller, andernfalls ist dies nicht der Fall.

Ihre CPU kann einen Hash viel, viel schneller berechnen als Ihre GPU -, aber die Zeit, die Ihre CPU dafür benötigt, kann einige hundert Hashes kosten. GPUs sind so konzipiert, dass sie viele Dinge gleichzeitig ausführen, und CPUs sind so konzipiert, dass sie jeweils nur eine Funktion ausführen, jedoch sehr schnell.

Das Problem ist, dass CPUs und GPUs sehr unterschiedliche Lösungen für sehr unterschiedliche Probleme sind, es gibt eine kleine Überschneidung, 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 ihren Job viel besser erledigt, als es eine GPU jemals könnte, einfach weil eine GPU nicht dafür ausgelegt ist und eine CPU dies tut.

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

Ich denke, die meisten modernen CPUs sind so konzipiert, dass sie zwei, vier oder acht Dinge gleichzeitig erledigen können. danielcg vor 11 Jahren 0
@ danielcg25: Und die meisten modernen GPUs sind für 256, 512, 1024 Dinge gleichzeitig ausgelegt (Die GTX 680 hat * 1536 * CUDA-Kerne). Jeder einzelne CPU-Kern ist konzeptionell eine eigene Entität, dies gilt jedoch nicht für eine GPU. Phoshi vor 11 Jahren 0
@ danielcg25: Ich bin mir dessen bewusst, aber ein Kommentar mit einem grundlegenden (wenn auch absichtlichen) Missverständnis der Antwort könnte schädlich sein, wenn jemand sie liest, ohne das Thema bereits zu kennen. "Esel zu sein" in diesem Sinne wird von SE nicht wirklich geschätzt, da es den Signal-Rausch-Abstand verringert. Phoshi vor 11 Jahren 0
Ich habe nur ein paar Informationen gegeben. Die meisten Computer sind heutzutage in der Lage, 2-8 Dinge gleichzeitig zu verarbeiten. Einige Prozessoren können noch mehr. Es kommt immer noch nicht in der Nähe von GPUs, die Hunderte von Dingen gleichzeitig erledigen. danielcg vor 11 Jahren 0
@ danielcg25: Es ist jedoch eine andere Art der Verarbeitung, darum geht es in der Frage. Jeder CPU-Kern ist effektiv voneinander getrennt und arbeitet mit seinen eigenen Datenblöcken und eigenen Prozessen. Jeder CPU-Kern führt eine andere Aufgabe aus, die sich voneinander unterscheidet, und er skaliert nicht linear nach oben. Ein Oktokern ist nicht doppelt so nützlich wie ein Quad-Kern ist nicht doppelt so nützlich wie ein Dual-Core. Auf der anderen Seite führen GPU-Kerne dieselbe Aufgabe für verschiedene Datenbereiche durch und skalieren linear. Es ist offensichtlich, dass Multi-Core-CPUs existieren, aber ** das ist nicht dasselbe **. Phoshi vor 11 Jahren 0
14
jkj

Fragen Sie wirklich, warum wir nicht GPU-ähnliche Architekturen in der CPU verwenden?

GPU ist nur eine spezialisierte CPU einer Grafikkarte. Wir bieten GPU-Nicht-Grafikberechnungen an, da die Mehrzweck-CPU bei Parallel- und Gleitkomma-Ausführung einfach nicht auf dem neuesten Stand ist.

Wir verwenden tatsächlich andere (mehr GPU-ähnliche) CPU-Architekturen. Beispielsweise sind Niagara- Prozessoren ein Multitasking. SPARC T3 führt 512 gleichzeitige Threads aus.

Warum ein Downvote? jkj vor 13 Jahren 0
Ich denke, die letzte Zeile ist einfach falsch. In der Tat kann ich nur an ein x86-Mainstream-Betriebssystem denken. und auch dieser wurde auf Alpha- und ARM-Prozessoren portiert, die momentan nicht kommerziell angeboten werden. Javier vor 13 Jahren 3
OK. Der letzte Abschnitt meiner Meinung zur Mainstream-Betriebssystemunterstützung, der den Wechsel zu neuen Architekturen verhindert, wurde entfernt. Könnte nicht im Rahmen der Antwort sein. jkj vor 13 Jahren 0
11
LawrenceC

Ich könnte hier furchtbar falsch sein und spreche von wenig oder keiner Autorität zu 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 mit der Verzweigung nicht effizient umgehen.

  • GPU-Ausführungseinheiten unterstützen keine Hardware-Interrupts auf dieselbe Weise wie CPUs.

Ich habe immer gedacht, dass die Art und Weise, wie GPU-Ausführungseinheiten waren, so etwas wie die "SPEs" der Playstation 3 ist. Sie möchten einen Datenblock erhalten, mehrere aufeinanderfolgende Operationen darauf ausführen und dann einen weiteren Block ausgeben Daten spülen, wiederholen. Sie haben nicht so viel adressierbaren Speicher wie der Haupt- "CPE", es ist jedoch die Idee, jede "SPE" einer bestimmten, sequentiellen Aufgabe zu widmen. Die Ausgabe einer Einheit kann die Eingabe einer anderen Einheit zuführen.

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

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

Wenn etwas zu diesem "Streaming" -Modell nicht 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", z. B. Tastatur, Joystick oder Netzwerkeingabe. Es gibt nicht viele Dinge, die nicht zu diesem Modell passen, aber es wird immer einige geben.

Ein guter Punkt zur Optimierung der Zweigvorhersage - ich hätte das nie in Betracht gezogen, aber Sie haben recht. Jimmy Breck-McKye vor 11 Jahren 0
6
Silverfire

Hier geht es nicht um Takt oder Zweck. Sie sind beide 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 einen sehr alten Streit darüber, ob es besser ist, viele dumme Kerne oder eine kleine Gruppe sehr intelligenter Kerne zu haben. Dies geht leicht in die 80er Jahre zurück.

Innerhalb einer CPU gibt es viele mögliche Berechnungen, die ausgeführt werden können. Die intelligenteren Kerne sind in der Lage, viele verschiedene Berechnungen gleichzeitig auszuführen (ähnlich wie Multi-Core, aber nicht, es ist kompliziert; siehe Parallelität auf Befehlsebene ). Ein intelligenter Kern könnte mehrere Berechnungen gleichzeitig ausführen (addieren, subtrahieren, multiplizieren, dividieren, Speicheroperation), jedoch nur eine zu einer Zeit. Aus diesem Grund sind sie physisch größer (und daher viel teurer) als Dümmerkerne.

Ein dummer Kern ist viel kleiner und daher kann einem einzelnen Chip mehr hinzugefügt werden, er kann jedoch nicht so viele gleichzeitige Berechnungen ausführen. Es gibt ein gutes Gleichgewicht zwischen vielen dummen Kernen und einigen wenigen intelligenten Kernen.

Multi-Core-Architekturen funktionieren gut mit Grafiken, da die Berechnungen leicht auf Hunderte von Kernen aufgeteilt werden können. Sie hängen jedoch auch von der Qualität des Codes und davon ab, ob anderer Code auf das Ergebnis einer Berechnung angewiesen ist.

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

Moderne Mikroprozessoren - Eine 90-Minuten-Anleitung

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

Bitte entschuldigen Sie die schlechte Grammatik und in der Regel verwenden wir keinen Kaffee. 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 vor 13 Jahren 0
Ich habe es für Sie behoben und auch einen Link hinzugefügt. bwDraco vor 13 Jahren 1
5
Andrew Neely

Ich möchte einen Syntactic-Punkt ansprechen: Die Begriffe CPU und GPU sind Funktionsnamen und nicht Architekturnamen.

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

4
dmckee

Es ist wichtig zu wissen, dass es im Architekturraum keine magische Trennlinie gibt, die einen Prozessor zur "zentralen" und der andere zur "Grafik" macht. (Nun, einige GPUs sind vielleicht zu verkrüppelt, um ganz allgemein zu sein, aber das sind nicht die, über die wir hier sprechen.)

Der Unterschied besteht darin, wie sie auf der Platine installiert werden und welche Aufgaben ihnen zugewiesen werden. Natürlich verwenden wir Universalprozessoren (oder einen Satz von Universalprozessoren) für die Hauptdatenverschiebungseinrichtung und eine spezielle, parallelisierte, tiefgerippte Einheit für Dinge (z. B. Grafiken), um diese optimal nutzen zu können.

Die meisten der kniffligen Tricks, mit denen GPUs ihre Sache sehr schnell erledigen lassen, wurden zuerst von Leuten entwickelt, die versuchen, schnellere und bessere CPUs zu entwickeln. Es stellt sich heraus, dass Word und Excel und Netscape und viele andere Dinge, für die die Benutzer ihren Computer verwenden, nicht nur die Funktionen der grafikspezifischen Chips voll ausnutzen, sondern auch auf diesen Architekturen langsamer laufen, da die Verzweigung viel verursacht (sehr teuer) und langsam) löscht die Leitung.

Ich denke, der Pipeline-Overhead ist ein grundlegendes Detail, wenn höherrangige Antworten fehlen. Steve vor 9 Jahren 1