Frage Warum verwenden wir immer noch CPUs statt GPUs?


Es scheint mir, dass heutzutage viele Berechnungen auf der GPU gemacht werden. Offensichtlich werden Grafiken dort gemacht, aber unter Verwendung von CUDA und dergleichen, AI, Hash-Algorithmen (Think Bitcoins) und anderen werden ebenfalls auf der GPU ausgeführt. Warum können wir nicht einfach die CPU loswerden und die GPU selbst benutzen? Was macht die GPU so viel schneller als die CPU?


352
2017-07-10 13:31


Ursprung


Woher weiß ich, welche Antworten richtige Informationen enthalten? Sollte ich warten bis andere auf / ab stimmen? Ich glaube, ich habe eine Antwort zu schnell angenommen: O - ell
Es gibt jetzt einige Antworten @ell, die keine "Fehlinformationen" enthalten. Sie steigen nach und nach an die Spitze, dank der effizienten Marktmechanismen des wunderbar designten StackExchange ;-) Ich würde vorschlagen, noch etwas länger zu warten, bevor ich eine Antwort akzeptiere. Sieht so aus, als ob du das sehr vorsichtig machst. Dies ist übrigens eine gute Frage. Scheint offensichtlich, aber es ist überhaupt nicht. Danke, dass du es fragst! - Ellie Kesselman
Fragen wie "Wenn Boeing 747 schneller und sparsamer ist, warum fahren wir dann noch Autos?" - vartec
Nein, weil es nicht RISC gegen CISC ist. Es ist eine der anderen Grundlagen der Informatik, leicht verkleidet. Es ist "Warum entlasten wir die Arbeit vom zentralen Prozessor auf die I / O-Prozessoren?". - JdeBP
@ Vartec: Ich denke, eine etwas bessere Analogie könnte zwischen Bussen und Taxis sein. Wenn es vierzig Leute gibt, die alle vom gleichen Ort zum selben Ort gehen wollen, wird ein Bus viel effizienter sein. Wenn es vierzig Menschen gibt, deren erwünschte Herkunft und Ziele weit verstreut sind, kann sogar ein einziges Taxi genau so gut wie ein Bus sein, und für die Kosten des Busses könnte man mehrere Taxis haben. - supercat


Antworten:


TL; DR Antwort: GPUs haben weit mehr Prozessorkerne als CPUs, aber da jeder GPU-Kern wesentlich langsamer läuft als ein CPU-Kern und nicht über die Funktionen verfügt, die für moderne Betriebssysteme erforderlich sind, eignen sie sich nicht für die Verarbeitung im alltäglichen Computerbetrieb. Sie sind am besten für rechenintensive Operationen wie Videoverarbeitung und Physiksimulationen geeignet.


GPGPU ist immer noch ein relativ neues Konzept. GPUs wurden ursprünglich nur zum Rendern von Grafiken verwendet; Da die Technologie fortschrittlich ist, wurde die große Anzahl von Kernen in GPUs gegenüber CPUs ausgenutzt, indem Rechenfähigkeiten für GPUs entwickelt wurden, so dass sie viele parallele Datenströme gleichzeitig verarbeiten können, unabhängig davon, was diese Daten sind. Während GPUs Hunderte oder sogar Tausende von Stream-Prozessoren haben können, laufen sie jeweils langsamer als ein CPU-Kern und haben weniger Features (selbst wenn sie es sind) Turing abgeschlossen und kann programmiert werden, um jedes Programm auszuführen, das eine CPU ausführen kann). Zu den fehlenden Features von GPUs gehören Interrupts und virtueller Speicher, die für die Implementierung eines modernen Betriebssystems benötigt werden.

Mit anderen Worten, CPUs und GPUs haben signifikant unterschiedliche Architekturen, die sie für verschiedene Aufgaben besser geeignet machen. Eine GPU kann große Datenmengen in vielen Streams verarbeiten, indem sie relativ einfache Operationen an ihnen ausführt, ist aber schlecht für eine schwere oder komplexe Verarbeitung in einem einzelnen oder wenigen Datenströmen geeignet. Eine CPU ist pro Kern viel schneller (in Bezug auf Befehle pro Sekunde) und kann komplexe Operationen mit einem oder wenigen Datenströmen einfacher durchführen, kann aber nicht viele Ströme gleichzeitig effizient handhaben.

Infolgedessen sind GPUs nicht geeignet, um Aufgaben zu bewältigen, die nicht signifikant von Parallelverarbeitung profitieren oder nicht parallelisiert werden können, einschließlich vieler gebräuchlicher Verbraucheranwendungen wie Textverarbeitungsprogramme. Darüber hinaus verwenden GPUs eine grundlegend andere Architektur; man müsste eine Anwendung speziell für eine GPU programmieren, damit sie funktioniert, und zur Programmierung von GPUs sind deutlich andere Techniken erforderlich. Diese verschiedenen Techniken umfassen neue Programmiersprachen, Modifikationen an existierenden Sprachen und neue Programmierparadigmen, die besser geeignet sind, eine Berechnung als eine parallele Operation auszudrücken, die von vielen Stream-Prozessoren ausgeführt wird. Weitere Informationen zu den erforderlichen Techniken zum Programmieren von Grafikprozessoren finden Sie in den Artikeln zu Wikipedia Stream-Verarbeitung und parallele Datenverarbeitung.

Moderne GPUs sind in der Lage, Vektoroperationen und Fließkomma-Arithmetik auszuführen, wobei die neuesten Karten in der Lage sind, Gleitkommazahlen mit doppelter Genauigkeit zu manipulieren. Frameworks wie CUDA und OpenCL ermöglichen es, Programme für GPUs zu schreiben, und die Art von GPUs macht sie für stark parallelisierbare Operationen geeignet, wie zum Beispiel im wissenschaftlichen Rechnen, wo eine Reihe von spezialisierten GPU-Rechenkarten ein brauchbarer Ersatz für einen kleinen sein kann Cluster berechnen wie in NVIDIA Tesla Personal Supercomputer. Verbraucher mit modernen Grafikprozessoren, die Erfahrung mit Folding @ home haben, können mit ihnen einen Beitrag leisten GPU-Clients, die Proteinfaltungssimulationen mit sehr hohen Geschwindigkeiten durchführen kann und mehr Arbeit in das Projekt einbringt (lesen Sie auf jeden Fall die FAQs zuerst, vor allem diejenigen im Zusammenhang mit GPUs). GPUs ermöglichen auch eine bessere Physiksimulation in Videospielen mit PhysX, beschleunigen die Videocodierung und -decodierung und führen andere rechenintensive Aufgaben aus. Es sind diese Arten von Aufgaben, für die GPUs am besten geeignet sind.

AMD ist wegweisend für ein Prozessor-Design namens Beschleunigte Verarbeitungseinheit (APU) Das kombiniert herkömmliche x86-CPU-Kerne mit GPUs. Dieser Ansatz ermöglicht eine Grafikleistung, die der von Motherboards integrierten Grafiklösung weit überlegen ist (obwohl sie für teurere diskrete GPUs nicht geeignet ist) und ermöglicht ein kompaktes, kostengünstiges System mit guter Multimedia-Leistung, ohne dass eine separate GPU benötigt wird. Die neuesten Intel-Prozessoren bieten auch integrierte integrierte Grafik, obwohl die konkurrenzfähige integrierte GPU-Leistung derzeit auf die wenigen Chips mit Intel Iris Pro Graphics beschränkt ist. Wenn die Technologie weiter voranschreitet, werden wir einen zunehmenden Grad an Konvergenz dieser einmal getrennten Teile sehen. AMD sieht es vor eine Zukunft, in der CPU und GPU eins sind und in der Lage sind, nahtlos an derselben Aufgabe zu arbeiten.

