Como definir permanentemente a afinidade de um processo?


17

Eu tenho um jogo que tem problemas com o uso da CPU, portanto, uma das correções é desativar um núcleo de uma CPU quad core. Desde que toda vez que inicio o jogo, preciso entrar manualmente no Gerenciador de tarefas e inserir manualmente a afinidade, o que é péssimo, já que o jogo é recém-lançado e propenso a falhas frequentes.

Existe uma solução NÃO SOFTWARE?

Procurei algumas soluções on-line e elas parecem ser voltadas apenas para o Windows 7. Existe uma solução para usuários do Windows 8.1 como eu?


Por favor, explique o que você quer dizer com "insira manualmente a afinidade"?
Pacerier

@Pacerier Eu tenho que mudar manualmente a afinidade, pois por padrão ele escolhe todas as CPUs para trabalhar.
Yuritsuki

Você pode tentar definir o "Modo de compatibilidade" para uma versão suficientemente antiga do Windows, que define a afinidade para um único núcleo. Mas não tenho o win8 em mãos para verificar se isso ainda funciona.
CodesInChaos

@cyberwebpoweruser, A resposta abaixo funcionou para você?
Pacerier

Respostas:


24

Você pode criar um atalho para atribuir afinidade.

X:\Windows\System32\cmd.exe /C start /affinity Y game.exe

Y é hexadecimal e é uma máscara de bit:

0x1 - 0001 - Core0
0x2 - 0010 - Core1
0x3 - 0011 - Core1 & Core0
0x4 - 0100 - Core2
0x5 - 0101 - Core2 & Core0
0x6 - 0110 - Core2 & Core1
0x7 - 0111 - Core2 & Core1 & Core0
0x8 - 1000 - Core3
0x9 - 1001 - Core3 & Core0
0xA - 1010 - Core3 & Core1
0xB - 1011 - Core3 & Core1 & Core0
0xC - 1100 - Core3 & Core2
0xD - 1101 - Core3 & Core2 & Core0
0xE - 1110 - Core3 & Core2 & Core1
0xF - 1111 - Core3 & Core2 & Core1 & Core0

1
eu acho que você tem a primeira 3 desarrumada
Richie Quadro

Oh, droga .. yes :) corrigido ..
The_aLiEn

4
@The_aLiEn pergunta: se este processo inicia outro processo, esse segundo processo herda a afinidade do primeiro processo? Eu tenho o mesmo problema com um jogo, mas preciso alterar a afinidade no iniciador e em um gerenciador de downloads de terceiros iniciado pelo iniciador para que seja resolvido.
Nzall

2
Você precisa da cmd.exe /Cpeça ou seria suficiente para começar start?
Deltab

2
@NateKerkhofs deve herdar. Não apenas de afinidade, como todos os descritores de segurança, alças de propriedade, etc.
The_aLiEn

7

Se por "não software" você quer dizer não exigir software adicional, existe. Você pode executar o programa a partir de um script de comando e usar a opção de afinidade"Start /AFFINITY 20 process.exe"

/AFFINITY 20trata o 20como um número hexidecimal, com um equivalente binário de 100000, que define a afinidade para o núcleo 5 de 0-5 em um processador de 6 núcleos. Uma máscara hexadecimal semelhante permitirá que você desabilite um núcleo específico, como E, que executa o processo apenas nos núcleos 1-3 de 0-3 ou 0-5.


"não software" significa cmd.
Pacerier

5

Para quem procura respostas para isso e não encontra, a solução que encontrei foi usar um aplicativo chamado WinAFC (ou AffinityChanger). Esta é uma GUI parcial, aplicativo de linha de comando parcial que permite especificar perfis para determinados executáveis ​​e pesquisará a lista de processos para eles. Se encontrar processos correspondentes, alterará a afinidade desses processos de acordo com as configurações no perfil carregado.

Há alguma documentação aqui: http://affinitychanger.sourceforge.net/

Para meus propósitos, criei um perfil parecido com este:

TestMode = 0
TimeInterval = 1
*\convert.exe := PAIR0+PAIR1

Esse perfil define qualquer processo convert.exe para usar os dois primeiros pares de núcleos da CPU (CPU0, CPU1, CPU2 e CPU3), pesquisando a cada segundo. TestModeé uma alternância que permite ver se seu perfil está funcionando sem realmente definir afinidades.

Espero que alguém ache isso útil!

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.