¿Cómo establezco permanentemente la afinidad de un proceso?

17

Tengo un juego que tiene problemas con el uso de la CPU, por lo que una de las soluciones es deshabilitar un núcleo de una CPU de cuatro núcleos. Como cada vez que lanzo el juego, tengo que ingresar manualmente al Administrador de tareas e ingresar manualmente la afinidad, lo que apesta, ya que el juego se lanzó recientemente pero es propenso a fallas frecuentes.

¿Existe una solución NO SOFTWARE?

He buscado algunas soluciones en línea y parecen estar orientadas solo a Windows 7. ¿Existe una solución para los usuarios de Windows 8.1 como yo?

yuritsuki
fuente
Por favor, explique qué quiere decir con "ingresar manualmente la afinidad".
Pacerier
@Pacerier Tengo que cambiar manualmente la afinidad, ya que por defecto selecciona todas las CPU para trabajar.
yuritsuki
Puede intentar establecer el "Modo de compatibilidad" en una versión de Windows suficientemente antigua, que establece la afinidad con un solo núcleo. Pero no tengo win8 a mano para verificar si esto todavía funciona.
CodesInChaos
@cyberwebpoweruser, ¿le funcionó la respuesta a continuación?
Pacerier

Respuestas:

24

Puede crear un acceso directo para asignar afinidad.

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

Y es hexadecimal y es una máscara de bits:

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
El alien
fuente
1
Creo que tienes los 3 primeros en mal estado
Richie Frame
Oh, maldición .. sí :) Corregido ..
The_aLiEn
44
Pregunta de @The_aLiEn: Si este proceso inicia otro proceso, ¿ese segundo proceso hereda la afinidad del primer proceso? Tengo el mismo problema con un juego, pero necesito cambiar la afinidad tanto en el iniciador como en un administrador de descargas de terceros iniciado por el iniciador para que se resuelva.
Nzall
2
¿Necesita la cmd.exe /Cparte, o sería suficiente para comenzar start?
Delta
2
@NateKerkhofs debería heredar. No solo afinidad, como todos los descriptores de seguridad, identificadores de propiedad, etc.
The_aLiEn
7

Si por "no software" quiere decir que no necesita software adicional, lo hay. Puede ejecutar el programa desde un script de comando y usar el interruptor de afinidad"Start /AFFINITY 20 process.exe"

/AFFINITY 20trata el 20como un número hexadecimal, con un equivalente binario de 100000, que establece la afinidad con el núcleo 5 de 0-5 en un procesador de 6 núcleos. Una máscara hexadecimal similar le permitirá deshabilitar un núcleo específico, como E, que solo ejecuta el proceso en los núcleos 1-3 de 0-3 o 0-5.

Richie Frame
fuente
"no software" significa cmd.
Pacerier
5

Para cualquier otra persona que busque respuestas a esto y no encuentre ninguna, la solución que encontré fue utilizar una aplicación llamada WinAFC (o AffinityChanger). Esta es una GUI parcial, una aplicación de línea de comando parcial que le permite especificar perfiles para ciertos ejecutables y sondeará la lista de procesos para ellos. Si encuentra procesos coincidentes, cambiará la afinidad de esos procesos de acuerdo con la configuración en el perfil cargado.

Hay alguna documentación aquí: http://affinitychanger.sourceforge.net/

Para mis propósitos, creé un perfil que se veía así:

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

Este perfil establece cualquier proceso convert.exe para utilizar los dos primeros pares de núcleos de CPU (CPU0, CPU1, CPU2 y CPU3), sondeando cada segundo. TestModees una palanca que le permite ver si su perfil funciona sin establecer afinidades.

¡Espero que alguien encuentre esto útil!

Jake
fuente