Рубрики Статті

Процесори, потоки й процеси: ПК чекає багатоядерне майбутнє?

Опубликовал
Дмитрий Спасюк

Багато десятиліть всі процесори мали лише одне ядро та один потік. Пройшло чимало часу до появи перших Dual Core CPU. Тепер у вас може бути 8, 12, 16 або більше ядер у домашньому ЦП. Сучасні ПК мають процесори, які можуть одночасно обробляти безліч потоків. Все завдяки розробкам у галузі проєктування та виробництва мікросхем. Але що таке потоки й чому так важливо, щоб ЦП міг обробляти більше одного потоку? У цій статті читач знайде відповідь на ці та інші запитання.

Що таке потік?

Простіше кажучи, потік процесора — набір даних, найкоротша послідовність інструкцій, необхідне виконання обчислювальної задачі. Це може бути дуже короткий список, але він може бути величезним по довжині. Це процес, частиною якого є потоки (як показано нижче).

Отже, тепер у нас є нове питання, на яке потрібно відповісти (що таке процес?), але, на щастя, вирішити його так само легко. Якщо ви використовуєте Windows на своєму комп’ютері, натисніть клавішу Windows і X і виберіть «Диспетчер завдань» зі списку.

Онлайн-курс "Створення особистого бренду" від Skvot.
Прокачайте особистий бренд для підсилення власного бізнесу, підвищення продажів та впізнаваність на ринку.
Дізнатись більше про програму курсу і досвід лектора

За замовчуванням він відкривається на вкладці «Процеси», і ви повинні побачити довгий список процесів, запущених на вашому комп’ютері. Деякі з них будуть окремими програмами, що працюють самостійно без участі користувача.

Інші будуть програмою, якою ви можете керувати безпосередньо, а деякі з них можуть генерувати додаткові фонові процеси – завдання, які виконуються за лаштунками за вказівкою основної програми.

Якщо ви перейдете на вкладку «Продуктивність» у диспетчері завдань, а потім виберіть розділ ЦП, ви побачите, скільки процесів в цей час виконується, а також загальна кількість активних потоків.

Щоразу, коли процес хоче отримати доступ до файлу, чи то в ОЗУ, чи на накопичувачі, створюється дескриптор файлу. Кожен з них унікальний для процесу, що його створив, тому один файл може мати безліч дескрипторів.

Повертаючись до потоків, «Диспетчер завдань» мало що говорить про них — наприклад, кількість потоків, пов’язаних із кожним процесом, не зображається. На щастя, Microsoft має ще одну програму під назвою Process Explorer, яка допоможе в цьому.

Тут ми можемо побачити більш детальний огляд різних процесів та їх потоків.

Зверніть увагу на те, як деякі програми генерують відносно невелику кількість послідовностей інструкцій (наприклад, хост плагін Corsair iCUE має тільки одну), у той час, як інші програми обчислюються сотнями, наприклад процес System. Саме операційна система генерує більшість цих потоків.

Центральний процесор

Кінцевим пунктом призначення будь-якого потоку є центральний процесор (ЦП). Цей пристрій бере список інструкцій, перекладає їх на «мову», яку він розуміє, а потім виконує ці завдання.

Глибоко в надрах процесора спеціальне обладнання зберігає потоки для їх аналізу, а потім сортує їх список інструкцій таким чином, щоб відповідати найкращим чином тому, що процесор робить цієї миті.

Навіть у старих процесорах Pentium інструкції потоків можуть бути трохи перевпорядковані, щоб максимізувати продуктивність. Сучасні ЦП містять надзвичайно складні інструменти керування потоками через величезну кількість потоків, якими вони мають керувати.

Якщо потік містить послідовність інструкцій «Якщо…тоді…інакше», схема прогнозування оцінює найімовірніший результат. Потім відповідь на це припущення змушує ЦП копатися у своєму сховищі інструкцій, та виконувати ті, які потрібні саме зараз.

Якщо «прогноз» був вірним, то це зекономить час на обробку всього потоку. Якщо ні, то це не так вже й добре — ось чому розробники процесорів працюють над цим! Сучасний процесор самостійно вибирає найбільш потрібний потік даних для обробки у певний момент часу.

Серверні процесори Intel першої половини 90-х

Центральні процесори 1990-х років, чи то настільні, чи серверні, мали лише одне ядро, тому могли працювати тільки з одним потоком за раз, хоча вони могли виконувати кілька інструкцій одночасно (відомі як суперскалярні).

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

Ідея ЦП, що виконує більше однієї інструкції потоку у своєму ядрі, також відома як одночасна багатопоточність (SMT), мала почекати. Пройшло чимало часу, щоб можливості обладнання дозволили реалізувати таку технологію.

Архітектура Intel Northwood принесла багатопоточність у маси. 1 ядро, 2 потоки в Intel Pentium 4

Це було досягнуто до 2002 року, коли Intel випустила нову версію процесора Pentium 4. Це був перший ЦП для настільних ПК, повністю сумісний із SMT, з функцією, що отримала назву технології Intel Hyper-Threading. Усі сучасні процесори є його спадкоємцями.

