Як процесор може виконати більше IPS, ніж його частота? [дублікат]


14

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

Я можу зрозуміти, чому процесори нижчого класу можуть виконувати менше IPS, ніж його частота. Наприклад, ATmega328 виконує близько 16 MIPS при 16 МГц (або, принаймні, так мені сказали), а Z80 виконує 0,5 MIPS на 4 МГц. Але тоді Pentium 4 Extreme може виконати більше 9 GIPS при лише 3,2 ГГц. Це приблизно три інструкції на тактовий цикл!

Як це робиться, і чому це не реалізовано в менших процесорах, таких як AVR мікроконтролери?

Я знайшов всю свою інформацію, крім ATmega328, звідси .


3
Погляньте на Вікіпедію про такі гучні слова, як трубопровід, супер скалярна архітектура, не виконане замовлення, одночасна багатопоточність, багатоядерність, розширення вектора (SSE, ..., AVX), кешування тощо. Загалом значення CPI може бути нижчим за 1,0.
Paebbels

7
Ви мали на увазі 9 GIPS для Pentium 4, а не MIPS, чи не так?
Калімо

5
Самореклама: Як центральний процесор може передавати більше однієї інструкції за цикл? мене запитали на електротехнічній стек-біржі (моя відповідь була прийнята і, можливо, надто схвалена).
Пол А. Клейтон

Я завжди замислювався, чи не варто я щось проголосувати, якщо воно вже настільки високо, як я думаю, воно повинно бути? Або завжди надбав, якщо я вважаю, що зусилля та якість допису заслуговують на винагороду?
Пітер Кордес

@PeterCordes Існують різні філософії голосування. Одні стверджують, що "корисний" є єдиним критерієм, інші вважають відносними заслугами (для відповідей). Я схильний вважати абсолютний підрахунок голосів ("приємний", "хороший", "чудовий" повідомлення про посади, маючи на увазі, що таке слід враховувати), а також відносний підрахунок голосів (що допомагає відповідати в рейтингу). Дивно, але Meta.SE, здається, не має великої кількості на цю тему, і " Як я повинен голосувати? " Навіть не має відповіді!
Пол А. Клейтон

Відповіді:


23

Це пояснюється поєднанням особливостей сучасних процесорів.

Перше, що сприяє високому IPS, - це те, що сучасні процесори мають кілька блоків виконання, які можуть працювати незалежно. На зображенні нижче (запозичене з Вікіпедії: Intel Core Microarchitecture ) ви бачите, що внизу є вісім одиниць виконання (показані жовтим кольором), які можуть виконувати всі інструкції одночасно. Не всі ці підрозділи можуть захистити однакові типи інструкцій, але принаймні 5 з них можуть виконати операцію ALU, і є три блоки, здатні до SSE.

введіть тут опис зображення

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

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

Для утримання цих великих трубопроводів, наповнених інструкціями, також потрібен великий кеш, який можна попередньо заповнити інструкціями та даними. Це сприяє розміру штампу, а також кількості тепла, який виробляє процесор.

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

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


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

1
Якщо ви хочете суперскалярний процесор, використовуйте його. Але Arduinos займає нішу для людей, які не враховують вимоги до потужності та охолодження (а також вартість і складність) суперскалярних процесорів.
Девід Шварц

4

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

Краще, ніж намагатися пояснити це сам, ось добрий вихідний пункт .


3

Щоб отримати трохи принциповіше, ніж відповідь Мокубая:

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

Типові процесори x86 для настільних комп'ютерів отримують 16 або 32B інструкцій протягом кожного тактового циклу. Intel розробляє, оскільки Core2 може видавати до 4 інструкцій за цикл. (Або 5, якщо є порівняння та відділення, яке може макросплавитись).

Дивіться приємну відповідь Mobukai за посиланнями та деталями про те, як процесори на практиці вирішують завдання витягти стільки паралелізму на рівні інструкцій, скільки вони роблять з коду, який вони виконують.

Також див. Http://www.realworldtech.com/sandy-bridge/ та подібні статті для інших архітектур процесора для поглибленого пояснення того, що знаходиться під кришкою.


-2

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

Але іншим його джерелом може бути те, що кожна "інструкція" - це фактично певний обсяг даних, що трактується як введення інструкції процесором. Якщо підрахунок його джерела підраховує лише те, що процесор вважає інструкціями, далі нічого не додається. Але якщо його джерело підраховує все, що людина називав би "інструкцією", тоді: Додайте, що не кожна інструкція є такою ж фізичною, як і кожна інша інструкція (одна може бути 12 байт, інша може бути 56 байт тощо). Отже, якщо він завантажує 64 байти матеріалу на кожен цикл як "інструкцію" (або стільки повних інструкцій, скільки можливо, перш ніж натиснути на 64 байти), і одна має шість інструкцій у цьому 64 байті, то шість інструкцій (як ви, і я можу вважати їх ) буде завершено в цьому циклі.

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


Це трохи ближче до того, як насправді працюють процесори, але отримання декількох машинних циклів за цикл є лише частиною того, як працює суперскалярний процесор. (а середня довжина inns більше схожа на 4 байти, для x86.) Глибокі конвеєри означають, що отримані зараз інструкції можуть не закінчити виконання протягом 15 циклів (або набагато довше, якщо їх утримуватиме пропуск кеша, але не залежні інструкції можуть продовжуйте виконувати.) Ваше пояснення зовсім не описує конвеєрну конструкцію. Також не зрозуміло, на вашу думку, різниця між 8bit 8086 add al, blі 80386 add eax, ebx.
Пітер Кордес

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.