Single-Thread-Prozess, der auf zwei Kernen ausgeführt wird

608
agz

Auf meiner Quad-Core-CPU scheint es, als würde ein einzelner Thread (Endlosschleife) auf zwei Kernen gleichzeitig ausgeführt. Warum ist das? Sollte ein einzelner Thread nicht nur auf einem Core ausgeführt werden?enter image description here

2
Bedenken Sie jedoch, dass ein durchschnittlicher Prozess immer mehr als einen Thread hat. Legen Sie die Prozessaffinität fest, um den Prozess darauf zu beschränken, alle Threads auf einem Core auszuführen. ta.speot.is vor 11 Jahren 0

3 Antworten auf die Frage

4
Hennes

Ein einzelner Laufstreifen kann auf beliebig vielen Kernen ausgeführt werden, ist jedoch auf einen einzelnen Kern gleichzeitig beschränkt.

Betrachten Sie es als Telefongespräch. Sie haben nur ein einziges Telefon * 1 und müssen weiter in das Telefon * 2 sprechen . Sie haben vier Mitarbeiter im Büro, von denen jeder * 3 sprechen kann . Nichts hindert Sie daran, das Telefon während einer Toilettenpause einer anderen Person zu übergeben.

Beachten Sie, dass es in das Telefon nur eine Person spricht zugleich .


* 1 Das Telefon ist die einzige Stufe.
* 2 Sie müssen weiter reden, da sie endlos läuft.
* 3 Die vier Personen sind ofc. die vier kerne.

Wie würden die Ressourcen verwaltet? Gibt es eine Notwendigkeit, L1-Cache über die Kerne zu übertragen? Warum wird es nicht einfach auf einem Kern und nicht auf zwei Kernen ausgeführt (gibt es einen Vorteil ... es scheint im Gegenteil imo zu sein)? agz vor 11 Jahren 0
1) Which resources? Could you expand that to be a bit more specific? 2) It is the scheduler in the OS decides on which core the process will run. Usually those try to keep the same process on the same core in order to benefit from cache hits and potential turbo boost features. 3) [Cache coherency](http://en.wikipedia.org/wiki/Cache_coherence) is handled by the CPU itself on the x86 architecture. You did not specify that you are using x86, but the picture of a task manager strongly hints at window and thus usually to x86. Hennes vor 11 Jahren 0
Haben Sie dieses Taskmanager-Bild auf einer 2 physischen 4 logischen Kern-CPU aufgenommen? Hennes vor 11 Jahren 0
Es ist ein Core 2 Quad q9650, 4 physikalische Cores und 4 Threads agz vor 11 Jahren 0
"Normalerweise versuchen diese, den gleichen Prozess auf demselben Kern zu halten, um von Cache-Treffern und potenziellen Turbo-Boost-Funktionen zu profitieren." Das war es, wonach ich gesucht hatte. Gibt es einen bestimmten Grund, warum es auf zwei Kernen ausgeführt wird? Auf meinem Dual-Core-System wird derselbe Prozess nur auf einem Kern ausgeführt. agz vor 11 Jahren 0
Ich habe keinen Zugriff auf die Windows Task Scheduler-Quelle oder deren Logik. Also kann ich das nicht für Windows beantworten. Das Beste, was ich tun kann, ist * Vermutung *. ZB ein Fahrer, der eine starke Präferenz für den Kern 0 hat, der die Lauffläche zu einem anderen Kern schiebt. Aber ich wiederhole: * Vermutung * Hennes vor 11 Jahren 2
Ein tatsächlicher Vorteil beim Schalten von Kernen ist die Temperatur. Durch das Umschalten heizen Sie nicht immer die gleiche Fläche des Chips auf. Dadurch wird es auch möglich, mit einer höheren Taktrate zu fahren, da die Maximaltemperatur niedriger ist. gnasher729 vor 10 Jahren 0
Dies könnte ein guter Punkt für moderne CPUs sein. Allerdings habe ich noch nicht das Wissen über die Wärmeableitung und den internen Mikrocode, der die Turbos verwaltet. Für einen Core2 sollte dies jedoch keine Rolle spielen, da sie keinen Turbo haben. Dieses Feature wurde mit der Nehalem-Serie (Core i7 9x0 und höher) eingeführt. Hennes vor 8 Jahren 0
0
harrymc

In Ihrem Screenshot kann ich nicht zwei, sondern 4 Threads mit 4 Kernen in perfekter Harmonie sehen, wobei ein paar Kerne ihre CPU mehr als das andere Paar verwenden, aber die Höhen und Tiefen aller 4 Kerne sind mehr oder weniger mit dem synchronisiert gleiche Zeitsegmente.

Dies sieht überhaupt nicht wie ein Single-Threaded-Prozess aus, sondern eher wie ein 4-Threaded-Prozess. Dies erfordert mehr Prüfung.

Das zu verwendende Werkzeug ist der Process Explorer . Nach dem Start können Sie mit der rechten Maustaste auf die Spaltenüberschriften klicken und bei Bedarf weitere Spalten auswählen.

Wenn Sie den Prozess gefunden haben, der diese CPUs verwendet, können Sie darauf doppelklicken und die Registerkarte Threads auswählen, um zu sehen, wie viele Threads vorhanden sind und was sie tun (welche Systemaufrufe verwenden sie).

Wenn der Prozess nur svchost.exe ist, handelt es sich um einen Systemdienst, der identifiziert werden kann. Die CPU, die am häufigsten verwendet wird, ist die Windows-Suche.

0
Arbalest

Diese Anzeige in Ihrem Posting zeigt Ihnen, wie viel Aktivität für jeden Kern abläuft, aber Sie erfahren nichts darüber, welche Prozesse / Threads auf welchem ​​Kern laufen.

Ich vermute, dass, wenn Ihr Single-Threaded-Programm seine "Zeitscheibe" bekommt, das Betriebssystem es auf einem Kern die Hälfte der Zeit und einen anderen Kern die andere Hälfte der Zeit ausführt. Vielleicht läuft es sogar zu einem kleinen Teil der Zeit auf den anderen Kernen.

Als Endlosschleife wird der Kern während der gesamten Zeitscheibe vollständig verwendet, aber jedes Zeitinkrement der Kernaktivität (im Task-Manager) bedeutet VIEL MEHR als die Dauer einzelner Zeitscheiben.

Um weitere Informationen zu erhalten, wechseln Sie zur Registerkarte Prozesse im Task-Manager. Klicken Sie im Ansichtsmenü auf Spalten auswählen und markieren Sie die Spalte "Threads". Suchen Sie dann in der Spalte Bildname Ihren Prozess. Stellen Sie sicher, dass es sich um einen einzelnen Thread handelt.

Da ich hier mit nicht allzu viel Belastung auf meiner XP-Box sitze, laufen 662 Threads. In meinem Antivirus werden 78 Threads ausgeführt, Firefox 45 Threads, Dropbox 33. Winamp spielt jetzt überhaupt nichts und 17 Threads. Bei jedem Inkrement in der Anzeige des Task-Managers können alle diese Threads auf einem beliebigen Kern vorhanden sein.