Was kann die CPU, was die GPU nicht kann

fanatiXalpha

Fleet Admiral
Registriert
Aug. 2011
Beiträge
13.959
Tag leute,

ja, die Frage hab ich mir schon seit einiger Zeit gestellt.

Früher war das ja sehr klar getrennt.
Heute verschimmt das immer mehr, auch durch den HSA-Ansatz bzw. die Idee von AMD

Ich hab jetzt ein bisschen was dazu gelesen. Leider reicht mein technisches Verständnis nicht so ganz aus um das aufzunehmen bzw. zu verstehen.

Und meine Frage steht als Titel schon da: was kann die CPU, was die GPU (noch) nicht kann?
warum wird/wurde die CPU (noch) nicht durch die GPU ersetzt?

Ich hoffe, ein paar von euch können mir da auf die Sprünge helfen :)

Das Thema ist echt nicht einfach und ich will eigentlich auch nicht alles im detail wissen.
Am besten eine leicht verständlich Antwort :)


PS: ich hab sie hier gestellt, hätte natürlich genauso gut im GPU-Unterforum sein können ;)
 
Ich pack einfach mal ein paar Zitate aus diesem Forum zusammen...

Man kann sich das so vorstellen, dass eine gpu aus hunderten kleinen niedrig getakteten Kernen besteht. Diese können manche (nicht alle), stark parallelisierbere Berechnungen, schneller durchführen als CPUs.
Ist eine Berechnung nicht parallelisierbar, beziehungsweise läuft sie nicht auf den einfachen gpus, braucht man eine CPU.

Wenn du bei einer Rechnung für den nächsten Rechenschritt das Ergebnis des vorherigen brauchst, dann ist die Rechnung nicht parallelisierbar. Dann kannst du noch so viele kleine Rechenkerne haben. Sie bringen dir rein gar nichts. Stattdessen macht das ein Kern der CPU, schell und effektiv. Ein Schritt nach dem Anderen.

Zusammengefasst: GPUs können nur verhältnismäßig simple Rechungen durchführen, eben spezialisiert für Grafik und sind in manchen parallelisierbaren Anwendungen schneller als CPUs.

Und dann noch ein bisschen Wikipedia...

Bei CPUs kann der Einsatz von Caches somit zum Verringern des Von-Neumann-Flaschenhalses der Von-Neumann-Architektur beitragen. Die Ausführungsgeschwindigkeit von Programmen kann dadurch im Mittel enorm gesteigert werden.
 
Wenn man das mal auf möglichst simple Grundlagen runter bricht:

Die CPU kann vieles, einiges davon aber auch nicht sonderlich gut.
Die GPU kann relativ wenig, das aber wiederum ziemlich gut.

Die GPU ist ein Co-Prozessor, die dem Hauptprozessor Arbeit abnimmt. Grafik zu berechnen ist ein sehr komplexes Geschäft geworden, sodass es sich lohnt hier Hardware (und dazugehörige Software und Schnittstellen) zu entwicklen und zu betreiben und die Arbeit somit vom Hauptprozessor auszulagern.

Es ist immer effektiver einen Workload in Hardware abarbeiten zu lassen, also von einem Gerät, welches das nativ kann, anstatt von einem generischen Gerät, welches an diesen Workload angepasst werden kann.

Wann, oder ob, die CPU durch die GPU ersetzt wird steht daher eigentlich garnicht zur Diskussion. Das wird so schnell nicht passieren. Es gibt eben aktuell wieder Ansätze beides in einen Chip zu verpacken, aber das ist keine neue Idee und verfolgt rein praktische/finanzielle Ansätze. Stichwort wären ARM SoCs für Smart Devices und die x86 APUs von AMD, aber auch die integrierte GPU in den Intel CPUs.
 
DA gibts einige unterscheide, der wichtigste ist, das die meisten CPUs gut in Ganzzahloperationen und bei Operationen die relativ linear sind und die GPUs gut bei Fließkommaoperationen und parallelisierbaren Aufgaben.

