Frage

Ich betreibe ein paar ziemlich prozessorintensive Sachen auf meinem PC und stelle fest, dass meine CPU-Nutzung ziemlich seltsam aussieht. Mein PC ist ein Quad-Core i7-870, der angeblich acht virtuelle Kerne hat.
Ich verwende die Aufgabe parallel Bibliothek in .NET 4. Erwarten Sie daher, dass alle Kerne gut genutzt werden, aber ich erhalten Informationen wie diese vom Prozessmonitor:

CPU usage

Die Kerne 6 und 8 werden kaum berührt, und abgesehen von einem kurzen Ausbruch ist 4 nicht.
Soll ich das erwarten?

War es hilfreich?

Lösung

Zum größten Teil, ja, ich denke, das sieht vernünftig aus. Denken Sie daran, dass Hyperthreading wirklich gerecht Fälschungen zwei Kerne. Jeder physische Kern erhält zwei Frontenden, sodass zwei Anweisungen parallel gelesen werden können. Aber sie teilen immer noch die gleichen Ausführungseinheiten. Wenn also ein HT -Kern beschäftigt ist, werden die Ausführungseinheiten genommen, und so kann sein "Twin" -Kern nur sehr wenig Arbeit leisten.

Das scheint das zu sein, was Sie in den ersten beiden Kernen sehen (die zweite macht es sehr offensichtlich)

Abgesehen davon werden Sie fast nie in der Lage sein, eine perfekte CPU -Nutzung zu erhalten. Manchmal muss ein Kern nur auf Gedächtnis warten. Manchmal führt es einen kostspieligen nicht pipelierten Befehl aus und blockiert die Ausführungseinheiten auf diesen physischen Kern für vielleicht Zehn oder sogar Hunderte von Zyklen effektiv.

Und manchmal bedeuten Abhängigkeiten zwischen Anweisungen möglicherweise nur, dass Sie dies nicht tun haben Alles, was ein oder mehrere Kerne ausführen können.

Abgesehen davon sehen Sie 8 Grafiken und haben nur 4 Kerne, also Ja, natürlich funktioniert Hyperthreading. ;)

Andere Tipps

Zusamenfassend

  1. Ja, es funktioniert (natürlich)
  2. Profile es
  3. Ymmv - Hyperthreading ist nicht mehr als Multi -Kopie und hängt daher stark von der Art der Anweisungslast und Cache -Sättigung ab. Keiner Wissen über Ihren Code (außer dass es sich um C#handelt). Sie könnten nach Sammlungen von „kleinen Objekten“ suchen könnte zu einem geraden System gemacht werden. Strukturen (Ein Generikum List<> Verwendet auch ein Array intern und optimiert für Strukturelementtypen)

$0.02

Es hängt alles von Ihrer Algorithmus -Implementierung ab. TPL verwendet die richtige Anzahl von Kernen, abhängig von der Datenabhängigkeit in Ihrem Algorithmus

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top