Nichtsdestoweniger 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 unter Verwendung einer GPU zu beschleunigen. Da so viele existierende Software die x86-Architektur verwendet, und weil GPUs unterschiedliche Programmiertechniken erfordern und einige wichtige Merkmale, die für Betriebssysteme benötigt werden, fehlen, ist ein allgemeiner Übergang von der CPU zur GPU für den täglichen Gebrauch sehr schwierig.


373
2017-07-10 14:00



Wie diese Antwort denke ich, liegt der Hauptgrund darin, dass wir keine guten Mainstream-Programmiersprachen haben, um mit parallelen Architekturen wie dieser umzugehen. Wir haben Jahrzehnte damit zu kämpfen, Multi-Thread-Programmierung voranzutreiben, und die Leute rufen immer noch, Multi-Threading "böse". Trotzdem sind Multi-Core-CPUs und GPUs eine Realität, und wir werden neue Programmierparadigmen entwickeln müssen, um damit umzugehen. - Soren
Bemerkenswert, dass Intel daran gearbeitet hat Larrabee Architektur (für viel zu lange), die im Wesentlichen ein Chip mit einer massiven Anzahl von x86-Kernen auf ihm ist. - Chris S
Gute Antwort für die Diskussion der Hardware-Gründe und die Diskussion von APUs und wie sie das ändern werden. @Soren gibt jedoch einen sehr guten Punkt auf der Softwareseite. In Wirklichkeit ist es die Kombination aus Hardwareproblemen, Softwareproblemen und der Tatsache, dass CPUs funktionieren und wenn etwas bekanntermaßen funktioniert, ist es schwierig, Leute dazu zu bringen, es zu ersetzen. - Nich Del
"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 befassen sich sehr gut mit Multithreading. Alle, die ich erwähnt habe, sind Mainstream. - BlueRaja - Danny Pflughoeft
@BlueRaja - wir kennen diese Sprachen, deine Definition des Mainstreams muss sich von meinen unterscheiden :-) - Soren


Was macht die GPU so viel schneller als die CPU?

Die GPU ist nicht schneller als die CPU. CPU und GPU sind mit zwei verschiedenen Zielen konzipiert, mit unterschiedlichen Kompromissen anders Leistungsmerkmal. 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 Menge von Daten aus, die GPU zeichnet sich durch einfache Manipulationen an einer großen Menge von Daten 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) funktioniert, wobei alle dieselbe Operation anwenden. Das Arbeiten in Datenblöcken ist sicherlich effizienter als das Arbeiten mit einer einzigen Zelle, da beim Dekodieren der Befehle ein viel geringerer Aufwand erforderlich ist, aber das Arbeiten in großen Blöcken bedeutet mehr parallele Arbeitseinheiten, so dass viel mehr Transistoren verwendet werden um einen einzelnen GPU-Befehl zu implementieren (was eine physikalische Größenbeschränkung verursacht, mehr Energie verbraucht und mehr Wärme erzeugt).

Die CPU ist so ausgelegt, dass sie einen einzelnen Befehl für ein einzelnes Datum so schnell wie möglich ausführt. Da es nur mit einem einzigen Datum arbeiten muss, ist die Anzahl der Transistoren, die zur Implementierung eines einzelnen Befehls benötigt wird, viel geringer, so dass eine CPU es sich leisten kann, einen größeren Befehlssatz, eine komplexere ALU, eine bessere Verzweigungsvorhersage, besser virtualisiert zu haben Architektur und eine ausgefeiltere Caching / Pipeline-Schemata. Seine Befehlszyklen sind auch schneller.

Der Grund, warum wir immer noch CPU verwenden, ist nicht Weil x86 der König der CPU-Architektur ist und Windows für x86 geschrieben wird, liegt der Grund, warum wir CPU noch verwenden, darin, dass die Art von Aufgaben, die ein Betriebssystem zu tun hat, nämlich Entscheidungen zu treffen, effizienter auf einer CPU-Architektur ausgeführt wird. Ein Betriebssystem muss sich 100 verschiedene Datentypen ansehen und verschiedene Entscheidungen treffen, die alle voneinander abhängen; Diese Art von Job kann nicht einfach parallelisiert werden, zumindest nicht in eine SIMD-Architektur.

