Чому оперативна пам’ять — такий же важливий компонент комп’ютера, як і процесор

Для більшості користувачів ПК критерій вибору оперативної пам’яті схожий з вибором накопичувача — чим більше, тим краще. І з цим, звичайно ж, не посперечаєшся — як кажуть, пам’яті багато не буває. Але чомусь багато хто забуває про швидкісні характеристики пам’яті, вважаючи, що вони слабко впливають на продуктивність.

Однак на практиці виходить цікава картина — так, при розгоні пам’яті… зростає продуктивність центрального процесора, причому найчастіше це не якісь частки або одиниці відсотків, помітні лише в бенчмарках — ні, це цілком відчутні й при звичайній роботі десятки відсотків. Здавалося б — це якась магія, розганяєш один компонент, а збільшується продуктивність іншого, але це перестає здаватися дивним, якщо згадати, що комп’ютер — це сукупність зв’язаних один з одним компонентів, що не можуть працювати окремо. Адже, приміром, вже нікого не дивує, що система на SSD вантажиться та працює значно швидше, ніж на HDD, хоча всі інші компоненти при цьому можуть бути точно такими ж.

Але якщо з накопичувачами все зрозуміло — чим швидше їх швидкості читання та запису, тим швидше будуть читатися файли, й тим швидше буде відбуватися з ними робота, то от у випадку з ОЗП і процесором все залишається туманним, і в цій статті ми спробуємо розвіяти цей туман.

Як відбувається обрахування даних на процесорі

Почнемо з того, як саме процесор працює з даними. По суті перед ним стоїть завдання: у нього є неструктурована інформація, з якою він повинен щось робити. Сама інформація зберігається в кеші процесора — це невеликий обсяг швидкої пам’яті, яка зазвичай розташована на одному кристалі з CPU для швидкого доступу до неї.

Що робити процесору з неструктурованою інформацією? Цілком логічно, що він повинен її структурувати — й для цього створюється так звана черга інструкцій разом з кешем інструкцій: це місце, де зберігаються так би мовити «напівфабрикати» — процесор вже знає, як саме працювати з цією інформацією, але поки з нею не працює.

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

На практиці ж, зрозуміло, завжди зустрічаються простої. Розглянемо це на простому прикладі: припустимо, нам потрібно скласти X і Y. Здавалося б, елементарне завдання — але тільки за умови того, що ми ці X і Y знаємо. Але найчастіше X — це результат додавання A і B, а Y — результат, припустимо, різниці C і D. Тому процесору спочатку потрібно порахувати A+B і C-D, і лише потім він зможе обчислити X+Y. У результаті обчислення X+Y відкладається як мінімум на один такт, що призводить до появи порожнього місця в конвеєрі на поточному такті.

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

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

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

Потрібно більше золота пам’яті

Очевидно, що проблем з нестачею даних не було б в принципі, якщо процесор зберігав всі потрібні дані у себе. Однак на практиці це занадто дорого, тому кеш зростав повільно — в 90-ті роки це були десятки кілобайт кешу першого рівня (L1). На рубежі тисячоліть цього стало катастрофічно мало, і додали кеш другого рівня L2, обсягом у сотні кілобайт. В кінці нульових з’явився кеш L3, що дозволяє зберігати кілька мегабайт інформації, ну й зовсім недавно, в 2015 році, з’явилися процесори з кешем четвертого рівня, L4, обсяг якого міг бути до 128 МБ.

Сенс у збільшенні обсягу кешу був простий — забезпечити процесор якомога великою кількістю даних, доступ до яких він може отримати з найменшими затримками, що, в свою чергу, зменшує кількість простоїв. Але, зрозуміло, всі дані в кеш помістити не вийде, тому частина їх зберігається в ОЗП, яка має затримки доступу часто на порядок більше, ніж кеш L1, та в рази більше, ніж L3. Плюс пропускна здатність пам’яті здається просто смішною, якщо порівнювати її з тими гігантськими обсягами інформації, з якими процесор може оперувати щомиті.

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

Яким саме чином пам’ять впливає на продуктивність

Тепер, коли з теорією трохи розібралися, пора б вже пояснити, як саме впливає пам’ять на продуктивність CPU. Уявімо собі завдання, при роботі з яким процесор 50% часу простоює. Здавалося б — з моніторингу навантаження на нього повинно бути 50%, але на практиці той же диспетчер завдань буде говорити, що CPU зайнятий на 100%. Чи бреше він? Так загалом ні — перед процесором стоїть завдання, й він її з усіх сил виконує. Ну а те, що при цьому конвеєр зайнятий на 50% — ну ось така «крива» завдання, процесор все одно не може виконати його швидше.

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

Звичайно, на практиці це не так — є ще власна затримка контролера пам’яті, тому вдвічі збільшити частоту та не збільшити при цьому таймінги — фантастика. Але, раз ми представили ідеальну картину, то нехай буде так. В результаті ми зменшили затримки вдвічі, та тепер процесор простоює лише 25% часу.

Зелене — навантаження на процесор, червоне — простой, жовте — лінія що апроксимує, з якої явно видно, що із зростанням частоти до нескінченності час простою зменшується до нуля.

Ще збільшуємо частоту вдвічі, ще вдвічі зменшуються затримки, а, значить, і простоювати процесор тепер буде «всього» 12.5%. Збільшення частоти ще в два рази «додасть» процесору ще 6.25% продуктивності, й так далі. Звідси ж, до речі, добре видно, що «нескінченний» розгін пам’яті не ефективний — вже після трьох подвоєнь частоти ми будемо «відігравати» лише одиниці відсотків продуктивності — це в тому випадку, якщо у нас завдання навантажувало процесор всього на 50%. На практиці цей рівень вищий, тому збільшення частоти вище певного рівня перестає суттєво збільшувати продуктивність.

Тому пам’ять та процесори завжди розвивалися паралельно — так, з бурхливим зростанням продуктивності CPU в 90-ті роки, коли нові процесори всього через пару років були вдвічі потужніші за попередні, ОЗУ теж зробила якісний стрибок від SDRAM до DDR, коли «зовнішня» частота пам’яті стала вдвічі вища за «внутрішню». Також добре видно, що зараз в сегменті високопродуктивних CPU, де кількість ядер вже перевищує пару десятків, починається перехід від 4-канальної пам’яті до 6-канальної.

І тут стає ясно, що ОЗП в загальному-то не збільшує продуктивність процесора — вона лише зменшує час його простою, наближаючи його до тієї продуктивності, яку він міг би видавати в ідеальному світі. Тому не сподівайтеся на те, що, купивши якийсь Intel Celeron і DDR4-5000, ви отримаєте продуктивність Core i7 — ні, такого не буде і близько. Але все ще, маючи високопродуктивний процесор, можна змусити його видавати більше продуктивності, розігнавши пам’ять. А ось оптимальний рівень частоти ОПЕРАТИВНОЇ пам’яті та її затримка для кожного процесора своя — але це вже практична область, яку ми в цій статті торкатися не будемо.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *