Wie stelle ich die Gruppe und die Affinität einer ausführbaren Windows-Datei über die Befehlszeile ein?

1268
Zareh

Ich habe eine ausführbare Datei foo.exe, die 6 Mal gleichzeitig in einem Multiprozessor-Setup ausgeführt werden muss, wobei die ersten 3 Instanzen den Kernen in Gruppe 0 und die nächsten 3 Instanzen den Kernen in Gruppe 1 zugewiesen werden.

Ich habe 6 Verknüpfungen für das foo.exeProgramm auf meinem Desktop. Jede Verknüpfung gibt dem foo.exeProgramm einen anderen Parametersatz zur Ausführung.

Ich klicke einfach auf die Verknüpfungen, um die 6 Instanzen der foo.exeProgramme auszuführen . Sie starten alle, aber ich muss dann in den Task-Manager gehen und sicherstellen, dass 3 den CPU's in Gruppe 0 zugewiesen ist und 3 der Gruppe 1 der CPU zugeordnet ist, indem ihre Gruppenaffinität eingestellt wird.

Gibt es eine Möglichkeit, die Verknüpfungen auf meinem Desktop zu ändern, um sicherzustellen, dass 3 der foo.exeProgramme die Gruppe 0 und 3 die Gruppe 1 verwenden?

6

1 Antwort auf die Frage

6
MrFregg

Sie können das /affinityFlag mithilfe des startBefehls verwenden, um die Kerne anzugeben, die ein Prozess verwenden soll.

Verwendungszweck

start /affinity n foo.exe -arguments

Ihre Verknüpfung würde also so aussehen:

c:\windows\system32\cmd.exe /C start /affinity n foo.exe -arguments wobei n die CPU-Kernnummer +1 ist.

Um auf Core 0 zu laufen, wäre es also:

c:\windows\system32\cmd.exe /C start /affinity 1 foo.exe -arguments.

Quelle

Mehrere Kerne angeben

Angenommen, eine CPU hat 4 Kerne. So legen Sie die zu verwendenden Kerne fest:

  1. Visualisieren Sie die Kerne als Array, wobei die Länge des Arrays der Anzahl der Kerne entspricht. Die Kerne werden in absteigender Reihenfolge von rechts nach links angeordnet:

    [CPU3, CPU2, CPU1, CPU0]

  2. Ersetzen Sie nun Kerne, die Ihr Prozess mit 1 verwenden soll, und diejenigen, die Sie nicht mit 0 verwenden möchten. Wenn ich möchte, dass mein Prozess Core 3 und 1 verwendet, möchte mein Array Folgendes:

    [0,1,0,1]

  3. "Pop" die Elemente des Arrays zu einem String. Nun würde es als dargestellt werden 0101.

  4. Angenommen, der String ist binär und konvertiert ihn in Hexadezimal. Jetzt wäre es so0x5

  5. Jetzt benutze den gleichen Befehl, start /affinity n foo.exe -argumentsaber jetzt nwird es 0x5gebenstart /affinity 0x5 foo.exe -arguments

Quelle

Anmerkungen:
  • Die Quelle erklärt die Visualisierung als binäre Zeichenfolge, nicht als Array (check it out). Ich finde das etwas verwirrend, also erklärte ich es mit einem Array.
  • Die Quelle gibt nicht an, dass Sie ein Präfix angeben müssen 0x, um das Hexadezimalzeichen im Befehl anzuzeigen. Laut start /?Angabe wird angegeben, dass es sich um ein Hex handelt.
Vielen Dank! Das ist sehr hilfreich. Bei CPUs mit einer großen Anzahl von Kernen werden sie weiter in Gruppen unterteilt. Zum Beispiel hat ein Xeon E5 2699-v3 36 Kerne, die in zwei Gruppen unterteilt sind. Gruppe 0 hat 18 Kerne und Gruppe 1 hat 18 Kerne. Gibt es eine Möglichkeit, da foo.exe multithreaded ist, dass ich alle Kerne in Gruppe 0 verwenden kann? Ich denke, es gibt zwei Befehlszeilenparameter, einer legt die Gruppe fest, in der foo.exe ausgeführt wird (Gruppe 0 oder Gruppe 1), und der zweite Parameter (Affinität?) Teilt foo.exe mit, welche Kerne in dieser Gruppe verwendet werden sollen. Zareh vor 7 Jahren 0