In Zukunft werden wir eine Konvergenz zwischen der CPU- und der GPU-Architektur sehen, da die CPU die Fähigkeit erlangt, über Datenblöcke zu arbeiten, z. SSE. Auch wenn sich die Fertigungstechnologie verbessert und die Chips kleiner werden, kann sich die GPU leisten, komplexere Befehle zu implementieren.


245
2017-07-10 20:22



Dies ist wahrscheinlich die beste Antwort hier. Es ist wichtig, die grundlegenden Unterschiede zwischen den beiden Paradigmen zu verstehen. Für GPUs, die CPUs überholen, bedeutet unter Berücksichtigung der heutigen Arbeitslasten, dass eine GPU sich in eine CPU verwandeln muss. Und so ist die Frage die Antwort. - surfasb
+1 dafür ist die beste Antwort. Sowohl dies als auch die angenommene Antwort sind richtig, aber dieses erklärt es viel deutlicher.
Ich bin überrascht, dass niemand in diesem Thread den Aufwand beim Senden von Daten an die GPU erwähnt hat - begrenzte Bandbreite über PCI-Express-Busse macht einige parallele Operationen auf einer GPU erheblich langsamer, als sie auf der CPU ausgeführt wurden. Es gibt einen einfachen Fall, in dem die Größe einer FFT aufgrund des Aufwands beim Senden von Daten, beim Einrichten eines Kontextes und beim Zurücklesen von Ergebnissen zu einem signifikanten Unterschied in der Leistung von GPU gegenüber CPU führte: stackoverflow.com/a/8687732/303612 Kleinere Operationen können auf CPUs im Cache ausgeführt werden, und die Speicherbandbreite ist der derzeitigen PCI-E-Architektur weit überlegen - Dr. Andrew Burnett-Thompson
@ Dr.AndrewBurnett-Thompson: Das ist, weil das für die Frage irrelevant ist. Gegenwärtig wird GPU als eine Hilfsverarbeitungseinheit betrachtet, weshalb das Bewegen von Daten von / zu einer GPU notwendig und teuer ist. Wenn wir GPU als die erste Klasse Verarbeitungseinheit behandeln, wird es nicht notwendig sein, Daten zwischen dem Hauptspeicher und dem GPU-Speicher zu marshallen. - Lie Ryan
Nicht optimistisch, es ist kein Overhead bei der Bandbreite. Wenn ein Prozessor mit einer GPU-Architektur die gesamte Show ausführt, muss nichts bewegt werden, der GPU-Speicher ist der Hauptspeicher. Es gibt keinen Transfer-Overhead, über den überhaupt gesprochen werden kann, weil es keine Transfers gibt. Dies ist übrigens nicht hypothetisch, AMDs APUs verwenden HSA (heterogene Systemarchitektur) mit einem einheitlichen Hauptspeicher, der ein Kopieren zwischen der CPU und der GPU ermöglicht. - Lie Ryan


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 etwas wie ein modernes Betriebssystem zu implementieren.

Sie sind auch (relativ) langsam bei der arithmetischen Berechnung mit doppelter Genauigkeit (im Vergleich zu ihrer arithmetischen Leistung mit einfacher Genauigkeit) * und sind viel größer (hinsichtlich der Größe von Silizium). Ältere GPU-Architekturen unterstützen keine indirekten Aufrufe (über Funktionszeiger), die für die meisten Universalprogrammierungen benötigt werden, und neuere Architekturen, die dies nur langsam tun. Schließlich verlieren GPUs (wie andere Antworten angemerkt haben) bei Aufgaben, die nicht parallelisiert werden können, im Vergleich zu CPUs mit gleicher Auslastung.

