Що таке "Інструкції за цикл"?


23

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

Наприклад, у мене було враження, що чотири основних процесори можуть виконувати чотири інструкції за цикл, тому чотири основних процесора, що працюють на 2 ГГц, можуть виконувати 8 мільярдів операцій в секунду. Це так?

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


Ні, це не так. Сучасні процесори x86 можуть підтримувати три інструкції на ядро ​​на цикл в ідеальних умовах, тоді як для деяких інструкцій потрібні десятки циклів.
Девід Шварц

Відповіді:


22

Ключові слова, напевно, слід шукати - це CISC , RISC та суперскалярна архітектура .

CISC

В архітектурі CISC (x86, 68000, VAX) одна інструкція є потужною, але для обробки потрібно кілька циклів . У старих архітектурах кількість циклів фіксувались, нині кількість циклів за інструкцію зазвичай залежить від різних факторів (хіт / пропуск кешу, прогнозування гілок тощо). Існують таблиці для пошуку цих речей. Часто є також полегшення фактичного вимірювання, скільки циклів займає певна інструкція за певних обставин (див. Лічильники ефективності ).

Якщо вас цікавлять деталі для Intel, посібник з оптимізації Intel 64 та IA-32 дуже добре прочитаний.

РИСК

Архітектура RISC (ARM, PowerPC, SPARC) означає, що одна дуже проста інструкція займає лише декілька (часто лише один) цикл.

Надскалярний

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

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


9
Для мене аналогія "конвеєрної лінії" пропонує просто провести конвеєр, а не суперскалярну архітектуру. Суперскаляр передбачає тиражування частин апаратного забезпечення процесора (наприклад, етап трубопроводу, який є вузьким місцем) для поліпшення пропускної здатності.
sblair

2
Я додаю для стислості: RISC = скорочений набір інструкцій; CISC = складний набір інструкцій. Гарне пояснення, Людвіг за вказівку співвідношення хіт / пропуск кеша і (в кінцевому рахунку) вказівку на TLB. Пояснити мікропроцесорну архітектуру непросто, тим більше, що це все це можна вбити в один (досить компактний) пост! :)
osij2is

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

32

Те, як мені подобається думати про це, - з аналогією білизни. Інструкції з процесора - це як білизна білизни. Для кожного завантаження потрібно використовувати як пральну машину, так і сушарку. Скажімо, що кожен біг займає 30 хвилин. Це тактовий цикл. Старі процесори запускали пральну машину, потім запускали сушарку, займаючи 60 хвилин (2 цикли), щоб закінчувати кожне завантаження білизни кожен раз.

Трубопровід: Трубопровід - це коли ви використовуєте обидва одночасно - ви миєте вантаж, тоді, поки він висихає, ви миєте наступне навантаження. Перше завантаження займає 2 цикли, щоб закінчити, але друге навантаження закінчується після ще 1 циклу. Отже, для більшості навантажень потрібен лише 1 цикл, крім першого навантаження.

Суперскаляр: Віднесіть всю білизну до пральні. Візьміть 2 шайби та завантажте їх обидві. Після закінчення роботи знайдіть 2 сушарки і використовуйте їх обидва. Тепер ви можете випрати та висушити 2 вантажі за 60 хвилин. Це 2 вантажі за 2 цикли. Кожне навантаження все ще займає 2 цикли, але ви можете зробити їх більше зараз. Середній час зараз становить 1 навантаження за цикл.

Суперскаляр з конвеєром: промийте перші 2 вантажі, потім, поки вони сушаться, завантажте шайби наступними 2 вантажами. Тепер перші 2 навантаження все ще займають 2 цикли, а потім наступні 2 закінчуються після ще 1 циклу. Отже, більшу частину часу ви закінчуєте по 2 навантаження в кожному циклі.

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

Це чудово, ми можемо зробити пральню у вісім разів більше, ніж раніше, за той же час, не створюючи швидших машин. (Подвійна тактова частота: пральні машини, для роботи яких потрібно лише 15 хвилин.)

Тепер поговоримо про те, як справи йдуть не так:

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

Кеш Міс: Вантажівка, яка доставляє брудну білизну, застрягла в трафіку. Зараз у вас є 2 шайби та 2 сушарки, але ви не працюєте, тому що вам доведеться чекати.

Залежно від того, як часто справи йдуть не так, ми не зможемо завжди робити 4 навантаження на кожен цикл, тому фактична кількість виконаної роботи може змінюватися.

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


Приємна аналогія. Я збираюся його вкрасти.
dmckee

6
А гіпертонування - це те, щоб кілька людей милися в одній пральні.
Рональд Поттоль

1
Прогнозування філії: ви почнете прати одяг, який, як вам здається, знадобиться на наступному тижні
Акаш,

2
Hyperthreading: ви починаєте приймати білизну інших людей і рекламуєте кількість пральних машин, які у вас є (1). Незабаром ви зрозумієте, що у вашій пральній машині є місце для більшої пари штанів, яку ви праєте, просто не іншої пари штанів, а чогось меншого. Отже, ви також набиваєте шкарпетки. Тепер ви рекламуєте дві пральні машини та сподіваєтесь, що люди вийдуть білизну досить різноманітно, щоб ви завжди «заповнювали дірки» меншими предметами. Просто коли цей хлопець, який коли-небудь приходить з 10 брудними джинсами та 1 парою шкарпеток, скидає свої речі, це відбувається так само повільно, як ніколи.
Флоренц Клі

@Akash Ви праєте одяг, на якій ще немає плям, про всяк випадок?
Кевін Панько

3

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

Вибачте, це занадто складно для прямої відповіді. Джон Стоукс добре справляється з поясненням цієї статті .


2

Часи, коли можна було шукати (або навіть запам'ятовувати) час циклу для кожної інструкції і знати, скільки годин знадобиться, щоб закінчити певний код, вже давно минули для чіпів високого класу (але все ще з нами в деяких мікроконтролери). Сучасне ядро ​​CPU загального призначення може мати декілька копій декількох різних одиниць виконання у декількох конвеєрах, доступ до багатошагового кешу пам'яті з власною логікою, плюс передбачення гілок та можливість спекулятивного виконання. Маючи кілька ядер на одній матриці, тягнеться за логікою послідовності кешу та іншими складностями.

Отже, коротка відповідь: більше ядер означає більшу здатність до виконання справ, але не в приємний передбачуваний спосіб .


1

Людвіг пояснив різницю між CISC та RISC, але забув згадати, що в той час як інструкції RISC прості та швидкі, вони виконують мало індивідуально, і тому вам потрібно об'єднати декілька разом, щоб зробити те саме, що і одна інструкція в процесорі CISC. Як результат, одні інструкції щодо RISC стануть швидшими, інші - не.


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