Cores vs Threads: Wie viele Threads sollte ich auf diesem Computer ausführen?

41

Wie viele Threads sollte ich auf diesem Computer ausführen?

Meiner lscpuMeinung nach gibt es 96 Kerne. Sind das physische Kerne? Was ist der maximale und optimale Thread, den ich auf dieser Maschine ausführen kann?

https://stackoverflow.com/a/10670440/610569 zeigen, dass ich über 20 Threads pro Kern ausführen kann. Ist das in Ordnung? Ist das optimal

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

Verzeihen Sie meine Noobiness in Kernen / Fäden.

alvas
quelle

Antworten:

52

Das wollen Sie wissen

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

Sie haben 4 CPU-Sockel, jede CPU kann bis zu 12 Kerne haben und jeder Kern kann zwei Threads haben.

Ihre maximale Thread-Anzahl beträgt 4 CPU x 12 Kerne x 2 Threads pro Kern, sodass 12 x 4 x 2 96 sind. Daher beträgt die maximale Thread-Anzahl 96 und die maximale Core-Anzahl 48.

Was ist besser ?

Das hängt davon ab, was Sie tun möchten. Mehr Threads bedeuten weniger Frequenz (dh ein 3 GHz wird in zwei Teile geteilt). Besseres Multitasking (mehr Threads) und die Verwendung von Voll-Cores (kein Hyper-Threading) sind für Aufgaben mit hoher CPU-Auslastung besser ( dh Spiele).

Hoffe das hilft dir.

Mark Kirby
quelle
3
"Mehr Threads bedeuten weniger Häufigkeit", diese Aussage ist sehr falsch. Selbst bei Hyperthreading kann ein einzelner Prozess den Prozessor vollständig ausnutzen. Beim Hyperthreading können Anweisungs-Pipelines und -Register verwendet werden, die andernfalls im Leerlauf wären, um einige Ausführungen von verschiedenen Prozessen / Threads parallel auszuführen, wodurch in bestimmten Fällen der maximale Durchsatz eines Prozessors erhöht wird. Leistungssteigerungen sind sehr Anwendung / Konfiguration. Nach dem P4 gibt es keine dokumentierten Performance-Einbußen bei aktiviertem HT (die P4-Gen-Cores hatten in bestimmten Fällen einige Probleme)
NGRhodes
2
Ich sehe diese Aussage nicht als sehr falsch an. Wenn Sie zwei Prozesse auf einem einzigen Kern ausführen, ist für jeden Prozess weniger Frequenz verfügbar als für jeden Prozess auf einem eigenen Kern. Es ist eine sehr einfache und vereinfachte Aussage, aber das OP hat nie nach Einzelheiten über das Hyper-Threading oder dessen Funktionsweise gefragt. Obwohl Sie richtig liegen, hat das Hyper-Threading einen langen Weg zurückgelegt, und mit 48 Kernen bin ich sicher, dass sie es nicht ausschalten möchten.
Mark Kirby
2
@NGRhodes: Intel HT ist so feinkörnig, dass es die Ausführung in der falschen Reihenfolge zwischen zwei Threads überlappt. Dies ist im Grunde der springende Punkt von HT, um mehr Parallelität auf Befehlsebene mit dem nicht in der Reihenfolge befindlichen Kern zu offenbaren. (Das heißt, die Ausführungseinheiten bleiben gespeist, auch wenn ein Thread sich von einem Verzweigungsfehler erholt oder auf einen Cache-Fehler wartet.) Die Bandbreite für das Front-End-Problem wird 50/50 aufgeteilt (außer wenn ein Thread blockiert ist), je nachdem, welche Art von Wenn Ihr Code einen Engpass aufweist, können Sie mit HT fast den doppelten oder fast keinen zusätzlichen Durchsatz erzielen. (Wie 15% für x264-Videokodierung.)
Peter Cordes
1
Informationen zur Mikroarchitektur finden Sie unter agner.org/optimize .
Peter Cordes
1

Jeder CPU-Kern-Thread (hardwarebasierter Thread) - einer Ihrer 96 Kerne kann nach meiner theoretischen Meinung in den meisten Fällen 16 Threads (softwarebasierter Thread, z. B. C ++ thread.h) effizient verarbeiten.

Piotr Lenarczyk
quelle
1
woher hast du "16 Threads effizient verarbeiten können"? Die Ausgabe lautet "Thread (s) pro Kern: 2"
Committedandroider
0

Sie finden heraus, wie viele Threads Sie auf Ihrem Computer ausführen können, indem Sie den Befehl htop oder ps ausführen, der die Anzahl der Prozesse auf Ihrem Computer zurückgibt.

Sie können die Manpage zum Befehl 'ps' verwenden.

man ps

Wenn Sie die Anzahl aller Benutzer berechnen möchten, können Sie einen der folgenden Befehle verwenden:

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

Berechnen der Anzahl eines Benutzerprozesses:

  1. ps --User root | wc -l

Sie können auch "htop" [Referenz] verwenden :

Installation unter Ubuntu oder Debian:

sudo apt-get install htop

Installation unter Redhat oder CentOS:

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

Wenn Sie htop aus dem Quellcode kompilieren möchten, finden Sie es hier .

Saeed Zahedian Abroodi
quelle