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

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

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

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

alvas@server:~$ lscpuArchitecture:          x86_64CPU op-mode(s):        32-bit, 64-bitByte Order:            Little EndianCPU(s):                96On-line CPU(s) list:   0-95Thread(s) per core:    2Core(s) per socket:    12Socket(s):             4NUMA node(s):          4Vendor ID:             GenuineIntelCPU family:            6Model:                 62Model name:            Intel(R) Xeon(R) CPU E5-4657L v2 @ 2.40GHzStepping:              4CPU MHz:               2700.000CPU max MHz:           2900.0000CPU min MHz:           1200.0000BogoMIPS:              4801.91Virtualization:        VT-xL1d cache:             32KL1i cache:             32KL2 cache:              256KL3 cache:              30720KNUMA 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,92NUMA 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,93NUMA 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,94NUMA 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

Простите мою тупость в ядрах / потоках.

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

Thread(s) per core:    2Core(s) per socket:    12Socket(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++.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 htopdnf install htop      [On Fedora 22+ releases]

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