Мультизадачність

То як же одне ядро ​​процесора працює з двома потоками одночасно? Думайте про процесор як складну фабрику, що складається з декількох відділів: отримання та організація вихідних матеріалів (тобто даних), потім сортування замовлень (потоків), розбиваючи їх на безліч дрібніших завдань.

Так само як лінія з виробництва автомобілів у великих обсягах буде працювати з різними деталями, однією або двома за раз, ЦП повинен виконувати різні завдання у заданій послідовності, щоб виконати заданий набір інструкцій.

Так працює конвеєр, різні етапи не завжди будуть зайняті. Деяким даним доводиться деякий час чекати, доки не будуть виконані попередні кроки.

Тут у гру вступає SMT (Simultaneous multithreading). Апаратне забезпечення, призначене для відстеження стану кожної частини «конвеєра», використовується для визначення того, чи інший потік може використовувати незайняті етапи без зупинки поточного потоку.

Той факт, що процесори для настільних ПК стали багатопотоковими задовго до того, як вони стали багатоядерними, свідчить, що SMT набагато простіше реалізувати. У випадку з архітектурою Intel Northwood для управління двома потоками було залучено менше ніж 5% всього кристала.

Ядра ЦП, що підтримують SMT, організовані таким чином, що для операційної системи вони зображаються як окремі логічні ядра. Фізично вони використовують одні й самі ресурси, але діють незалежно.

ЦП для настільних ПК обробляють не більше двох потоків на ядро ​​ЦП, тому що їх конвеєри відносно короткі та прості, а аналіз, проведений розробниками, показав, що два потоки – це оптимальна межа. Тому ми досі не бачимо у домашніх комп’ютерах 8 ядер / 24 потоки тощо.

ЦП IBM Power10 – 15 SMT8 cores

На протилежному кінці спектра є величезні серверні процесори, такі як чіпи Intel Xeon Phi або новітні процесори IBM POWER, обробляють 4 та 8 потоків на ядро ​​відповідно. Це тому, що їхні ядра містять багато конвеєрів із загальними ресурсами.

Ці різні підходи до проєктування ЦП виникають через дуже різні робочі навантаження, з якими доводиться мати справу чіпам.

Центральні процесори — не єдині мікросхеми в комп’ютері, яким доводиться мати справу з великою кількістю потоків. Є один чіп з дуже специфічною роллю, що обробляє тисячі потоків одночасно.

Відеокарти

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

Відеокарта початкового рівня швидше обробляє дані, ніж 32-ядерний сучасний процесор AMD Ryzen

Візьмемо, наприклад, відеокарту AMD Radeon RX 6800 з чіпом Navi 21. Цей процесор складається з 60 обчислювальних блоків (CU), кожен з яких повинен одночасно обробляти 64 окремі потоки. Це 3840 потоків!

То як же GPU справляється з набагато більшими завданнями, ніж центральний процесор?

Кожен CU має два набори SIMD (одна інструкція, кілька даних), і кожен з них може працювати з 32 окремими елементами даних одночасно. Всі вони можуть бути з різних потоків, але проблема в тому, що модуль повинен виконувати одну і ту ж інструкцію в кожному потоці.

У цьому ключова відмінність від ЦП — там, де ядро ​​процесора для настільних ПК оброблятиме не більше двох потоків, інструкції можуть бути зовсім іншими, з абсолютно не пов’язаних процесів.

Графічні процесори призначені для виконання тих самих операцій знову і знову, як правило, з тих самих процесів (технічно вони відомі як ядра, але ми залишимо це осторонь), але все це виконується паралельно.

Як і у випадку з процесором IBM POWER10, призначеним тільки для корпоративних серверів, графічний адаптер створений для виконання спеціалізованої задачі.

Найбільші сучасні ігри зі своєю 3D-графікою вимагають неймовірної кількості математичних обчислень лише кілька мілісекунд. А для цього потрібні потоки у величезній кількості.

Потрібно більше потоків

Якщо ви подивитеся на будь-який огляд ЦП, ви майже завжди побачите два результати Cinebench, тесту, який виконує складне завдання рендерингу на основі ЦП.

Один результат належать до тесту, що використовує тільки один потік, тоді як інший використовуватиме стільки потоків, скільки всього може обробити ЦП. Результати останнього завжди набагато швидше, ніж в однопотокового тесту. Чому це так?

Cinebench рендерить 3D-графіку, як у грі, лише один кадр із високою деталізацією. І якщо ви згадаєте, як графічні процесори виконують безліч потоків паралельно для створення 3D-графіки, стає очевидним, чому процесори з великою кількістю ядер, особливо SMT, так швидко справляються з робочим навантаженням. Це один із небагатьох сценаріїв, де можна реалізувати всі ядра/потоки процесора.

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

Наприклад, процесор AMD Ryzen 9 3950X (12-ядерний процесор з 24 потоками) у 36 різних іграх із включеним SMT і без нього показує різні результати. У деяких іграх продуктивність буде краще на 10-16% із включеним SMT, тоді в інших гірше на 10-12%.

Середня різниця, однак, становила лише 1%, так що це, звичайно, не той випадок, коли SMT завжди слід відключати під час ігор. Але це викликає ще кілька запитань.

По-перше, чому гра працює на 12% повільніше, якщо ядра ЦП одночасно обробляють два потоки? Ключова фраза тут – «конфлікт за ресурси».

Чим більше потоків може обробляти ЦП, тим важливішою стає система кешування процесора. Це стає очевидним щодо процесорів з фіксованим розміром кеша L3, незалежно від того, скільки ядер активовано.

Чим більше ядер та потоків у чіпа, тим більше запитів до кешу доводиться обробляти системі. І це підводить нас до наступного питання: чому більшість ігор не вміє працювати з великою кількістю потоків/ядер?

Чому ігри не використовують багато потоків?

Повернімося до Process Explorer і подивимось на кілька ігор, а саме Cyberpunk 2077, Spider-Man Remastered та Shadow of the Tomb Raider. Всі три були розроблені для ПК та консолей, тому можна очікувати, що вони будуть використовувати від 4 до 8 потоків.

На перший погляд, в іграх справді використовується безліч потоків. Також здається, що це неможливо, оскільки процесор, який використовується в комп’ютері, на якому запущені ігри, підтримує максимум 8 потоків. Але якщо ми заглибимося в потоки процесу, ми отримаємо набагато яснішу картину. Подивімось на Shadow of the Tomb Raider.

Нижче бачимо, що переважна більшість цих потоків майже не займають час виконання ЦП (другий стовпець, що відбивається в секундах). Хоча процес і ОС створили більше сотні потоків, більшість із них виконуються надто швидко, щоб навіть зареєструватися.

Дельта-кількість циклів — загальна кількість циклів ЦП, накопичених потоком у процесі, і у випадку з цією грою в ньому переважають всього два потоки. З усім тим, інші, як і раніше, використовують всі доступні ядра процесора.

Може здатися, що кількість тактів — смішне число, але якщо процесор має тактову частоту, скажімо, 4,5 ГГц, один цикл займає всього 0,22 наносекунди. Таким чином, 1,3 мільярда циклів відповідають трохи менше ніж 300 мілісекундам.

Звичайно, не всі ігри вміють так, і чим старший проєкт, тим менша кількість потоків він залучить. Якщо ми подивимося на оригінальний Call of Duty 2003 року, то побачимо зовсім іншу картину.

Всі ігри тієї епохи були такими — лише один потік для всього. Це з тим, що тоді процесори мали лише одне ядро, і щодо деяких з них підтримували SMT.

Процес Call of Duty вимагає один потік, Shadow of the Tomb Raider одночасно використовує стільки, скільки підтримує ЦП.

Спочатку апаратне забезпечення випереджало програмне забезпечення, коли справа дійшла до повного використання всіх пропонованих ядер (з SMT або без нього), і нам довелося чекати кілька років, перш ніж ігри стали багатопотоковими.

Тепер, коли останні консолі мають 8-ядерний процесор із підтримкою 2SMT, майбутні ігри, безумовно, будуть більше завантажені потоками.

Багатопоток – майбутнє?

Користувач може отримати настільний ПК з процесором, здатним обробляти 32 потоки (AMD Ryzen 9 7950X), та графічним процесором, який може обробляти 4096 потоків (Nvidia GeForce RTX 4090).

Це апаратне забезпечення, звичайно, є топовим у плані вартості та потужності та, звичайно ж, не є тим, що підійде більшості. Але близько 10 років тому картина була зовсім іншою.

Кращі процесори підтримували 8 потоків через SMT, але середньому ПК зазвичай доводилося приблизно 4 потоками. Тепер ви можете придбати процесори з бюджетом менш ніж 100 доларів, які працюють, так само як найкращі чіпи 7-річної давності.

4 ядра, 8 потоків, менше ніж 100 доларів – Intel Core i3-10100 показує приблизно той же рівень продуктивності, що й Intel Core i7-7700.

Ми можемо подякувати AMD за це, оскільки вони були першими, хто запропонував безліч ядер/потоків за доступною ціною. Платформа АМ4 стала революцією у світі домашніх ПК. І сьогодні обидва виробники регулярно борються за те, хто може запропонувати більше ядер/потоків за долар.

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

Підсумки

То що далі? Якби ми могли перенестися на десятиліття вперед, чи побачимо ми середньостатистичного геймера, який використовує 128-потоковий процесор? Дуже малоймовірно, просто тому, що більшість програмного забезпечення досі упирається у потужності одного ядра. Нарощування Single Core продуктивності має важливу роль, як і кількість ядер. Однак, професійні творці графічного контенту вже використовують потужні процесори та дорогі відеокарти для роботи.

Джерело : Techspot

Disqus Comments Loading...