Как запускать программу на одном ядре постоянно

Вы тут: Главная → Толковые вопросы и ответы → Как задать постоянное сходство процесса (affinity) ядрам процессора?

Как задать постоянное сходство процесса (affinity) ядрам процессора?

Узнал о возможности задавать соответствие процессам, на нагрузку одного или нескольких ядер процессора. А вот чтобы этот параметр закрепить за *.exe файлом, такого нигде нет (за исключением использования сторонней программы, но это не вариант). В итоге приходится постоянно при загрузке задавать соответствие этому процессу. Может есть способ через ярлык или реестр указать, сколько ядер разрешено использовать тому или иному процессу?

  • Nostra спросил(а) 8 лет назад
  • последняя редакция 8 лет назад
  • Войдите для отправки комментариев
  • Новые вверху
  • Старые вверху
  • Случайным образом
  • Недавно активные

Лучший ответ

Windows вполне эффективно управляет сходством процесса, поэтому менять это следует только в том случае, если в этом есть насущная необходимость, т.е. вы четко понимаете, что вы делаете и что это дает.

Запуск старых игр на одном ядре процессора

Для формирования ярлыка нужно знать шестнадцатеричное число, определяющее комбинацию желаемых процессоров.

1. Определите двоичное число

В диспетчере задач щелкните правой кнопкой мыши на процессе → Задать сходство.
Появится диалог со списком ЦП. Допустим, их 8 — от ЦП0 до ЦП7.

Выбранные ЦП обозначаются двоичным числом, в котором столько цифр, сколько у вас ЦП. Выбранные ЦП обозначаются единицами, не выбранные — нулями. Самая правая цифра — ЦП0, самая левая — ЦП7.

При стандартном запуске (картинка выше) выбраны все ЦП, поэтому число состоит из восьми единиц: 11111111. Если вы хотите только ЦП1 и ЦП4, число будет 00010010.

2. Конвертируйте двоичное число в шестнадцатеричное

  1. Откройте калькулятор и переведите его в режим программирования.
  2. Нажмите BIN и вставьте скопированное число.

Соответствующее шестнадцатеричное число — HEX. В данном случае — 12.

3. Сформируйте команду для ярлыка

Используйте команду start, чтобы указать шестнадцатеричное число в качестве значения для ключа /affinity

cmd.exe /c start «Notepad ++» /affinity 12 «C:Program Files (x86)Notepad++notepad++.exe»

В Windows XP команда start не поддерживает ключ /affinity. В этом случае надо использовать утилиту psexec с ключом /a из набора Systinternals PSTools.

Читайте также:
Как освоить программу корел

psexec /a 12 «C:Program Files (x86)Notepad++notepad++.exe»

4. Создайте ярлык

  1. Щелкните правой кнопкой мыши на рабочем столе и выберите Создать → Ярлык.
  2. Вставьте сформированную команду.

Дополнительная информация

  • Vadim Sterkin ответил(а) 8 лет назад
  • последняя редакция 8 лет назад

Подскажите, эта команда подходит для Windows XP?(у меня XP) Получилось сформировать вот такую команду: cmd.exe /c start «XR_3DA» /affinity 3 «D:GamesS.T.A.L.K.E.RbinXR_3DA.exe» (команда ->2 ядра->путь) В ярлыке получилось: %windir%system32cmd.exe /c start «XR_3DA» /affinity 3 «D:GamesS.T.A.L.K.E.RbinXR_3DA.exe» Но ярлык не работает, подскажите, пожалуйста, что не так?

Не все ядра CPU отображаются. Что делать если видно только 2 ядра

  • Vadim Sterkin
  • 8 лет назад

Я добавил решение для Windows XP. Рекомендую не пользоваться устаревшими неподдерживаемыми системами и всегда указывать ОС, задавая вопрос.

Спасибо, получилось, но как-то интересно: при запуске ярлыка psexec /a 3 (или «-a 1,2») «D:GamesS.T.A.L.K.E.RbinXR_3DA.exe» (%windir%system32psexec.exe /a 3 «D:GamesS.T.A.L.K.E.RbinXR_3DA.exe» -nointro) загружает второе ядро, только при 100% загрузке первого. А если запустить приложение родным ярлыком и установить affinity из диспетчера, то нагрузка распределяется на 1ядро на ~70%-80%, а на 2ядро на ~20%-30% — странно. Каким же образом система задаёт параметр affinity, так, что он более адекватно распределяет нагрузку и где этот параметр временно меняется до завершения приложения. Может у, Вас, есть какие-нибудь идеи, по этому поводу?

  • Vadim Sterkin
  • 8 лет назад

Не интересовался. Курите MSDN или Windows Internals Руссиновича.

  • Войдите для отправки комментариев

Источник: www.outsidethebox.ms

Настройка Processor Affinity с помощью PowerShell

По умолчанию запущенное в Windows приложение может выполняться на любом из ядер процессора, а распределением процессорных мощностей занимается операционная система. Обычно она неплохо справляется с этой задачей, но иногда все же требуется ручная настройка. Для этой цели в Windows есть функционал Processor Affinity, который позволяет осуществлять привязку вычислительных процессов к ядрам процессора.

При помощи этого функционала можно указать сходство (affinity) процесса с определенными ядрами процессора, тем самым привязав процесс к этим ядрам. Если вы установили для процесса привязку к определенным ядрам, то он будет выполняться только на этих ядрах.

В какой ситуации может потребоваться настройка Processor Affinity:

• Для ограничения потребления ресурсов конкретным приложением. Самый простой и эффективный, хотя и достаточно грубый способ ограничить для приложения потребляемую процессорную мощность.
• Для обеспечения совместимости. К примеру требуется запустить устаревшее приложение, которое работает некорректно в многопроцессорной системе.
• Для повышения производительности. В случае с ресурсоемкими приложениями (напр. рендеринг видео) иногда рекомендуют выделить программе отдельные ядра процессора. Это гарантирует, что ядра будут всегда доступны для выполнения задачи и не будет задержек, связанных с выбором и переключением между ядрами.

Читайте также:
Поет или нет программа

Проще всего осуществить привязку с помощью диспетчера задач (Task Manager). Для этого надо на вкладке Details (Подробности) найти нужный процесс, кликнуть на нем правой клавишей мыши и в контекстном меню выбрать пункт Set Affinity (Задать сходство).

процессы в Task Manager

В открывшемся окне буду показаны все имеющиеся ядра процессора. Те, которые процесс может использовать, отмечены галочкой. Для изменения просто убираем галочку с ненужных ядер и жмем ОК.

Processor Affinity в Task Manager

Можно осуществлять привязку и с помощью PowerShell. Для примера запустим Блокнот (notepad) и выведем его текущее значение командой:

Get-Process notepad | fl ProcessorAffinity

Processor Affinity в PowerShell

А теперь давайте разберемся, откуда взялась цифра 15. Дело в том, что ProcessorAffinity представляет из себя битовую маску (bitmask), где каждому биту соответствует ядро процессора. Если для ядра отмечено сходство (affinity), то бит выставляется в 1, если нет — то в 0. В нашем случае отмечены все ядра, поэтому маска выглядит так:

CPU3 CPU2 CPU1 CPU0
1 1 1 1

Примечание. При использовании технологии HyperThreading каждое физическое ядро определяется операционной системой как два отдельных процессора (два логических ядра).

Теперь переведем двоичные значения в десятичные и получим:

CPU BitMask Dec
CPU0 0001 1 (2 0 )
CPU1 0010 2 (2 1 )
CPU2 0100 4 (2 2 )
CPU3 1000 8 (2 3 )

Складываем полученные десятичные значения и получаем:

1 + 2 + 4 +8 = 15

Таким образом число 15 означает, что используются все 4 ядра процессора. Если мы хотим это изменить и привязать процесс к определенным ядрам, то складываем только те значения, которые соответствуют этим ядрам. Например, требуется привязать процесс к первым трем ядрам, соответственно значение будет складываться так:

1 + 2 + 4 = 7

Значение получено, теперь осуществим привязку. Для этого выполним следующие команды:

$process = Get-Process notepad
$process.ProcessorAffinity = 7

Изменение Processor Affinity в PowerShell

Проверим результат и в графической оснастке. Как видите, нашему процессу сопоставлены три ядра процессора, как и было задумано

Processor Affinity в Task Manager

Таким образом можно осуществить привязку уже запущенного процесса, а можно ли запустить процесс сразу с привязкой к определенным ядрам? Можно, с помощью утилиты командной строки start с ключом /affinity. Например, для запуска блокнота с привязкой к первому ядру достаточно выполнить команду:

Читайте также:
Программа как сшить платье

start /affinity 1 notepad

Эта команда отлично работает в командной консоли, но если вы попытаетесь выполнить ее при помощи PowerShell, то получите ошибку. Дело в том, что в PowerShell команда start является алиасом для командлета Start-Command, для которого указанные параметры являются недопустимыми.

запуск утилиты start в PowerShell

Поэтому, если все же требуется запуск именно из PowerShell, то команду придется немного видоизменить. Например так:

запуск приложения с заданной привязкой

Указывать значение маски в данном случае надо не в десятичном, а в шестнадцатеричном виде. К примеру десятичное значение 15 в шестнадцатеричном виде будет равно F, а команда для запуска процесса с привязкой к четырем ядрам будет выглядеть так:

запуск приложения с заданной привязкой

И еще, если требуется уточнить количество ядер процессора, то это можно сделать с помощью переменной окружения, командой:

Источник: windowsnotes.ru

Жизнь — это движение! А тестирование — это жизнь 🙂

Если у пользователей слабые машины с 1-2 ядрами процессора, десктопное приложение может тормозить. Поэтому в регресии стоит на мощной машинке выдать ему одно ядро и посмотреть, что он не тормозит как сволочь

Как сделать

  • Диспетчер задач → Подробности.
  • Найти нужный процесс.
  • Правой кнопкой → Задать сходство (в Windows 7 пункт называется «Задать соответствие»).

  • Снять галки, поставить только один ЦП.

  • 4 железных процессора;
  • 8 виртуальных (по 2 на каждом).

Из этого следует, что если мы эмулируем одноядерную машину с 2 виртуальными ядрами, то нужно включать ЦП0 и ЦП1.

Если включить, например, ЦП0 и ЦП2, то будут использованы два разных «железных» ядра и производительность будет сильно выше.

Posted by Ольга Назина (Киселева) at 12:18

5 комментариев:

нет нужного мне exe файла в «подробностях» Ответить Удалить

потому что он не включен Ответить Удалить

но я не знаю как запустить, мне нужно ограничить до запуска Ответить Удалить

Можно запустить приложение на нескольких логических процессорах с помощью параметра affinity. Указываем маску в шестнадцатеричном формате, например требуется использовать процессоры 1, 3, 5, 7, соответственно, это будет 10101010 или 0xAA, передаем в виде /affinity 0xAA.
т.е.
c:windowssystem32cmd.exe /C start /affinity 0xAA software.exe
где software.exe — ваше приложение
если вместо 0xAA — передавать цифру — приложение будет запущено на соответствующем цифре логическом ядре. Удалить

Источник: okiseleva.blogspot.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru