Как установить группу и сходство исполняемого файла Windows из командной строки

1271
Zareh

У меня есть исполняемый файл, foo.exeкоторый мне нужно запустить одновременно 6 раз на многопроцессорной установке, где первые 3 экземпляра будут назначены ядрам в группе 0, а следующие 3 экземпляра будут назначены ядрам в группе 1.

У меня foo.exeна рабочем столе 6 ярлыков для программы. Каждый ярлык дает foo.exeпрограмме свой набор параметров для работы.

Я просто нажимаю на ярлыки, чтобы запустить 6 экземпляров foo.exeпрограмм. Все они запускаются, однако мне нужно зайти в диспетчер задач и убедиться, что 3 назначены для ЦП в группе 0, а 3 - для группы 1 ЦП, установив их групповую привязку.

Есть ли способ изменить ярлыки на рабочем столе, чтобы 3 foo.exeпрограммы использовали группу 0, а 3 - группу 1?

6

1 ответ на вопрос

6
MrFregg

Вы можете использовать /affinityфлаг, используя startкоманду, чтобы указать ядра, которые должен использовать процесс.

использование

start /affinity n foo.exe -arguments

Итак, ваш ярлык будет выглядеть так:

c:\windows\system32\cmd.exe /C start /affinity n foo.exe -arguments где n - номер ядра процессора +1.

Так что для запуска на Core 0 это будет:

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

Источник

Указание нескольких ядер

Предположим, что процессор имеет 4 ядра. Чтобы указать ядра для использования:

  1. Визуализируйте ядра как массив с длиной массива, равной количеству ядер. Ядра будут расположены в порядке убывания справа налево:

    [CPU3, CPU2, CPU1, CPU0]

  2. Теперь замените ядра, которые вы хотите, чтобы ваш процесс использовал на 1, а те, которые вы не хотите использовать на 0. Предполагая, что я хочу, чтобы мой процесс использовал ядра 3 и 1, мой массив будет выглядеть так:

    [0,1,0,1]

  3. «Высовывать» элементы массива в строку. Теперь это будет представлено как 0101.

  4. Предположим, что строка в двоичном формате и преобразовать его в шестнадцатеричный. Теперь было бы0x5

  5. Теперь используйте ту же команду, start /affinity n foo.exe -argumentsно теперь nбудет 0x5, даваяstart /affinity 0x5 foo.exe -arguments

Источник

Заметки:
  • Источник объясняет визуализацию в виде двоичной строки, а не массива (проверьте это). Я нахожу это немного запутанным, поэтому я объяснил, используя массив.
  • Источник не указывает, что вы должны использовать префикс, 0xчтобы показать его шестнадцатеричный в команде. Чтение start /?указывает, что оно должно быть шестнадцатеричным.
Спасибо! Это очень полезно. С процессорами, которые имеют большое количество ядер, они далее делятся на группы. Например, Xeon E5 2699-v3 имеет 36 ядер, и они разделены на 2 группы. Группа 0 имеет 18 ядер, а группа 1 имеет 18 ядер. Поскольку foo.exe является многопоточным, есть ли способ, которым я могу сказать, чтобы он использовал все ядра в группе 0? Я думаю, что есть два параметра командной строки, один устанавливает группу, в которой будет запускаться foo.exe (группа 0 или группа 1), а второй параметр (affinity?) Сообщает foo.exe, какие ядра использовать в этой группе. Zareh 7 лет назад 0