Чому ви не можете мати як високі інструкції за цикл, так і високу тактову частоту?


37

Міф Megahertz став рекламною тактикою через відмінності між процесором INTEL 8086 ПК та процесором Rockwell 6502 від Apple. 8086 працює на частоті 4,77 МГц, тоді як 6502 працює на 1 МГц. Однак інструкція щодо 6502 вимагала меншої кількості циклів; насправді на стільки менше, що він біг швидше, ніж 8086. Чому для деяких інструкцій потрібно менше циклів? І чому інструкції 6502, що потребують меншої кількості циклів, не можна поєднувати з швидким циклічним процесором 8086?

У статті Вікіпедії щодо інструкцій за циклом (IPC) йдеться

Фактори, що керують IPC
Даний рівень інструкцій в секунду може бути досягнутий з високим IPC та низькою тактовою частотою ... або з низьким IPC та високою тактовою частотою.

Чому ви не можете мати як високі інструкції за цикл, так і високу тактову частоту?

Можливо, це стосується того, що таке цикл годин? У Вікіпедії згадується синхронізація мікросхем? Не впевнений, що це означає.

А може це пов’язано з тим, як працює трубопровід? Я не впевнений, чому вказівки в короткому трубопроводі відрізняються від інструкцій у довгому трубопроводі.

Будь-яке розуміння було б чудово! Просто намагаюся зрозуміти архітектуру, що стоїть за міфом. Спасибі!

Список літератури:

Інструкція за цикл проти збільшення кількості циклів

http://en.wikipedia.org/wiki/Instructions_per_cycle

http://en.wikipedia.org/wiki/Clock_cycle


1
> Чому для деяких інструкцій потрібно менше циклів? RISC / CISC (ну, начебто ). І чому інструкції 6502, що потребують меншої кількості циклів, не можна поєднувати з швидким циклічним процесором 8086? Вони можуть і мати. Проблема полягає в тому, що як тільки ви вже встановили базу, важко все вирвати і почати наступну модель з нуля.
Synetech

@Synetech, інтелектуальні сорти зробили це, представивши інструкцію CISC для програмістів, а потім перетворили його в інструкції RISCier на чіпі
soandos

Добре, коли я сказав, що вони поєднані, я маю на увазі зовсім різні виробники чіпів. У мене немає списку під рукою, але були й інші (не Intel / AMD), які робили подібні дії. (Більшість людей забуває, що виробників мікросхем є багато, тому що Intel та AMD зараз домінують на ринку настільних ПК.)
Synetech

Відповіді:


21

тл; д-р

Коротші трубопроводи означають більш високу тактову швидкість, але можуть зменшити пропускну здатність. Також дивіться відповіді №2 та 3 внизу (вони короткі, обіцяю).

Більш дрібна версія:

Тут слід врахувати кілька речей:

  1. Не всі інструкції займають однаковий час
  2. Не всі інструкції залежать від того, що було зроблено негайно (або навіть десять-двадцять) інструкцій назад

Дуже спрощений конвеєр (що відбувається в сучасних мікросхемах Intel є поза складним) має кілька етапів:

Вилучити -> Розшифрувати -> Доступ до пам'яті -> Виконати -> Зворотний запис -> Оновлення лічильника програми

У кожного -> є витрати на час, які виникають. Крім того, у кожному галочці (тактовий цикл) все переміщується від однієї стадії до другої, тому ваш найповільніший етап стає швидкістю для ВСІХ етапів (це дійсно платить за те, щоб вони були максимально схожими за довжиною).

Скажімо, у вас є 5 інструкцій, і ви хочете їх виконати (рис, взятий з wikipedia, тут оновлення ПК не робиться). Це виглядатиме так:

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

Незважаючи на те, що кожна інструкція займає 5 тактових циклів, завершена інструкція виходить з конвеєра кожен цикл. Якщо час, необхідний для кожного етапу, становить 40 нс і 15 нс для проміжних бітів (використовуючи шестиступеневий конвеєр вище), для отримання першої інструкції знадобиться 40 * 6 + 5 * 15 = 315 нс.

На противагу цьому, якби я повністю усунув трубопровід (але все інше було б таким же), знадобиться всього 240 нс, щоб отримати першу інструкцію. (Ця різниця в швидкості для отримання «першої» інструкції називається затримкою. Зазвичай вона менш важлива, ніж пропускна здатність, яка є кількістю інструкцій в секунду).

