Скільки годинних циклів потрібно виконати інструкцією RISC / CISC?


13

Згідно з цифровим дизайном та комп’ютерною архітектурою Харріса та Харріса, існує кілька способів реалізації процесора MIPS, включаючи наступне:

Мікроархітектури за один цикл виконує всю команду в одному циклі. (...)

У багаторежимний мікроархітектури виконує інструкції в серії коротких циклів. (...)

Конвеєрний мікроархітектури прикладає конвеєр до мікроархітектурі однотактной.

Архітектури часто класифікуються як RISC або CISC. Від RISC проти CISC :

Процесори RISC використовують лише прості інструкції, які можна виконати протягом одного тактового циклу.

Оскільки MIPS - це архітектура RISC, я переймаюся збентеженими вищевикладеними визначеннями і задаюся питанням, чи немає між ними якихось суперечностей. Більш конкретно:

  1. Якщо інструкцію RISC можна розділити на більш короткі цикли (Fetch, Decode, ...), як можна сказати, що для виконання всієї інструкції потрібен лише один тактовий цикл? Чи не потрібен один тактовий цикл для виконання кожного з кроків?
  2. Чи дійсно потрібен один тактовий цикл для виконання однієї інструкції RISC? Що станеться, наприклад, якщо трапилася помилка кешу і процесору доводиться чекати повільної DRAM? Чи не повинно це трохи продовжити виконання інструкції?
  3. Що саме є одним циклом інструкцій? Чи потрібен час, щоб закінчити одну інструкцію (тобто один / кілька тактових циклів)?
  4. Скільки часу займає одна інструкція CISC у циклах годин / інструкцій?

2
Зазвичай не менше одного :-).
Рассел Макмахон

Відповіді:


22

Практичні визначення RISC та CISC настільки розмиті та розмиті, що зараз майже безглузді. Тепер найкраще думати про них як про "філософію", в тому сенсі, що архітектура CISC має більш багатий набір інструкцій з більш потужними індивідуальними інструкціями (наприклад, DIV тощо), тоді як набір інструкцій RISC - це голі кістки і швидкий, і залишає його компілятору для здійснення складних операцій. Навіть начебто набори інструкцій CISC (як x86) переводяться у внутрішні інструкції як в мікросхеми Intel, так і в AMD і реалізуються більше як процесори RISC. Щоб відповісти на ваші запитання:

  1. Оригінальні академічні процесори RISC (і, мабуть, можливо, найперші комерційні версії) дійсно виконували одну інструкцію за цикл, включаючи отримання та декодування. Це стало можливим, оскільки шляхи передачі даних були надто чистими, оскільки операції кожного етапу були простими та чітко визначеними. (компроміс тут є лише дуже простими інструкціями, які можуть бути реалізовані таким чином). Як тільки він потрапив у реальний світ, речі розмилися. Такі речі, як конвеєрна та суперскалярна архітектура, унеможливлюють просту дихотомію RISC / CISC.

  2. Оригінальні чіпи RISC намагалися виконати одну інструкцію за цикл, і вони могли, якщо дані були доступні у файлі реєстру. Звичайно, якщо процесору довелося перейти на DRAM, це зайняло б (значно) більше часу. RISC - це "спроба" виконувати інструкцію за цикл.

  3. Один цикл інструкцій - це час, який проходить між результатами.

  4. В дуже залежить від інструкції та архітектури набору інструкцій. Навіть в архітектурі CISC деякі інструкції можуть виконуватись дуже швидко (наприклад, зсув вліво або вправо, наприклад). Деякі виконуються дуже повільно (10 с циклів і більше). Архітектура VAX (можливо, вершина філософії CISC) мала інструкції, які були дійсно складними. Між іншим, архітектуру CISC, як правило, простіше програмувати в монтажі, ніж архітектуру RISC, тому що це майже як мова високого рівня!


5

