Frage

Ich habe ein Multithreaded-Programm, das auf einem Quad-Core-Intel I7 läuft.Wenn ich Runtime.getRuntime.availableProcessors() ausführe, bekomme ich 8, und ich weiß, dass Hyperthreading in dieser CPU zur Verfügung steht.

Wenn ich jedoch Fäden erzeugte, sind meine CPU-Werte jedoch bei 100% (d. H. Nicht-Null) für 4 Threads, was bedeutet, dass 4 Threads nicht verwendet werden.Gibt es eine Möglichkeit, Hyperthreading in Java zu ermöglichen?

War es hilfreich?

Lösung

Hyperthreading ist dadurch aktiviert, dass alle modernen JVMs native Threads verwenden, sodass dies eine OS / CPU-Konfigurationseinstellung ist.

Hyperthreading gibt Ihnen jedoch keine zusätzlichen Kerne, sondern ermöglicht feinkörnige Timeshare der vier CPUs, die Sie haben. Das heißt, während ein Thread gebilligt wird, sagen Sie, dass ein Warten auf eine in den Cache geflogene Seitend in den Cache wartet, dann kann ein anderer Thread eintauchen und Teile der CPU verwenden. Es fügt etwa 10% auf die Größe eines CPU-Kerns aufgrund komplexerer Planungsanforderungen hinzu und profitiert nicht alle Anwendungen.

Wenn Sie den vier CPUs mit vier Threads aus maximal gemacht haben, ist das mit Hyperthreading eingeschaltet oder ausgeschaltet. Es bedeutet nur, dass diese Fäden heiß laufen, ohne viel zu blockieren.

Der Grund, warum Java eine 8-Core-CPU meldet, anstatt 4, weil das Betriebssystem Java sagt, dass die CPU 8 Kerne hat. Das Betriebssystem ist der Ansicht, dass, weil das Betriebssystem mitgeteilt wurde, um Threads zu planen, als ob er eine 8-Kern-CPU war, dadurch wurde das Hinzufügen von Hyperthreading an OSES viel einfacher. Das OS trägt in der Verwaltung von Threads wie zuvor, ohne zu einem Großteil der inneren Arbeiten von Hyperthreading und lässt die CPU die niedrige Ebene der Montage der Baugruppe verwalten und wenn Teile der CPU verfügbar sind.

Eine detailliertere Diskussion mit Benchmarks kann gelesen werden hier < / p>

Andere Tipps

Verwenden Sie den folgenden Befehl

generasacodicetagpre.

Der Ausgang kann verwendet werden, um die tatsächliche Anzahl von Kernen zu ermitteln, und wenn Sie Hyperthreading aktiviert haben oder nicht.

generasacodicetagpre.

Der tatsächliche Parallelität, der erreicht werden kann, ist (Anzahl der Buchsen) x (Kerne pro Buchse) x (Threads pro Kern).Um zu ermitteln, ob Ihr Prozessor hyperthreadiert ist oder nicht, können Sie die Threads pro Kernparameter verwenden.

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