2011-07-10 13:31:41 +0000 2011-07-10 13:31:41 +0000
380
380

Warum verwenden wir immer noch CPUs anstelle von GPUs?

Es scheint mir, dass heutzutage viele Berechnungen auf der GPU durchgeführt werden. Natürlich werden Grafiken dort ausgeführt, aber mit CUDA und ähnlichen, KI, Hashing-Algorithmen (man denke an Bitcoins) und anderen werden ebenfalls auf dem Grafikprozessor ausgeführt. Warum können wir uns nicht einfach der CPU entledigen und den Grafikprozessor allein verwenden? Was macht den Grafikprozessor so viel schneller als die CPU?

Antworten (15)

394
394
394
2011-07-10 14:00:49 +0000

TL;DR-Antwort: GPUs haben weitaus mehr Prozessorkerne als CPUs, aber da jeder GPU-Kern deutlich langsamer läuft als ein CPU-Kern und nicht über die Funktionen verfügt, die für moderne Betriebssysteme erforderlich sind, sind sie für die Ausführung des größten Teils der Verarbeitung in alltäglichen Berechnungen nicht geeignet. Am besten eignen sie sich für rechenintensive Operationen wie Videoverarbeitung und Physiksimulationen.


GPGPU ist noch ein relativ neues Konzept. Ursprünglich wurden GPUs nur für das Rendern von Grafiken verwendet; mit fortschreitender Technologie wurde die im Vergleich zu CPUs große Anzahl von Kernen in GPUs durch die Entwicklung von Rechenfähigkeiten für GPUs ausgenutzt, so dass diese viele parallele Datenströme gleichzeitig verarbeiten können, ganz gleich, um welche Daten es sich dabei handelt. Obwohl GPUs Hunderte oder sogar Tausende von Datenstromprozessoren haben können, laufen sie alle langsamer als ein CPU-Kern und haben weniger Funktionen (selbst wenn sie Turing komplett sind und so programmiert werden können, dass sie jedes Programm ausführen können, das eine CPU ausführen kann). Zu den Funktionen, die GPUs fehlen, gehören Interrupts und virtueller Speicher, die für die Implementierung eines modernen Betriebssystems erforderlich sind.

Mit anderen Worten: CPUs und GPUs haben deutlich unterschiedliche Architekturen, die sie für verschiedene Aufgaben besser geeignet machen. Ein Grafikprozessor kann große Datenmengen in vielen Datenströmen verarbeiten und relativ einfache Operationen darauf ausführen, ist aber für die schwere oder komplexe Verarbeitung von einzelnen oder wenigen Datenströmen ungeeignet. Eine CPU ist auf einer Pro-Kern-Basis (in Bezug auf Anweisungen pro Sekunde) viel schneller und kann komplexe Operationen auf einem einzelnen oder wenigen Datenströmen leichter ausführen, kann aber nicht viele Datenströme gleichzeitig effizient verarbeiten.

Infolgedessen sind GPUs nicht geeignet für Aufgaben, die nicht wesentlich von der Parallelisierung profitieren oder nicht parallelisiert werden können, einschließlich vieler gängiger Verbraucheranwendungen wie Textverarbeitungsprogramme. Außerdem verwenden GPUs eine grundlegend andere Architektur; man müsste eine Anwendung speziell für einen GPU programmieren, damit sie funktioniert, und für die Programmierung von GPUs sind erheblich andere Techniken erforderlich. Zu diesen unterschiedlichen Techniken gehören neue Programmiersprachen, Modifikationen bestehender Sprachen und neue Programmierparadigmen, die besser geeignet sind, eine Berechnung als eine parallele Operation auszudrücken, die von vielen Stromprozessoren ausgeführt werden muss. Weitere Informationen zu den für die Programmierung von GPUs erforderlichen Techniken finden Sie in den Wikipedia-Artikeln über Stream Processing und Parallel Computing .

