Однопоточное приложение сбалансировано между ядрами процессора?
Есть ли простой способ проверить, сбалансировано ли определенное однопоточное приложение между ядрами процессора в Windows?
Я уже пробовал Process Explorer, но я не мог найти способ прочитать его, если это вообще возможно.
Причина, по которой я хочу это знать, заключается в том, что я понимаю, что не все однопоточные приложения сбалансированы, а вместо этого придерживаются 1 ядра.
1 ответ
"Сбалансированный" это относительный термин.
Перемещение процесса между ядрами может сделать недействительными определенные оптимизации (общий кэш помогает, но регистры ЦП по-прежнему относятся к ядру), поэтому, если ваша ОС "уравновешивает" процесс, перемещая его, он может принести больше вреда, чем пользы.
Для высокооптимизированных (часто выполняемых вручную сборок) программ восстановление регистра может занять больше времени, чем просто позволить процессу сохранить один ЦП для себя.
С другой стороны, если процесс, привязанный к ЦП, не использует регистры интенсивно и не очень заботится о том, нужно ли их перезагружать, и если есть много конфликтов для ЦП, перенесите его на какой-либо процессор. доступно может улучшить производительность.
Я имею в виду, что для однопоточного процесса вам все равно - доверьтесь планировщику вашей операционной системы, чтобы он поступил правильно (это действительно умнее, чем вы в таких вещах).
Для многопоточных процессов применяется одна и та же логика, только несколько раз: вас волнует, ГДЕ потоки работают до тех пор, пока они получают необходимое для них процессорное время и работают быстро?
Мое предположение нет.
Чтобы ответить на вопрос, который вы задали: потому что вам действительно все равно, я не думаю, что это возможно.
Конечно, в Windows не так просто это сделать (диспетчер задач и Process Explorer не раскрывают его). Вы можете посмотреть на сценарии Power Shell, но я не верю, что есть способ сделать это там...