Справжнє відмінне те, що в прикладі конвеєра я отримую нову інструкцію (після першої) кожні 60 нс. У не-конвеєрному це потрібно щоразу 240. Це показує, що трубопроводи добре покращують пропускну здатність.

Зробивши це крок далі, здавалося б, що на етапі доступу до пам'яті мені знадобиться блок доповнення (щоб зробити обчислення адреси). Це означає, що якщо є інструкція, яка не використовує етап пам'яті цього циклу, я можу зробити ще одне доповнення. Таким чином, я можу зробити два етапи виконання (при цьому один знаходиться на етапі доступу до пам’яті) на одному процесорі за один галочку (планування - це кошмар, але не будемо йти туди. Крім того, на етапі оновлення ПК також знадобиться блок доповнення в у випадку стрибка, тож я можу зробити три доповнення стану виконання в один галочку). Маючи трубопровід, він може бути сконструйований таким чином, що дві (або більше) інструкцій можуть використовувати різні етапи (або етапи стрибків, тощо), економлячи цінний час.

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

Відповідь №2:

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

Відповідь №3:

Тому що ви можете "обдурити" штучно подовжити кількість циклів, щоб ви могли робити дві інструкції на кожен цикл (просто вдвічі зменшіть тактову частоту). Можна також робити щось кожні два тики на відміну від одного (даючи 2х тактову частоту, але не змінюючи інструкції секунди).


3
Короткі трубопроводи означають повільніші швидкості руху! Pentium 4 мав високі такти через довгі трубопроводи, ось WP: "NetBurst відрізнявся від P6 (Pentium III, II та ін.) Тим, що демонстрував дуже глибокий інструментальний конвеєр для досягнення дуже високої тактової швидкості". Справа в тому, що ви робите мало на кожному етапі для досягнення високих швидкостей. Це не виявилося працездатним, і Intel через це втратила величезну силу. Вони повернулися до архітектури Pentium 3 і придумали "Core".
stolsvik

@stolsvik, ти можеш це пояснити? Для мене це не має сенсу (маючи менше проміжних ступенів означає, що всі інші рівні, цикли годин будуть коротшими, що дасть більшу тактову частоту)
soandos

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