Moderne GPUs sind in der Lage, Vektoroperationen und Fließkomma-Arithmetik auszuführen, wobei die neuesten Karten in der Lage sind, Fließkomma-Zahlen mit doppelter Genauigkeit zu manipulieren. Frameworks wie CUDA und OpenCL ermöglichen es, Programme für GPUs zu schreiben, und aufgrund der Beschaffenheit von GPUs eignen sie sich am besten für hochgradig parallelisierbare Operationen, wie z.B. im wissenschaftlichen Rechnen, wo eine Reihe von spezialisierten GPU-Computerkarten einen brauchbaren Ersatz für einen kleinen Compute-Cluster wie in NVIDIA Tesla Personal Supercomputers darstellen können. Verbraucher mit modernen GPUs, die Erfahrung mit Folding@home haben, können diese nutzen, um mit GPU clients beizutragen, die Proteinfaltungssimulationen mit sehr hohen Geschwindigkeiten durchführen und mehr Arbeit in das Projekt einbringen können (lesen Sie auf jeden Fall zuerst die FAQs , insbesondere die, die sich auf GPUs beziehen). GPUs können auch eine bessere Physiksimulation in Videospielen mit PhysX ermöglichen, die Video-Kodierung und -Dekodierung beschleunigen und andere rechenintensive Aufgaben durchführen. Für diese Art von Aufgaben sind GPUs am besten geeignet.

AMD leistet Pionierarbeit bei einem Prozessordesign namens Accelerated Processing Unit (APU) , das herkömmliche x86-CPU-Kerne mit GPUs kombiniert. Dieser Ansatz ermöglicht eine Grafikleistung, die der von Motherboard-integrierten Grafiklösungen weit überlegen ist (wenn auch nicht mit teureren diskreten GPUs konkurrieren kann), und ermöglicht ein kompaktes, kostengünstiges System mit guter Multimedia-Leistung ohne die Notwendigkeit eines separaten Grafikprozessors. Die neuesten Intel-Prozessoren bieten ebenfalls integrierte On-Chip-Grafiken, obwohl die konkurrenzfähige integrierte GPU-Leistung derzeit auf die wenigen Chips mit Intel Iris Pro Graphics beschränkt ist. Mit dem weiteren Fortschritt der Technologie werden wir einen zunehmenden Grad der Konvergenz dieser einst getrennten Teile sehen. AMD stellt sich vor eine Zukunft, in der CPU und GPU eine Einheit bilden und nahtlos an derselben Aufgabe arbeiten können .

Dennoch 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 einem GPU zu beschleunigen. Da so viel vorhandene Software die x86-Architektur verwendet und weil GPUs andere Programmiertechniken erfordern und einige wichtige Funktionen fehlen, die für Betriebssysteme benötigt werden, ist ein genereller Übergang von der CPU zum Grafikprozessor für alltägliche Berechnungen sehr schwierig.

257
257
257
2011-07-10 20:22:09 +0000

Was macht den Grafikprozessor so viel schneller als die CPU?

Der Grafikprozessor ist nicht schneller als die CPU. CPU und GPU wurden mit zwei unterschiedlichen Zielen und mit unterschiedlichen Kompromissen entwickelt, so dass sie verschiedene Leistungsmerkmale aufweisen. Bestimmte Aufgaben sind in einer CPU schneller, während andere Aufgaben in einem Grafikprozessor schneller berechnet werden. Die CPU zeichnet sich dadurch aus, dass sie komplexe Manipulationen an einem kleinen Datensatz ausführt, der Grafikprozessor zeichnet sich dadurch aus, dass er einfache Manipulationen an einem großen Datensatz ausführt.

Der Grafikprozessor ist eine Spezial-CPU, die so konstruiert ist, dass ein einziger Befehl einen großen Datenblock (SIMD/Single Instruction Multiple Data) bearbeitet, wobei alle die gleiche Operation anwenden. Das Arbeiten in Datenblöcken ist sicherlich effizienter als das gleichzeitige Arbeiten mit einer einzelnen Zelle, da der Overhead bei der Dekodierung der Befehle wesentlich geringer ist; das Arbeiten in großen Blöcken bedeutet jedoch, dass es mehr parallele Arbeitseinheiten gibt, so dass viel mehr Transistoren verwendet werden, um einen einzelnen GPU-Befehl zu implementieren (was zu einer Beschränkung der physikalischen Größe führt, mehr Energie verbraucht und mehr Wärme erzeugt).

