Как назначить задачу тому или иному логическому ядру?
Программа с интенсивными вычислениями запускается из командного терминала. Для выполнения ряда вычислений требуется несколько вызовов указанной программы в одном или нескольких пакетных файлах, поэтому каждый вызов может выполняться параллельно. Предположим, что основной синтаксис терминала:
симулировать.exe input.txt
Предположим, что на ПК с Windows 10 установлен процессор i7-3770 с 4 физическими ядрами: каждое физическое ядро обеспечивает два логических ядра, всего 8 логических ядер. Создается 6 пакетных файлов: по одному пакетному файлу на каждое логическое ядро. Цель состоит в том, чтобы гарантировать, что 6 пакетных файлов выполняются на 3 физических ядрах, причем 4-е ядро доступно исключительно для Windows. Напримерgo_CPU1.bat
выполнит:
simulate.exe input1.txt
simulate.exe input2.txt
simulate.exe input3.txt
...
simulate.exe input100.txt
Существует ли синтаксис командной строки для назначения моделирования конкретному перечислимому логическому ядру?
1 ответ
Вы можете использоватьstart
команда в сочетании сaffinity
маска для управления тем, от какого ядра (ядер) вы хотите изолировать процесс.
START ["заголовок"][/D путь][/I][/MIN][/MAX][/SEPARATE | /ОБЩИЙ][/НИЗКИЙ | /НОРМАЛЬНЫЙ | /ВЫСОКИЙ | /РЕАЛЬНОЕ ВРЕМЯ | /ВЫШЕНОРМАЛЬНЫЙ | /BELOWNORMAL][/NODE ][/AFFINITY ][/WAIT][/B] [команда/программа] [параметры]
AFFINITY Specifies the processor affinity mask as a hexadecimal number. The process is restricted to running on these processors. The affinity mask is interpreted differently when /AFFINITY and /NODE are combined. Specify the affinity mask as if the NUMA node's processor mask is right shifted to begin at bit zero. The process is restricted to running on those processors in common between the specified affinity mask and the NUMA node. If no processors are in common, the process is restricted to running on the specified NUMA node.
ВСЕ маски выполняются в шестнадцатеричном формате. Чтобы рассчитать это, вы можете использовать калькулятор Windows в режиме программиста. Ниже я покажу вам, как это сделать.
Например, шестнадцатеричное значение 3A переводится как00111010
Это значение начинается с 0, что означает, что процедура № 1 на самом деле является # 0.
Также обратите внимание, что двоичный файл читается в обратном направлении.
Вот как расположены процессы.
Двоичный код: 00111010 <-HEX 3A.
Реальность: 76 543 2 1 0 <-Procs в обратном порядке.
3A означает НЕ ИСПОЛЬЗОВАТЬ 0,2,6,7 -- ИСПОЛЬЗОВАТЬ 1,3,4,5.
«start /AFFINITY 3A Notepad.exe» выдает следующее:
Какая заноза в заднице... правда? ..
Не переживай! Удобный денди-калькулятор Windows может нам помочь.
- Откройте файл Calc.exe и переведите его в режим «Программист».
- Нажмите на вторую пунктирную «клавиатуру с переключением битов» (показана на снимке экрана).
- Нажмите на штуковину BIN слева.
- Введите свой двоичный файл так же, как вы хотите, чтобы использовались процедуры.
Для вашего удовольствия от просмотра я прилагаю скриншот с подсказками.
@echo off
start /AFFINITY 3A notepad.exe
REM Why on earth would notepad need so many procs?
REM Who knows.. ?