Wieso unterstützen einige Spiele kein Multicore?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Stell dir mal vor du bist Projektmanager in einer Firma und es gibt ein Projekt zu erledigen, was ist einfacher?

  • Einer Person einfach alles auf den Schreibtisch knallen
  • oder aber sich 8+ Personen holen, die für verschiedene Aufgaben einteilen und jeder einzelnen Person ihre Aufgabe erklären, sicherstellen, dass die Aufteilung Sinn macht und es nicht dazu kommt, dass eine Person auf die andere warten muss, da diese die Zwischenergebnisse einer anderen Person braucht, dann muss auch noch sichergestellt werden, dass jede Person die notwendigen Infos und die Zwischenergebnisse auch immer weitergegeben werden, und so weiter. Ziemlich viel Arbeit für den Projektmanager, dass alles zu verwalten, und sicherzustellen, dass alle Leute sinnvoll zusammenarbeiten.

Arbeit teilt sich nicht von alleine auf, das ist in der Realität so, aber auch bei Computern. Man kann dem Computer nicht sagen "Los, teil die Berechnungen auf die Kerne auf", man muss das Programm von Grund auf so aufbauen, dass es parallelisierbar ist, das heißt man muss das Programm erstmal in verschiedene Teile gliedern, die parallel laufen können, und dann eben definieren, wie und wann das Programm sich eben in mehrere, parallele Stränge (Threads) teilen darf, die dann aber auch wiederum in der Lage sein müssen, miteinander zu kommunizieren und ggf. Zwischenergebnisse mit anderen Threads teilen, das muss man alles einbauen, das passiert nicht von selbst. Wenn das Programm aber nicht parallelisierbar ist, kann man es auch nicht auf verschiedene Kerne aufteilen.

Gerade als Prozessoren sowieso nicht so viele Kerne hatten, hat sich dieser Aufwand meist nicht gelohnt, weshalb gerade bei etwas älteren Spielen oft wenig wert auf Parallelisierung gelegt wurde. Modernere Spiele sind meist durchaus in der Lage, 6-8 Kerne sinnvoll anzusprechen.

Aber auch moderne Spiele profitieren stärker von schnellen Kernen, als sie von vielen Kernen profitieren. Das liegt daran, dass man in Spielen nunmal nicht viel vorausplanen kann, der Computer weiß ja nicht, welche Taste du als nächstes drücken wirst. Wenn man noch nicht weiß, was es zu tun gibt, kann man das auch schlecht aufteilen.

Bei Spielen, die schlecht oder nicht für Multicore optimiert sind, kann man nicht viel machen, außer einen Prozessor mit schnelleren Kernen zu nehmen, ob sich das lohnt, ist eine andere Frage.

Woher ich das weiß:Hobby – Up-to-date dank PCGH-Abo und vielen anderen Quellen

PalomaMexican 
Fragesteller
 30.09.2022, 03:10

Okay der Vergleich ist wirklich gut :D Natürlich kann man einem alles an Arbeit geben, ist einfacher, aber dauert eben länger. Oder man gibt mehreren eine Aufgabe, ist schwieriger umzusetzen, aber das Endresultat ist besser :D Das Spiel Squad ist definitiv Singlecore.

0

Spiele haben keine parallel workloads. Wie komplex die nächste zu rendernde Szene ist hängt davon ab was du wo und wie im Spiel tust. Zudem sind viele ausgelagerte Prozesse von einander abhängig, letztlich ist die Szene erst dann gerendert, wenn alle relevanten Informationen für das nächste frame vorliegen und es ist relativ klar, dass es unmöglich ist dafür zu sorgen, dass hier alle Kerne gleich ausgelastet sind.

I.d.R. hast du einen main loop, Darin findet der Programmablauf statt. In so einer Engine müssen wahnsinnig viele verschiedene Dinge berechnet werden, also fängst du an einzelne task aus dem main loop auszulagern. Das kann mal gut, mal weniger gut funktionieren. Dass in Spielen meist ein Threads voll ausgelastet ist, ist also völlig normal, das bedeutet nicht, dass die anderen Threads nicht angesprochen werden, nur das für die aktuelle Aufgabe das Programm auf die Berechnung aus diesem einem Thread wartet.

Dass Spiele wirklich nur einen Thread nutzen kommt heute aber eigentlich nicht mehr vor, selbst Extrembeispiele wie Fortnite oder Minecraft nutzen zwar überwiegend nur zwei Threads können aber durchaus auf mehr Ressourcen zugreifen.

Ja es ist für die Programmierer mehr Aufwand die Anwendung auf mehrere Prozessorkerne zu verteilen.