Ten en cuenta que en las ciencias informáticas un error casi siempre tiene más de una resoluciones, así que te compartiremos lo más óptimo y eficiente.
Solución:
PowerShell puede hacer esta tarea por usted
Obtener afinidad:
PowerShell "Get-Process app | Select-Object ProcessorAffinity"
Establecer afinidad:
PowerShell "$Process = Get-Process app; $Process.ProcessorAffinity=255"
Ejemplo: (procesador de 8 núcleos)
- Centro # = Valor = máscara de bits
- Núcleo 1 = 1 = 00000001
- Núcleo 2 = 2 = 00000010
- Núcleo 3 = 4 = 00000100
- Núcleo 4 = 8 = 00001000
- Núcleo 5 = 16 = 00010000
- Núcleo 6 = 32 = 00100000
- Núcleo 7 = 64 = 01000000
- Núcleo 8 = 128 = 10000000
Simplemente agregue los valores decimales para el núcleo que desea usar. 255 = Los 8 núcleos.
- Todos los núcleos = 255 = 11111111
Salida de ejemplo:
C:>PowerShell "Get-Process notepad++ | Select-Object ProcessorAffinity"
ProcessorAffinity
-----------------
255
C:>PowerShell "$Process = Get-Process notepad++; $Process.ProcessorAffinity=13"
C:>PowerShell "Get-Process notepad++ | Select-Object ProcessorAffinity"
ProcessorAffinity
-----------------
13
C:>PowerShell "$Process = Get-Process notepad++; $Process.ProcessorAffinity=255"
C:>
Fuente:
Aquí hay una publicación muy detallada sobre cómo cambiar la afinidad de un proceso:
http://www.energizedtech.com/2010/07/powershell-setting-procesador-a.html
La respuesta aceptada funciona, pero solo para el primer proceso de la lista. La solución a eso en los comentarios no me funciona.
Para cambiar la afinidad de todos los procesos con el mismo nombre, use esto:
Powershell "ForEach($PROCESS in GET-PROCESS processname) $PROCESS.ProcessorAffinity=255"
Donde 255
es la máscara dada en la respuesta aceptada.
Para cualquier otra persona que busque respuestas a esto y no encuentre ninguna, la solución que encontré fue usar 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 algo de 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 configura cualquier proceso convert.exe para usar los primeros dos pares de núcleos de CPU (CPU0, CPU1, CPU2 y CPU3), sondeando cada segundo. TestMode
es un conmutador que le permite ver si su perfil está funcionando sin establecer afinidades.
¡Espero que alguien encuentre esto útil!
Al final de la web puedes encontrar las notas de otros desarrolladores, tú asimismo eres capaz insertar el tuyo si lo crees conveniente.