Cores vs Threads: Сколько потоков я должен запустить на этом компьютере?

Сколько потоков я должен запустить на этой машине?

мой lscpu говорит, что есть 96 ядер. Это физические ядра? Какой максимальный и оптимальный поток я могу запустить на этой машине?

https://stackoverflow.com/a/10670440/610569 показывают, что я могу запустить более 20 потоков на ядро. Все хорошо? Это оптимально?

alvas@server:~$ lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                96
On-line CPU(s) list:   0-95
Thread(s) per core:    2
Core(s) per socket:    12
Socket(s):             4
NUMA node(s):          4
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 62
Model name:            Intel(R) Xeon(R) CPU E5-4657L v2 @ 2.40GHz
Stepping:              4
CPU MHz:               2700.000
CPU max MHz:           2900.0000
CPU min MHz:           1200.0000
BogoMIPS:              4801.91
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              30720K
NUMA node0 CPU(s):     0,4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92
NUMA node1 CPU(s):     1,5,9,13,17,21,25,29,33,37,41,45,49,53,57,61,65,69,73,77,81,85,89,93
NUMA node2 CPU(s):     2,6,10,14,18,22,26,30,34,38,42,46,50,54,58,62,66,70,74,78,82,86,90,94
NUMA node3 CPU(s):     3,7,11,15,19,23,27,31,35,39,43,47,51,55,59,63,67,71,75,79,83,87,91,95

Прошу прощения за мое заурядность в ядрах / темах.

3 ответа

Решение

Это то, что вы хотите знать

Thread(s) per core:    2
Core(s) per socket:    12
Socket(s):             4

У вас есть 4 сокета ЦП, каждый ЦП может иметь до 12 ядер, а каждое ядро ​​может иметь два потока.

Максимальное количество потоков составляет 4 ЦП x 12 ядер x 2 потока на ядро, поэтому 12 x 4 x 2 равно 96. Следовательно, максимальное число потоков равно 96, а максимальное число ядер равно 48.

Что лучше?

Это зависит от того, что вы хотите сделать, чем больше потоков, тем меньше частота (т. Е. 3 ГГц становится разделенным на две части), но лучше многозадачность (больше потоков) и использование полных ядер (без гиперпоточности) лучше для задач высокой загрузки ЦП (т.е. игры).

Надеюсь, это поможет вам.

Ваша машина:

4 сокета x 12 ядер / сокет x 2 потока / ядро, то есть 96 потоков и 48 ядер

В идеале, без ввода-вывода, синхронизации и т. Д., И больше ничего не работает, используйте 48 потоков задачи.

На самом деле, использование около 95 потоков может быть лучше для максимального использования вашей машины.

Потому что:

ядро иногда ожидает данных или ввода-вывода, поэтому поток 2 может выполняться, пока поток 1 не работает.

Наконец, вы должны протестировать, чтобы получить лучшее число в зависимости от ваших конкретных задач.

Каждый поток ядра процессора (аппаратный поток) - одно из ваших 96 ядер эффективно может обрабатывать 16 потоков (программный поток, например, C++ thread.h) в большинстве случаев, по моему теоретическому мнению.

Вы узнаете, сколько потоков вы можете запустить на своем компьютере, запустив команду htop или ps, которая возвращает число процессов на вашем компьютере.

Вы можете использовать справочную страницу о команде 'ps'.

man ps

Если вы хотите рассчитать количество всех пользователей процесса, вы можете использовать одну из следующих команд:

  1. ps -aux| wc -l
  2. ps -eLf | wc -l

Расчет количества пользовательских процессов:

  1. ps --User root | wc -l

Также вы можете использовать "htop" [Ссылка]:

Установка в Ubuntu или Debian:

sudo apt-get install htop

Установка на Redhat или CentOS:

yum install htop
dnf install htop      [On Fedora 22+ releases]

Если вы хотите скомпилировать htop из исходного кода, вы найдете его здесь.

Другие вопросы по тегам