BEARBEITEN: Bitte beachten Sie, dass diese Antwort im Jahr 2011 geschrieben wurde - GPU-Tech ist ein Bereich, der sich ständig ändert. Die Dinge könnten sehr unterschiedlich sein, abhängig davon, wann du das liest: P

* Einige GPUs sind bei Berechnungen mit doppelter Genauigkeit nicht langsam, z. B. NVidias Quadro- oder Tesla-Linien (Fermi-Generation oder neuer) oder AMDs FirePro-Linie (GCN-Generation oder neuer). Aber das sind nicht die meisten Verbraucher Maschinen.


75
2017-07-10 21:17



@Cicada: Hast du eine Referenz dafür? In jedem Fall, selbst wenn das wahr ist, wird selbst neuere Hardware in diesem Fall nicht gut funktionieren. (würde z. B. nicht zu viel Leistungsvorteil gegenüber einer CPU haben - und einen Leistungsaufnahme-Nachteil) - Billy ONeal
Ja, die Fermi-Geräte, wie Sie gesagt haben (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 ist langsam? - Ben Voigt
@Ben: Sie erhalten diese Art von Leistung nur in datenparallelen Anwendungen. Allgemeine sequentielle Operationen sind ein ganz anderes Ballspiel. (Das ist nur mit allen 1600 Kernen auf diesem Chip, die parallel laufen, im Wesentlichen die gleiche Anweisung immer und immer wieder laufen ... und sogar das ist eher theoretische als tatsächliche Perf) - Billy ONeal
@ Billy: Aber das ist Langsamkeit bei einer bestimmten Klasse von Algorithmen, nicht Langsamkeit bei Doppel-Präzisionsarithmetik (was Sie behauptet haben). (Und CPUs erzielen normalerweise auch keine Benchmarkdurchsätze) - Ben Voigt


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

Was hättest du lieber als Mitentwickler, einen superschnellen Burschen oder 100 schnelle Klone, die eigentlich nicht so schnell sind, aber alle gleichzeitig die gleichen Aktionen durchführen müssen?

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

Bei einigen Aktionen stinken die Klone z.B. Schreibe den Wochenbericht - alle Klone außer einem sitzen leer, während ein Klon den Bericht schreibt (sonst erhältst du nur 100 Kopien des gleichen Berichts).


37
2017-07-11 15:39



Könnte ich ... beides haben? - Kevin Panko
@ Kevin: Ja, aber du brauchst einen Computer mit beide eine CPU und eine GPU! Wenn es nur so etwas gäbe! - Joachim Sauer
Große Analogie. Werde mich daran erinnern. - Mayo


Weil GPUs dafür ausgelegt sind, viele kleine Dinge auf einmal zu erledigen, und CPUs sind so konzipiert, dass sie eine Sache nach der anderen erledigen. Wenn Ihr Prozess wie Hashing massiv parallel gemacht werden kann, ist die GPU um Größenordnungen schneller, sonst nicht.

Ihre CPU kann einen Hash viel schneller berechnen als Ihre GPU - aber die Zeit, die Ihre CPU dafür benötigt, könnte Ihre GPU durch mehrere hundert Hashes gehen. GPUs sind dafür ausgelegt, eine Menge Dinge gleichzeitig zu erledigen, und CPUs sind so konzipiert, dass sie eine Sache gleichzeitig, aber sehr schnell ausführen können.

Das Problem ist, dass CPUs und GPUs sehr unterschiedliche Lösungen für sehr unterschiedliche Probleme sind, es gibt ein wenig Überschneidungen, aber im Allgemeinen bleibt das, was in ihrer Domäne ist, in ihrer Domäne. Wir können die CPU nicht durch eine GPU ersetzen, weil die CPU dort sitzt und ihre Arbeit viel besser erledigt, als eine GPU jemals könnte, einfach weil eine GPU nicht dafür ausgelegt ist, die Aufgabe zu erfüllen, und eine CPU ist.

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


23
2017-07-10 17:51



Ich denke, dass die meisten modernen CPUs entworfen wurden, um 2, 4 oder 8 Dinge gleichzeitig zu machen. - danielcg
@ danielcg25: Und die meisten modernen GPUs sind entworfen um 256, 512, 1024 Dinge gleichzeitig zu machen (Die GTX 680 hat 1536 CUDA-Kerne). Jeder einzelne CPU-Kern ist konzeptionell eine eigenständige Einheit, dies gilt jedoch nicht für eine GPU. - Phoshi
@ danielcg25: Ich bin mir bewusst, aber ein Kommentar mit einem grundlegenden (wenn auch absichtlich) Missverständnis der Antwort könnte schädlich sein, wenn jemand es lesen würde, ohne das Thema bereits zu kennen. "Es ist ein Arsch" in diesem Sinne wird auf SE nicht wirklich geschätzt, da es das Signal: Rausch-Verhältnis senkt. - Phoshi
Ich habe nur einige Informationen zur Verfügung gestellt. Die meisten Computer sind heutzutage in der Lage, 2-8 Dinge gleichzeitig zu verarbeiten. Einige Prozessoren können sogar mehr als das. Es kommt immer noch nicht in die Nähe von GPUs, die Hunderte von Dingen auf einmal erledigen. - danielcg
@ danielcg25: Es ist eine andere Art der Verarbeitung, aber darum geht es in der Frage. Jeder CPU-Kern ist effektiv getrennt und arbeitet mit eigenen Datenblöcken und eigenen Prozessen. Jeder CPU-Kern führt eine andere, separate Aufgabe als jede andere aus, und sie skalieren nicht linear nach oben - ein Octo-Core ist nicht doppelt so nützlich wie ein Quad-Core nicht doppelt so nützlich wie ein Dual-Core. Auf der anderen Seite führen GPU-Kerne die gleiche Aufgabe über verschiedene Datenbereiche hinweg aus und skalieren linear. Es ist offensichtlich, dass Multi-Core-CPUs existieren, aber Das ist nicht dasselbe. - Phoshi


Fragst du wirklich? Warum verwenden wir keine GPU wie Architekturen in der CPU?

GPU ist nur eine spezialisierte CPU einer Grafikkarte. Wir verleihen GPU-Nicht-Graphik-Berechnungen, weil die Allzweck-CPU in der Parallel- und Fließkomma-Ausführung gerade nicht auf dem gleichen Niveau ist.

Wir verwenden tatsächlich andere (mehr GPU-ish) CPU-Architekturen. Z.B. Niagara Prozessoren sind ziemlich Multitasking. SPARC T3 wird 512 gleichzeitige Threads ausführen.


14
2017-07-10 17:57



Warum ein Downvote? - jkj
Ich schätze die letzte Zeile, da es einfach falsch ist. In der Tat kann ich nur an ein x86-only Mainstream-Betriebssystem denken; und sogar dieser wurde auf Alpha und ARM Prozessoren portiert, die gerade nicht kommerziell angeboten werden. - Javier
OK. Der letzte Abschnitt meiner Meinung nach Mainstream-Betriebssystem-Unterstützung, der den Wechsel zu neuen Architekturen verhindert, wurde entfernt. Könnte nicht im Rahmen der Antwort sein. - jkj


Ich könnte mich hier schrecklich irren, und ich 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 nicht effizient verzweigen.

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

Ich habe immer daran gedacht, dass GPU-Ausführungseinheiten so etwas wie die "SPEs" der Playstation 3 sein sollten, sie wollen einen Datenblock erhalten, eine Reihe von sequenziellen Operationen darauf ausführen und dann einen weiteren Block davon ausspucken Daten, spülen, wiederholen. Sie haben nicht so viel adressierbaren Speicher wie das Haupt-CPE, aber die Idee besteht darin, jede "SPE" einer bestimmten sequenziellen Aufgabe zu widmen. Der Ausgang einer Einheit könnte den Eingang einer anderen Einheit speisen.

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

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

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


11
2017-07-10 15:55



Guter Punkt über die Verzweigungsvorhersageoptimierung - das hätte ich nie in Betracht gezogen, aber Sie haben Recht. - Jimmy Breck-McKye


Das ist nichts über Taktgeschwindigkeit oder Zweck. Sie sind beide gleichermaßen in der Lage, die meisten, wenn nicht alle Aufgaben zu erfüllen; Einige sind jedoch für einige Aufgaben etwas besser geeignet als andere.

Dort gab es ein sehr altes Argument darüber, ob es besser ist, viele dumme Kerne oder eine kleine Gruppe sehr intelligenter Kerne zu haben. Das 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 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), aber nur jeweils einzeln; Aus diesem Grund sind sie physisch größer (und daher viel teurer) als Dümmerkerne.

Ein dummer Kern ist viel kleiner und daher kann mehr zu einem einzelnen Chip hinzugefügt werden, aber sind nicht in der Lage, so viele gleichzeitige Berechnungen durchzuführen. Es gibt ein gutes Gleichgewicht zwischen vielen dummen Kernen und einigen intelligenten Kernen.

Multi-Core-Architekturen arbeiten gut mit Grafiken, da die Berechnungen leicht auf Hunderte von Kernen aufgeteilt werden können, aber auch von der Qualität des Codes und davon, ob anderer Code auf dem Ergebnis einer Berechnung beruht.

Das ist ein 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/modernmicrocessors/


6
2017-07-12 04:36



Bitte entschuldigen Sie die schlechte Grammatik und im Allgemeinen sub-par Schreibstil in der oben genannten, ich habe nicht meinen Kaffee. es ist ein ziemlich kompliziertes Konzept und der enthaltene Link ist, wo Sie gehen sollten, wenn Sie mehr verstehen möchten. nicht meine schlechte Erklärung - Silverfire
Ich habe es für dich repariert und einen Link hinzugefügt. - bwDraco


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

Wenn ein Computer eine GPU als Hauptprozessor verwenden würde, würde er dann unabhängig von der Architektur und dem Design eine "zentrale Verarbeitungseinheit" (CPU) werden.