Щодо вашої відповіді №2, центральний процесор отримує доступ до даних лише через кеш (доступ до пам'яті зазвичай прозорий з точки зору інструкції). Уповільнення тактової частоти не впливатиме на те, як довго триватимуть дані з оперативної пам’яті (якщо її немає в кеші). Також ширина шини впливає лише на швидкість операцій SIMD залежно від розміру ваших операндів (тобто я можу одночасно завантажувати 8 8-бітових операндів на 64-бітну шину, але мені все одно доведеться завантажувати 8 64-бітних значень якщо у мене 64-бітні операнди).
Прорив

2
Також для відповіді №1, коли ви говорите "якщо є інструкція, яка не використовує етап пам'яті в цьому циклі, я можу зробити ще одне доповнення", це помилково. Виконання поза замовлення застосовується на рівні інструкцій, а не на рівні мікрооперації. Якщо інструкція вимагала двох виконань у трубопроводі, це призведе до виникнення бульбашки в трубопроводі . Нарешті, архітектура x86 має окремий ALU для обчислення адрес пам’яті під час під час читання / запису пам'яті (дозволяє [EBX+ECX*4+100]стильову адресацію).
Прорив

8

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

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

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

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


Це насправді не дає відповіді на його запитання (яке не має нічого спільного з тим, чому не можна просто прискорити справи). Він запитує, як більше циклів! = Більше працює весь час
soandos

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

5

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

Наприклад, ви можете просто сказати "додати два числа". Тепер у вас є лише один крок. Але цей крок має декілька частин, і це займе більше часу. Отже, ви маєте високі вказівки за цикл - один у цьому випадку. Але ваша тактова частота не може бути високою, тому що вам належить багато зробити в цьому циклі.

Ви також можете сказати: "Додайте перше число до реєстру. Потім отримайте друге число. Потім додайте найменш значущі біти. Потім додайте другий найменш значущий біт із перенесенням раніше. Потім додайте третє найменше ... Потім додайте найбільш значущі біти. Якщо виникла, встановіть прапор переповнення. Потім запишіть результат у пам'ять. " Тепер у вас величезна кількість кроків. Але кожен крок може бути абсурдно швидким. Отже, у вас є низькі вказівки за цикл (1/36 або близько цього випадку). Але ваша тактова частота може бути дуже високою, оскільки кожен цикл має лише дуже маленький заряд.

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

Фактичні конкретні компроміси та номери циклу сильно відрізняються, оскільки сучасні процесори є конвеєрними та перекриваються інструкціями. Але основна ідея правильна.


2

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

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


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

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

Що стосується того, чому для деяких інструкцій потрібні більш-менш цикли, це залежить від того, яку інструкцію ви виконуєте. Наприклад, у наборі інструкцій x86 є MOVSінструкція, яка може переміщувати цілу нитку в пам'яті з одного місця в інше. Зрозуміло, що ви не можете миттєво скопіювати довгий рядок, але ви можете скопіювати це слово за словом, зробивши кілька циклів годин. Таким чином, MOVSінструкція займає змінну кількість часу (залежно від кількості символів, які потрібно скопіювати).

Ефект багатоциклічних операцій менш помітний на конструкції RISC (тобто ARM) на відміну від конструкції CISC (тобто x86). Це пояснюється тим, що на основі RISC конструкції матимуть лише найчастіше використовувані елементарні операції, і їх набагато простіше прокласти так, щоб досягти пропускної здатності однієї інструкції за цикл.


1

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

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

Скажімо, що для даного процесора є суміш інструкцій, для закінчення яких потрібно від 1 до 100 наносекунд (нс). Ви можете встановити тактову частоту таким чином, щоб 1 "галочка" становила 100 нс (10 МГц), тобто кожна інструкція закінчилася б точно в 1 галочці. Однак, якщо час виконання інструкцій розподілено рівномірно, це означає, що ваші обчислювальні одиниці будуть простоювати 50% часу (середня швидкість виконання дорівнює 50н, залишаючи інші 50снів галочки непрацюючими). Якщо, з іншого боку, ви встановите галочку в 10ns, вказівки становитимуть від 1 до 10 кліщів, але одиниця ніколи не буде простоювати більше 9н до початку наступної інструкції, а середній холостий буде 5ns.

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

(І перш ніж плакати про розгін процесорів: це дає дві переваги, які призводять до збільшення швидкості в реальному світі: швидке виконання інструкцій (що займає менше 1 циклу) закінчується більш швидким часом виконання, а всі інструкції мають менший час простою. Обидва з них насправді може збільшити обсяг роботи, яку може виконати ваш комп’ютер, але ви виявите, що розгін CPU на X% не завжди дорівнює збільшенню X% на роботу, виконану при порівнянні з ним.)

TL; DR

Процесор може виконати X роботу за секунду. Якщо ви використовуєте тактову частоту H та I IPC, у нас є I = X / H. Зміна H не змінює X, але воно обернено впливає на I.


1
Тактова швидкість далеко не довільне рішення. Його потрібно ретельно вибирати як функцію напруги живлення процесора, а також довжини слідів ІС (щоб уникнути зайвих затримок розповсюдження).
Прорив

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

ЦП - це синхронне об'єднання декількох асинхронних блоків. Годинники на годиннику використовуються для того, щоб чітко вирівняти речі, але вони не визначають, скільки часу потребує виконання ... Наприклад, додавання цілого числа займе певний час залежно від того, наскільки далеко струм повинен пройти через центральний процесор і як швидко транзистори буде перемикати стани. Результат ЧИТАЙТЕ при наступному позначці годинника, але власне обчислення проводиться асинхронно протягом усієї галочки.
Бенджамін Чемберс

0

Не можна мати як високі інструкції на цикл, так і високу тактову частоту, оскільки вимоги суперечливі.

Можна показати, що в першому наближенні IPC залежить від складності (A) конструкції як

IPC = sqrt (A)

тоді як максимальна частота (F), досяжна проектними шкалами, як [1]

F = 1 / {b + c sqrt (A)}

з параметрами a, b і c.

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

  • Мозковий дизайн: Високий IPC та низька частота
  • Швидкість демонстрації: Висока частота і низький IPC.

[1] Деякі автори стверджують, що вираз для частоти є "1 / {b + c A}", але в обох випадках підвищення складності зменшує максимально досяжну частоту.

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