Como Desativar Núcleos do Processador ou Limitar Apps a Núcleos Específicos no Windows

Guia de como desabilitar núcleos de CPU
Há várias razões pelas quais você pode querer que um aplicativo — ou o próprio Windows — rode em menos núcleos do que a sua CPU realmente possui:

  • Limitar o uso de recursos. Evitar que um único processo monopolize todos os núcleos em um sistema multitarefa.
  • Compatibilidade. Alguns softwares mais antigos se comportam mal, travam ou dessincronizam em sistemas modernos multi-core e multi-thread, funcionando de forma confiável apenas quando fixados em um ou dois núcleos.
  • Desempenho — principalmente em Xeons com muitos núcleos. Chips como o Xeon E5 v3/v4 têm alta contagem de núcleos combinada com um orçamento de energia fixo. Sob carga, a CPU precisa distribuir esse orçamento entre todos os núcleos ativos, então os clocks com todos os núcleos ativos acabam mais baixos do que o chip é realmente capaz de atingir. Ao desabilitar uma parte dos núcleos, os que restam recebem uma fatia maior do orçamento de energia — muitas vezes permitindo um boost bem mais alto. Esse é um truque comum em placas LGA2011-3 quando você está rodando algo single-thread ou pouco multithreaded e não precisa de todos esses 18-22 núcleos.

Desabilitando núcleos na BIOS/UEFI

Desabilitando núcleos de CPU no setup da BIOS Aptio
Esse método desabilita os núcleos no nível do hardware. É garantido que funcione, embora seja menos prático, já que reativá-los exige entrar na BIOS e reiniciar.

Em placas chinesas LGA2011-3, essa configuração geralmente fica em:
IntelRCSetup > Processor Configuration > Pre-Socket Configuration > CPU Socket 0 Configuration > Cores Enabled

Em placas LGA2011:
Advanced > CPU Configuration > Active Processor Cores

Em outros soquetes e plataformas, a nomenclatura varia um pouco, mas a opção geralmente fica no menu de CPU ou Processor Configuration.

Desabilitando núcleos pelo msconfig

O Windows tem uma forma nativa de limitar o número de núcleos ativos sem mexer na BIOS:

  1. Pressione Win + R, digite msconfig e pressione Enter.
  2. Em Configuração do Sistema, abra a aba Inicialização do Sistema (Boot).Aba Boot da Configuração do Sistema
  3. Clique em Opções avançadas.
  4. Marque a opção “Número de processadores” e selecione um valor no menu suspenso. Tenha em mente que, com o Hyper-Threading habilitado, o Windows enxerga cada núcleo físico como dois processadores lógicos, então essa contagem é de núcleos lógicos, não físicos.Configuração de Número de processadores nas Opções Avançadas de Boot
  5. De volta à janela principal de Configuração do Sistema, marque “Tornar todas as configurações de inicialização permanentes” se você não quiser repetir esse processo toda vez. Clique em Aplicar e depois em OK.
  6. Reinicie.

Forma mais rápida de alternar isso: bcdedit

A interface do msconfig é, na prática, apenas uma fachada para um valor de configuração de boot. Você pode definir (e remover) o mesmo limite diretamente em um Prompt de Comando ou PowerShell com privilégios elevados, o que é bem mais rápido se você costuma alternar a contagem de núcleos com frequência:

bcdedit /set numproc 4 — limita o Windows a 4 processadores lógicos na próxima inicialização.

bcdedit /deletevalue numproc — remove o limite, todos os núcleos voltam.

Salve cada linha como um arquivo .bat próprio (“Executar como administrador”) e você terá scripts de um clique para limitar ou restaurar a sua contagem de núcleos — sem precisar navegar por menus nem ter que reiniciar o PC para entrar na BIOS. De qualquer forma, uma reinicialização ainda é necessária, já que essa é uma configuração aplicada no momento do boot.

Limitando quantos núcleos um programa pode usar

