Cores vs Threads: Combien de threads dois-je exécuter sur cette machine?

41

Combien de threads dois-je exécuter sur cette machine?

Mon lscpudit qu'il y a 96 cœurs. Est-ce que ces noyaux physiques? Quel est le thread maximum et optimal que je peux exécuter sur cette machine?

https://stackoverflow.com/a/10670440/610569 montre que je peux exécuter plus de 20 threads par cœur. Est-ce OK? Est-ce 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

Pardonnez ma noblesse dans les noyaux / fils.

alvas
la source

Réponses:

52

C'est ce que tu veux savoir

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

Vous avez 4 sockets CPU, chaque CPU peut avoir jusqu'à 12 cœurs et chaque cœur peut avoir deux threads.

Votre nombre maximal de threads est de 4 CPU x 12 cœurs x 2 threads par cœur, ainsi 12 x 4 x 2 est égal à 96. Par conséquent, le nombre maximal de threads est de 96 et le nombre maximal de noyaux est de 48.

Qu'est-ce qui est mieux ?

Cela dépend de ce que vous voulez faire. Plus de threads signifient moins de fréquence (c’est-à-dire que 3 GHz sont scindés en deux) mais un meilleur mode multitâche (plus de threads) et l’utilisation de cœurs complets (sans hyper-threading) sont préférables pour les tâches nécessitant une utilisation intensive du processeur ( c'est à dire des jeux).

J'espère que cela vous aide.

Mark Kirby
la source
3
"plus de fils signifie moins de fréquence", cette affirmation est très fausse. Même en hyperthreading, un seul processus peut permettre une utilisation complète du processeur. Hyperthreading peut utiliser des pipelines d’instructions et des registres qui seraient autrement inactifs pour exécuter en parallèle certaines exécutions à partir de différents processus / threads, augmentant ainsi le débit maximal du processeur. Les gains de performance sont très application / configuration. Après la P4, il n'y a plus de pénalité de performance documentée avec la technologie HT (les cœurs de la génération P4 présentaient des problèmes dans certains cas)
NGRhodes
2
Je ne vois pas cette déclaration comme très fausse. Si vous exécutez deux processus sur un seul cœur, la fréquence disponible pour chaque processus est moindre, par rapport à l'exécution de chaque processus sur son propre cœur. Il s’agit d’une déclaration très simple et simpliste, mais le PO n’a jamais demandé de détails sur l’hyper-threading ni sur son fonctionnement. Bien que vous ayez raison, l’hyper-threading a parcouru un long chemin et avec 48 cœurs, je suis sûr qu’ils ne voudraient pas le désactiver.
Mark Kirby
2
@NGRhodes: Intel HT est suffisamment détaillé pour permettre le chevauchement des exécutions dans le désordre entre deux threads. C’est en gros l’intérêt de HT, d’exposer davantage de parallélisme d’instruction au cœur en panne. (c’est-à-dire que les unités d’exécution sont toujours alimentées alors même qu’un thread est en train de récupérer d’une branche mal préparée ou en attente d’un cache manquant.) goulot d'étranglement dans lequel votre code se heurte, HT pourrait vous donner un débit presque double, ou presque pas de débit supplémentaire. (Comme 15% pour l'encodage vidéo x264.)
Peter Cordes
1
Voir agner.org/optimize pour les détails microarchitecturaux.
Peter Cordes
1

Chaque thread de base du processeur (thread basé sur le matériel) - l'un de vos 96 cœurs peut gérer efficacement 16 threads (thread basé sur le logiciel, par exemple C ++ thread.h) dans la plupart des cas, selon mon opinion théorique.

Piotr Lenarczyk
la source
1
où avez-vous eu "peut efficacement gérer 16 threads"? La sortie « dit fil (s) par cœur: 2 »
committedandroider
0

Vous trouverez combien de threads peuvent être exécutés sur votre ordinateur en exécutant la commande htop ou ps qui renvoie le nombre de processus sur votre ordinateur.

Vous pouvez utiliser la page de manuel relative à la commande 'ps'.

man ps

Si vous souhaitez calculer le nombre de processus de tous les utilisateurs, vous pouvez utiliser l'une des commandes suivantes:

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

Numéro de calcul d'un processus utilisateur:

  1. ps --User root | wc -l

En outre, vous pouvez utiliser "htop" [Référence] :

Installation sur Ubuntu ou Debian:

sudo apt-get install htop

Installation sur Redhat ou CentOS:

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

Si vous voulez compiler htop à partir du code source, vous le trouverez ici .

Saeed Zahedian Abroodi
la source