Die CPU ist so ausgelegt, dass ein einzelner Befehl an einem einzelnen Datenpunkt so schnell wie möglich ausgeführt wird. Da sie nur mit einem einzigen Datum arbeiten muss, ist die Anzahl der Transistoren, die zur Implementierung einer einzelnen Anweisung erforderlich ist, viel geringer, so dass eine CPU sich einen größeren Befehlssatz, eine komplexere ALU, eine bessere Zweigvorhersage, eine bessere virtualisierte Architektur und ein ausgeklügelteres Caching-/Pipelineschema leisten kann.

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 wurde; der Grund, warum wir immer noch CPU verwenden, ist, dass die Art von Aufgaben, die ein Betriebssystem erledigen muss, d.h. Entscheidungen treffen, auf einer CPU-Architektur effizienter ausgeführt werden. Ein Betriebssystem muss sich 100 verschiedene Datentypen ansehen und verschiedene Entscheidungen treffen, die alle voneinander abhängen; diese Art von Aufgaben lässt sich nicht leicht parallelisieren, zumindest nicht in einer SIMD-Architektur.

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

77
77
77
2011-07-10 21:17:30 +0000

GPUs fehlen:

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

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 (im Vergleich zu ihrer arithmetischen Leistung mit einfacher Genauigkeit)*, und sie sind viel größer (im Hinblick auf die Größe des Siliziums). Ältere GPU-Architekturen unterstützen keine indirekten Aufrufe (durch Funktionszeiger), die für die meisten Allzweckprogramme 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 Arbeitslast (wie andere Antworten bemerkt haben).

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

* Einige GPUs sind nicht langsam bei der Arithmetik mit doppelter Genauigkeit, wie die Quadro- oder Tesla-Linien von NVidia (Fermi-Generation oder neuer) oder die FirePro-Linie von AMD (GCN-Generation oder neuer). Aber diese sind in den meisten Geräten der Verbraucher nicht vorhanden.

39
39
39
2011-07-11 15:39:21 +0000

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

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

Bei einigen Aktionen sind die Klone ziemlich gut, z.B. den Boden fegen - sie können jeweils einen Teil des Bodens fegen.

Bei einigen Aktionen stinken die Klone, z.B. den Wochenbericht schreiben - alle Klone bis auf einen sitzen untätig herum, während ein Klon den Bericht schreibt (sonst erhalten Sie nur 100 Kopien desselben Berichts).

24
24
24
2011-07-10 17:51:46 +0000

Weil GPUs dafür ausgelegt sind, viele kleine Dinge gleichzeitig zu tun, und CPUs dafür ausgelegt sind, eine Sache auf einmal zu tun. Wenn Ihr Prozess massiv parallelisiert werden kann, wie beim Hashing, ist der Grafikprozessor um Größenordnungen schneller, sonst nicht.

Ihre CPU kann einen Hash viel, viel schneller berechnen als Ihr Grafikprozessor - aber in der Zeit, die Ihre CPU dafür benötigt, könnte Ihr Grafikprozessor mehrere hundert Hashes durchlaufen. GPUs sind dafür ausgelegt, viele Dinge gleichzeitig zu tun, und CPUs sind dafür ausgelegt, eine Sache nach der anderen zu tun, aber sehr schnell.

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 einen Grafikprozessor ersetzen, weil die CPU dort sitzt und ihre Arbeit viel besser erledigt, als es ein Grafikprozessor jemals könnte, einfach weil ein Grafikprozessor nicht dafür ausgelegt ist, die Arbeit zu erledigen, sondern eine CPU.

Eine kleine Randbemerkung: Wenn es möglich wäre, die CPU zu verschrotten und nur einen Grafikprozessor zu haben, würden wir sie dann nicht umbenennen? :)

15
15
15
2011-07-10 17:57:36 +0000

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

GPU ist nur eine spezialisierte CPU einer Grafikkarte. Wir leihen uns GPU-ähnliche Berechnungen ohne Grafik, weil Allzweck-CPUs bei paralleler und Fließkomma-Ausführung einfach nicht auf der Höhe der Zeit sind.