Isso não reduz o consumo do chip como o método da BIOS, mas tem uma grande vantagem: funciona na hora, sem precisar reiniciar o PC. Todos os núcleos continuam ativos — apenas um aplicativo específico fica restrito a usar alguns deles.

Existem três formas de fazer isso: pelo Gerenciador de Tarefas, pela linha de comando, ou por um atalho.

Usando o Gerenciador de Tarefas

  1. Abra o Gerenciador de Tarefas (Ctrl + Alt + Delete ou Ctrl + Shift + Esc).
  2. Vá até a aba Processos (Windows 7) ou Detalhes (Windows 8 e mais recentes).
  3. Clique com o botão direito no processo que você quer restringir e escolha Definir afinidade.Opção Definir afinidade no Gerenciador de Tarefas
  4. Desmarque os processadores lógicos que você não quer que o programa use e clique em OK. A alteração é aplicada imediatamente.Caixa de seleção de afinidade de processador

A desvantagem: isso precisa ser refeito toda vez que você reabrir o aplicativo, já que o Windows não guarda as configurações de afinidade entre execuções.

Usando a linha de comando ou um atalho (afinidade de CPU)

A mesma coisa pode ser feita pela linha de comando — e embutida em um atalho para você não precisar repetir manualmente. Desde o Windows 7, o comando start suporta um parâmetro /affinity.

Exemplo — iniciar o Notepad++ restrito a um conjunto específico de núcleos:

start "Notepad++" /affinity 5555 "C:\Program Files\Notepad++\notepad++.exe"

O valor após o /affinity5555 nesse exemplo — é a máscara de afinidade: um número hexadecimal que informa ao Windows exatamente quais núcleos lógicos o processo pode usar.

Como a máscara de afinidade funciona

Escreva os seus núcleos lógicos como uma sequência de dígitos binários, um bit por núcleo lógico, onde 1 significa “permitido” e 0 significa “não permitido.” O bit mais à direita é o núcleo lógico 0, e o bit mais à esquerda é o núcleo de número mais alto.

Considerando como exemplo uma CPU de 8 núcleos / 16 threads, com todos os núcleos habilitados fica assim:

1111111111111111

Para usar apenas os núcleos físicos e ignorar os threads secundários do Hyper-Threading, você alternaria:

0101010101010101

Converta essa sequência binária para hexadecimal (qualquer conversor de binário para hexadecimal faz isso na hora) e você obtém 5555 — exatamente o valor usado no comando acima.

Tabela de máscaras de afinidade de CPU (núcleos 0–15)

Núcleos usados Máscara binária Decimal (máscara de afinidade) Hex (para /affinity)
Somente núcleo 0 0000 0000 0000 0001 1 1
Somente núcleo 1 0000 0000 0000 0010 2 2
Núcleos 0–1 0000 0000 0000 0011 3 3
Núcleos 0–2 0000 0000 0000 0111 7 7
Núcleos 0–3 0000 0000 0000 1111 15 F
Núcleos 0–4 0000 0000 0001 1111 31 1F
Núcleos 0–5 0000 0000 0011 1111 63 3F
Núcleos 0–6 0000 0000 0111 1111 127 7F
Núcleos 0–7 0000 0000 1111 1111 255 FF
Núcleos 0–8 0000 0001 1111 1111 511 1FF
Núcleos 0–9 0000 0011 1111 1111 1023 3FF
Núcleos 0–10 0000 0111 1111 1111 2047 7FF
Núcleos 0–11 0000 1111 1111 1111 4095 FFF
Núcleos 0–12 0001 1111 1111 1111 8191 1FFF
Núcleos 0–13 0011 1111 1111 1111 16383 3FFF
Núcleos 0–14 0111 1111 1111 1111 32767 7FFF
Núcleos 0–15 (todos os 16) 1111 1111 1111 1111 65535 FFFF

Tabela de referência rápida

