¿Cómo se limita la ejecución de un solo programa de proceso en un entorno Windows para que se ejecute solo en una sola CPU en una máquina de múltiples núcleos?
¿Es lo mismo entre un programa en ventana y un programa de línea de comando?
ACTUALIZAR:
- Razón para hacerlo: evaluación comparativa de varios aspectos de lenguajes de programación
- Necesito algo que funcione desde el comienzo del proceso, por lo tanto, la respuesta de @ akseli, aunque excelente para otros casos, no resuelve mi caso
windows
process
multi-core
Jonathan
fuente
fuente
Respuestas:
Si está ejecutando Windows Vista / 7 (posiblemente XP, pero no estoy seguro) es realmente bastante simple.
Escriba:
Control+Shift+Esc
para activar su administrador de tareas.Haga clic en la pestaña Procesos
Encuentre el proceso que necesita cambiar su afinidad de procesador
Haga clic derecho en el proceso
Haga clic en "Establecer afinidad"
Aquí puede seleccionar qué procesador (s) utilizará su proceso.
¡Buena suerte!
EDITAR: Tienes que ser administrador para que esto funcione.
fuente
desde la línea de comando, use
esto ejecutará program.exe en la primera CPU ya que "1" es el valor hexadecimal de la máscara de afinidad
fuente
Depende de lo que estés dispuesto a hacer:
Método 1: bajo demanda
Use ImageCFG . Esta utilidad te permitirá configurar un ejecutable para que se ejecute en cualquier número de núcleos. Asegúrese de hacer una copia de seguridad de su ejecutable de destino antes de realizar los cambios y restaurarlo cuando haya terminado de jugar con él.
Método 2: forzar una sesión de Windows completa (Vista / 7)
bcdedit /set onecpu on
en el símbolo del sistemabcdedit /set onecpu off
y reinicie nuevamente.Método 2: forzar una sesión de Windows completa (XP)
Encontrará la siguiente sección (o similar) en el archivo:
[sistemas operativos]
partición de disco múltiple (0) (0) rdisk (0) (2) \ WINDOWS = "Microsoft Windows XP Professional" / fastdetect
Cámbielo agregando el indicador / onecpu:
[sistemas operativos]
partición multi (0) disco (0) rdisk (0) (2) \ WINDOWS = "Microsoft Windows XP Professional" / fastdetect / onecpu
Reiniciar. Una vez que hayas terminado de jugar, elimina la bandera y reinicia nuevamente.
Método 0: no es un buen método (afinidad del procesador)
Me temo que cualquier cosa que implique la afinidad del procesador no es una buena opción. La afinidad del procesador es una pista para el procesador. El procesador no está obligado a respetarlo, y a menudo no lo hará.
fuente
D:\>bcdedit /set onecpu
resultados enThe set command specified is not valid.
...The parameter is incorrect.
Puse la siguiente función en mi programa en Python 2.6 y llama a las funciones de Windows. Mi máquina tiene solo dos núcleos, por lo que es posible que deba cambiar esa parte. Los comentarios le dicen cómo ver cuál es la afinidad actual. Funciona "tal cual" para una máquina de un solo núcleo si configura o establece por defecto una máscara de 1.
fuente
En Windows 8, debe ir a la pestaña Detalles del administrador de tareas para establecer Establecer afinidad. No le da la opción en la pestaña Procesos.
EDITAR: Además, si el programa que desea iniciar tiene parámetros, este hilo podría ser útil: ¿Cómo iniciar un programa con argumentos de línea de comando en el cmd de Windows con el comando 'inicio'?
fuente
Mientras buscaba información muy similar usando PowerShell, encontré la información que necesitaba aquí: http://www.energizedtech.com/2010/07/powershell-setting-processor-a.html
No mencionó qué sistema operativo Windows estaba usando (los más antiguos no venían con PowerShell, aunque podría instalarlo si no está allí).
Lo más rápido es que en PowerShell, la afinidad del proceso es simplemente una propiedad que puede cambiar fácilmente.
Para ver las propiedades (y otros datos de información) de su proceso (usando foo como proceso de ejemplo), el comando PowerShell sería:
Verá que ProcessorAffinity es una de esas propiedades. Cambiarlo es trivial, y puede seleccionar en qué núcleo desea ejecutar, utilizando los valores de la tabla / enlace de Revolter arriba.
Para ver cuál es el valor de la propiedad ProcessorAffinity para foo, aquí está el comando:
Entonces, si desea ejecutar foo solo en la CPU 4, establecería el valor como tal:
fuente
start /affinity
respuesta. ¿Puede tu técnica hacer eso? Si es así, explique cómo.Start-Process foo ; (Get-Process foo).ProcessorAffinity=8
Sin embargo, después de leer su comentario y descubrir queStart-Process
falta una marca de afinidad, se me ocurrió lo siguiente, que probé:[System.Diagnostics.Process]::start("foo.exe").ProcessorAffinity=0x0010