Как отключить часть ядер\запустить приложение на нескольких ядрах

core-threads

Бывают ситуации, когда нужно запустить приложение на меньшем количестве ядер, чем располагает процессор. Например:

• Для ограничения потребления ресурсов конкретным приложением.
• Для обеспечения совместимости. К примеру требуется запустить устаревшее приложение, которое работает некорректно в многоядерной системе.
• Для повышения производительности. Особенно актуально это в случае с LGA2011-3, где многоядерные CPU бывают вынуждены сбрасывать частоты, чтобы уложиться в лимиты энергопотребления. Путем отключения нескольких ядер можно добиться увеличения частоты для остальных ядер.

Отключение ядер через биос

biosCores

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

Для китайских плат на сокете 2011-3 искомая настройка находится по адресу IntelRCSetup > Processor Configuration > Pre-Socket Configuration > CPU Socket 0 Configuration > Cores Enabled.

Для китайских плат на сокете 2011: Advanced > CPU Configuration > Active Processor Cores.

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

Отключение ядер через msconfig

В операционных системах от Microsoft есть возможность отключить часть ядер через утилиту msconfig:

  • Нажимаем Win + R (выполнить) и набираем msconfig, нажимаем Enter
  • Открывается приложение Конфигурация системы, перейдем на вкладку «Загрузка» msconfig1-300x205
  • Нажимаем кнопку «Дополнительные параметры»
  • Устанавливаем галочку «Число процессоров» и выбираем нужное количество ядер, помня что при включенной технологии Hyper-Threading каждое физическое ядро определяется операционной системой как два отдельных процессора (два логических ядра)msconfig2-280x300
  • Чтобы не выполнять эти действия повторно, в предыдущем окне «Конфигурация системы» ставим галочку на пункте «Сделать эти параметры загрузки постоянными». Подтверждаем действия на «Применить» и «OK»
  • Перезагружаем систему.

Указываем программе сколько ядер использовать

Этот способ не требует отключения ядер, все они останутся работать, но указанное приложение сможет использовать только определенное их количество. Данный вариант может не так сильно влиять на производительность как полноценное отключение ядер, но зато он не требует перезагрузки и может выполняться «на лету».

Есть несколько вариантов использования: через диспетчер задач, командную строку или свойства ярлыка.

Через диспетчер задач

  • Открываем диспетчер задач (Ctrl + Alt + Delete \ Ctrl + Shift + Esc)
  • В зависимости от версии Windows переходим на вкладку «Процессы» (Win 7) или «Подробности» (Win 8 и старше)
  • Делаем правый клик по интересующему нас процессу, в контекстном меню выбираем «Задать сходство» disp1-300x256
  • В открывшемся окне можно снять галочки с ненужных логических процессоров и нажать «ОК», изменения сразу вступят в силу.disp2-285x300

Через командную строку или свойства ярлыка

Эти же действия можно произвести через командную строку.

Начиная с Win7 для этого используется команда affinity.

Пример использования: нажимаем Win + R и вводим cmd.exe /c start "Notepad ++" /affinity FFFF "C:\Program Files (x86)\Notepad++\notepad++.exe" (замените путь и имя программы на необходимые).

Обратите внимание на значение «FFFF» после /affinity. Именно оно указывает, сколько ядер будет использовать приложение.

Как вычислить это значение:

Предположим, что у нас процессор с 8 ядрами и 16 потокам (16 логических ядер).  Представим 16 логических ядер в двоичном (бинарном) виде, где каждое ядро может иметь значение 0 (выключено) и 1 (включено).

Все ядра включены: 1111111111111111. Уберем Hyper-Threading (включены только физические ядра): 0101010101010101. Обратите внимание, что последний 0 справа — это 0 ядро, а первый 0 слева, это 15 ядро.

Теперь переведем данные из двоичного в 16-ричный формат. Для этого можно использовать любой онлайн-конвертер. «0101010101010101» после конвертации станет «5555». Именно 5555 и нужно использовать, чтобы запустить приложение на 8 логических ядрах: cmd.exe /c start "Notepad ++" /affinity 5555 "C:\Program Files (x86)\Notepad++\notepad++.exe"

Приложение таким образом можно запускать как через Win + R, так и через командную строку или ярлык:

  • Щелкните правой кнопкой мыши на рабочем столе и выберите Создать > Ярлык
  • В открывшемся окне вставляем уже известную команду cmd.exe /c start "Notepad ++" /affinity 555 "C:\Program Files (x86)\Notepad++\notepad++.exe"