buddha281 schrieb:
Ich meine damit explizit nicht, dass die Gesamtauslastung einer Multicore-CPU <100% liegt, sondern beziehe mich auf einen einzelnen Kern (oder sogar Thread). Als würde mein Spiel nur einen Thread nutzen können und bei z.B. 70% Auslastung im CPU-Limit hängen. Wieso schafft es nicht die 100%, obwohl es eigentlich möchte?
Windows ist ein Multi-Tasking-OS.
D.h. ein Prozess bekommt die CPU in Zeit-"Scheibchen". Als Windows noch ein DOS-Aufsatz war, gab es immer wieder Prozesse, die den Prozessor "für sich" vereinnahmt, und jegliches Multitasking damit unterbunden haben. Z.b. beim Speicher einer Datei auf eine Diskette. Da konnte man NIX mehr am Rechner machen, bis das fertig war. Aber eventuell erinnern sich daran nicht mehr so viele User. Ist ja schon eine Weile her^^
Und jetzt das kleine und pikante Detail. Beim Ende einer Zeit-Scheibe wird der Zustand des Prozesses gespeichert, und wenn er dann wieder "drann" ist, und eine neues Zeit-Scheibchen bekommt, dann wechselt er gerne mal den Kern. DAS ist was ihr seht.
Damit keine Hotspots entstehen oder einfach weil ein Core gerade nix zu tun hat.
Das macht Windows von sich aus so.
Das ein Thread einen Kern komplett auslastet ist eigentlich nur dann der Fall, wenn der Programmierer dieses Gebaren EXPLIZIT verbietet. Also dem Windows Sheduler von hinten ins Knie schießt.
ODER aber wenn CPPC bzw. Intel Turbo Boost 3.0 aktiv sind.
Die konzentrieren nämlich die Arbeit (soweit als möglich) auf den besten Kern des Prozessors (wenn er es denn Windows mitteilt und der Sheduler es versteht, d.h. abhängig von CPU und Windows-Version) bzw. auf das beste CCX (denn auch ein Wechsel der Kerne aus einem CCX auf ein anderes CCX (falls mehrere vorhanden) ist ein Performace-Killer, weil damit alle Daten im Cache verloren gehen.
Kann man ganz einfach nachprüfen, indem man z.b. Prime mal nur mit einem Worker laufen lässt.
DAS erwartet ihr doch, oder?
SO sieht es aber nur aus, wenn CPPC/Intel-Turbo-Boost aktiv sind.
DAS hier unter dem Text aber ist der "Normalzustand", so verteilt Windows die Arbeit von einem Thread über alle Kerne. Das ist das gleiche Programm, wieder nur ein Worker. Normalzustand.
Und darüber stolpern alle seit dem Jahr 2005.
Windows verteilt die Arbeit über die Kerne. Und zwar mehrere 1000x pro Sekunde, so schnell, das kein Programm das "richtig" anzeigen würde. Der Taskmanager ist also nur eine "Näherung" an das was eigentlich passiert.
2005 war das noch viel einfacher zu sehen. Aber viele User haben sich damals noch nicht damit beschäftigt.
Damals waren praktisch alle Programme noch Single-Threaded. D.h. sie nutzen nur einen einzigen Prozess.
Und wenn man einen Dual-Core hatte, dann lief da nicht ein Kern auf 100%, sondern beide Kerne auf 50%.
So einfach war das damals.
Der Unterschied zu heute ist gar nicht so groß. Heute haben wir nur mehr Kerne, und die Games nutzen nicht alle Kerne. Nur merken es die User jetzt erst, weil sie sich jetzt langsam von ihren 4-Kernern trennen, die die Games noch ganz gut auslasten konnten^^