Коротка відповідь

  1. Етапи декодування та виконання інструкції виконуються паралельно наступному кроку попередньої інструкції. Цей прийом відомий як трубопровід. Дивіться про процесори RISC нижче.

  2. Архітектура RISC з одним випуском зазвичай складає в середньому трохи менше однієї інструкції за цикл через стан очікування та час, необхідний для операцій завантаження / зберігання, які потрапляють на пам'ять, а не просто реєструються для реєстрації. Слоти із затримкою дають вам архітектурний гачок, який може допомогти вам отримати частину цього часу назад. Дивіться про процесори RISC нижче.

  3. Цикл інструкцій - це тривалість часу, необхідне для виконання інструкції. Це залежить від архітектури та (в деяких випадках) інструкцій. Наприклад, більшість інструкцій на зразок MIPS R2000 / 3000 займає один цикл. Інструкції, що стосуються доступу до пам'яті (завантаження / зберігання, відділення), займають більше одного циклу, хоча слоти затримки означають, що ви можете виконати щось інше (можливо, лише NOP) у слоті затримки. Непіпелінові архітектури можуть мати навчальні цикли декількох тактових циклів, що часто змінюються залежно від режиму адресації. Дивіться про процесори RISC, традиційні архітектури CISC та архітектуру з жорсткої провідності нижче.

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

  4. Процесори 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 може сильно залежати від ефективності моделей доступу до пам'яті. Цілі книги написані з оптимізацією коду для цього, і це сама по собі складна тема.


3

Це спрощення для студентів.

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

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

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

(Конкретна відповідь на "Скільки часу займає одна інструкція CISC в циклах годин / інструкцій?" - "подивіться в посібнику виробника, і він матиме терміни на інструкцію")


0

Інші хлопці написали багато хорошого матеріалу, тому я буду тримати свою відповідь короткою: У старі часи (тут 1980-х рр.) 8-бітові процесори дня (6800, 6502, Z80, 6809 та інші) вважалися CISC. Деякі вказівки можуть виконуватись у двох тактових циклах, але це були прості вставки, такі як встановлення / очищення бітів прапора в регістрі статусу процесора. Інші інструкції можуть зайняти від 2 до 6 і навіть до 9 годинних циклів. Ці процесори мали кілька досить потужних інструкцій, Z80 мав декілька інструкцій очищення блоку пам'яті, які могли б записувати те саме значення в ряд байтів у пам'яті, ефективно очищаючи великий блок в одній інструкції, просто встановити кілька регістрів і виконати Інструкція LDIR (завантаження, збільшення та повторення).

Процесор 6502 (з пам'яті) мав 56 інструкцій, але 13 режимів адресації, створюючи потужний набір інструкцій.

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

Якщо я правильно пригадую, першою спробою архітектури RISC був або комп’ютер, або процесор Acorn Risc?


Можливо, першою конвеєрною архітектурою типу RISC став CDC 6600, розроблений Сеймуром Крей. Це було за кілька десятиліть до того, як термін RISC отримав широке вживання. MIPS, ARM та кілька інших мікропроцесорних конструкцій RISC відносяться до періоду 1980-1985 рр., Коли перше комерційне обладнання з використанням цих мікросхем вийшло приблизно в середині 1980-х.
ЗанепокоєнийOfTunbridgeWells

Окремі мікросхеми з комп’ютера були досить швидкими, але вони не були таким же архітектурою, як звичайно асоціюється з чіпом RISC. en.wikipedia.org/wiki/Transputer#Architecture
ConcernedOfTunbridgeWells

У мене є кілька комп’ютерів у антистатичному корпусі, просто частина історичної колекції мікропроцесорів. Ніколи не використовував їх, було б дуже весело в ті часи експериментувати з ними.
Декан

@ConcernedOfTunbridgeWells Я щойно подивився набір інструкцій CDC 6600. Хоча конструкція, як видається, втілює (і передбачає) деякі принципи RISC, інструкція розділення плаваючої точки займає 29 циклів! І саме включення інструкції про розділення суперечить типовим принципам RISC, але дякую за дуже цікавий коментар!
crgrace

Основними атрибутами RISC-ish були конвеєрний механізм вибору / декодування / виконання інструкцій та архітектура завантаження (тобто відсутні режими адресації з неявним доступом до пам'яті для обчислення адреси). Насправді, деякі набори інструкцій RISC (наприклад, IBM POWER) насправді досить великі, але все ж використовують підхід завантаження / зберігання, щоб забезпечити послідовний час виконання.
ЗанепокоєнийOfTunbridgeWells
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.