Was sind die Unterschiede zwischen einer CPU und einer GPU?
Eine üblichen CPU oder Central Processing Unit (x86, ARM, MIPS, SPARC, PowerPC, RISC-V, usw) kennt Befehle, mit denen Daten aus dem Speicher in Register geladen, dort miteinander verknüpft (z.B. mit arithmetischen und logischen Operationen) und wieder zurückgeschrieben werden können. Zusätzlich kann sie noch im Programmcode hin und herspringen. Sie enthält in der Regel wenige Prozessorkerne (1 bis 16 zur Zeit), wobei jeder Kern oder Core ein vollwertiger Prozessor ist. Jeder Prozessorkern hat mehrere Funktionseinheiten, sodass die einzelnen Schritte, die bei der Befehlsausführung nötig sind, wie am Fließband parallel ausgeführt werden können. Diese Art von Prozessor ist darauf optimiert, möglichst viele Befehle pro Sekunde auszuführen.
EIne GPU oder Graphic Processor Unit wurde darauf optimiert, dreidimensionale Modelle von Objekten, z.B. einer Landschaft, in der selbstmordgefährdete Muskelpakete Zombies jagen, auf dem Bildschirm darzustellen. Das lässt sich super parallelisieren, weswegen in einer GPU meist viele kleine Prozessoreinheiten, die Shader, stecken. Ein Shader hat einen Befehlssatz der darauf optimiert ist, Geometriedaten zu verarbeiten, das sind meist Folgen von Multiplikationen, die danach aufaddiert werden. Auch spielt die Genauigkeit keine so große Rolle. 32-bittige Fließkommazahlen reichen meist aus (vergleiche dazu: eine CPU rechnet mit 80 Bit Genauigkeit oder mehr in der Fließkommaeinheit). Manchmal sind noch Videobeschleuniger auf einer GPU untergebracht. Das ist Hardware, die Videoströme dekomprimiert oder komprimiert.
Im Gegensatz zur CPU hat eine GPU keinen Zugriff auf die anderen Geräte des Rechners, sprich Festplatte, Tastatur, Maus, USB, etc. Um die GPU anzusteuern, lädt die CPU Daten und Shaderprogramme in den Speicher der Grafikkarte und startet dort die Ausführung.
Moderne Grafikkarten sind nun so gebaut, dass die Ergebnisse der Berechnungen der Shader nicht notwendigerweise auf dem Bildschirm landen. Ich kann die geballte Rechenpower auch nutzen, um gut parallelisierbare Algorithmen auf paralleler Hardware, eben den Shadern, auszuführen. nVidia hat dazu zum Beispiel CUDA etabliert. Damit ist es möglich, Supercomputer aus vielen Grafikkarten zu bauen. Die sind dann natürlich nicht an Bildschirme angeschlossen.
In manchen CPUs stecken inzwischen auch spezielle Funktionsblöcke, die z.B. die Verschlüsselung und Entschlüsselung von Daten oder Vektorrechnungen sehr effizient durchführen können. Oder es kommt noch ein Modem drauf, für WLAN oder Mobilfunk. Vielleicht noch ein paar Analog-nach-Digital- bzw. Digital-nach-Analog-Wandler? Und sind wir bei den APUs, den Application Processing Units, die z.B. in einem Handy ihren Dienst tun.