Ядра проти ниток: Скільки ниток потрібно запустити на цій машині?


41

Скільки ниток потрібно запустити на цій машині?

Мої 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

Вибачте мою непритомність у сердечниках / нитках.

Відповіді:


52

Це те, що ти хочеш знати

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

У вас є 4 розетки процесора, кожен процесор може мати до 12 ядер, і кожне ядро ​​може мати дві нитки.

Максимальна кількість потоків - 4 ЦП х 12 ядер х 2 нитки на одне ядро, тож 12 х 4 х 2 - 96. Тому максимальна кількість ниток - 96, а кількість ядер - 48.

Що краще?

Це залежить від того, що ви хочете зробити: більше потоків означає меншу частоту (тобто 3 ГГц стає розділеним на два), але краще багатозадачність (більше потоків) та використання повних ядер (без гіперточок) краще для завдань із високим використанням процесора ( тобто ігри).

Сподіваюся, це вам допоможе.


3
"більше ниток означає меншу частоту", це твердження дуже помилкове. Навіть із гіперточенням, один процес самотності може повною мірою використовувати процесор. Hyperthreading може використовувати інструментальні конвеєри та регістри, які в іншому випадку будуть простоювати, щоб паралельно виконувати деякі процеси з різних процесів / потоків, збільшуючи максимальну пропускну здатність процесора в певних випадках. Підвищення продуктивності - це дуже застосування та конфігурація. Після P4 немає жодних зафіксованих покарань за продуктивність з увімкненою HT (ядра P4 у певних випадків мали деякі проблеми)
NGRhodes

2
Я не вважаю це твердження дуже неправильним. Якщо ви запускаєте два процеси на одному ядрі, для кожного процесу доступна менша частота, порівняно з запуском кожного процесу в його власному ядрі. Це дуже просте і спрощене твердження, але ОП ніколи не вимагає детальної інформації про гіпер-нарізку або про те, як це працює. Хоча ви праві, гіпер-нарізка пройшла довгий шлях і з 48 ядрами я впевнена, що вони не хотіли б її вимкнути.
Марк Кірбі

2
@NGRhodes: Intel HT досить тонкий, щоб перекривати виконання поза замовленнями між двома потоками. В основному це вся суть HT, щоб викрити більше паралелізму на рівні інструкцій до ядра поза замовленням. . вузький вузол, з якого стикається ваш код, HT може дати вам майже подвійну пропускну здатність або майже не мати додаткової пропускної здатності. (Як і 15% для кодування відео x264.)
Пітер Кордес

1
Див. Agner.org/optimize щодо мікроархітектурних деталей.
Пітер Кордес

1

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


1
звідки ви взяли "ефективно вміє обробляти 16 ниток"? На виході написано: "Нитка (и) на одне ядро: 2"
призначається

0

Ви дізнаєтеся, скільки потоків можна запустити на вашій машині, виконавши команду htop або ps, яка повертає кількість процесу на вашій машині.

Ви можете використовувати сторінку man про команду '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 з вихідного коду, ви знайдете його тут .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.