Как ограничить запуск одной процессной программы в среде Windows только на одном процессоре на многоядерном компьютере?
То же самое между оконной программой и программой командной строки?
ОБНОВИТЬ:
- Причина для этого: сравнение различных аспектов языков программирования
- Мне нужно что-то, что будет работать с самого начала процесса, поэтому ответ @ akseli, хотя и отлично подходит для других случаев, не решает мою проблему
windows
process
multi-core
Джонатан
источник
источник
Ответы:
Если вы используете Windows Vista / 7 (возможно, XP, но не уверены), это действительно довольно просто.
Введите:
Control+Shift+Esc
чтобы получить ваш менеджер задач.Нажмите на вкладку Процессы
Найти процесс, который нуждается в изменении привязки к процессору
Щелкните правой кнопкой мыши по процессу
Нажмите на «Установить сходство»
Здесь вы можете выбрать, какой процессор (ы) будет использовать ваш процесс.
Удачи!
РЕДАКТИРОВАТЬ: Вы должны быть администратором, чтобы заставить это работать.
источник
из командной строки используйте
это запустит program.exe на первом процессоре, так как «1» является шестнадцатеричным значением маски сходства
источник
Зависит от того, что вы готовы сделать:
Способ 1: по требованию
Используйте ImageCFG . Эта утилита позволит вам настроить исполняемый файл для запуска на любом количестве ядер. Убедитесь, что вы сделали резервную копию вашего целевого исполняемого файла перед внесением изменений и восстановите его, когда закончите играть с ним.
Способ 2: принудительная сессия Windows (Vista / 7)
bcdedit /set onecpu on
в командной строкеbcdedit /set onecpu off
и перезагрузите компьютер снова.Способ 2: форсировать весь сеанс Windows (XP)
Вы найдете следующий (или аналогичный) раздел в файле:
[операционные системы]
многодисковый (0) дисковый (0) rdisk (0) раздел (2) \ WINDOWS = "Microsoft Windows XP Professional" / fastdetect
Измените его, добавив флаг / onecpu:
[операционные системы]
многодисковый (0) дисковый (0) rdisk (0) раздел (2) \ WINDOWS = "Microsoft Windows XP Professional" / fastdetect / onecpu
Перезагружать. Как только вы закончите играть, снимите флажок и перезагрузите компьютер снова.
Метод 0: не очень хороший метод (сродство процессора)
Боюсь, что-либо, что связано с процессором Affinity, не очень хороший вариант. Сродство процессора - ключ к процессору. Процессор не обязан его уважать и часто не будет.
источник
D:\>bcdedit /set onecpu
результаты вThe set command specified is not valid.
....The parameter is incorrect.
Я поместил следующую функцию в моей программе в Python 2.6, и она вызывает функции Windows. У моей машины только два ядра, поэтому вам может потребоваться изменить эту часть. В комментариях рассказывается, как увидеть текущее сходство. Он работает "как есть" для одноядерного компьютера, если вы установите или по умолчанию установите маску на 1.
источник
В Windows 8 вам нужно перейти на вкладку Details диспетчера задач, чтобы установить Set Affinity. Это не дает вам возможность на вкладке Процессы.
РЕДАКТИРОВАТЬ: Кроме того, если программа, которую вы хотите запустить, имеет параметры, этот поток может пригодиться: Как запустить программу с аргументами командной строки в Windows 'cmd с командой' start '?
источник
Когда я искал очень похожую информацию с помощью PowerShell, я нашел нужную информацию здесь: http://www.energizedtech.com/2010/07/powershell-setting-processor-a.html
Вы не упомянули, какую операционную систему Windows вы использовали (старые версии не поставлялись с PowerShell, хотя вы можете установить ее, если ее там нет).
Самое быстрое, что в PowerShell сходство процессов - это просто свойство, которое вы можете легко изменить.
Чтобы увидеть свойства (и другие подробности) вашего процесса (используя foo в качестве примера процесса), команда PowerShell должна быть:
Вы увидите, что ProcessorAffinity является одним из этих свойств. Его изменение тривиально, и вы можете выбрать ядро, на котором хотите работать, используя значения из таблицы / ссылки Revolter выше.
Чтобы увидеть, что значение свойства ProcessorAffinity для foo, вот команда:
Поэтому, если вы хотите запустить foo только на процессоре 4, вы должны установить значение следующим образом:
источник
start /affinity
ответе. Может ли ваша техника сделать это? Если это так, пожалуйста, объясните, как.Start-Process foo ; (Get-Process foo).ProcessorAffinity=8
Однако, прочитав ваш комментарий и обнаружив, чтоStart-Process
сам флаг пропущен, я пришел к следующему, которое я протестировал:[System.Diagnostics.Process]::start("foo.exe").ProcessorAffinity=0x0010