Частина тексту файла (без зображень, графіків і формул):
Класифікація залежностей даних. Скасування залежностей даних.
Нехай програма складається з наступних інструкцій:
(початок)...i...k...j...(кінець)
Тоді:
1. RAW (read after write) - читання після запису. Інструкція j намагається прочитати ще не оновлений інструкцією k операнд.
2. WAR (write after read) - запис після читання. Інструкція j намагається записати до регістра
призначення ще до того, як попереднє вмістиме цього регістра прочитає інструкція k.
3. WAW (write after write) -запис після запису. Інструкція j намагається записати результат до регістра призначення ще до того, як цей запис провела інструкція i. В результаті регістр тимчасово отримує некоректне вмістиме, чим може “скористатися” проміжна k-та команда.
4. RAR (read after read) - небезпеки не створює і тому не розглядається.
Означення, класифікацію та перші методи скасування залежності даних (в оригіналі – data hazards) запропонував Роберт Келлер (1975 рік).
Скасування залежностей даних
Відомі наступні типи залежності даних:
1. RAW (read after write) - читання після запису.
2. WAR (write after read) - запис після читання.
3. WAW (write after write) - запис після запису.
4. RAR (read after read) - небезпеки не утворює і тому не розглядається.
Застосовують наступні методи скасування зазначених залежностей:
1. Затримка перед випуском (Stalls before issue) інструкції із сходинки ID (instruction decoding) на сходинку EX (Execute) конвеєра доти, доки залежність даних не вичерпується плином часу.
2. Випереджувальне пересилання результатів з внутрішніх сходинок конвеєра попередньої
інструкції до потрібної сходинки конвеєра наступної інструкції (платня - додаткові апаратні
витрати).
3. Статична диспетчеризація послідовності інструкцій у програмі під час compile-time (час
компіляції) з використанням слоту затриманої інструкції (delay slot).