Вопрос

У меня есть многопоточная программа, работающая на четырехъядерном Intel I7.Когда я выполняю Runtime.getRuntime.availableProcessors(), я получаю 8, и я знаю, что гиперторизация доступна на этом процессоре.

Однако, когда я создаю нити, мои уровни ЦП на 100% (то есть ненулевой) для 4 потоков, что означает, что 4 потока не используются.Есть ли способ включить гипермидрию в Java?

Это было полезно?

Решение

Hyperthreading включен тем, что все современные JVMS используют нативные потоки, поэтому это настройка конфигурации OS / CPU.

Однако HyperThreading не дает вам дополнительных ядер, это позволяет тонкозернистым таймшером из четырех процессоров, которые у вас есть. То есть, в то время как один поток заблокирован, скажите ждущую страницу памяти, которая будет летать в кэш, то другой нить может включаться и использовать части процессора. Он добавляет около 10% дополнительных до размера CPU Core из-за более сложных требований планирования и не приносит пользу всем приложениям.

Если вы максимально максимально изменили четыре процессора с четырьмя потоками, то это возможно с включением или выключением HyperThreading. Это просто означает, что эти потоки бегут горячие, не блокируя много.

Причина, по которой Java сообщает о 8 Core CPU, а не 4 - потому что ОС сообщает Java, что у ЦП 8 ядер. ОС считает, что, поскольку ОС сообщил, что это сказано расписание потоков, как будто это был 8 Core CPU, это сделало добавление поддержки гиперторинга в ОСУ намного проще. ОС несет на управление нитями, как и раньше, не обращая внимания на большую часть внутренней работы Hyperthreading и позволяет процессом управлять низким уровнем планирования планирования сборки, как и, когда части процессора становятся доступными.

Более подробное обсуждение, с тестами можно прочитать Здесь / P >.

Другие советы

Используйте следующую команду

$ lscpu
.

Вывод может быть использован для определения фактического количества ядер и если у вас включен HyperThreading или нет.

Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                32
On-line CPU(s) list:   0-31
Thread(s) per core:    2
Core(s) per socket:    8
Socket(s):             2
NUMA node(s):          2
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 45
Stepping:              7
CPU MHz:               2399.995
BogoMIPS:              4799.35
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              20480K
NUMA node0 CPU(s):     0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30
NUMA node1 CPU(s):     1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31
.

Фактический параллелизм, который может быть достигнут, будет (№ розетки) x (ядра на разъем) x (потоки на сердечник).Чтобы определить, является ли ваш процессор HyperThreaded или нет, вы можете использовать темы на основной параметр.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top