Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

A_O_Melnik_Arkhitektura_komp_39_yuteriv

.pdf
Скачиваний:
362
Добавлен:
12.02.2016
Размер:
6.8 Mб
Скачать

172

"Динамічна диспетчеризація послідовності команд у програмі під час компіляції

зтією ж, що й статична диспетчеризація, метою.

Перейменування регістрів.

Розглянемо далі названі методи зменшення впливу конфліктів за даними на роботу конвеєра команд детальніше.

5 . 2 . 3 . Призупинення виконання команди

Найпростішим рішенням для зменшення впливу конфліктів на роботу конвеєра ко­ манд при наявності залежності між даними є призупинення виконання команди ] на декілька тактів з тим, щоб завершилось виконання команди і, або тієї її фази, яка ви­ кликала конфлікт. Відповідно затримається і виконання команд, які йдуть слідом за ко­ мандою і.

Розглянемо фрагмент програми, виконання якого вимагає призупинення роботи конвеєра:

шRl,0(R2)

SUB

R4,R1,R5

AND

R6 , Rl,R7

OR

R8,R1,R9

Рис. 5.6 ілюструє роботу конвеєра при виконанні поданого вище фрагмента програми.

Instructions / Cycles

-11

-10

 

 

 

Iwrl,0x0(r3)

IF I

ID

 

 

 

sub г4,г1 ,г5

 

R-Sta

ID

 

MEM | WB

and гЄ,г1,г7

 

 

IF

ID

MEM WB

or г8,і1,(9

 

 

 

IF

| ID ЩЩ MEM 1 WB 1

Рис. 5.6. Призупинення конвеєра

Тут друга команда SUB потребує результату виконання першої команди, який з'явля­ ється лише на такті 12 (фаза M E M ) , через що виконання призупиняється (зупинка R-Stall) до завершення вказаного такту. Призупинення конвеєра знижує його ефективність, тому частіше використовують інші шляхи ліквідації впливу залежностей між даними.

5 . 2 . 4 . Випереджувальне пересилання

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

Випереджувальне пересилання даних з метою усунення конфлікту і пригальмову­ вання конвеєра комп'ютера D L X для коду програми

773

SUB R5 , R6 , R7

LW R4,0(R5)

SW 12(R5),R6

ілюструє рис. 5.7, на якому показано результат виконання приведеної програми на симуляторі комп'ютера D L X W i n D L X . Залежність за даними виникає за рахунок вико­ ристання другою командою вмісту регістра R5 за умови, що цей вміст оновлюється по­ передньою (першою) командою фрагмента. Цю залежність долають шляхом виперед­ жувального пересилання результату першої команди (що використовується потім як зсувний компонент адреси) з інтегрованого (до конвеєрного регістра) поля ALUoutput (на такті -7) на вхід A L U (на такті -6). На рисунку це позначено похилою додатковою лінією. Випереджувальне пересилання грунтується на тому, що реально зсувна компо­ нента формується вчасно, вона вже існує в надрах конвеєра, але не є ще занесеною до регістра регістрового файла (для цього треба виконати ще фази M E M і WB) .

Instructions / Cycles

 

 

 

 

 

 

 

 

sub г5,г6,г7

IF I ID

 

 

MEM I

WB

 

 

lw г4,0х0(г5]

IF

ID

I

intEX

j

MEM

I

WB 1

sw 0хс(г5),г6

 

IF

I

ID

I

intEX

I

MEM I WB

Рис. 5.7. Випереджувальне пересилання

Випереджувального пересилання вимагає і остання (третя) команда через те, що ви­ користовує вміст регістра Я4, який формується другою командою. Третій команді по­ трібно ще одне випереджувальне пересилання зсувної компоненти виконавчої адреси (вмісту регістра Я5), що позначено на рисунку іще однією додатковою лінією.

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

LW

R1,0(R2)

ADD

R4,R1,R2

AND

R6,R1,R7

XOR

R3 , Rl, R5

Залежність даних обумовлена використанням командами, які надходять після пер­ шої команди, вмісту регістра R1, який у конвеєрі формується із стандартною затрим­ кою. При цьому друга команда використовує випереджувальне пересилання даних від першої команди після завершення фази M E M , коли вже отримано майбутній вміст ре­ гістра R1. Але оскільки цей вміст отримано лише на такті -6, а він був потрібний на такті -7, то з'явилась затримка R-Stall, тому, що принципово неможливе пересилання до минулого (рис. 5.8).

174

Instructions / Cycles

;

 

і

і

''

і

і

 

 

 

 

 

 

 

 

 

 

 

 

Iwr1.0x0(r2)

I IF

I

ID

 

Ггї'ЕХ ] MEM J WB

add r4.r1.r2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

IF

I

 

ID

|R-Stall| HEX \ MEM | WB ]

