Як Windows використовує кілька ядер процесора?

Як Windows використовує кілька ядер процесора?

Нещодавно до нас зв’язався читач і задав питання, на яке варто відповісти у статті.

Як Windows (і, можливо, всі ОС) користуються перевагами декількох ядер? Якщо ж ця функція вбудована в апаратне забезпечення, як ядра знають, які програми виконувати і коли? Я припускаю, що більше ядер краще, але як саме це працює? І чи є способи налаштування програм / Windows для кращого використання більшої кількості ядер?

Коли ви вмикаєте ПК, до того, як ОС навіть завантажилася, ваш процесор і материнська плата “рукостискаються”, через відсутність кращого терміну. Ваш процесор передає певну інформацію про власні робочі характеристики до материнської плати UEFI, яка потім використовує цю інформацію для ініціалізації материнської плати та завантаження системи. Якщо UEFI не може правильно ідентифікувати ваш процесор, ваша материнська плата зазвичай не завантажується. Кількість основних процесорів - це одна з характеристик, про яку повідомляють як UEFI, так і операційна система.

Одним з найважливіших компонентів операційної системи називається планувальник. Планувальник складається з будь-якого методу, який використовується ОС для призначення роботи ресурсам, таким як CPU та GPU, які потім виконують цю роботу. «Одиниця» роботи - найменший блок роботи, яким керує планувальник ОС - називається потоком. Якщо ви хочете зробити аналогію, ви можете порівняти нитку з одним кроком на конвеєрі. На крок вище нитки, ми маємо процес. Процеси - це комп’ютерні програми, які виконуються в одному або декількох потоках. У цій спрощеній заводській аналогії процес являє собою всю процедуру виготовлення виробу, тоді як нитка - це кожне окреме завдання.

Проблема: ЦП можуть одночасно виконувати лише один потік. Для кожного процесу потрібен нарешті один потік. Як ми покращуємо продуктивність комп’ютера?

Рішення: Процесори з тактовою частотою швидше.

Протягом десятиліть масштабування Деннарда було подарунком, який продовжував дарувати. Закон Мура проголосив, що ми зможемо збирати транзистори у все менший і менший простір, але масштабування Деннарда - це те, що дозволило їм досягти вищих і вищих тактових частот при менших напругах.

Якщо комп'ютер працює досить швидко, його нездатність обробляти більше одного потоку одночасно стає значно меншою проблемою. Хоча існує чіткий набір проблем, які неможливо розрахувати за менший час, ніж очікуваний час життя Всесвіту на класичному комп’ютері, є багато-багато-багато проблем, які можна точно розрахувати таким чином.

По мірі того, як комп’ютери стали швидшими, розробники створювали більш досконале програмне забезпечення. Найпростішою формою багатопоточності є грубозерниста багатопотоковість, при якій операційна система перемикається на інший потік, а не сидить і чекає результатів розрахунку. Це стало важливим у 1980-х роках, коли тактові частоти процесора та оперативної пам'яті почали розділятися, причому швидкість і пропускна здатність пам'яті зростали набагато повільніше, ніж тактова частота процесора. Поява кеш-пам’яті означало, що центральні процесори могли зберігати поруч невеликі колекції інструкцій для негайного зминання номерів, тоді як багатопотоковість забезпечувала, що центральний процесор завжди мав чим зайнятися.

Важливий момент: усе, про що ми вже обговорювали, стосується одноядерних процесорів. Сьогодні терміни багатопотоковість та багатопроцесорність часто розмовно вживаються, щоб означати одне і те ж, але це не завжди було так. Симетрична багатопроцесорність та симетрична багатопотоковість - це дві різні речі. Простіше кажучи:

SMT = ЦП може виконувати більше одного потоку одночасно, плануючи другий потік, який може використовувати блоки виконання, які в даний час не використовуються першим потоком. Intel називає цю технологію Hyper-Threading, AMD - просто SMT. В даний час як AMD, так і Intel використовують SMT для підвищення продуктивності процесора. Обидві компанії історично застосовували його стратегічно, пропонуючи його на одних продуктах, але не на інших. У наші дні більшість процесорів обох компаній пропонують ЗПТ. У споживчих системах це означає, що у вас є підтримка кількості ядер процесора * 2 потоки, або 8C / 16T, наприклад.

SMP = симетрична багатопроцесорна обробка. Процесор містить більше одного ядра процесора (або використовує багаторозетну материнську плату). Кожне ядро ​​процесора виконує лише один потік. Кількість потоків, які ви можете виконати за тактовий цикл, обмежена кількістю ядер, які у вас є. Написано як 6C / 6T.

Як Windows використовує кілька ядер процесора?

Багатопотоковість в основному одноядерному контексті раніше означала "Наскільки швидко ваш процесор може перемикатися між потоками", а не "Чи може ваш центральний процесор виконувати більше одного потоку одночасно?"

"Чи може ваша ОС запускати кілька програм одночасно без збоїв?" також було частим проханням.

Оптимізація робочого навантаження та ОС

Сучасні центральні процесори, включаючи мікросхеми 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. Чесно кажучи, ви дуже не хочете, щоб це було. Кінцевим користувачам не слід займатися призначенням потоків вручну для оптимальної продуктивності, оскільки оптимальна конфігурація змінюватиметься залежно від того, які завдання обробляються ЦП у будь-який момент. Довгострокова тенденція у розробці процесора та ОС спрямована на тіснішу співпрацю між центральним процесором та операційною системою з метою кращого спрощення управління живленням та турборежимів.

Примітка редактора: Дякую Брюсу Боркоскі за пропозицію статті.

Читати далі

Apple: "Це залежить від Microsoft", щоб запустити Windows на нових ARM Macs
Apple: "Це залежить від Microsoft", щоб запустити Windows на нових ARM Macs

За словами Apple, питання підтримки Windows на М1 повністю перебуває на суді Microsoft.

Microsoft: чіп Pluton забезпечить безпеку, схожу на Xbox, на ПК з Windows
Microsoft: чіп Pluton забезпечить безпеку, схожу на Xbox, на ПК з Windows

Intel, AMD і Qualcomm працюють над тим, щоб зробити Pluton частиною своїх майбутніх проектів, що може ускладнити злом ПК, але це також вкладає технології Microsoft у ваше обладнання.

Microsoft додає 64-розрядну емуляцію x86 до Windows на ARM
Microsoft додає 64-розрядну емуляцію x86 до Windows на ARM

Корпорація Майкрософт оголосила сьогодні, що очікувана підтримка 64-розрядної емуляції x86 для Windows на пристроях ARM надійшла, за умови, що ви використовуєте Build 21277. Щоб перевірити збірку, вам потрібно бути частиною програми Microsoft Insider від Microsoft.

Minecraft з відстеженням променів тепер доступний для всіх програвачів Windows 10
Minecraft з відстеженням променів тепер доступний для всіх програвачів Windows 10

Зазвичай ви не думаєте про Minecraft як про реалістичну гру, але розробники наполегливо працюють над додаванням трасування RTX променів до гри протягом останніх восьми місяців. Сьогодні він нарешті вийшов з бета-версії, і це дійсно працює з блоковим виглядом Minecraft.