Wir verwenden tatsächlich unterschiedliche (eher GPU-ähnliche) CPU-Architekturen. Z.B. Niagara Prozessoren sind ziemlich Multitasking-fähig. SPARC T3 führt 512 gleichzeitige Threads aus.

12
12
12
2011-07-10 15:55:56 +0000

Ich könnte mich hier furchtbar irren und spreche von wenig oder keiner Autorität zu diesem Thema, aber es geht so:

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

  • GPU-Ausführungseinheiten können mit Verzweigungen nicht effizient umgehen.

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

Ich habe immer gedacht, dass die GPU-Ausführungseinheiten so etwas wie die Playstation 3 “SPEs” sein sollten, sie wollen einen Datenblock erhalten, eine Reihe von sequentiellen Operationen darauf ausführen und dann einen weiteren Datenblock ausspucken, spülen, wiederholen. Sie haben nicht so viel adressierbaren Speicher wie die Haupt-“CPE”, aber die Idee ist, jede “SPE” einer bestimmten, sequentiellen Aufgabe zu widmen. Die Ausgabe einer Einheit könnte die Eingabe einer anderen Einheit füttern.

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

Diese “Datenblöcke” können Teil eines Datenstroms sein, wie z.B. eine Liste von Eckpunkten aus der Zustandstabelle eines Spiels, MPEG-Daten von einer Platte usw.

Wenn etwas nicht in dieses “Streaming”-Modell passt, dann haben Sie eine Aufgabe, die nicht effizient paralelliert werden kann, und die GPU ist dafür nicht unbedingt die beste Lösung. Ein gutes Beispiel ist die Verarbeitung von “externen Ereignis”-basierten Dingen wie Tastatur, Joystick oder Netzwerkeingabe. Es gibt nicht viele Dinge, die nicht in dieses Modell passen, aber es wird immer einige wenige geben.

7
7
7
2011-07-12 04:36:14 +0000

Dies ist nichts über die Taktfrequenz oder den Zweck. Sie sind beide gleichermaßen in der Lage, die meisten, wenn nicht sogar alle Aufgaben zu erledigen; allerdings sind einige 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 von sehr intelligenten Kernen zu haben. Das geht leicht bis in die 80er Jahre zurück.

Im Inneren 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 durchzuführen (so ähnlich wie Multicore-Kerne, aber nicht, es ist kompliziert; siehe Parallelität auf Befehlsebene ). Ein intelligenter Kern könnte mehrere Berechnungen gleichzeitig durchführen (addieren, subtrahieren, multiplizieren, dividieren, Speicheroperationen), aber immer nur eine auf einmal; aus diesem Grund sind sie physisch größer (und daher viel teurer) als dumme Kerne.

Ein dummer Kern ist viel kleiner und daher können mehr auf einem einzigen Chip hinzugefügt werden, aber er kann nicht so viele Berechnungen gleichzeitig durchführen. Es besteht ein feines Gleichgewicht zwischen vielen dummen Kernen und einigen intelligenten Kernen.

Mehrkern-Architekturen funktionieren gut mit Grafiken, weil die Berechnungen leicht auf Hunderte von Kernen aufgeteilt werden können, aber es hängt auch von der Qualität des Codes ab und davon, ob sich anderer Code auf das Ergebnis einer Berechnung verlässt.

Dies ist eine viel kompliziertere Frage, als es vielleicht den Anschein hat. Weitere Informationen finden Sie in diesem Artikel über CPU-Design:

Moderne Mikroprozessoren - Ein 90-Minuten-Leitfaden

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

6
6
6
2011-07-15 11:44:05 +0000

Ich möchte einen syntaktischen Punkt ansprechen: Die Begriffe CPU und GPU sind Funktionsnamen und keine Architekturbezeichnungen.

Würde ein Computer einen GPU als Hauptprozessor verwenden, so würde er unabhängig von Architektur und Design zu einer “Central Processing Unit” (CPU).

5
5
5
2011-07-10 14:57:18 +0000

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

Der Unterschied besteht darin, wie sie auf dem Board installiert sind und welche Aufgaben ihnen übertragen werden. Natürlich verwenden wir einen Allzweckprozessor (oder einen Satz von Allzweckprozessoren) für den Hauptdatenbeweger und eine spezielle, parallelisierte, tief in die Leitung eingefügte Einheit für Dinge (wie z.B. Grafik), um sie am besten nutzen zu können.

Die meisten der raffinierten Tricks, mit denen GPUs ihre Sache sehr schnell erledigen konnten, wurden zuerst von Leuten entwickelt, die versuchten, schnellere und bessere CPUs zu bauen. Es hat sich herausgestellt, dass Word und Excel und Netscape und viele andere Dinge, für die die Leute ihre Computer benutzen, nicht nur die Funktionen, die von Grafik-Spezialchips angeboten werden, nicht voll ausnutzen, sondern sogar langsamer auf diesen Architekturen laufen, weil viele Verzweigungen die (sehr teure und langsame) Pipe-Line-Löschung verursachen.

3
3
3
2015-06-07 11:53:13 +0000

Der Grund, warum wir immer noch CPUs verwenden, ist, dass sowohl CPUs als auch GPUs ihre einzigartigen Vorteile haben. Siehe mein folgendes Papier, das in ACM Computing Surveys 2015 angenommen wurde und eine schlüssige und umfassende Diskussion über die Abkehr von der ‘CPU-gegen-GPU-Debatte’ hin zu ‘kollaborativem CPU-GPU-Computing’ bietet. A Survey of CPU-GPU Heterogeneous Computing Techniques

3
3
3
2011-07-17 16:44:16 +0000

Aus einem einfachen Grund: Die meisten Anwendungen sind nicht multi-threaded/vektorisiert.

Grafikkarten sind stark auf Multi-Threading angewiesen, zumindest im Konzept.

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

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

3
3
3
2011-07-10 21:35:07 +0000

Der ganze Sinn, überhaupt einen Grafikprozessor zu haben, bestand darin, die CPU von teuren Grafikberechnungen zu entlasten, die sie zu dieser Zeit durchführte. Durch die Kombination zu einem einzigen Prozessor würde man wieder dahin zurückkehren, wo alles begann.

2
2
2
2016-07-01 11:46:23 +0000

gpus sind gute Stream-Prozessoren. man kann sich Stream-Verarbeitung als das sequentielle Multiplizieren einer langen Reihe von Zahlen vorstellen. cpus haben auch Fähigkeiten zur Stream-Verarbeitung (man nennt sie SIMD-Erweiterungen), aber man kann nicht die gesamte Programmierlogik als Stream-Verarbeitung implementieren, und Compiler haben die Möglichkeit, Btyecode zu erzeugen, der, wann immer möglich, simd-Anweisungen verwendet.

nicht alles ist eine Reihe von Zahlen. Bilder und Videos sind es, vielleicht auch Ton (es gibt hier und da Opencl-Encoder). gpus kann also bilder, videos und ähnliches verarbeiten, enkodieren und dekodieren. ein nachteil ist, daß man in spielen nicht alles auf gpus auslagern kann, weil das stottern erzeugen würde, gpus sind mit grafiken beschäftigt und sollen beim spielen der engpaß im system sein. die optimale lösung wäre die volle ausnutzung aller komponenten in einem pc. so führt z.b. nvidias physx-engine standardmäßig berechnungen auf der cpu durch, wenn die gpu voll ausgelastet ist.

2
2
2
2015-11-16 15:42:30 +0000

Um es einfach auszudrücken: Die GPU kann mit einem Anhänger im Auto verglichen werden. Wie üblich reicht der Kofferraum für die Mehrheit der Menschen aus, außer für den Fall, dass sie etwas wirklich Großes kaufen. Dann können sie einen Anhänger brauchen. Dasselbe gilt für die GPU, da es normalerweise ausreicht, eine gewöhnliche CPU zu haben, die die meisten Aufgaben erfüllt. Wenn Sie jedoch einige intensive Berechnungen in vielen Threads benötigen, dann können Sie GPU