Перші комп’ютери були повністю послідовними. Кожна інструкція, отримана процесором, повинна бути виконана в повному порядку, перш ніж можна було почати наступну. Для більшості інструкцій є п’ять етапів: вибірка інструкції, декодування інструкції, виконання, доступ до пам’яті та зворотний запис. Відповідно, ці етапи отримують інструкцію, яку потрібно виконати, відокремлюючи операцію від значень оперований, виконайте операцію, відкрийте регістр, в якому буде записаний результат, і запишіть результат у відкритий зареєструватися.
Кожен із цих етапів має тривати один цикл. На жаль, якщо даних немає в реєстрі, їх потрібно запитувати з кешу ЦП або системної оперативної пам’яті. Це набагато повільніше, додаючи десятки чи сотні тактів затримки. Тим часом усе інше має почекати, оскільки жодні інші дані чи інструкції не можуть бути оброблені. Цей тип конструкції процесора називається субскалярним, оскільки він виконує менше однієї інструкції за такт.
Конвеєрна передача в скаляр
Скалярний процесор може бути досягнутий шляхом застосування системного конвеєра. Кожен із п’яти етапів інструкції, що виконується, виконується в різних бітах апаратного забезпечення фактичного ядра процесора. Таким чином, якщо ви уважно ставитеся до даних, які подаєте в апаратне забезпечення для кожного етапу, ви можете завантажувати кожен з них кожного циклу. В ідеальному світі це може призвести до 5-кратного прискорення, а процесор буде ідеально скалярним, виконуючи повну інструкцію за цикл.
Насправді програми складні та зменшують пропускну здатність. Наприклад, якщо у вас є дві інструкції додавання «a = b + c» і «d = e + f», їх можна виконувати в конвеєрі без проблем. Проте, якщо у вас є «a = b + c», а потім «d = a + e», у вас є проблема. Якщо припустити, що ці дві інструкції розташовані безпосередньо одна за одною, процес обчислення нового значення «a» не буде завершено, не кажучи вже про запис назад до пам’яті до того, як друга інструкція прочитає старе значення «a», а потім дасть неправильну відповідь для «d».
Цій поведінці можна протистояти за допомогою включення диспетчера, який аналізує майбутні інструкції та гарантує, що жодна інструкція, яка залежить від іншої, не виконується в надто тісній послідовності. Він фактично запускає програму в неправильному порядку, щоб виправити це. Це працює, оскільки багато інструкцій не обов’язково покладаються на результат попередньої.
Розширення конвеєра до суперскалярного
Суперскалярний процесор здатний виконувати більше однієї повної інструкції за цикл. Один із способів зробити це — розширити конвеєр таким чином, щоб було два або більше бітів апаратного забезпечення, які могли б обробляти кожен етап. Таким чином дві інструкції можуть бути на кожному етапі конвеєра в кожному циклі. Це, очевидно, призводить до збільшення складності конструкції, оскільки апаратне забезпечення дублюється, однак воно пропонує чудові можливості масштабування продуктивності.
Проте підвищення продуктивності за рахунок збільшення конвеєрів поки що ефективно масштабується. Теплові та розмірні обмеження накладають деякі обмеження. Існують також значні ускладнення планування. Ефективний диспетчер тепер ще більш важливий, оскільки він повинен гарантувати, що жоден із двох наборів інструкцій не покладається на результат будь-якої з інших інструкцій, що обробляються.
Прогноз розгалужень — це частина диспетчера, яка стає все більш критичною, чим більш суперскалярним є процесор. Деякі інструкції можуть мати два потенційних результати, кожен з яких призводить до різних наступних інструкцій. Простим прикладом може бути оператор «якщо». «Якщо це правда, зробіть це, інакше зробіть інше». Прогноз розгалуження намагається передбачити результат операції розгалуження. Потім він завчасно планує та виконує інструкції, дотримуючись того, що, на його думку, є ймовірним результатом.
Сучасні предиктори гілок містять багато складної логіки, яка може призвести до успіху прогнозування гілок порядку 98%. Правильний прогноз економить час, який можна було б витратити на очікування фактичного результату, неправильний прогноз вимагає, щоб прогнозований інструкції та будь-які їх результати будуть відкинуті, а справжні інструкції будуть запущені замість них, що супроводжується невеликим штрафом за те, що тільки що чекав. Таким чином, високий рівень прогнозування успіху може помітно підвищити продуктивність.
Висновок
Комп'ютерний процесор вважається суперскалярним, якщо він може виконувати більше однієї інструкції за такт. Перші комп’ютери були повністю послідовними, виконуючи лише одну інструкцію за раз. Це означало, що для виконання кожної інструкції потрібно більше одного циклу, тому ці процесори були субскалярними. Базовий конвеєр, який дозволяє використовувати апаратне забезпечення для кожного етапу інструкції, може виконувати щонайбільше одну інструкцію за такт, що робить її скалярною.
Слід зазначити, що жодна окрема інструкція не обробляється повністю за один такт. Ще потрібно не менше п'яти циклів. Однак кілька інструкцій можуть бути в конвеєрі одночасно. Це забезпечує пропускну здатність однієї або кількох завершених інструкцій за цикл.
Superscalar не слід плутати з hyperscaler, який відноситься до компаній, які можуть запропонувати гіпермасштабовані обчислювальні ресурси. Гіпермасштабовані обчислення включають можливість плавного масштабування апаратних ресурсів, таких як обчислення, пам’ять, пропускна здатність мережі та сховище, відповідно до вимог. Це зазвичай зустрічається у великих центрах обробки даних і хмарних обчислювальних середовищах.