Как Windows использует несколько ядер ЦП?
Читатель недавно связался с нами и задал вопрос, на который стоит ответить в статье.
Как Windows (и, возможно, все ОС) использует преимущества нескольких ядер? В качестве альтернативы, если эта функция встроена в оборудование, как ядра узнают, какие приложения выполнять и когда? Я предполагаю, что чем больше ядер, тем лучше, но как именно это работает? И есть ли способы настроить приложения / Windows для лучшего использования большего количества ядер?
Когда вы включаете ПК, еще до того, как ОС загружается, ваш процессор и материнская плата «рукопожатие», за неимением лучшего термина. Ваш ЦП передает определенную информацию о своих рабочих характеристиках в UEFI материнской платы, который затем использует эту информацию для инициализации материнской платы и загрузки системы. Если UEFI не может правильно идентифицировать ваш процессор, материнская плата обычно не загружается. Количество ядер ЦП - это одна из характеристик, сообщаемых как UEFI, так и операционной системе.
Один из важнейших компонентов операционной системы называется планировщиком. Планировщик состоит из любого метода, используемого ОС для назначения работы таким ресурсам, как ЦП и ГП, которые затем завершают эту работу. «Единица» работы - наименьший блок работы, которым управляет планировщик ОС - называется потоком. Если вы хотите провести аналогию, вы можете сравнить поток с одной ступенью на сборочной линии. На шаг выше потока у нас есть процесс. Процессы - это компьютерные программы, которые выполняются в одном или нескольких потоках. В этой упрощенной фабричной аналогии процесс - это вся процедура изготовления продукта, а нить - это каждая отдельная задача.
Проблема: процессоры могут одновременно выполнять только один поток. Для каждого процесса требуется по крайней мере один поток. Как улучшить производительность компьютера?
Решение: тактовая частота ЦП выше.
На протяжении десятилетий Dennard Scaling был подарком, который продолжал дарить. Закон Мура гласил, что мы сможем упаковать транзисторы в все меньшее и меньшее пространство, но именно масштабирование Деннарда позволило им достигать все более высоких тактовых частот при более низких напряжениях.
Если компьютер работает достаточно быстро, его неспособность обрабатывать более одного потока одновременно становится гораздо меньшей проблемой. Хотя существует определенный набор проблем, которые нельзя рассчитать за меньшее время, чем ожидаемое время жизни Вселенной на классическом компьютере, существует множество, много, много проблем, которые можно легко вычислить таким образом.
По мере того, как компьютеры становились все быстрее, разработчики создавали более сложное программное обеспечение. Самая простая форма многопоточности - это крупномасштабная многопоточность, при которой операционная система переключается на другой поток, а не сидит без дела в ожидании результатов вычислений. Это стало важным в 1980-х, когда тактовые частоты ЦП и ОЗУ начали разделяться, при этом скорость памяти и пропускная способность увеличивались намного медленнее, чем тактовая частота ЦП. Появление кешей означало, что ЦП могли хранить небольшие наборы инструкций поблизости для немедленного вычисления числа, в то время как многопоточность гарантировала, что ЦП всегда было чем заняться.
Важный момент: все, что мы обсуждали до сих пор, применимо к одноядерным процессорам. Сегодня термины многопоточность и многопроцессорность часто используются в разговорной речи для обозначения одного и того же, но так было не всегда. Симметричная многопроцессорная обработка и симметричная многопоточность - это разные вещи. Проще говоря:
SMT = ЦП может выполнять более одного потока одновременно, планируя второй поток, который может использовать исполнительные блоки, не используемые в данный момент первым потоком. Intel называет эту технологию Hyper-Threading, AMD просто SMT. В настоящее время и AMD, и Intel используют SMT для повышения производительности процессора. Обе компании исторически применяли его стратегически, предлагая его на одних продуктах, но не на других. В наши дни большинство процессоров обеих компаний предлагают SMT. В потребительских системах это означает, что у вас есть поддержка количества ядер ЦП * 2 потока или, например, 8C / 16T.
SMP = Симметричная многопроцессорная обработка. ЦП содержит более одного ядра ЦП (или использует многопроцессорную материнскую плату). Каждое ядро ЦП выполняет только один поток. Количество потоков, которые вы можете выполнять за такт, ограничено количеством имеющихся у вас ядер. Написано как 6C / 6T.
Многопоточность в массовом одноядерном контексте используется для обозначения «Как быстро ваш ЦП может переключаться между потоками», а не «Может ли ЦП выполнять более одного потока одновременно?»
«Может ли ваша ОС запускать более одного приложения одновременно без сбоев?» тоже была частая просьба.
Оптимизация рабочей нагрузки и ОС
Современные процессоры, в том числе микросхемы x86, созданные 20 лет назад, реализуют так называемое Out of Order Execution, или OoOE. Все ядра современных высокопроизводительных процессоров, включая «большие» ядра смартфонов в big.Little, являются разработками OoOE. Эти процессоры изменяют порядок инструкций, которые они получают в реальном времени, для оптимального выполнения.
ЦП выполняет код, который ему отправляет ОС, но ОС не имеет ничего общего с фактическим выполнением потока инструкций. Это обрабатывается внутри ЦП. Современные процессоры x86 изменяют порядок получаемых инструкций и преобразуют эти инструкции x86 в более мелкие, похожие на RISC микрооперации. Изобретение OoOE помогло инженерам гарантировать определенный уровень производительности, не полагаясь исключительно на разработчиков в написании идеального кода. Разрешение ЦП переупорядочивать свои собственные инструкции также помогает многопоточной производительности, даже в одноядерном контексте. Помните, что ЦП постоянно переключается между задачами, даже когда мы об этом не подозреваем.
Однако ЦП не выполняет никакого собственного планирования. Это полностью зависит от ОС. Появление многопоточных ЦП не меняет этого. Когда вышла первая потребительская двухпроцессорная плата (ABIT BP6), потенциальным энтузиастам многоядерности пришлось работать либо под Windows NT, либо под Windows 2000. Семейство Win9X не поддерживало многоядерную обработку.
Для поддержки выполнения на нескольких ядрах ЦП требуется, чтобы ОС выполняла все те же задачи по управлению памятью и распределению ресурсов, которые она использует для предотвращения сбоев ОС различными приложениями, с дополнительной защитной полосой, чтобы ЦП не попадали друг в друга.
Современный многоядерный ЦП не имеет «главного планировщика», который назначает работу каждому ядру или иным образом распределяет рабочие нагрузки. В этом роль операционной системы.
Можно ли вручную настроить Windows для более эффективного использования ядер?
Как правило, нет. Было несколько конкретных случаев, когда Windows требовалось обновить, чтобы воспользоваться возможностями, встроенными в новый процессор, но это всегда было чем-то, что Microsoft приходилось выполнять самостоятельно.
Исключения из этой политики немногочисленны и редки, но есть несколько:
Новые процессоры иногда требуют обновления ОС, чтобы ОС в полной мере использовала возможности оборудования. В этом случае ручного варианта нет, если только вы не имеете в виду ручную установку обновления.
AMD 2990WX является исключением из этой политики. ЦП работает довольно плохо под Windows, потому что Microsoft не предполагала существования ЦП с более чем одним узлом NUMA, и он не очень хорошо использует ресурсы 2990WX. В некоторых случаях есть продемонстрированные способы улучшить производительность 2990WX путем ручного назначения потоков, хотя я откровенно рекомендую переключиться на Linux, если он у вас есть, просто для общего спокойствия по этому поводу.
3990X - еще более теоретический выброс. Поскольку Windows 10 ограничивает группы процессоров до 64 потоков, вы не можете выделить более 50 процентов ресурсов исполнения 3990X на одну рабочую нагрузку, если приложение не реализует настраиваемый планировщик. Вот почему 3990X не рекомендуется для большинства приложений - он лучше всего работает с модулями визуализации и другими профессиональными приложениями, которые сделали этот шаг.
За исключением систем с самым большим количеством ядер, где некоторая ручная настройка теоретически может улучшить производительность, поскольку Microsoft еще не оптимизировала для этих случаев использования, нет, вы ничего не можете сделать, чтобы действительно оптимизировать то, как Windows распределяет рабочие нагрузки. Если честно, вы действительно не хотите, чтобы это было. Конечным пользователям не нужно беспокоиться о ручном назначении потоков для достижения оптимальной производительности, потому что оптимальная конфигурация будет меняться в зависимости от того, какие задачи процессоры обрабатывают в данный момент. Долгосрочная тенденция в проектировании ЦП и ОС направлена на более тесное сотрудничество между ЦП и операционной системой, чтобы лучше упростить управление питанием и режимы турбо.
Примечание редактора: спасибо Брюсу Боркоски за предложение статьи.
Читать далее
Microsoft: чип Pluton обеспечит безопасность на уровне Xbox на ПК с Windows
Intel, AMD и Qualcomm работают над тем, чтобы сделать Pluton частью своих будущих проектов, что должно сделать ПК более трудным для взлома, но также встроит технологию Microsoft в ваше оборудование.
Apple: «Это дело Microsoft», чтобы запустить Windows на новых компьютерах Mac ARM
По заявлению Apple, вопрос о поддержке Windows на M1 полностью решается Microsoft.
Minecraft с функцией трассировки лучей теперь доступен для всех игроков с Windows 10
Обычно вы не думаете о Minecraft как о реалистичной игре, но разработчики усердно работали над добавлением трассировки лучей RTX в игру в течение последних восьми месяцев. Сегодня он наконец-то вышел из бета-версии, и он действительно работает с блочным внешним видом Minecraft.
Microsoft добавляет 64-битную эмуляцию x86 в Windows на ARM
Microsoft объявила сегодня о прибытии ожидаемой поддержки 64-битной эмуляции x86 в Windows на устройствах ARM при условии, что вы используете сборку 21277. Чтобы протестировать сборку, вам необходимо участвовать в программе Microsoft Windows Insider.