Включить Intel Hyperthreading в Java
-
21-12-2019 - |
Вопрос
У меня есть многопоточная программа, работающая на четырехъядерном 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 или нет, вы можете использовать темы на основной параметр.