and r6,r1 ,r7

 

 

 

 

 

I

 

IF

I

Stall I ID I ir,t£X I MEM | WB

xor r3,r1 ,r5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

П Г ~ | id д й щ mem і we 1

Рис. 5.8. Можливі та неможливі випереджувальні пересилання

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

5 . 2 . 5 . Статична диспетчеризація послідовності команд у програмі

під час компіляції

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

Для виявлення конфліктуючих команд в оптимізуючому компіляторі потрібно реа­ лізувати відповідні засоби аналізу команд. Ознаками наявності конфліктів за даними є наступні

для конфліктів за даними типу R A W - наявність збіжностей в адресах читання попередніх команд та адресах запису наступних команд,

" для конфліктів за даними типу W A R - наявність збіжностей в адресах запису по­ передніх команд та адресах читання наступних команд,

для конфліктів за даними типу W A W - наявність збіжностей в адресах запису попередніх команд та адресах запису наступних команд

Тобто оптимізуючий компілятор повинен проводити аналіз на збіжність адрес запи­ су і читання сусідніх команд, знаходити конфліктуючі команди, та розводити їх в часі

Статична диспетчеризація послідовності команд у програмі під час компіляції ви­ користовувалася, починаючи з 60-х років минулого століття, і викликала підвищений інтерес у 80-х роках, коли конвеєрні машини стали поширенішими

Нехай, наприклад, є послідовність операторів: a = b + c;d = e-f. Нижче наведена не оптимізована програма для виконання цих операторів

LW г2,0(г0) LW гЗ,4(гО) A D D r4,r2,r3

175

5\У 8(г0),г4 ІЛУ г5,12(г0)

1Л¥г6,16(гО)

БиВ г7,г5,г6 20(г0),г7

Вхідні дані та результати цієї програми розміщені в комірках пам'яті даних, наведе­ них в табл. 5.1.

 

Таблиця 5.1

 

Адреса

Операнд

комірки

 

пам'яті

а

8

Ь

0

с

4

а

20

е

12

і

16

Діаграма виконання програми приведена на рис. 5.9. Як видно з рисунка, тут наявні чотири затримки, викликанані залежністю за даними: друга і третя команди - звернення до регістра гЗ, третя і четверта команди - звернення до регістра г4, шоста і сьома коман­ ди - звернення до регістра гб, сьома і восьма команди - звернення до регістра г7.

Ігд&исіюпї І £у6е%

№ І Ю

 

 

 

 

 

 

ь іг.ОхЦіО]

І МЕМ І

 

 

 

 

 

І» гЗ ,0х4(і0]

С Е

 

 

 

 

 

м 0х8(і£Г.|г4

І Г

Я-5із1 І

 

 

 

 

 

 

Г Я-ЗіаІ І Ш §

ІМЕМ І

 

 

 

 

кч Г5.0хс(с0)

 

П Г Т

 

 

 

 

 

Ьі іб.ОхІОВД

 

І

М и

 

| МЕМ | У/8

 

 

ІЦЬ Е7.Г5.ГЄ

 

 

ІГ І

н-БІаГ

І МЕМ І У/8 '

МЕМ І Ш І

Рис. 5.9. Діаграма виконання неоптимізованої програми

Знаходимо конфліктуючі команди в наведеній вище програмі та розводемо їх в часі. Нижче наведена оптимізована програма для виконання тих же операторів

Ш г2,0(г0) Ж гЗ,4(гО) ІЛ¥г5,12(гО)

ІЛУг6,16(гО)

АОЭ г4,г2,гЗ БИВ г7,г5,г6 Б\У 8(г0),г4 Б\У 20(г0),г7

776

Вхідні дані та результати розміщені в тих же комірках пам'яті, приведених в табл. 5.1. Тоді діаграма виконання програми буде мати вигляд, як це приведено на рис. 5.10 (отри­ мана з використанням симулятора \ V i n D L X ) .

Instructions I Cycles

г 2 , 0 х 0 ; Ю )

