Núcleos x threads: quantos threads devo executar nesta máquina?

41

Quantas threads devo executar nesta máquina?

Meu lscpudiz que existem 96 núcleos. Esses núcleos físicos são? Qual é o encadeamento máximo e ideal que posso executar nesta máquina?

https://stackoverflow.com/a/10670440/610569 mostram que posso executar mais de 20 threads por núcleo. Tudo bem? Isso é ótimo?

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

Perdoe minha noobiness em núcleos / threads.

alvas
fonte

Respostas:

52

É isso que você quer saber

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

Você tem 4 soquetes de CPU, cada CPU pode ter até 12 núcleos e cada núcleo pode ter dois threads.

Sua contagem máxima de threads é de 4 CPU x 12 núcleos x 2 threads por núcleo; portanto, 12 x 4 x 2 são 96. Portanto, a contagem máxima de threads é 96 e a contagem máxima de núcleos é 48.

O que é melhor ?

Isso depende do que você deseja fazer, mais threads significa menos frequência (ou seja, 3 GHz se dividem em duas), mas melhor multitarefa (mais threads) e usar núcleos completos (sem hyper-threading) são melhores para tarefas de alto uso da CPU ( ou seja, jogos).

Espero que isso ajude você.

Mark Kirby
fonte
3
"mais threads significa menos frequência", esta afirmação está muito errada. Mesmo com o hyperthreading, um único processo pode fazer uso completo do processador. O Hyperthreading pode usar pipelines e registradores de instruções que, de outra forma, seriam ociosos para executar algumas execuções de diferentes processos / threads em paralelo, aumentando a taxa de transferência máxima de um processador em certos casos. Os ganhos de desempenho são muito de aplicação / configuração. Após a P4 não há são documentados penalidades de desempenho com HT habilitado (os núcleos P4 gen teve alguns problemas em determinados casos)
NGRhodes
2
Não vejo esta afirmação como muito errada. Se você executar dois processos em um único núcleo, menos frequência estará disponível para cada processo, quando comparado à execução de cada processo em seu próprio núcleo. É uma declaração muito básica e simplista, mas o OP nunca solicitou nenhum detalhe sobre o hyper-threading ou como ele funciona. Embora você esteja correto, o hyper-threading percorreu um longo caminho e, com 48 núcleos, tenho certeza de que eles não gostariam de desativá-lo.
Mark Kirby
2
@NGRhodes: O Intel HT é refinado o suficiente para sobrepor a execução fora de ordem entre dois threads. Esse é basicamente o ponto principal do HT, expor mais paralelismo em nível de instrução ao núcleo fora de ordem. (ou seja, manter as unidades de execução alimentadas mesmo enquanto um encadeamento está se recuperando de uma predição incorreta de ramificação ou aguardando uma falta de cache.) A largura de banda do problema de front-end é dividida em 50/50 (exceto quando um encadeamento está parado), dependendo do tipo de gargalo no qual seu código se depara, o HT pode fornecer uma taxa de transferência quase dupla ou quase nenhuma taxa de transferência extra. (Como 15% para codificação de vídeo x264.)
Pedro Cordes
11
Veja agner.org/optimize para os detalhes da microarquitetura.
Peter Cordes
1

Cada thread de núcleo da CPU (thread baseado em hardware) - um de seus 96 núcleos pode lidar com 16 threads de maneira eficiente - 16 threads (thread baseado em software, fe C ++ thread.h) na maioria dos casos, na minha opinião teórica.

Piotr Lenarczyk
fonte
11
onde você conseguiu "pode ​​lidar eficientemente com 16 threads"? A saída diz "thread (s) por núcleo: 2"
committedandroider
0

Você encontrará quantos threads você pode executar em sua máquina executando o comando htop ou ps que retorna o número de processos em sua máquina.

Você pode usar a página de manual sobre o comando 'ps'.

man ps

Se você deseja calcular o número de todos os processos do usuário, pode usar um destes comandos:

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

Calculando o número de um processo do usuário:

  1. ps --User root | wc -l

Além disso, você pode usar "htop" [Referência] :

Instalando no Ubuntu ou Debian:

sudo apt-get install htop

Instalando no Redhat ou CentOS:

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

Se você deseja compilar o htop a partir do código fonte, você o encontrará aqui .

Saeed Zahedian Abroodi
fonte