Wie können Sie ein einzelnes Prozessprogramm, das in einer Windows-Umgebung ausgeführt wird, so beschränken, dass es nur auf einer einzelnen CPU auf einem Multi-Core-Computer ausgeführt wird?
Ist es dasselbe zwischen einem Fensterprogramm und einem Befehlszeilenprogramm?
AKTUALISIEREN:
- Grund dafür: Benchmarking verschiedener Aspekte der Programmiersprachen
- Ich brauche etwas, das von Anfang an funktionieren würde, daher löst @ akselis Antwort meinen Fall nicht, obwohl sie für andere Fälle gut ist
windows
process
multi-core
Jonathan
quelle
quelle
Antworten:
Wenn Sie Windows Vista / 7 verwenden (möglicherweise XP, aber nicht sicher), ist dies recht einfach.
Tippe ein:
Control+Shift+Esc
um deinen Taskmanager aufzurufen.Klicken Sie auf die Registerkarte Prozesse
Suchen Sie den Prozess, dessen Prozessoraffinität geändert werden muss
Klicken Sie mit der rechten Maustaste auf den Prozess
Klicken Sie auf "Set Affinity"
Hier können Sie auswählen, welche Prozessoren Ihr Prozess verwenden soll.
Viel Glück!
EDIT: Sie müssen Administrator sein, damit dies funktioniert.
quelle
Verwenden Sie in der Befehlszeile
Dadurch wird program.exe auf der ersten CPU ausgeführt, da "1" der Hex-Wert der Affinitätsmaske ist
quelle
Kommt darauf an, wozu Sie bereit sind:
Methode 1: Auf Anfrage
Verwenden Sie ImageCFG . Mit diesem Dienstprogramm können Sie eine ausführbare Datei so einrichten, dass sie auf einer beliebigen Anzahl von Kernen ausgeführt werden kann. Stellen Sie sicher, dass Sie eine Sicherungskopie der ausführbaren Datei Ihres Ziels erstellen, bevor Sie die Änderungen vornehmen, und stellen Sie sie wieder her, wenn Sie mit dem Spiel fertig sind.
Methode 2: Erzwingen einer gesamten Windows-Sitzung (Vista / 7)
bcdedit /set onecpu on
an einer Eingabeaufforderung einbcdedit /set onecpu off
und starten Sie erneut.Methode 2: erzwingen Sie eine gesamte Windows-Sitzung (XP)
Sie finden den folgenden (oder einen ähnlichen) Abschnitt in der Datei:
[Betriebssysteme]
Multi (0) -Disk (0) -Rdisk (0) -Partition (2) \ WINDOWS = "Microsoft Windows XP Professional" / fastdetect
Ändern Sie es, indem Sie das Flag / onecpu hinzufügen:
[Betriebssysteme]
Multi (0) -Disk (0) -Rdisk (0) -Partition (2) \ WINDOWS = "Microsoft Windows XP Professional" / fastdetect / onecpu
Starten Sie neu. Wenn Sie fertig sind, entfernen Sie die Markierung und starten Sie erneut.
Methode 0: Keine gute Methode (Prozessoraffinität)
Alles, was sonst die Prozessoraffinität betrifft, ist leider keine gute Option. Die Prozessoraffinität ist ein Hinweis auf den Prozessor. Der Verarbeiter ist nicht verpflichtet, dies zu respektieren, und wird dies häufig auch nicht tun.
quelle
D:\>bcdedit /set onecpu
Ergebnisse inThe set command specified is not valid.
...The parameter is incorrect.
Ich habe die folgende Funktion in mein Programm in Python 2.6 eingefügt und es ruft Windows-Funktionen auf. Meine Maschine hat nur zwei Kerne, so dass Sie diesen Teil möglicherweise ändern müssen. In den Kommentaren erfahren Sie, wie die aktuelle Affinität lautet. Es funktioniert "so wie es ist" für einen Single-Core-Rechner, wenn Sie eine Maske von 1 festlegen oder als Standard festlegen.
quelle
In Windows 8 müssen Sie zur Registerkarte Details des Task-Managers wechseln, um die Affinität festzulegen. Die Option auf der Registerkarte "Prozesse" ist nicht verfügbar.
BEARBEITEN: Auch wenn das Programm, das Sie starten möchten, Parameter hat, könnte dieser Thread nützlich sein: Wie starte ich ein Programm mit Befehlszeilenargumenten unter Windows 'cmd mit dem Befehl' start '?
quelle
Auf der Suche nach sehr ähnlichen Informationen mithilfe von PowerShell habe ich die erforderlichen Informationen hier gefunden: http://www.energizedtech.com/2010/07/powershell-setting-processor-a.html
Sie haben nicht erwähnt, welches Windows-Betriebssystem Sie verwenden. (Die älteren Betriebssysteme wurden nicht mit PowerShell geliefert. Sie können es jedoch installieren, wenn es nicht vorhanden ist.)
Das Wichtigste dabei ist, dass in PowerShell die Prozessaffinität einfach eine Eigenschaft ist, die Sie leicht ändern können.
Der PowerShell-Befehl zum Anzeigen der Eigenschaften (und anderer Informationen) Ihres Prozesses (am Beispiel von foo) lautet:
Sie werden sehen, ProcessorAffinity ist eine dieser Eigenschaften. Das Ändern ist trivial, und Sie können auswählen, auf welchem Core Sie ausgeführt werden möchten, indem Sie die Werte aus der obigen Tabelle / dem obigen Link von Revolter verwenden.
Mit dem folgenden Befehl können Sie feststellen, welchen Wert die ProcessorAffinity-Eigenschaft für foo hat:
Wenn Sie also foo nur auf CPU 4 ausführen möchten, legen Sie den Wert so fest:
quelle
start /affinity
Antwort. Kann deine Technik das? Wenn ja, erläutern Sie bitte, wie.Start-Process foo ; (Get-Process foo).ProcessorAffinity=8
Nachdem ich Ihren Kommentar gelesen und festgestellt habe, dassStart-Process
eine Affinitätsflagge fehlt, habe ich Folgendes gefunden, das ich getestet habe:[System.Diagnostics.Process]::start("foo.exe").ProcessorAffinity=0x0010