lw

г 3 . 0 х 4 ( Ю )

lw

г 5 . 0 х с ( Ю )

І и г б . О х І О ( Ю )

add г4 . г2 . гЗ

sub г7,г5,гЄ

sw 0x8(r0).t4

sw 0 х 1 4 ( г 0 ) . г 7

- 1 Б I

I - U I

- 1 3 I - 1 2

I - 1 1

І - 1 °

 

 

 

 

 

І 7

І

' 6

І

 

 

 

•4

 

 

 

 

 

H

 

h

 

 

M E M

W B

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ID

 

 

M E M J

W B "

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

M E M

| W B '

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

IF | ID Ш И Й M E M I W B ~ |

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

I IF I ID N

 

y M E M I W B I

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Г

IF

I R-Stail I ID ХЩЩ M E M

|

WB "

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ID

 

M E M W B

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

IF | R - S t a l l |

ID

 

I M E M I W B

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 5.10. Діаграма виконання оптимізованої програми

Як наслідок, повністю усунені два блокування (стосовно регістрів гЗ і г4), та в двох блокуваннях (стосовно гб і г7) забрано по одному такту затримки. Тобто в цілому забра­ но 6 тактів. Залежності, які залишилися, можна забрати, використавши схеми обходу.

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

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

5.2.6. Динамічна диспетчеризація послідовності команд у програмі

під час компіляції

Динамічна диспетчеризація передбачає проведення компіляції програми узгоджено з процесом виконання команд в комп'ютері з метою мінімізації кількості призупинень конвеєра. У англомовній літературі разом з терміном "динамічна диспетчеризація" часто застосовуються терміни "out-of-order execution" - невпорядковане виконання і "out-of- order issue" - невпорядковане видавання, які практично завжди наявні при динамічній диспетчеризації. При динамічній оптимізації в конвеєрі команд розміщується пристрій виявлення конфліктів, який інформує компілятора про наявність конфліктів з тим, щоб він міг реагувати в процесі компіляції на ці конфлікти. Одним з варіантів реагування є

777

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

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

5.2.7. Перейменування регістрів

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

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

Програміст має справу тільки з логічними регістрами. Реалізація фізичних регістрів від нього прихована.

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

5.3.Конфлікти керування

5.3.7. Типи конфліктів керування

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

ІЗЗам. 371.

178

