Es ist auch unmöglich alle Kerne gleichmäßig auszulasten. Hier mal ein kleines Beipsiel, was so ungefähr sogar auf Crysis zutrifft. In irgend einem Interview wurde das einmal erwähnt.
Kern 1 ist für's Gameplay und den Szenenaufbau verantwortlich, Kern 2 für's Datenstreaming, Kern 3 für die Physik und Kern 4 für den Sound und die KI.
Es lassen sich also imme nur bestimmte Aufgaben auf bestimmte Kerne verteilen. Wenn Kern 3 mit den Physikberechnungen völlig ausgelastet ist, dann können trotzdem nicht die freien Kapazitäten vom Kern 2 genutzt werden.
Es ist bei weitem nicht einfach ein Spiel in so viele Teilaufgaben zu zerlegen und diese effizient zu verteilen. Oftmals ist es sogar schädlicher so viele Threads parallel laufen zu lassen, als wenn man nur zwei in Folge arbeiten lässt.
Da sich alle Threads nämlich gegenseitig beeinflussen, können auf diese Weise oft Situationen auftreten in denen ein Thread auf die Ergebnisse des anderen Threads warten muss, welcher wiederum Ergebnisse eines anderen Threads erfordert.
Da muss also jeder Thread immer auf den anderen warten um selbst weiter machen zu können. Ergo, wartet der Kern auch die meiste Zeit nur vor sich hin.
Der ganze Sinn der Verteilung ist einfach der in Extemsituationen nicht die komplette Leistung einbrechen zu lassen.
Wen so etwas genauer interessiert, den kann ich auf die Microsoft Developer-Seiten verweisen. Dort gibt es eine sehr gute Videopräsentation zum Thema Multicore-Programmierung und die Probleme die damit auftreten.
@Dadi:
Bitte unterlasse in Zukunft solche Vergleiche.






Zitieren