Para poupar você da conversão manual, aqui está uma tabela de referência rápida para contagens de threads comuns:

Threads lógicos Núcleos físicos Todos os threads habilitados (hex) Somente núcleos físicos / HT desligado (hex)
8 4 FF 55
12 6 FFF 555
16 8 FFFF 5555
20 10 FFFFF 55555
24 12 FFFFFF 555555
28 14 FFFFFFF 5555555
32 16 FFFFFFFF 55555555
36 18 FFFFFFFFF 555555555
44 22 FFFFFFFFFFF 55555555555

Depois de ter a máscara, use-a diretamente pelo Win + R, por um Prompt de Comando, ou embuta-a em um atalho na área de trabalho:

  1. Clique com o botão direito na área de trabalho e escolha Novo > Atalho.
  2. No campo de localização, cole o mesmo comando:
    cmd.exe /c start "Notepad++" /affinity 5555 "C:\Program Files\Notepad++\notepad++.exe"

Toda vez que você abrir o programa por esse atalho, a máscara de afinidade será aplicada automaticamente — sem precisar defini-la manualmente no Gerenciador de Tarefas toda vez.

Bônus: definindo a afinidade pelo PowerShell

Se você prefere usar o PowerShell em vez de um atalho de comando padrão, é possível definir a máscara de afinidade de um processo já ao iniciá-lo ou enquanto ele já está em execução:

$p = Start-Process "C:\Program Files\Notepad++\notepad++.exe" -PassThru
$p.ProcessorAffinity = 0x5555

Prefere não fazer isso manualmente? Existe software dedicado para isso.

Programas como o Process Lasso automatizam todo esse processo. Você define a afinidade (e até a prioridade) para um executável uma única vez, e a regra é mantida mesmo após reiniciar o PC. Ele ainda conta com recursos como o ProBalance, que reduz a prioridade de processos em segundo plano para evitar engasgos no sistema, sem afetar os programas que você está usando ativamente. É gratuito para uso pessoal, com um plano Pro pago para automação extra e sincronização de perfis na nuvem.

Bônus: fazendo a mesma coisa no Linux

Se você estiver rodando um desses Xeons no Linux em vez do Windows, as ferramentas equivalentes são:

  • Por processo, na hora: taskset -c 0,2,4,6 ./seu_programa fixa um programa nos números de núcleo listados, o mesmo princípio da máscara de afinidade do Windows.
  • Para o sistema todo, no boot: adicione maxcpus=8 (ou nr_cpus=8) aos parâmetros de boot do kernel para limitar o número de núcleos que o kernel ativa — o equivalente no Linux do truque com msconfig/bcdedit visto acima.

Perguntas frequentes

Uma configuração de afinidade de CPU permanece ao fechar e reabrir o programa?
Não. A afinidade definida pelo Gerenciador de Tarefas ou por um comando único vale apenas para aquele processo em execução naquele momento. Use um atalho ou script (como mostrado acima) se quiser que ela seja aplicada automaticamente toda vez que você abrir o aplicativo — ou use um software dedicado como o Process Lasso, que faz isso nativamente.

Desabilitar núcleos realmente aumenta a minha frequência de clock?
Em CPUs com faixas de turbo por núcleo — o que cobre a maioria dos chips Xeon E5 v2/v3/v4 —, sim, geralmente aumenta, já que os núcleos ativos restantes recebem uma fatia maior do orçamento de energia. O ganho depende do SKU específico e dos limites de energia da sua placa-mãe, então vale a pena comparar os clocks antes e depois sob carga usando uma ferramenta de monitoramento.

Preciso reiniciar toda vez que quiser mudar a contagem de núcleos?
Somente nos métodos via BIOS e msconfig/bcdedit, já que ambos são configurações aplicadas no momento do boot. O método do Gerenciador de Tarefas / máscara de afinidade é aplicado instantaneamente, sem necessidade de reiniciar.