Archiv verlassen und diese Seite im Standarddesign anzeigen : Intel - warum werden nie "alle kerne" eines prozessors zugewiesen?
msilver
2012-07-11, 10:09:50
hi,
ich habe einen i5 2500k mit vier kerne. mein os: windows 7 64bit
ebene habe ich mal den aquamark durchlaufen lassen. ok, ein alter benchmark, aber ich habe mitbekommen das nicht alle kerne zugewiesen waren im taskmanager, dass habe ich dann manuell einstellen müssen.
hat das seinen sinn das es nicht voreingestellt ist?
habe habe durch das manuelle zuweisen einen sprung von 169000 auf 240000 punkte im programm gemacht was für mich nicht unerheblich ist.
lg
maik
PrefoX
2012-07-11, 10:16:30
ich finds erstmal wichtig zu klären ob es einen i5 2500k mit einer anderen core anzahl gibt? :D
Aber sowas hab ich noch nie gesehen, bei mir sind immer alle zugewiesen aber ich überprüf das ja nicht immer. aber auch bei älteren spielen waren wenn ich geguckt hab immer alle cores aktiv.
msilver
2012-07-11, 10:32:30
^^
es gibt sogar programme wie dieses hier für dieses problem
http://www.forum-3dcenter.org/vbulletin/showthread.php?t=317643
seaFs
2012-07-11, 13:12:26
Zu dem Thema gab es doch vor ein paar Monaten mal eine Debatte, welche sich aus dem Bulldozerdilemma mit 4 Modulen/8 Integer-Kernen ergab.
Windows NT 6.x (und evtl sogar schon NT 5.x) lassen einen Thread gerne von einem Kern zum anderen hüpfen, sodass dadurch Latenzen entstehen, wenn der Thread von einem Cache in den anderen kopiert werden muss. Wird der Thread aber auf einen (oder bestimmte) Kerne "festgenagelt", dann wird dieses Hüpfen zwischen den Kernen vermindert oder ganz unterbunden.
Womöglich betrifft dieses Verhalten auch die Intel-CPUs.
Geldmann3
2012-07-11, 21:37:15
Windows NT 6.x (und evtl sogar schon NT 5.x) lassen einen Thread gerne von einem Kern zum anderen hüpfen, sodass dadurch Latenzen entstehen, wenn der Thread von einem Cache in den anderen kopiert werden muss. Wird der Thread aber auf einen (oder bestimmte) Kerne "festgenagelt", dann wird dieses Hüpfen zwischen den Kernen vermindert oder ganz unterbunden.
Das kann ich auch bei meiner CPU unter Windows7 feststellen. (6 Kerne Thuban / Bulldozer Vorgänger)
Einige Programme sind um wenige Prozent schneller, wenn ich sie festnagel.
msilver
2012-07-11, 22:12:01
bei mir auch...oder eben sogar extrem!
][immy
2012-07-11, 22:29:39
also der aquamark is nun wirklich schon alt. vielleicht gibt es in den compabilitätseinstellungen für das Programm einen Eintrag es absichtlich auf nur einen Kern zu begrenzen aus den oben beschriebenen nachteil des springes zwischen den kernen.
unter umständen hat das Spiel Aquanox 1/2 ja ein Problem welches in dem Benchmark nicht direkt auffällt mit mehr kernen.
Es mag aber auch einfach nur zufall sein.
bei mir mit Core2Quad und Win7 x64 isses übrigens auch nur 1 Kern.
aber ich habe mitbekommen das nicht alle kerne zugewiesen waren im taskmanager, dass habe ich dann manuell einstellen müssen.
Was hast du denn genau gemacht?
Den Aquamark auf einen Kern "fixiert" oder ihm ermöglicht alle 4 Kerne zu nutzen?
Nebenbei war es nicht einer der Fortschritte von Win7 gegenüber XP und Vista das das "Kern-hopping" vermindert werden sollte. Das war doch gerade in Verbindung mit HT von Intel ein Problem.
msilver
2012-07-11, 23:22:25
ich habe dem programm 4 kerne zugewiesen ;)
also sollte ich es so lassen wie es windows für richtig befindet und nix fummeln? was richtet denn das hopping aus?
seaFs
2012-07-11, 23:57:02
Aquamark 3 basiert auf Aquanox 2. Aquanox 2 widerum ist eines der ersten Spiele, welches HT unterstützt, ergo kann die Krass-Engine 2 Threads (bei Intel-CPUs/Pentium4) ab. Mehr als 2 Threads zuweisen sollte demnach nichts bringen.
Das Kernhüpfen kommt vom Scheduler von Windows, der dafür sorgt, dass alle laufenden Prozesse genügend CPU-Zeit erhalten. Dabei ist es dem Scheduler egal, auf welchem Kern gerade ein "Stück" CPU-Zeit vorhanden ist, es wird einfach dem Programm zugewiesen. Die Unterteilung in "Zeitstücke" ist notwendig, um das Multitasking zu ermöglichen. Ohne die Einteilung der Rechenleistung in Zeitscheiben könnte ein rechenintensiver Prozess das gesamte System lahmlegen, ohne dass noch etwas anderes funktioniert. Mithilfe von Kernzuweisung und Prozesspriorität kann der Scheduler etwas beeinflusst werden. Das Hin- und Herschieben des Prozesses auf verschieden (physikalische) Kerne bedeutet immer ein verschieben der Daten in den jeweiligen Cache eines anderen Kerns. Während des verschiebens kann natürlich nicht gerechnet werden. Wie das genau funktioniert, kann evtl. jemand anders besser erklären.
Nach Einführung des Bulldozers wurde auch ein Windowspatch mit verändertem Schedulingverhalten veröffentlicht. Gebracht hat es aber kaum etwas.
Gab es für den Aquamark 3 nicht auch einen Windows7-Patch?
Was alte Software angeht: Besonders bei Athlon64-Systemen kann es bei Software, die nur für Systeme mit einer CPU konzipiert sind, zu Timingproblemen kommen. Jeder CPU-Kern hat seinen eigenen TSC (Time Stamp Counter). Das ist der genaueste Zeitgeber in einem PC. Im TSC steht einfach nur eine Zahl, die angibt, wie viele Takte ein Kern seit dem Einschalten des Rechners schon läuft. Die verschiedenen TSC müssen nicht immer den selben Wert haben. Beim Athlon64 X2 gibt es nun 2 TSCs. Um eine Zeitbasis zu haben, wird der TSC verwendet. Alte Software kommt dann aber ins schleudern, wenn bei einem Kernhüpfer der TSC auf einmal einen anderen Wert hat. Dadurch kommt es vor, dass bestimmte Programme nach wenigen Sekunden/Minuten einfach abstürzen oder das gesamte System einfrieren lassen. Um dem entgegen zu wirken, hat AMD einen Prozessortreiber herausgegeben (AMD Dualcore Optimizer), welcher den TSC umgeht und einen Softwarezeitgeber ausliest. AMD hatte sich bei der Implementierung des TSC an Vorgaben von Intel gehalten. Bei Core2 (und späteren) CPUs tritt dieses Problem nicht auf, da hier selbige Vorschriften nicht angewendet wurden und der TSC somit anders eingebaut ist.
Vermutlich werden deshalb dem Aquamark 3 nicht alle Kerne zugewiesen, um Abstürze zu vermeiden.
myMind
2012-07-12, 00:25:26
hi,
ebene habe ich mal den aquamark durchlaufen lassen. ok, ein alter benchmark, aber ich habe mitbekommen das nicht alle kerne zugewiesen waren im taskmanager, dass habe ich dann manuell einstellen müssen.
hat das seinen sinn das es nicht voreingestellt ist?
Du sagst es ja selbst, es ist ein alter Benchmark. Zu der Zeit gab es kaum Multiprozessorsysteme in Spiele-PCs. Daher wird sich auch niemand Gedanken darüber gemacht haben.
Wenn es etwas bringt, einen Thread oder einen Prozess auf einen bestimmten Prozessor zu fixieren, dann sollten das die Programmierer tun. Wie das geht wird z.B. hier (http://stackoverflow.com/questions/2510593/how-can-i-set-processor-affinity-in-net)gezeigt.
Aus Sicht des Betriebssystems erscheint es sinnvoll, die Aufgaben über möglichst alle Kerne gleichmäßig zu verteilen. Das diese Verteilung für einen speziellen Thread nicht sinnvoll ist, kann es nicht wissen.
Lokadamus
2012-07-15, 21:27:03
Das Kernhüpfen kommt vom Scheduler von Windows, der dafür sorgt, dass alle laufenden Prozesse genügend CPU-Zeit erhalten. Dabei ist es dem Scheduler egal, auf welchem Kern gerade ein "Stück" CPU-Zeit vorhanden ist, es wird einfach dem Programm zugewiesen. Die Unterteilung in "Zeitstücke" ist notwendig, um das Multitasking zu ermöglichen. Ohne die Einteilung der Rechenleistung in Zeitscheiben könnte ein rechenintensiver Prozess das gesamte System lahmlegen, ohne dass noch etwas anderes funktioniert. Mithilfe von Kernzuweisung und Prozesspriorität kann der Scheduler etwas beeinflusst werden. Das Hin- und Herschieben des Prozesses auf verschieden (physikalische) Kerne bedeutet immer ein verschieben der Daten in den jeweiligen Cache eines anderen Kerns. Während des verschiebens kann natürlich nicht gerechnet werden. Wie das genau funktioniert, kann evtl. jemand anders besser erklären.mmm...
Der Scheduler von Win7 wurde überarbeitet.
Dabei wurde das Verhalten, dass willkürliche Kerne genommen wurden, abgeschaltet. Jetzt guckt der Scheduler nach, wie stark die Auslastung ist und ob auf dem anderen Kern etwas anderes läuft. Es bringt halt nichts von einem ausgelasteten Kern den Process auf einen anderen ausgelasteten Kern zu schieben. Dies müsste Core Parking sein. http://de.wikipedia.org/wiki/AMD_Turbo_Core#Nachteile
Auch wurde das Ansprechen von HTT verändert. Während bis Vista einfach von zum Beispiel Kern 1 - Kern 8 alle angesprochen wurden, werden seit Win7 zuerst die physikalischen Kerne und erst wenn diese ausgelastet sind, die HTT- Kerne benutzt. Dies müsste SMT Parking sein.
Wegen der Zeitscheibe, bei Windows 3.x war es noch so, dass die Programme selber die Zeit bestimmen konnte, was dazu führte, dass das System hin und wieder unbrauchbar wurde. Die Programme haben die CPU einfach nicht freigegeben.
hi,
ich habe einen i5 2500k mit vier kerne. mein os: windows 7 64bit
ebene habe ich mal den aquamark durchlaufen lassen. ok, ein alter benchmark, aber ich habe mitbekommen das nicht alle kerne zugewiesen waren im taskmanager, dass habe ich dann manuell einstellen müssen.
hat das seinen sinn das es nicht voreingestellt ist?
habe habe durch das manuelle zuweisen einen sprung von 169000 auf 240000 punkte im programm gemacht was für mich nicht unerheblich ist.
lg
maik
Dies kann vom Entwickler einer Applikation unter Windows eingestellt werden, da es manchmal besser ist, einen Thread oder gar den ganzes Prozess in einem CPU Kern zu halten.
Da der Benchmark schon recht alt ist (in Computerjahren) und auf alter CPU Hardware entwickelt wurde, werden die Entwickler hier wohl den Prozess auf 2 Kerne limitiert haben. (http://msdn.microsoft.com/en-us/library/windows/desktop/ms686223%28v=vs.85%29.aspx )
Thomas
msilver
2012-07-24, 08:06:20
ok, ich danke euch!
vBulletin®, Copyright ©2000-2025, Jelsoft Enterprises Ltd.