Коротка відповідь
Етапи декодування та виконання інструкції виконуються паралельно наступному кроку попередньої інструкції. Цей прийом відомий як трубопровід. Дивіться про процесори RISC нижче.
Архітектура RISC з одним випуском зазвичай складає в середньому трохи менше однієї інструкції за цикл через стан очікування та час, необхідний для операцій завантаження / зберігання, які потрапляють на пам'ять, а не просто реєструються для реєстрації. Слоти із затримкою дають вам архітектурний гачок, який може допомогти вам отримати частину цього часу назад. Дивіться про процесори RISC нижче.
Цикл інструкцій - це тривалість часу, необхідне для виконання інструкції. Це залежить від архітектури та (в деяких випадках) інструкцій. Наприклад, більшість інструкцій на зразок MIPS R2000 / 3000 займає один цикл. Інструкції, що стосуються доступу до пам'яті (завантаження / зберігання, відділення), займають більше одного циклу, хоча слоти затримки означають, що ви можете виконати щось інше (можливо, лише NOP) у слоті затримки. Непіпелінові архітектури можуть мати навчальні цикли декількох тактових циклів, що часто змінюються залежно від режиму адресації. Дивіться про процесори RISC, традиційні архітектури CISC та архітектуру з жорсткої провідності нижче.
Конструкції з декількома випусками можуть дещо розмити цю концепцію, виконавши кілька інструкцій паралельно.
Процесори CISC можуть мати інструкції, що займають різну тривалість часу. Точна кількість годинних циклів залежить від архітектури та інструкцій. Різна кількість циклів тактових годин, що приймаються на ISA CISC, є однією з причин, по яких їх важко вбудувати в сильно конвеєрні архітектури. Дивіться традиційні архітектури CISC нижче.
Більш довга відповідь
Для одного випуску MIPS, SPARC або іншого процесора всі інструкції (для першого наближення) видаються за один цикл, хоча вони можуть мати щось відоме як "слот для затримки".
На процесорах RISC
У цьому контексті CPU з одною проблемою - це той, де процесор не здійснює аналіз залежностей під час руху та паралельну видачу інструкцій так, як це роблять сучасні процесори, тобто вони мають лише один блок виконання, який виконує інструкції в порядок їх зчитування із записки. Детальніше про це пізніше.
Більшість старих процесорів RISC - це конструкції з одною випуском, і ці типи досі широко використовуються у вбудованих системах. 32-розрядне цілочисельне ядро RISC може бути реалізовано приблизно в 25 000-30 000 воріт, тому ядра ЦП цього типу мають дуже низьке енергоспоживання та дуже малі площі. Це дозволяє їм легко та дешево інтегруватися у продукти SOC (система на мікросхемі).
Конструкції процесорів RISC конвеєрними - обробка інструкції проводиться в кілька етапів, при цьому кожна інструкція передається вниз по наступному етапу кожен тактовий цикл. У більшості випадків конвеєрний конвеєр з одним випуском виконує щось, близьке до однієї інструкції за тактовий цикл.
Деякі архітектури мають такі вказівки, як розгалуження або завантаження / зберігання з пам'яті, де додатковий цикл, який приймає доступ до пам'яті, видно коду.
Наприклад, у проекті SPARC V7 / V8 наступна інструкція після того, як гілка фактично виконується до того, як відбудеться сама гілка. Зазвичай ви вставляєте NOP в гніздо після відділення, але ви можете вписати в нього ще одну інструкцію, якщо зможете знайти щось корисне.
Архітектура MIPS R2000 / R3000 мала аналогічний проріз для затримки в інструкціях щодо завантаження / зберігання. Якщо ви завантажили значення з пам'яті, воно фактично не відображатиметься в реєстрі для іншого циклу. Ви можете покласти NOP у гніздо або зробити щось інше, якщо ви зможете знайти щось корисне для цього, що не залежало від операції з завантаженням, яку ви тільки що видали.
Якщо пам'ять була повільнішою, ніж процесор, що часто бувало, ви можете отримати додаткові стани очікування на доступ до пам'яті. Зачекайте, що стан заморозить ЦП протягом одного або декількох тактових циклів, поки доступ до пам'яті не буде завершений. На практиці ці стани очікування та додатковий час для доступу до пам'яті означають, що розроблені процесори з однорядним процесором в середньому трохи менше однієї інструкції за тактовий цикл. Слоти затримки дають вам деякі можливі можливості оптимізації коду, виконавши якусь іншу інструкцію під час операції з пам'яттю.
Традиційні процесори CISC
Процесори CISC були конструкціями, які могли мати інструкції з різною тривалістю часу. Часто вони мали більш складні інструкції, реалізовані безпосередньо в апаратному забезпеченні, які повинні були бути виконані в програмному забезпеченні на процесорі RISC.
Більшість архітектурних комплексів мейнфреймів та майже всі конструкції ПК до M68K та Intel 386 були традиційними мікрокодованими процесорами CISC. Ці конструкції виявилися повільнішими за добу та використовували більше воріт, ніж процесори RISC.
Мікрокод
Приклад мікрокодованої архітектури (MOS 6502) можна побачити в емуляції тут . Мікрокод можна побачити у верхній частині зображення.
Мікрокод керує потоками даних та діями, активованими всередині процесора для виконання інструкцій. Прокручуючи кроки в мікрокоді, ви можете активувати частини ЦП, переміщуючи дані через ALU або виконуючи інші кроки. Повторно використовувані компоненти в процесорі можуть бути узгоджені протягом декількох тактових циклів для виконання інструкції. У випадку 6502 деякі мікро-коди також можуть бути виконані мікрокодом.
Мікрокодовані конструкції використовували менше кремнію, ніж мікросхеми, за рахунок потенційного використання декількох тактових годин, щоб виконати інструкцію. Залежно від дизайну, ці процесори потребуватимуть різної тривалості часу за інструкцію.
Жорсткі архітектури
Жорсткі провідні конструкції (не обов'язково взаємовиключні з мікрокодом) виконують інструкцію синхронно, або можуть мати власних координаторів, щоб зробити щось за кілька циклів годин. Вони, як правило, швидші за рахунок більш виділеного обладнання та, таким чином, дорожче втілення, ніж мікрокодований дизайн еквівалентної функціональності.
Відомий приклад цього - оригінальний процесор Amdahl 470/6 , який був заміною процесора на деяких моделях IBM System / 370. Процесор Amdahl був жорсткою провідною конструкцією в той час, коли 370 процесорів IBM сильно базувалися на мікрокодеках. Процесор Amdahl був приблизно в 3 рази швидшим, ніж IBM CPU, які вони замінили.
Потрібно сказати, що IBM не розвеселився, і це призвело до судового бою, який змусив IBM відкрити свою архітектуру мейнфрейму до тих пір, поки указ про згоду не минув кілька років тому.
Як правило, конструкція такого типу з провідним кабелем все ще не була такою швидкою, як годинник за годинником, як процесор RISC, оскільки різні терміни та формати інструкцій не давали стільки можливостей для конвеєрної роботи, як це робить проект RISC.
Конструкції з декількома випусками
Більшість сучасних процесорів - це архітектура з декількома проблемами, яка може обробляти декілька інструкцій одночасно в одному потоці. Чип може робити аналіз динамічної залежності для вхідного потоку інструкцій і паралельно видавати інструкції там, де немає залежності від результату попереднього обчислення.
Пропускна здатність цих мікросхем залежить від того, наскільки паралелізм може бути досягнутий у коді, але більшість сучасних процесорів в середньому матиме кілька інструкцій за цикл для більшості коду.
Сучасні процесорні процесори Intel та інші x86 / X64 ISA мають шар, що інтерпретує набір інструкцій CISC для старої школи в мікроінструкції, які можна подавати через конвеєрне ядро з декількома проблемами у стилі RISC. Це додає певних накладних витрат, яких немає на процесорах з ISA, розробленими для конвеєрного транспорту (тобто архітектури RISC, такі як ARM або PowerPC).
VLIW конструкції
Проекти VLIW, з яких Intel Itanium , мабуть, найвідоміші, ніколи не знімалися як основні архітектури, але в IIRC є ряд архітектур DSP, які використовують такий тип дизайну. Конструкція VLIW робить декілька питань явними із вказівним словом, що містить більше однієї інструкції, яка видається паралельно.
Вони залежали від хороших оптимізуючих компіляторів, які визначали залежності та можливості паралелізму, переносячи інструкції у кілька слотів, доступних кожному слову інструкції.
Архітектури VLIW працюють досить добре для числових застосувань, оскільки операційні системи матриці / масиву, як правило, пропонують можливості для широкого паралелізму. Itanium деякий час мав нішу на ринку суперкомп'ютерних додатків, і існувала принаймні одна архітектура суперкомп'ютера - Multiflow TRACE - з використанням ISA такого типу.
Пам'ять і кешування
Сучасні процесори набагато, набагато швидше, ніж пам'ять, тому прямі зчитування з пам'яті можуть генерувати сотні станів очікування, які блокують ЦП до тих пір, поки доступ до пам'яті не завершиться. Кешування, яке зараз виконується в декілька шарів, містить в кеш-пам'яті останні використовувані місця пам'яті. Оскільки центральні процесори зазвичай витрачають переважну більшість часу на виконання коду в циклі, це означає, що ви отримуєте хороші частоти повторного використання пам'яті, які ви нещодавно використовували. Ця властивість називається "місцеположення".
Там, де ви отримуєте місце відліку, процесор може працювати на близькій до оптимальної швидкості. Кеш пропускає до наступного рівня, створюючи ряд станів очікування; кеш пропусків до основної пам'яті може спричинити сотні.
Таким чином, реальна пропускна здатність мікросхем CPU може сильно залежати від ефективності моделей доступу до пам'яті. Цілі книги написані з оптимізацією коду для цього, і це сама по собі складна тема.