5
2017-07-15 11:44





Es ist wichtig zu bedenken, dass es im Architekturraum keine magische Trennlinie gibt, die einen Prozessor zum "zentralen" und den anderen zum "graphischen" macht. (Nun, einige GPUs sind vielleicht zu sehr verkrüppelt, um völlig allgemein zu sein, aber das sind nicht die, über die wir hier reden.)

Die Unterscheidung besteht darin, wie sie an der Tafel installiert sind und welche Aufgaben ihnen übertragen werden. Natürlich verwenden wir einen Universalprozessor (oder eine Gruppe von Universalprozessoren) für den Hauptdatenverarbeiter und eine spezielle, parallelisierte, tief Pipeline-gestützte Einheit für Dinge (wie Grafiken), um diese am besten auszunutzen.

Die meisten Tricks, mit denen GPUs sehr schnell gemacht wurden, wurden zuerst von Leuten entwickelt, die versuchten, schnellere und bessere CPUs zu bauen. Es stellt sich heraus, dass Word und Excel und Netscape und viele andere Dinge, die Menschen benutzen ihre Computer für nicht nur nutzen nicht alle Vorteile der Funktionen von Grafik spezialisierten Chips, sondern sogar laufen Langsamer auf diesen Architekturen, weil Verzweigung viel Ursache (sehr teuer und langsam) Pipe-Linie löscht.


4
2017-07-10 14:57



Ich denke, Pipeline Overhead ist ein grundlegendes Detail, die höherrangigen Antworten fehlen. - Steve


Der springende Punkt, dass es überhaupt eine GPU gab, bestand darin, die CPU von teuren Grafikberechnungen zu entlasten, die sie gerade machte.
Würde man sie wieder zu einem einzigen Prozessor kombinieren, würde man wieder dorthin gehen, wo alles begann.


2
2017-07-10 21:35



Yup, ein Schritt vorwärts, zwei Schritte zurück. - Randolf Richardson