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?

yuritsuki
fonte
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
O alienígena
fonte
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.

Richie Frame
fonte
"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!

Jake
fonte