sehr interessant! wieso ist denn die gute alte cpu in sachen 3D berechnungen der gpu so extrem unterlegen?
mfg
Das liegt daran, dass die CPU ein größtenteils serielles Rechenwerk ist, welches serielle Berechnungen durchführen soll. Beispiel: ein laufendes Programm erfordert die Berechnung von A+B. Die CPU ermittelt das Ergebnis. Erst jetzt, wo das Ergebnis bekannt ist, kann eine Fallentscheidung durchgeführt werden, um zu ermitteln, was das Programm als nächstes tut. Und erst wenn die Fallentscheidung abgeschlossen wurde, ist klar, was als nächstes berechnet werden muss.
Das ist das Grundprinzip einer x86 In-Order Architektur. Heutzutage ist das ganze stark erweitert (Out-Of-Order mit Branch Prediction und Speculative Execution und so weiter und so fort), und man hat mehrere Kerne, die jeweils mehrere Ausführungseinheiten enthalten, aber das Grundprinzip ist dasselbe: die Ausführung von seriell aufeinanderfolgenden Einzelschritten, deren Ausgangsbedingungen oft von vorhergehenden Ergebnissen abhängen.
Das ist auch der Grund, warum es so schwer ist, Software vernünftig auf Multicores zu optimieren: wie soll man drei andere Kerne arbeiten lassen, wenn der erste noch kein Ergebnis geliefert hat?
GPUs dagegen sind massiv parallele Rechenwerke. Wenn du dir eine Grafikkarte mit 1600 Shadern anguckst, kannst du dir im Grunde einen Prozessor mit 1600 Kernen vorstellen... 1600 richtig simple, langsame und extrem beschränkte Kerne. Aber wenn z.B. ein Bild in Full-HD berechnet werden soll, dann gibt es halt fast 24 Millionen Pixel, von denen jeder für sich allein steht... kein Pixel beeinflusst irgend einen anderen, die Rechenaufgabe ist 100% parallel. Die 1600 Shader-"Kerne" können also sich beliebig Arbeit aus dem Haufen herausziehen und sich ihrer simplen, beschränkten Aufgabe ungestört widmen.
Das ist auch der Grund, warum sich nur sehr wenige Programme auf der GPU ausführen lassen: die Shader sind für sich allein lahm und dumm, und haben mit seriellen Aufgaben nichts am Hut. Dann sitzen 1599 "Kerne" gelangweilt herum, weil einer ewig braucht, um ein Ergebnis zu ermitteln, von dem alles weitere abhängt. Da ist die hochgetaktete, moderne x86-CPU dutzendmal schneller.