Суперскалярні процесори.
Процесор Pentium II
Після завершення розшифровки команди розподіляються між трьома чергами. Буфер кожної черги дозволяє зберігати до 16 команд. При цьому фізичний регістр, використовуваний в розподіленій команді для зберігання результату, помічається як зайнятий. Черги, що використовуються для арифметичних команд, представляють собою схеми резервування, а не прості списки з дисципліною обслуговування FIFO — команди… Читати ще >
Суперскалярні процесори. Процесор Pentium II (реферат, курсова, диплом, контрольна)
Суперскалярні процесори. Процесор Pentium II
- 1. Процесор Pentium II
- Вузли добування і розшифровки команд
- Вузли диспечирування/виконання
- Вузол фіксації результатів
- Прогнозування розгалужень
- 2. Процесор PowerPC
- PowerPC 601
- Вузол диспетчера
- Конвейер обробки команд
- Обробка команд розгалуження
- PowerPC 620
- 3. Процесор UltraSPARC-II
- Структурна організація
- Конвеєр
- 4. Процесор MERCED
- Організація
- Формат команд
- Випереджуюче виконання розгалужених потоків команд
- Попереднє завантаження даних
1. Процесор Pentium II
Хоча концепція суперскалярної організації, як правило, асоціюється з RISC-архітектурою, той же принцип може бути застосований і до CISC-процесорів. Одним із самих яскравих прикладів процесорів подібного типу є процесор Pentium II.
Процесор 80 486 представляв собою традиційний CISC-процесор без будь-яких елементів суперскалярності.
У першій версії процесора Pentium появилися певні риси суперскалярної організації. В процесорі використовувались два вузли виконання арифметичних операцій з цілими числами.
В моделі Pentium Pro вже можна бачити всі ознаки повноцінного суперскалярного процесора.
Pentium II, має, по суті, ту же суперскалярну організацію, що і Pentium Pro, але доповнений вузлами виконання команд групи MMX. Найбільш суттєвими елементами реалізації концепції суперскалярної організації в цьому процесорі є вузли добування і розшифровки команд і вузол фіксації результатів.
В загальних рисах процес виконання програми в Pentium II протікає наступним чином:
1. Процесор добуває команди в тій же послідовності, у якій вони розташовані у вихідній програмі.
2. Кожна команда перетворюється в послідовність мікрокоманд фіксованої довжини, аналогічних командам RISC-процесора.
3. Мікрокоманди виконуються за допомогою конвеєрів операцій, реалізуючих принцип суперскалярної організації, тобто мікрооперації можуть виконуватись в порядку, відмінного від початкового.
4. Процесор фіксує результати виконання окремих мікрооперацій в регістрах в тому порядку, який відповідає вихідному потоку команд.
IFU1 | IFU2 | IFU3 | ID1 | ID2 | RAT | ROB | DIS | EX | RET1 | RET2 | |
Рис. 1. Конвеєр в процесорі Pentium II
IFU - вузол добування команди;
ID - вузол розшифровки команди;
RAT - вузол виділення регістрів;
ROB - буфер перевпорядкування команд;
DIS - диспетчер;
EX - вузол виконання команд;
RET - вузол фіксації результатів
Фактично процесор Pentium II складається з CISC-оболонки навколо RISC-ядра. В RISC-ядрі мікрооперації виконуються конвеєром, який включає до 11 робочих позицій. В деяких випадках для обробки мікрооперації потрібно навіть більше етапів, і відповідно конвеєр видовжується. Цим процесор Pentium II відрізняється від попередніх моделей Intel 80×86 і процесора Pentium, у яких конвеєр включав 5 робочих позицій.
Вузли добування і розшифровки команд
Операція добування реалізована на трьох робочих позиціях конвеєра, кожна із яких представляє собою окрему електронну схему. На позиції IFU1 добувається один рядок із кеша команд (32 байти) в якому міститься команда. Адреса рядка поступає із схеми формування адреси наступної команди, а добутий із кеша рядок запам’ятовується в буфері схеми IFU1. Визначення адреси не зводиться до простого інкремента в лічильнику команд. Іноді потрібно визначати адресу переходу або адресу команди обробки переривання.
Далі вміст буфера IFU1 передається в схему IFU2 порціями по 16 байт. Тут паралельно виконується обробка двох команд. Схема проглядає байти добутого рядка кеша і шукає межу між командами, оскільки довжина команди Pentium змінна. Якщо хоча б одна із команд буде командою умовного переходу, схема пересилає відповідну адресу в схему динамічного передбачення переходу. Тут блок довжиною 16 байт передається із схеми IFU2 в схему IFU3. Ця схема підбирає для поступаючих машинних команд підходящі схеми розшифровки.
Перша фаза розшифровки — ID1. Ця схема може паралельно обробляти три машинні команди Pentium II. Кожна машинна команда перетворюється в послідовність мікрокоманд. Послідовність може включати до 4 команд. Мікрокоманда має довжину 118 біт і по формату подібна до команд RISC-процесорів. Найбільш суттєва відмінність в тому, що в RISC-процесорах довжина команди, як правил, не перевищує 32 біт, а мікрокоманда Pentium II значно довша — 118 біт. Тим не менше працювати з мікрокомандами значно простіше, ніж з командами в початковому форматі Pentium.
До складу схеми ID1 входять три дешифратори. Перший з них обробляє ті машинні команди які перетворюються в послідовність мікрокоманд, а другий і третій — більш прості команди, які перетворюються в єдину мікрооперацію. До таких простих команд належать команди типу «регістр-регістр» і команди завантаження регістрів з пам’яті.
Для того щоб команди із буфера IFU2 були передані на відповідні дешифратори ID1, схема IFU3 представляє команди таким чином, щоб першою була складна команда, а друга і третя — простими. Якщо всі три команди в буфері прості, ніяких перестановок схема IFU3 не проводить. Якщо у буфері IFU2 є більше однієї складної команди, вони розподіляються між дешифраторами таким чином, щоб на другий і третій потрапили тільки прості команди.
В наборі команд Pentium II є кілька команд, які реалізуються більше ніж чотирма мікрокомандами. Такі команди направляються в спеціальну схему формування послідовностей мікрокоманд (microcode instruction sequencer — MIS), в складі якої є постійний запам’ятовуючий пристрій, яке зберігає послідовності з 5 і більше мікрокоманд. Наприклад, для реалізації команд обробки символьних рядків можуть використовуватись послідовності, які включають сотні мікрокоманд. Таким чином схема MIS представляє собою, по суті, вузол мікропрограмного виконання команд.
Сформована схемами ID1 і MIS послідовність із 6 мікрокоманд передається в буфер схеми ID2, в якому формується черга у відповідності з початковим порядком команд в програмі. На цій стадії появляється друга можливість для прогнозування розгалуження. Якщо яка-небудь з мікрокоманд припускає умовний перехід, вона передається в схему статичного прогнозування розгалуження. Остання передає цю команду в схему динамічного прогнозування розгалуження.
Мікрокоманди вишикувані в чергу в буфері ID2, передаються в схему виділення регістрів (RAT), в якому реалізується алгоритм перейменування регістрів.
Схема перевпорядкування
Схема ROB включає 40 фізичних регістрів і циклічний буфер, в якому може зберігатись до 10 мікрокоманд. Кожна комірка буфера розділена на наступні поля:
§ Поле стану. Поле є індикатором стану мікрокоманди — команда знаходиться в очікуванні виконання, чи поставлена на виконання, чи виконання команди завершено і результати готові до фіксації.
§ Адреса в пам'яті. Адреса команди програми, яка «породила» дану мікрокоманду.
§ Мікрокоманда. Власне код мікрокоманди.
§ Регістр підстановки. Якщо команда звертається до одного з 16 логічних регістрів, то в цьому полі вказується, на який із 40 фізичних регістрів перенаправляється посилання.
Мікрокоманди поступають в схему ROB в тому порядку, який задається вихідною програмою, але в схему диспечирування/виконання вони направляються вже в іншому порядку. Критерієм для зміни порядку є доступність необхідних для даних мікрокоманд регістрів і готовність даних. Після завершення виконання порції мікрокоманд початковий порядок мікрокоманд відтворюється при фіксації результатів.
Вузли диспечирування/виконання
Схема резервування (reservation station — RS) вибирає мікрооперації з буфера ROB, розподіляє їх між схемами виконання і записує результати в регістри ROB. Спочатку RS проглядує зміст буфера ROB і шукає в ньому ті мікрокоманди, код у полі стану яких вказує, що всі операції для даної мікрокоманди вже підготовлені.
Якщо ресурси, необхідні для виконання цієї мікрокоманди, вільні, RS вибирає мікрокоманду із буфера і передає її відповідній схемі на виконання. Зо один такт RS забезпечує аналіз і розподіл кількох мікрокоманд, але не більше 5. Якщо на певну схему виконання «претендують» дві і більше команд із буфера ROB, вони передаються на обробку по черзі. При цьому дотримується дисципліна «першим прийшов — першим вийшов», яка повинна зберегти початковий порядок слідування мікрокоманд, але цей порядок уже раніше змінений при аналізі залежностей і розгалужень.
Схема RS має 5 портів, які зв’язують її з 5 вузлами виконання мікрокоманд. Порт 0 використовується для виконання арифметичних мікрокоманд як з цілими, так і з числами у форматі з плаваючою крапкою, крім самих простих мікрокоманд і мікрокоманд обробки розгалужень. Останні передаються на виконання через порт 1. Вузол виконання ММХ-команд частково підключений до порту 0, а частково до порту 1. Інші порти призначені для команд звернення до пам’яті (завантаження і збереження).
Після того як виконання команди буде завершено, відповідний елемент в ROB поновлюється, а звільнений вузол стає доступним для інших команд.
Така послідовність проходження мікрокоманд через вузол диспечирування-виконання порушується при помилковому передбаченні розгалуження. В цьому випадку необхідно відмінити виконання кількох мікрокоманд, які можуть опинитися на різних стадіях обробки. Всі вони повинні бути вилучені з конвеєра. Цим займається вузол виконання переходів. Коли наступає час виконати команду умовного переходу, її результат порівнюється з раніше прогнозованим. Якщо виявиться, що прогноз був не вірним, вузол виконання переходу змінює стан всіх мікрооперацій, що появилися в буфері внаслідок цього передбачення, і вони вилучаються з конвеєра. Правильна адреса переходу передає схему прогнозування, і конвеєр починає виконувати послідовність команд, які починаються з цієї адреси.
Вузол фіксації результатів
Вузел фіксації результатів (RU) — це буфер перевпорядкування. Він фіксує в потрібному порядку результати виконання мікрокоманд. Першим ділом вузол RU повинен реагувати на неправильний прогноз переходів і на мікрокоманди, які вже виконані, але правильність прогнозу для них ще не підтверджена. Якщо виявиться, що мікрокоманда виконана і ніяк не зв’язана з ще не підтвердженим прогнозом розгалуження, вона помічається як готова для фіксації результату.
Коли результат виконання попередньої машинної команди в програмі буде зафіксований і всі мікрокоманди, які були включені в потік при розшифровці наступної команди, помічені як завершені, вузол RU поновлює вміст логічних регістрів процесора, використовуваних в ролі операндів в цій команді, і вилучає мікрокоманди з ROB.
суперскалярний процесор pentium
Прогнозування розгалужень
В процесорі Pentium II використовується стратегія динамічного прогнозування розгалуження, основана на врахуванні предісторії виконання останніх команд умовного переходу.
Буфер адресації переходу (branch target buffer — BTB) містить інформацію про останні по часу виконання команди умовного переходу в поточній команді. Як тільки в потоці команд виявляється нова команда умовного переходу, аналізується вміст BTB. Якщо дана команда вже є в буфері, вважається, що на цей раз вона, імовірніше всього, буде вести себе так же, як і в попередньому сеансі. Якщо раніше розгалуження відбулось, то і на цей раз прогнозується розгалуження і адреса переходу передається у вузол добування.
Як тільки команда переходу буде дійсно виконана, інформація про передісторію поновлюється у відповідності з тим, підтвердився прогноз чи ні. Якщо команда не була раніше занесена у BTB, вона заноситься в буфер, для чого, якщо в цьому є необхідність, самий «старий» елемент вилучається.
В загальних рисах алгоритм передбачення розгалуження в Pentium II такий же, як і в попередніх моделях Pentium і Pentium Pro. Однак в Pentium використовувалась досить проста схема фіксації і аналізу передісторії, основана на застосуванні ключа довжиною 2 біти. Процесори Pentium Pro і Pentium II мають в своєму складі значно складніші конвеєри, в яких є 11 робочих позицій (в Pentium — всього 5 позицій), а отже штраф за неправильний прогноз у цих процесорах досить відчутний. Тому в Pentium Pro і Pentium II реалізований більш складний алгоритм врахування передісторії і прогнозування.
В Pentium II буфер адресації переходу об'ємом 512 рядків організований по тій же схемі, що і кеш з секціонованим асоціативним доступом. Адреса команди розгалуження в кожному елементі буфера використовується в ролі тега. В склад елемента буфера також входить адреса, на якій був виконаний перехід при останньому зверненні до цієї команди, і 4-розрядне поле передісторії. Таким чином в Pentium II використовується 4-розрядне поле передісторії замість 2-розрядного (в першій моделі Pentium). Маючи 4-розрядне поле, механізм прогнозування може аналізувати більш довгу передісторію. Аналіз виконується по алгоритму Йе.
Якщо певна команда умовного переходу ще не внесена у BTB і відповідна передісторія в буфері відсутня, для прогнозування використовується статичний алгоритм.
§ Якщо адреса переходу задається безвідносно до поточного стану лічильника команд, прогнозується розгалуження при переході назад по коду програми і не прогнозується про переході вперед.
§ Для команд умовного переходу з адресою, заданою відносно поточного стану лічильника команд, прогнозується перехід при поверненні до раніше виконуваного фрагменту програми. Це відповідає методиці організації циклів у програмі.
§ Якщо адреса переходу в команді задана відносно поточного стану лічильника команд, то розгалуження вперед по ходу програми не прогнозується.
2. Процесор PowerPC
PowerPC 601
Як і інші процесори із суперскалярною організацією, PowerPC 601 складається з кількох незалежно функціонуючих вузлів. Ядром процесора є 3 незалежні виконавчі вузли, побудовані на принципу конвеєра, — для виконання арифметичних команд обробки цілих чисел, чисел у форматі з плаваючою крапкою і обробки команд розгалуження.
Працюючи паралельно, ці вузли здатні одночасно обробляти три машинні команди.
Вузол диспетчера
Вузол дисперчера отримує команди із кеша і формує з них чергу, в якій одночасно може бути до восьми команд. Цей потік команд забезпечує постійне завантаження вузлів обробки арифметичних команд і команд умовного переходу. Верхня половина черги функціонує як звичайний буфер і зберігає команди до тих пір, поки не звільниться місто в нижній половині. Таким чином забезпечується постійне завантаження диспетчера, який не простоює в очікуванні добування команд із кеша.
Схема управління нижньою половиною черги розподіляє команди між виконавчими вузлами згідно наступному алгоритму:
§ Вузол обробки команд переходу. У цей вузол передаються всі команди розгалуження. Як тільки вузол стає вільним, у нього передається сама остання команда переходу, яка міститься в нижній половині черги диспетчера.
§ АЛП ПК-чисел. Вузол обробки команд арифметичних операцій з числами у форматі з плаваючою крапкою. Якщо конвеєр обробки таких команд виявляється не заповненим, у нього передається команда відповідного типу із нижньої половини черги диспетчера.
§ АЛП цілих чисел. Вузол обробляє команди арифметичних операцій з цілими числами, команди передачі даних між регістрами і кешом і команди порівняння цілих чисел. Команди передаються в цьому вузлі тільки після того, як вони потраплять в нижню половину черги диспетчера.
Оскільки команди розгалуження і арифметичних операцій з числами у форматі з плаваючою крапкою можуть передаватись у відповідні вузли в порядку, відмінному від початкової програми, диспетчер забезпечує постійне завантаження конвеєрів цих вузлів. До складу диспетчера також входять логічні схеми обчислення адреси виборки вузлів.
Диспетчер послідовно добуває команди із кеша до тих пір, поки команда розгалуження не перейде в нижню половину черги. Коли вузел обробки команд переходу обробляє цю команду, він відповідно обновить адресу наступної добуваної команди, і диспетчер може поновити процес добування з нової адреси.
Конвейер обробки команд
На Рис. 1 наведені схеми конвеєрів обробки команд в різних вузлах процесора PowerPC 601. Існує одна спільна для всіх конвеєрів робоча позиція — позиція добування команди. Другий такт конвеєрів починається після того, як диспетчер передасть команди відповідним вузлам на виконання. В кожному такті диспетчер аналізує вміст чотирьох елементів нижньої половини черги команд і паралельно передає вузлам виконання до трьох команд.
Конвеєр команд розгалуження має всього дві робочі позиції. На другій позиції команда розшифровується, виконується, і тут же прогнозується розгалуження.
АЛП цілих чисел обробляє арифметичні команди, команди передачі даних між регістрами і команди завантаження/збереження, які звертаються до пам’яті, фактично до кеша.
В конвеєрі виконання команд завантаження/збереження передбачений такт формування адреси, за яким слідує такт пересилки адреси в кеш і, якщо в цьому є необхідність, такт запису результату. В конвеєрі обробки команд інших типів звернення до кеша відсутнє, але існує такт виконання команди і запису результату в регістр.
Конвеєр обробки арифметичних команд з числами у форматі з плаваючою крапкою має два такти виконання, оскільки для таких команд використовуються більш складні алгоритми.
Команди розгалуження | Д | РП/РШ/В/П | |||||
Команди обробки цілих ч-л. | Д | РП/РШ | В | З | |||
Команди завантаження/збереження | Д | РП/РШ | ФА | ЗК | З | ||
Комади обробки ПК-чисел | Д | РП | РШ | В1 | В2 | З | |
Рис. 1. Схеми конвеєрів обробки команд процесора PowerPC 601
Д — добування;
РП — розподіл;
РШ — розшифровка;
В — виконання;
П — прогнозування;
З — запис результату;
ФА — формування адреси;
ЗК — звернення до кеша.
Обробка команд розгалуження
Висока продуктивність RISC-процесорів і процесорів з суперскалярною організацією досягається головним чином за рахунок оптимального використання конвеєра. При цьому ключовим питанням проектування таких процесорів є алгоритм обробки команд розгалуження. В процесорі PowerPC цим займається окремий вузол обробки команд розгалуження. Робота даного вузла побудована таким чином, що в більшості випадків команди розгалуження не впливають на функціонування інших вузлів процесора. Такий тип розгалуження отримав назву нуль-циклового (zero-cycle branch).
Щоб добитись нуль-циклового розгалуження, в PowerPC використовується наступна стратегія:
1. При пошуку команд розгалуження у буфері диспетчера реалізується певна логіка. Адреса переходу формується тоді, коли команда розгалуження в перший раз з’являється в нижній половині буфера і ні одна з раніше запущених команд розгалуження не знаходиться в стадії виконання.
2. Робиться спроба визначити результат умовного переходу. Якщо в команді використана умова, сформована раніше, то необхідність в якому-небудь прогнозуванні відпадає і команда умовного переходу виконується звичайним способом. Але в любому випадку, як тільки виявиться команда розгалуження, логічна схема вузла повинна прийняти одне з трьох можливих рішень.
§ Розгалуження виконується. Це відбувається у випадку наявності команди безумовного переходу або умовного переходу, для якої коди умови уже сформовані і показують на необхідність розгалуження.
§ Розгалуження відкидається. Це відбувається при наявності команди умовного переходу, для якої коди умови вже сформовані у вказують на відсутність розгалуження.
§ Запускається алгоритм прогнозування. Це відбувається тоді, коли коди умов для команди умовного переходу ще не сформовані. В цьому випадку розгалуження прогнозується, якщо адреса переходу розташована вище команди, тобто при переході назад по ходу програми, що частіше всього проходить при обробці циклів, і розгалуження не прогнозується, якщо адреса переходу розташована нижче команди, перехід вперед по ходу програми. Як тільки будуть сформовані умови, які повинні аналізуватись в команді, і виявиться, що прогноз був не правильний, вузол обробки розгалуження посилає сигнал анулювання всіх команд, помилково запущених на виконання.
Розробники PowerPC відмовились від використання методики аналізу передісторії, вважаючи, що вона не дасть суттєвого підвищення достовірності прогнозу.
PowerPC 620
В процесорі моделі PowerPC 620 вперше в сімействі PowerPC реалізована 64-розрядна архітектура. Структурна схема цього процесора повторяє схему моделі G3.
Особливістю цієї моделі є наявність в ній 6 функціональних вузлів виконання команд замість 3 в моделі 601.
В цьому процесорі є:
§ Один вузол добування і декодування команд,
§ Три вузли обробки команд над цілими числами,
§ Вузол обробки команд завантаження/збереження,
§ Вузол обробки команд над числами з плаваючою крапкою.
Така організація дозволяє диспетчеру одночасно передавати на виконання чотири команди: три у вузли обробки, які оперують з цілими числами, і одну — у вузол обробки команд з числами у форматі з плаваючою крапкою.
У процесорі моделі 620 реалізовані більш ефективний механізм прогнозування, буфери для перейменування регістрів і схема резервування. Після того як команда добувається із кеша, з нею зв’язуються регістри з буфера перейменування, в яких будуть тимчасово зберігатись результати виконання команди.
Процесор виконує команди у відповідності з прогнозом, і якщо прогноз не підтверджується, результати виконання команд у тимчасових регістрах анулюються. При цьому неправильний прогноз ніяк не проявляється на вмісті основних регістрів процесора.
Якщо прогноз підтверджується, результати з тимчасових регістрів переписуються у основні.
У складі кожного вузла є дві, або більше, схеми резервування, в яких зберігаються команди, передані диспетчером у цей вузол. У схемі резервування команди очікують, поки необхідні для них операнди не будуть сформовані попередніми командами. Це дозволяє швидше звільнити буфер вузла добування команд і диспетчера і почати добування команд для інших вузлів виконання.
У процесорі 620 можна прогнозувати до 4 команд розгалуження. Прогнозування виконується на основі аналізу передісторії, для чого використовується таблиця передісторії на 2048 записів. Як показало дослідження, алгоритм прогнозування забезпечує вірний прогноз приблизно у 90% випадків.
3. Процесор UltraSPARC-II
UltraSPARC-II — суперскалярний процесор, створений на базі SPARC. В ньому використовується той же набір команд, а також багато структурних рішень. Реалізовано багато регістрів, обмежених у виді регістрових вікон.
Структурна організація
Рис.1. Структура процесора UltraSPARC-II
Інформація (дані і команди) із зовнішнього кеша передаються внутрішньому кешу даних і команд. Вузол добування і розшифровки (ВДР.) добуває команди і поміщає їх в буфер, розрахований на 12 команд. Цей же вузол виконує прогнозування при обробці команд розгалуження, використовуючи для цього 2-бітний варіант алгоритму аналізу передісторії.
До складу ВДР входить також схема розділення команд на групи по 4, причому диспетчер обробляє всі команди групи паралельно. Група формується таким чином, що дві команди в ній обробляють цілі числа, а інші дві - числа у форматі з плаваючою крапкою, або є графічними командами.
Вузол виконання команд обробки цілих чисел включає два повноцінних АЛП і 8 регістрових вікон. Паралельно у вузлі можуть оброблятись дві команди. По такому же принципу організовані і вузли виконання команд ПК-арифметики і графічні команди, але в них додатково ще є схема виконання графічних команд. Вузол здатний паралельно виконувати дві команди відповідних типів.
Набір графічних команд представляє собою розширений набір команд сімейства SPARC. Вони подібні до набору ММХ-команд процесора Pentium II.
Вузол завантаження/збереження формує віртуальні адреси при виконанні всіх команд звернення до пам’яті і здатний обробляти по одній команді цього типу за цикл. Але цей вузол обслуговує дві черги — команд завантаження і команд збереження, за допомогою яких кілька звернень до однієї і тієї ж ділянки внутрішнього кеша даних виконуються одночасно.
Конвеєр
В процесорі UltraSPARC-II реалізований конвеєр виконання команд з 9 робочих позицій. Конвеєр розділений на дві частини — для команд обробки цілих чисел і команд обробки чисел у форматі з плаваючою крапкою або графічних команд.
При виконанні команд обробки цілих чисел на окремих позиціях конвеєра реалізуються наступні операції:
1. Добування. До чотирьох команд одночасно добуваються із кеша команд на цій позиції. Тут же прогнозується розгалуження.
2. Розшифровка. На цій позиції розшифровується код команди і вона поміщається в буфер команд.
3. Групування. З буфера відбирається група з чотирьох команд, в якій дві команди обробляють цілі числа, а інші дві числа в форматі з плаваючою крапкою і є графічними командами.
4. Виконання. Два АЛП цілих чисел звертаються до набору відповідних регістрів і виконують арифметичні операції. На цій же позиції обчислюються віртуальні адреси при виконанні команд звернення до пам’яті.
5. Кеш. На цій позиції аналізується, чи знаходиться елемент даних, що адресується раніше обчисленим адресам, в кеші даних. При обробці арифметичних команд на цій позиції формується код умови у відповідності з отриманим результатом, Цей код умови передається у вузол добування для перевірки правильності прогнозу. Якщо виявиться, що прогноз був хибним, команди, що обробляються на попередніх позиціях конвеєра, анулюються.
6. Н1. Ще на попередній позиції виясняється, що у внутрішньому кеші даних відсутні необхідні елементи, які поміщаються в чергу завантаження або зберігання. В подальшому для виконання команд з цих черг організовується звернення до зовнішнього кеша або до оперативної пам’яті.
7. Н2. Ця позиція холоста і введена для синхронізації з конвеєром виконання команд обробки чисел у форматі з плаваючою крапкою.
8. Н3. На цій позиції обробляються програми переривань.
9. Запис. На цій позиції записуються результати виконання команд любого типу.
Перші три і останні дві позиції конвеєра використовуються і при обробці команд, які оперують з числами у форматі з плаваючою крапкою, і графічні команди. Але для них існують чотири спеціальні позиції:
§ Р. На цій позиції проводиться уточнення коду операції і виконується зчитування операндів з регістрів.
§ В1. Перша фаза виконання команди.
§ В2. Друга фаза виконання команди.
§ В3. Завершальна фаза виконання команди.
Процесор MIPS R10 000
Процесор MIPS R10000 — подальший розвиток процесора MIPS R4000, в якому реалізовані основні принципи суперскалярної організації.
Перший етап обробки команд в MIPS R10000 — перекодування. Подібна технологія використовується у багатьох суперскалярних процесорах, в тому числі у PowerPC 620 та UltraSparc, оскільки забезпечує більш підходящі умови для успішної роботи паралельного функціонування конвеєрів.
У всіх суперскалярних процесорів вузьким містом є етап розшифровки і розподіл команд по конвеєрам, оскільки при цьому потрібно аналізувати взаємні залежності між ними. Тому у багатьох процесорах між зовнішнім кешом і внутрішнім кешом команд включається схема часткового декодування. Ця схема класифікує зчитані команди і приєднує до них кілька службових бітів, що спрощує послідуючу обробку. У процесорі MIPS R10000 до коду команди приєднується 4 біти, які вказують, в який вузел потрібно буде в подальшому спрямувати цю команду.
Із зовнішнього кеша одночасно добуваються 4 команди, які попередньо декодуються і поміщаються у внутрішній кеш команд. Так само як і в інших процесорах з суперскалярною організацією, кількість добуваних команд в MIPS R10000 вибрана таким чином, щоб забезпечити максимальне завантаження вузлів виконання команд. Далі 4 команди паралельно розшифровуються, і якщо серед них виявиться команда розгалуження, адреса переходу повертається у вузол вибірки із кеша, для того щоб наладити покажчик наступної добутої команди. Якщо команда розгалуження є командою умовного переходу, запускається алгоритм прогнозування, який використовує двохрозрядну схему аналізу передісторії. Сформована цим алгоритмом адреса переходу передається у вузол вибірки із кеша.
Наступний етап обробки команд — перейменування регістрів. При цьому 5-розрядне посилання на логічний регістр замінюється 6-розрядним посиланням на номер фізичного регістру. Схема перейменування проглядає список вільних фізичних регістрів і вибирає з них ті, які підходять для підстановки. При цьому частково вилучаються «хибні» тільки залежності по даним.
Після завершення розшифровки команди розподіляються між трьома чергами. Буфер кожної черги дозволяє зберігати до 16 команд. При цьому фізичний регістр, використовуваний в розподіленій команді для зберігання результату, помічається як зайнятий. Черги, що використовуються для арифметичних команд, представляють собою схеми резервування, а не прості списки з дисципліною обслуговування FIFO — команди із них вибираються в порядку, відмінному від того, в якому вони були завантажені. При цьому основна увага звертається на наявність залежності по даним. Коли скидуються біти резервування, якими помічені операнди — джерела команди, що свідчать про завершення їх обчислення, команда негайно передається у вузол виконання. Черга адресів призначена для команд завантаження/збереження, і команди вибираються із неї в тому ж порядку, в якому були завантажені.
Набори регістрів для операцій з цілими числами і числами в форматі з плаваючою крапкою складаються з 64 фізичних регістрів кожний. Виконавчі вузли завантажують операнди прямо з цих регістрів і в них же записують результати. Кожний набір оснащений кількома портами, що дозволяє паралельно звертатися до різних регістрів набору.
У складі процесора є п’ять вузлів виконання команд:
§ Вузол обчислення адреси;
§ Два вузли ПЛП для операцій з цілими числами;
§ Суматор чисел у форматі з плаваючою крапкою;
§ Вузол виконання команд множення, ділення і обчислення кореня квадратного при роботі з числами у форматі з плаваючою крапкою.
4. Процесор MERCED
Випуском процесорів Pentium II і Pentium III фірма Intel закінчила цілий напрямок у виробництві, початий в 70-х роках моделлю 8086, який був, скоріше всього, найбільш успішним за всю історію розвитку комп’ютерної індустрії.
Тепер Intel сумісно з Hewlett-Packard розробляють нову 64-розрядну архітектуру процесорів, яка отримала назву IA-64. Архітектура IA-64 — це далеко не розширення архітектури процесорів Intel х86 чи адаптації 64-розрядної архітектури процесорів PA-RISC фірми Hewlett-Packard. Дана архітектура розрахована на те, що вона залишиться актуальною для кількох наступних поколінь процесорів, в яких буде розвинута ідея паралельної обробки.
В основу IA-64 покладені наступні концепції:
1. Паралелізм на рівні машинних команд, який відображається не стільки на методах виконання команд, скільки на проектуванні самого набору команд.
2. Застосування довгих і наддовгих форматів команд (LIW/VLIM — long instruction word/very long instruction word).
3. Новий спосіб випереджуючого виконання розгалуженого потоку команд.
4. Вибіркове завантаження.
Для цього набору базових концепцій запропонована спеціальна абревіатура ЕРІС (explicitly parallel instruction computing — обчислення на основі явного паралелізму команд). Перший промисловий продукт, створений Intel в рамках проекту IA-64 отримав назву Merced.
Порівняння архітектури традиційних суперскалярних процесорів і IA-64
Традиційні суперскалярні процесори | IA-64 | |
RISC-команди, по одній в слові | RISC-команди, згруповані по три в один пакет | |
Кілька паралельно функціонуючих виконавчих вузлів | Кілька паралельно функціонуючих виконавчих вузлів | |
Зміна і оптимізація потоку команд проходить в ході виконання команди | Зміна і оптимізація потоку команд проходить на етапі компіляції програми | |
Прогнозування розгалуження і вибіркове виконання команд однієї вітки | Виконання команд з випередженням в обидвох вітках після команд переходу | |
Дані завантажуються із пам’яті тільки тоді, коли в них виникає необхідність. Спочатку робиться спроба знайти дані в кешах | Дані вибірково завантажуються із пам’яті ще до того, як в них виникла необхідність, але теж спочатку робиться спроба знайти дані в кешах | |
Рішення перейти на нову архітектуру, в корені відмінну від попередньої і ніяк з нею не сумісної, було для фірми Intel надзвичайно відповідальним. Але воно було продиктовано розвитком мікроелектронної техніки.
Коли в кінці 70-х років появились перші зразки процесорів сімейства х86, мікросхема процесора містила дасятки тисяч транзисторів і мала яскраво виражені риси скалярного пристрою. Це означає, що команди обробляються по черзі, практично без суміщення операцій.
По мірі того як кількість транзисторів в мікросхемі збільшувалась до сотень тисяч, в середині 80-х років в процесорах все частіше стали застосовувати суміщення операцій, тобто впроваджувались принципи конвеєрної організації процесу виконання команд. В той же час фірми-конкуренти добивались більш ефективного використання можливостей електроніки. Вони добивались підвищення продуктивності своїх комп’ютерів за рахунок впровадження ідей RISC-архітектури, яка забезпечувала більш ефективне суміщення операцій в конвеєрі, а пізніше — за рахунок поєднання суперскаляроної організації з ідеями RISC. В процесорах Pentium розробники з Intel застосували ідею суперскалярної технології, що забезпечило паралельне виконання двох CISC-команд. В процесорах Pentium Pro і Pentium II ці ідеї отримали подальший розвиток — був введений проміжковий етап перетворення CISC-команд в послідовність мікрокоманд у форматі аналогічному RISC-командам. За допомогою такого перетворення, вдалося більш широко застосувати принципи суперскаляроної організації. Такий підхід дозволив більш ефективно використати можливості ВІС нового покоління, які нараховують мільйони транзисторів. Наступні покоління мікросхем будуть нараховувати, вже десятки мільйонів транзисторів. Спеціалісти Intel прийшли до висновку, що ефективно «завантажити» їх в процесорі з архітектурою, подібною до Pentium II або Pentium III, вже не вийде.
Організація
Архітектура визначає загальні принципи функціонування процесора і може бути реалізовані в конкретній моделі різними способами. Це в повній мірі відноситься і до архітектури IA-64. На рис. 1 показані основні структурні елементи, які реалізують IA-64.
Особливості IA-64 архітектури:
§ Зросла кількість регістрів. Формат команд IA-64 передбачає використання 256 64-бітових регістрів. Із них 128 є регістрами загального призначення, а також використовуються при виконанні команд обробки цілих чисел і логічних команд, а інші 128 призначені для виконання команд обробки чисел у форматі з плаваючою крапкою та графічних команд. В процесорі також передбачено 64 однобітові регістри предикатів, які використовуються при випереджувальному виконанні команд.
§ Множина виконавчих вузлів. Типовий сучасний суперскалярний процесор забезпечує паралельну роботу до чотирьох конвеєрів, в яких використовується до чотирьох паралельно функціонуючих виконавчих вузлів у двох компонентах процесора — обробки цілих чисел і чисел у форматі з плаваючою крапкою. Розробники архітектури припускають, що при її реалізації можна буде включити до складу процесора 8 і більше паралельно працюючих вузлів.
Рис 1. Загальна структурна схема архітектури IA-64
РЦЧ — регістри загального призначення, або регістри цілих чисел;
РПК — регістри чисел у форматі з плаваючою крапкою або графічних даних;
РП — однорозрядні регістри предикати
ВВ — виконавчий вузол.
Кількість регістрів, як бачимо, досить велике в порівнянні з існуючими RISC — і суперскалярними процесорами. Це необхідно для підтримки зростаючого рівня паралелізму. В традиційному суперскалярному комп’ютері в наборі команд передбачається звернення до невеликої кількості логічних регістрів, які процесор замінює на звернення до фізичних регістрів, використовуючи технологію перейменування. Оскільки в основі архітектури IA-64 лежить ідея явного паралелізму, яка звільняє процесор від цих функцій в процесі виконання програми, в ньому повинно бути передбачено досить багато явно адресованих регістрів.
Кількість виконавчих вузлів у принципі визначається тількигустиною упаковки транзисторів в конкретній моделі ВІС. Процесор буде паралельно виконувати стільки команд, скільки допускають наявні в ньому функціональні вузли. Якщо компілятор замітив, що паралельно можна виконувати 8 команд, а в складі процесора всього 4 вузли, то ці 8 команд будуть виконуватись порціями по 4. Якщо в іншій моделі 8 вузлів, то в ній 8 команд будуть виконуватись паралельно на 8 конвеєрах.
Формат команд
Специфікацією IA-64 передбачається групування команд в пакети розміром 128 біт. Один пакет включає три команди і поле шаблону. Зо одне звернення до пам’яті (або до кеша) процесор вилучає зразу весь пакет, тобто три команди одночасно. В полі шаблону міститься інформація про те, які команди можна виконувати паралельно, причому вона може відноситись до команд, розміщених в кількох пакетах. Наприклад, при формуванні програми компілятор визначив, що паралельно можна виконувати 8 команд. В такому випадку компілятор розмістить ці команди в послідовних пакетах і покаже в поле шаблону, що їх можна виконувати паралельно.
У пакетах команди можуть розміщатись у порядку, який відрізняється від того, який заданий вихідним текстом програми на мові високого рівня. Більше того, формат поля шаблону дозволяє компілятору розміщати в одному пакеті і залежні і незалежні команди. Тому відпадає необхідність у включенні холостих команд NOP у пакет.
Команди мають фіксовану довжину 40 біт. Це дещо більше, ніж у традиційних RISC-процесорах (як правило в них використовуються команди довжиною 32 біти), але значно менше довжини команд Pentium II (118 біт).
Випереджуюче виконання розгалужених потоків команд
В технології виконання програми, передбаченою архітектурою IA-64, є два ключових моменти, які в корені відрізняються від існуючих: метод випередженого виконання розгалужених потоків команд і попереднє завантаження даних.
Попереднє завантаження даних
Інша новинка архітектури IA-64 є попереднє завантаження даних. Це дозволяє уникнути затримки процесу виконання команд, які оперують з даними. Що завантажуються з пам’яті. Мінімізація затримок, зв’язаних із завантаженням даних із пам’яті, суттєво підвищує продуктивність процесора. Швидкодія підсистеми пам’яті, навіть з одно і двохрівними кешами відстає від швидкодії сучасних суперскалярних процесорів. Щоб процесор не простоював у очікувані необхідних даних, поки вони будуть зчитуватися з пам’яті, бажано так змінити порядок виконання команд програми, щоб звернення до пам’яті було ініційовано раніше. В принципі це може зробити любий компілятор. Проблема виникає в тому випадку, коли ми пробуємо перенести завантаження з однієї вітки потоку команд в другу. Не можна переносити команду завантаження так, щоб вона опинилась перед командою розгалуження, оскільки якщо процес піде по другій вітці, може просто відпасти необхідність у операції завантаження. Але можна перенести команду завантаження, зробивши її предикативною. Тоді дані будуть добуватися з пам’яті, але не будуть зафіксовані в регістрі-приймачі до тих пір, поки не буде сформовано значення відповідної предикати. Але в цій стратегії теж є одна складність. Справа в тому, що при звернені до пам’яті може виникнути виключна ситуація — задана неправильна адреса або виникло переривання по відсутності потрібної сторінки в пам’яті. Якщо це відбудеться, процесору прийдеться зайнятись обробкою виключної ситуації, що приведе до суттєвої затримки процесу виконання програми.