призводити до необхідності очистки конвеєра та завантаження нової послідовності ко­ манд, що знижує його продуктивність. Те, що команда належить до команд керування, можна вияснити лише після її декодування, тобто за кілька тактів після її надходження до конвеєра (в комп'ютері D L X через 2 такти).

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

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

dd r7,r8,rl bnez г4,$ТЕХТ and r5,r7,r7 add r2,r2,r3

відображена на рис. 5.11, де після декодування команди B N E Z (перехід, якщо не рів­ ний нулю) призупиняється виконання наступної команди.

Instructions / Cycles

add r7,r8/l

Ьпег г4,$ТЕХТ

and г5,г7д7

add Г2,Г2,ГЗ

Рис. 5.11. Призупинення конвеєра при виконанні команди умовного переходу

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

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

779

5.3.2. Зниження втрат на вибірку команди, до якої здійснюється перехід

Для зниження втрат на вибірку команди, до якої здійснюється перехід, використову­ ються декілька підходів:

обчислення виконавчої адреси команди переходу в ярусі декодування команди;

використання буфера адрес переходів;

використання буфера команд, до яких здійснюються переходи;

використання буфера циклу.

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

При використанні буфера адрес переходів, який є асоціативною пам'яттю, в ньому зберігаються адреси декількох останніх команд переходів, які є ознакою пошуку, та від­ повідні їм адреси переходу. Перед вибіркою з пам'яті чергової команди її адреса (вміст лічильника команд) порівнюється з адресами наявних в буфері команд і, якщо відбулося співпадіння, з буфера вибирається адреса переходу (рис. 5.12), а сигнал про наявність адреси в буфері пропускає її через мультиплексор. Тоді вибірка команди переходу може бути здійснена вже в наступному такті. При відсутності адреси команди в буфері адреса переходу шукається в ярусі декодування та, разом з адресою команди, заноситься до бу­ фера адрес переходів. При необхідності заміщення інформації в буфері адрес переходів використовуються алгоритми заміщення типу FIFO, LRU, R A N D .

,I

Регістр команд

 

 

Читання/

Пам'ять команд

Буфер адрес

запис

 

 

переходів

 

Ярус декодування

 

адреса

Наявність адреси

адреса

переходу

в буфері

переходу

Мультиплексор

Рис. 5.12. Використання буфера адрес переходів

180

К р а щ и м, ніж використання буфера адрес переходів, є використання буфера команд, до яких здійснюється перехід (рис. 5.13), коли в буфер разом з адресою команди пере­ ходу, яка є ознакою пошуку, записуються коди команд, до яких здійснюються переходи, що дозволяє при повторному виконанні такої команди виключити не тільки фазу обчис­ лення адреси переходу, але і фазу вибірки команди. При відсутності в буфері команди, до якої здійснюється перехід, її адреса визначається в ярусі декодування, проводиться її зчитування з пам'яті команд та, разом з адресою команди переходу, вона заноситься до буфера.

Регістр команд

 

1

Читання/

 

Буфер команд,

 

запис

Пам'ять команд

до яких

 

здійснюється

 

 

 

 

перехід

 

команда

Наявність адреси

команда

переходу

в буфері

переходу

 

Мультиплексор

 

Ярус декодування

Рис. 5.13. Використання буфера команд переходів

Особливо ефективним є використання буфера адрес переходів та буфера команд, до яких здійснюється перехід при виконанні циклів.

Іще більший ефект дає використання буфера циклу, до якого із збереженням поперед­ нього порядку записується деяка кількість команд, що виконувались останніми. Буфер входить до першого ярусу конвеєра, в якому виконується вибірка команд (рис. 5.14). Коли відбувається перехід, то спочатку здійснюється звернення до буфера. Якщо це був повторний цикл або ітерація, то всі його команди будуть вже наявними в буфері, який є меншим за об'ємом і швидшим основної пам'яті та кеш пам'яті команд. Тим самим всі наступні ітерації будуть виконуватись із зчитуванням команд з буфера, що суттєво при­ скорює роботу комп'ютера. Описаний підхід зокрема був використаний в комп'ютерах CRAY - 1 фірми Cray Research та C D C 6600 фірми Control Data Corporation.

787

__L_

Регістр команд

 

 

Читання/

Пам'ять команд

Буфер циклу

запис

 

команда

Наявність команди

команди

в буфері

циклу

Мультиплексор

 

Ярус декодування

Рис. 5.14. Використання буфера циклу

5.3.3. Зниження втрат на виконання команд умовного переходу

Число тактів, що втрачаються під час призупинення конвеєра через наявність умов­ них переходів, може бути зменшено наступними способами:

Введенням буфера попередньої вибірки для виявлення, здійснимим чи нездійс­ нимим є умовний перехід та підготовки до переходу на початкових ярусах конвеєра.

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

Затримкою переходу, тобто виконанням наступних за командою переходу команд незалежно від напряму переходу.

Статичним та динамічним передбаченнями переходу, тобто попереднім обчис­ ленням значення лічильника команд (цільової адреси) для здійснимого переходу.

5.3.3.7.Введення буфера попередньої вибірки

Буфер попередньої вибірки встановлюється після ярусу вибірки команди. Він скла­ дається з двох блоків пам'яті типу FIFO та блоку обчислення цільової адреси переходу, і включений в конвеєр команд, як це показано на рис. 5.15.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]