Ganzzahloperationen und die geringe Parallelisierbarkeit entsprechen einem Typischen Programm (s.o.), also wenn dass, dann das, dann das etc. Grafikanwendungen (Spiele, Foto- und Videobarabeitung) sind dagegen gut parallelisierbar und sind daher Aufgaben für die GPU
 
@Powertrip und TheRealVash: mein gott, auf euch hab ich echt nur gewartet ey, das ist unglaublich. Wie die schmeißfliegen. Google hab ich selbst schon gefragt.
Und ich hab mir schon was eingermaßen zusammen suchen können.

Nur stellte sich für mich dann auch die Frage, wie dieses verschwimmen eigentlich genau aussehen sollte?

GPU und CPU unterscheiden sich massiv in der Architektur und dementsprechend auch in der Art der Aufgaben für die sie geeignet sind.

Die CPU ist darauf ausgelegt, möglichst serielle Aufgaben mit komplexen Instruktionen und vielen Verzweigungen im Code so schnell wie möglich aus zu führen, daher verfügt die CPU über eine Vielzahl VERSCHIEDENER Rechenwerke und in der Regel wenige Kerne mit einer Taktfrequenz im Gigaherz-Bereich. Da zudem die Aufgaben nicht unbedingt optimal auf die jeweilige CPU optimiert sind, verfügt die CPU über weitere Mechanismen um den Code noch zur Laufzeit zu "analysieren" und dementsprechend um zu sortieren um eine perfekte Auslastung möglichst vieler verschiedener Rechenwerke gleichzeitig zu erreichen.

Des weiteren enthält die CPU viele Hilfsfunktionen die das Betriebssystem bei typischen Aufgaben wie Taskwechseln, Timern und Interrupts unterstützen.


Die GPU hingegen ist klassisch gesehen ein Verbund aus mehreren hinter einander geschalteten, hoch spezialisierten Stufen welche typischerweise in jeder Grafikanwendung benötigt werden, wobei innerhalb jeder Stufe immer möglichst viele Funktionseinheiten parallel geschaltet sind.

Klassisch deswegen, weil bei modernen Grafikkarten diese einzelnen Stufen größtenteils aufgelöst und durch frei programmierbare Shadereinheiten ersetzt wurden. Shadereinheiten sind dabei quasi ebenfalls kleine Prozessoren mit jeweils einer eigenen FPU, jedoch mit der Besonderheit, dass immer mehrere Shader zu einem Block zusammen gefasst werden und dabei alle Shader in diesem Block den gleichen Code ausführen müssen, allerdings mit verschiedenen Daten - verglichen mit der CPU ist das eine enorme Einschränkung, denn die CPU kann auf jedem Prozessorkern tatsächlich komplett unabhängige Aufgaben ausführen.

Allerdings ist durch den sehr beschränkten Funktionsumfang der einzelnen Shader und deren hohe Anzahl (aktuell bis zu 2.000 Shader auf einer einzigen GPU!) eine sehr schnelle Ausführung möglich was dazu führt, dass GPUs bei gut geeigneten Aufgaben locker 10-100x so schnell sind wie die schnellsten auf dem Markt verfügbaren CPUs. Typische CPU-Aufgaben lassen sich allerdings größtenteils nicht auf die GPU portieren, da die GPU bei seriellen Aufgaben nicht von den vielen Shadern profitiert und die Aufgaben, wenn nur auf einem einzigen Shader ausgeführt, durchaus 10-1.000x so lange wie auf der CPU dauern würden - vorausgesetzt dass die Aufgabe sich überhaupt auf einem simplen Shader ausführen ließe und keine komplexen Instruktionen oder Sonderfunktionen benötigt welche nur in einer vollwertigen CPU existieren.

und die seite n bisschen durchgelesen, wobei es da mehr um Cuda ging: http://www.tomshardware.de/CUDA-Nvidia-CPU-GPU,testberichte-240065-2.html

@Nero, DunklerRabe und Nilson: danke :)

EDIT: the real vash, deinen zweiten link hab ich beinahe übersehen, den schau ich mir auch noch an
 
Zuletzt bearbeitet:
Zurück
Oben