Comment limiter un programme de processus unique exécuté dans un environnement Windows pour s'exécuter uniquement sur un seul processeur sur une machine multicœur?
Est-ce la même chose entre un programme fenêtré et un programme en ligne de commande?
MISE À JOUR:
- Raison de cela: comparer les différents aspects des langages de programmation
- J'ai besoin de quelque chose qui fonctionnerait dès le début du processus, donc la réponse de @ akseli, bien qu'excellente pour d'autres cas, ne résout pas mon cas
windows
process
multi-core
Jonathan
la source
la source
Réponses:
Si vous utilisez Windows Vista / 7 (éventuellement XP, mais pas sûr), c'est vraiment assez simple.
Tapez:
Control+Shift+Esc
pour obtenir votre gestionnaire de tâches.Cliquez sur l'onglet Processus
Trouver le processus qui a besoin de changer l'affinité de son processeur
Faites un clic droit sur le processus
Cliquez sur "Définir l'affinité"
Ici, vous pouvez sélectionner le ou les processeurs que votre processus utilisera.
Bonne chance!
EDIT: Vous devez être administrateur pour que cela fonctionne.
la source
à partir de la ligne de commande, utilisez
cela exécutera program.exe sur le premier CPU car "1" est la valeur hexadécimale du masque d'affinité
la source
Cela dépend de ce que vous êtes prêt à faire:
Méthode 1: sur demande
Utilisez ImageCFG . Cet utilitaire vous permettra de configurer un exécutable pour qu'il s'exécute sur n'importe quel nombre de cœurs. Assurez-vous de sauvegarder votre exécutable cible avant d'apporter les modifications et de le restaurer lorsque vous avez fini de jouer avec.
Méthode 2: forcer une session Windows entière (Vista / 7)
bcdedit /set onecpu on
sur une invite de commandebcdedit /set onecpu off
et redémarrez à nouveau.Méthode 2: forcer une session Windows entière (XP)
Vous trouverez la section suivante (ou similaire) dans le fichier:
[systèmes d'exploitation]
multi (0) disque (0) rdisk (0) partition (2) \ WINDOWS = "Microsoft Windows XP Professionnel" / fastdetect
Modifiez-le en ajoutant le drapeau / onecpu:
[systèmes d'exploitation]
multi (0) disque (0) rdisk (0) partition (2) \ WINDOWS = "Microsoft Windows XP Professionnel" / fastdetect / onecpu
Redémarrer. Une fois que vous avez fini de jouer, supprimez le drapeau et redémarrez à nouveau.
Méthode 0: Pas une bonne méthode (affinité du processeur)
Tout ce qui implique autrement l'affinité du processeur n'est pas une bonne option, je le crains. L'affinité du processeur est un indice pour le processeur. Le processeur n'est pas obligé de le respecter et ne le fera pas souvent.
la source
D:\>bcdedit /set onecpu
résultats enThe set command specified is not valid.
....The parameter is incorrect.
J'ai mis la fonction suivante dans mon programme en python 2.6 et il appelle des fonctions Windows. Ma machine n'a que deux cœurs, vous devrez donc peut-être changer cette partie. Les commentaires vous indiquent comment voir l'affinité actuelle. Il fonctionne «tel quel» pour une machine à cœur unique si vous définissez ou par défaut un masque de 1.
la source
Sous Windows 8, vous devez accéder à l'onglet Détails du gestionnaire de tâches pour définir Définir l'affinité. Il ne vous donne pas l'option sur l'onglet Processus.
EDIT: En outre, si le programme que vous souhaitez démarrer a des paramètres, ce fil pourrait être utile: Comment démarrer un programme avec des arguments de ligne de commande sur Windows 'cmd avec la commande' start '?
la source
Alors que je cherchais des informations très similaires à l'aide de PowerShell, j'ai trouvé les informations dont j'avais besoin ici: http://www.energizedtech.com/2010/07/powershell-setting-processor-a.html
Vous n'avez pas mentionné le système d'exploitation Windows que vous utilisiez (les plus anciens n'étaient pas fournis avec PowerShell, bien que vous puissiez l'installer s'il n'est pas là).
Le plus rapide, c'est que dans PowerShell, l'affinité du processus est simplement une propriété que vous pouvez modifier facilement.
Pour voir les propriétés (et d'autres informations) de votre processus (en utilisant foo comme exemple de processus), la commande PowerShell serait:
Vous verrez que ProcessorAffinity est l'une de ces propriétés. Le changer est trivial, et vous pouvez sélectionner le noyau sur lequel vous souhaitez exécuter, en utilisant les valeurs du tableau / lien de Revolter ci-dessus.
Pour voir quelle est la valeur de la propriété ProcessorAffinity pour foo, voici la commande:
Donc, si vous vouliez exécuter foo sur cpu 4 uniquement, vous définiriez la valeur en tant que telle:
la source
start /affinity
réponse. Votre technique peut-elle faire cela? Si oui, veuillez expliquer comment.Start-Process foo ; (Get-Process foo).ProcessorAffinity=8
Cependant, après avoir lu votre commentaire et trouvé qu'il yStart-Process
avait un drapeau d'affinité manquant, j'ai trouvé ce qui suit, que j'ai testé:[System.Diagnostics.Process]::start("foo.exe").ProcessorAffinity=0x0010