Rdzenie kontra wątki: ile wątków powinienem uruchomić na tym komputerze?

41

Ile wątków powinienem uruchomić na tym komputerze?

My lscpumówi, że są 96 rdzenie. Czy to są rdzenie fizyczne? Jaki jest maksymalny i optymalny wątek, który mogę uruchomić na tym komputerze?

https://stackoverflow.com/a/10670440/610569 pokazują, że mogę uruchomić ponad 20 wątków na rdzeń. Czy to jest ok? Czy to jest optymalne?

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

Przebacz mi moją noobiness w rdzeniach / wątkach.

alvas
źródło

Odpowiedzi:

52

To jest to, co chcesz wiedzieć

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

Masz 4 gniazda procesora, każdy procesor może mieć do 12 rdzeni, a każdy rdzeń może mieć dwa wątki.

Maksymalna liczba wątków wynosi 4 procesory x 12 rdzeni x 2 wątki na rdzeń, więc 12 x 4 x 2 wynosi 96. Dlatego maksymalna liczba wątków wynosi 96, a maksymalna liczba rdzeni wynosi 48.

Co jest lepsze ?

Zależy to od tego, co chcesz zrobić, więcej wątków oznacza mniejszą częstotliwość (tj. 3 GHz dzieli się na dwie części), ale lepsze wielozadaniowość (więcej wątków) i użycie pełnych rdzeni (bez hiperwątkowania) jest lepsze w przypadku zadań o dużym zużyciu procesora ( tj. gry).

Mam nadzieję, że to ci pomoże.

Mark Kirby
źródło
3
„więcej wątków oznacza mniejszą częstotliwość”, to stwierdzenie jest bardzo błędne. Nawet przy hiperwątkowaniu pojedynczy proces może w pełni wykorzystać procesor. Hyperthreading może korzystać z potoków instrukcji i rejestrów, które w innym przypadku byłyby bezczynne, aby wykonywać niektóre wykonania z różnych procesów / wątków równolegle, zwiększając w niektórych przypadkach maksymalną przepustowość procesora. Wzrost wydajności ma bardzo duże zastosowanie / konfigurację. Po P4 nie ma udokumentowanych kar za wydajność z włączoną HT (rdzenie genów P4 miały pewne problemy w niektórych przypadkach)
NGRhodes
2
Nie uważam tego stwierdzenia za bardzo błędne. Jeśli uruchomisz dwa procesy na jednym rdzeniu, dla każdego procesu dostępna będzie mniejsza częstotliwość w porównaniu do uruchamiania każdego procesu na jego własnym rdzeniu. Jest to bardzo proste i uproszczone stwierdzenie, ale OP nigdy nie zażądał żadnych szczegółów na temat hiperwątkowości ani sposobu jej działania. Chociaż masz rację, hiperwątkowość przeszła długą drogę i mając 48 rdzeni jestem pewien, że nie chcieliby tego wyłączać.
Mark Kirby,
2
@NGRhodes: Intel HT jest wystarczająco drobnoziarnisty, aby nakładać się na wykonanie poza kolejnością między dwoma wątkami. Jest to w zasadzie cały punkt HT, aby odsłonić więcej równoległości na poziomie instrukcji do rdzenia poza kolejnością. (tj. utrzymywanie tych jednostek wykonawczych zasilanych, nawet gdy jeden wątek odzyskuje dane z oddziału niepoprawnie lub czeka na brak pamięci podręcznej.) Przepustowość problemu frontonu jest podzielona w proporcji 50/50 (z wyjątkiem sytuacji, gdy jeden wątek jest zablokowany), więc w zależności od rodzaju wąskim gardłem, w które wpada Twój kod, HT może zapewnić prawie podwójną przepustowość lub prawie brak dodatkowej przepustowości. (Jak 15% w przypadku kodowania wideo x264).
Peter Cordes,
1
Szczegółowe informacje na temat mikroarchitektury można znaleźć na agner.org/optimize .
Peter Cordes,
1

Każdy wątek procesora (wątek sprzętowy) - jeden z 96 rdzeni wydajnie radzi sobie z 16 wątkami (wątek programowy np. C ++ thread.h) w większości przypadków, moim zdaniem teoretycznym.

Piotr Lenarczyk
źródło
1
skąd masz „wydajnie obsłużyć 16 wątków”? Wyjście mówi „Wątki na rdzeń: 2”
popełniono
0

Przekonasz się, ile wątków można uruchomić na komputerze, uruchamiając polecenie htop lub ps, które zwraca liczbę procesów na komputerze.

Możesz użyć strony man o komendzie „ps”.

man ps

Jeśli chcesz obliczyć liczbę wszystkich procesów użytkowników, możesz użyć jednego z następujących poleceń:

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

Obliczanie liczby procesów użytkownika:

  1. ps --User root | wc -l

Możesz także użyć „htop” [Dokumentacja] :

Instalowanie na Ubuntu lub Debian:

sudo apt-get install htop

Instalowanie na Redhat lub CentOS:

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

Jeśli chcesz skompilować htop z kodu źródłowego, znajdziesz go tutaj .

Saeed Zahedian Abroodi
źródło