Wenn der zweite virtuelle Kern einen Beitrag leisten darf, während der erste ansonsten hängen bleiben würde, ist dies besser als nicht , damit Sie (zumindest) ein wenig mehr Arbeit erledigen können.
Es stellt sich die Frage, wann zwei unterschiedliche Threads dazu führen, dass einer schlechter läuft. Die Verzweigungsvorhersage und Abhängigkeiten zwischen Befehlen ändern sich nicht. Jetzt auf Speicherzugriff warten ... die beiden Threads konkurrieren um den Speicherzugriff, sowohl in Bezug auf die Cache-Auslastung als auch in Bezug auf die Bandbreite.
Wenn auf einigen CPUs HT ausgeführt wird und auf anderen nicht, bedeutet dies auch, dass Sie dem einen oder anderen Typ bestimmte Threads zuweisen? Ich denke nicht: Ihre Programme werden ihre Threads auf zufälligen virtuellen Kernen ausführen. Wie hilft die Aufteilung der Konfiguration? Da jede CPU über einen eigenen Cache verfügt, hängt der einzige Einfluss von der Speicherbandbreite und der Belastung durch die Cache-Kohärenz ab.
Im Allgemeinen erreichen Sie einen Punkt, an dem es teurer ist, mehr zu tun, als einige CPU-Ausführungseinheiten im Leerlauf laufen zu lassen. Dies hängt nicht direkt von der Anzahl der Threads ab, sondern von was die Threads tun , und von der detaillierten Speicherarchitektur und den Leistungsnuancen der verschiedenen Komponenten.
Es gibt keine einfache Antwort. Selbst mit Blick auf ein bestimmtes Programm kann sich die Maschine von derjenigen von Personen unterscheiden, die über ihre eigenen Erfahrungen berichten.
Sie müssen es selbst ausprobieren und messen was am schnellsten ist, mit dieser spezifischen Arbeit an genau dieser Maschine. Und selbst dann kann es sich mit Software-Updates und Nutzungsänderungen im Laufe der Zeit ändern.
Schauen Sie sich Band 3 von Angers Magnum Opus an . Wenn Sie sich einen bestimmten Prozessor genau ansehen, finden Sie begrenzende Ressourcen in der umfangreichen Pipeline vieler Schritte, die zum Ausführen von Code erforderlich sind. Sie müssen einen Fall finden, in dem Überbeanspruchung dazu führt, dass sie langsamer ausgeführt wird, als dass keine weitere Arbeit aufgenommen wird. Im Allgemeinen würde dies eine Art Caching bedeuten; und wo die Ressource zwischen Threads geteilt wird.
Was bedeutet die CPU-Anzeige: Sie zeigt alle Zeiten an, die nicht für die Ausführung des inaktiven Threads aufgewendet wurden. Beide logischen Threads, die einem Core zugewiesen sind, sind nicht inaktiv, obwohl die tatsächliche Arbeit an einem von ihnen möglicherweise gering ist. Die Zeit, die mit der Pipeline verbracht wird, steckt für einige Zyklen fest, bis die Ergebnisse fertig sind, der Speicher abgerufen wird, atomare Operationen eingezäunt sind usw. und die Zeit zeigt sich immer noch als in Benutzung. Warten auf RAM wird nicht als Leerlauf angezeigt. Nur so etwas wie I / O blockiert den Thread und stoppt die Ladezeit. Ein Betriebssystem-Mutex im Allgemeinen wird dies tun, aber mit dem Aufkommen von Multicore-Systemen ist dies keine sichere Sache mehr, da ein "Spinlock" den Thread nicht dazu bringt , wieder im Regal zu landen.
Eine CPU-Anzeige von 100% bedeutet also nicht, dass alles reibungslos läuft, wenn die CPU häufig auf Speicher wartet. Eine geringere Anzahl von logischen Kernen 90% zeigen , könnte sehr wohl mehr Arbeit bekommen, wie es endet die Zahl Knirschen und ist nun auf der Festplatte zu warten.
Sorgen Sie sich also nicht um die CPU-Anzeige. Blick auf tatsächliche Fortschritte gemacht, nur .