Призупинення виконання команди
Методи зменшення впливу конфліктів за даними на роботу конвеєра команд
Застосовуються наступні методи зменшення впливу зазначених вище залежностей між даними на роботу конвеєра команд:
- Призупинення виконання команди, тобто затримка з переходом від виконання операції декодування ID до виконання операції виконання ЕХ в конвеєрі доти, доки залежність даних не вичерпується плином часу.
- Випереджувальне пересилання з ярусів конвеєра результатів попередньої команди до потрібного ярусу конвеєра, в якому виконується наступна команда (це потребує додаткових затрат обладнання та ускладнює керування).
- Статична диспетчеризація послідовності команд у програмі під час компіляції з метою зменшення впливу конфліктів за даними на роботу конвеєра команд шляхом зміни порядку виконання залежних одна від одної команд.
- Динамічна диспетчеризація послідовності команд у програмі під час компіляції з тією ж, що й статична диспетчеризація, метою.
- Перейменування регістрів.
Розглянемо далі названі методи зменшення впливу конфліктів за даними на роботу конвеєра команд детальніше.
Найпростішим рішенням для зменшення впливу конфліктів на роботу конвеєра команд при наявності залежності між даними є призупинення виконання команди ) на декілька тактів з тим, щоб завершилось виконання команди і, або тієї її фази, яка викликала конфлікт. Відповідно затримається і виконання команд, які йдуть слідом за командою і.
Розглянемо фрагмент програми, виконання якого вимагає призупинення роботи конвеєра:
LW R1,0(R2)
SUB R4,Rl,R5
AND R6,Rl,R7
OR R8,R1,R9
Тут друга команда SUB потребує результату виконання першої команди, який з’являється лише на такті 12 (фаза МЕМ), через що виконання призупиняється (зупинка R-Stall) до завершення вказаного такту. Призупинення конвеєра знижує його ефективність, тому частіше використовують інші шляхи ліквідації впливу залежностей між даними.