Ich bin nur neugierig, warum der Scheduler eine App ständig zwischen CPUs verschiebt, anstatt sie auf einer zu belassen. Es sieht ein bisschen albern aus, 4 Kerne bei 25% anstatt eines bei 100% zu haben.
Hat es mit Wärme zu tun oder ist es irgendwie effizienter? Tun es andere Betriebssysteme anders?
Einblicke oder Links zu vertiefenden Themen wären nett. (Konnte nicht viel selbst finden.)
Aktualisieren:
Mit "ausbreiten" meine ich nicht, dass es auf mehreren CPUs gleichzeitig ausgeführt wird, sondern es wird mehrmals pro Sekunde von einer zur anderen verschoben, wodurch der Effekt entsteht, dass es ausgebreitet aussieht.
windows
performance
cpu
Macke
quelle
quelle
Antworten:
Ich denke,
wierob
hat den Punkt ziemlich gut beschrieben.Hier ist ein älterer Artikel diskutiert
processor affinity
Einstellungen mit einem Quad-Core QX6800 .(Der Link verweist auf die zweite Seite dieses Artikels).
Wenn Sie keine Prozessaffinität zu einem Kern erzwingen, verlieren Sie an Leistung ?
das Prozessordesign selbst auch solche Aspekte.
verfügt über einen 8-MB-
L3
Cache, der auf seine 4 Kerne verteilt ist .Es ist zu beachten, dass Sie möglicherweise nur diesen einen Single-Thread-Prozess auf dem System ausgeführt haben, während auf dem Betriebssystem selbst mehrere andere Aufgaben ausgeführt werden, die ebenfalls geplant werden müssen. Der Scheduler verteilt all diese Aktivitäten auf den verfügbaren Prozessorpool (oder die Prozessorkerne).
Mit der Nehalem- Architektur und NUMA können
Prozessoren über mehrere Sockets hinweg künftig auch Zugriffsbeschädigungen besser bewältigen.
Hier ist ein kurzes Bild von einer ArsTechnica-Seite zu NUMA .
Wenn Nehalem und
i7
Sie interessiert, habe ich noch einige Links zu dieser Antwort .quelle
Der Scheduler führt gerade den nächsten Thread aus, der zur Ausführung auf einem "freien" Kern / einer CPU bereit ist.
Über den Windows-Task-Manager können Sie einer bestimmten CPU einen Prozess zuordnen.
Mit 4 Kernen bei 25% werden 4 Threads gleichzeitig ausgeführt. Während ein Kern bei x% bedeutet, dass nur ein Thread ausgeführt wird. Ersteres ist also in einigen Fällen effizienter.
Während der Ausführung wird der Cache der CPU jedoch mit Daten gefüllt, auf die der Thread zugreift. Wenn der Thread also auf einer anderen CPU ausgeführt wird, kommt es zu mehr Cache-Fehlern, die teuer sind, da sich die Daten nicht im Cache dieser CPU befinden.
Was macht dein Thread? Wenn der Thread für eine sehr kurze Zeit "inaktiv" ist, ist der Kern, auf dem er zuvor ausgeführt wurde, möglicherweise von einer anderen Bedrohung besetzt, sodass Ihr Thread auf dem nächsten verfügbaren Kern ausgeführt wird. Was passiert, wenn Sie nur einen Kern angeben, der von Ihrem Prozess verwendet werden soll (z. B. einen Task-Manager)?
quelle
Es ist nicht. Ein Thread kann nur auf einem Prozessor ausgeführt werden. Einige Prozesse haben jedoch mehrere Threads, die verteilt werden können.
Die Überlegung, ob Sie es glauben oder nicht, hat nie darüber nachgedacht, wie es aussieht. Das System versucht, Fäden zu verteilen, da es nicht wissen kann, wann eine Spitze auftritt.
quelle
Das Betriebssystem migriert den Thread über CPU-Kerne (schnell, mehrmals pro Sekunde). Es ist effizienter, es die ganze Zeit auf demselben Kern auszuführen. Dies kann durch den Kontextmenüpunkt "Affinität festlegen" im Task-Manager erzwungen werden.
Beachten Sie, dass der Unterschied normalerweise (bei normaler Verwendung zu Hause) im Bereich weniger Prozent liegt.
Die Angabe "4 Kerne mit jeweils 25% Auslastung" bedeutet, wie der Task-Manager die durchschnittliche Auslastung angibt, dass jeder Kern ein Viertel der Zeit voll ausgelastet und den Rest der Zeit frei war.
Die Beschreibung gilt für Windows, ist aber auch auf anderen Betriebssystemen ähnlich.
quelle
Wenn jemand dies noch liest, habe ich es auch bemerkt und einige Tests durchgeführt, um festzustellen, ob es nicht nur ein Zufall ist. Es stellt sich heraus, dass es nicht ist! Ich halte es aus mehreren Gründen für effizienter, einen einzelnen Thread über alle Kerne zu verteilen:
Aufgrund der obigen zwei Beobachtungen bin ich zu dem Schluss gekommen, dass Turbo Boost und IDA unwirksam sind. Sie mögen auf älteren Betriebssystemen nützlich sein, aber Linux und Windows 7 verteilen alles ziemlich effizient auf alle Kerne. Also, ein Core 2 Quad q9100 mit 2,26 GHz wird fast (es gibt immer Ausnahmen :-) immer schneller sein als ein Core 2 Duo X9100 mit 3,06 GHz, und ich habe selten gesehen, dass er IDA verwendet (im Grunde genommen der Vorgänger von Turbo Boost). Erhöht die Frequenz auf einem oder zwei Kernen nur für Anwendungen mit einem Thread.
quelle