18 / 24 · Теория
Зависимости, ресурсные конфликты и обходная передача
Сравните остановки и обходную передачу, когда операции нужен предыдущий результат.
Уроки доступны бесплатно. Запишитесь, чтобы сохранять прогресс.
Перекрытие требует большего, чем сохранение порядка
Независимые потоковые вычисления не читают предыдущие результаты, поэтому транзакции безопасно перекрываются. Оператор регистрового файла, напротив, может требовать результат предшествующей операции. Чтение регистра до доступности старшей записи создаёт конфликт данных «чтение после записи». Арифметика может быть правильной, хотя операнд снят слишком рано.
Начните с R1=4. Пусть I0 выполняет R1←R1+3, а I1 — R2←R1×2. Здесь I0 фиксирует операнд 4 на фронте 0, вычисляет 7 в следующем такте и записывает R1 на фронте 1. I1, снимающая R1 на фронте 1, может увидеть старое 4, получая R2=8. Последовательное выполнение требует R2=14. Явно задавайте чтение/запись регистрового файла на одном фронте.
| Исправление | Операнд, видимый I1 | Требование |
|---|---|---|
| Читать старый R1 | 4 | Здесь неправильно |
| Остановить до фронта 2 | 7 | Сохранить операцию и сопутствующие поля |
| Передать результат исполнения обходным путём | 7 непосредственно до фронта 1 | Результат доступен, путь выполняет временные требования |
Обходная передача выбирает вычисленный результат до поступления в архитектурное хранилище. Совпадения номеров назначения недостаточно: производитель должен быть достоверным, действительно записывать регистр и иметь готовый результат. При нескольких совпадающих производителях выберите самую младшую из старших операций. Никогда не передавайте обходным путём пустую или отменённую очисткой операцию.
Загрузку, ответ которой не прибыл, нельзя исправить передачей недоступных данных. Остановите потребителя, сохранив код операции, идентификаторы источников и метку. Решите, могут ли продолжать другие независимые ступени.
Структурные конфликты возникают, когда двум ступеням одновременно нужен один порт памяти. Нужны арбитраж или дополнительные ресурсы даже без зависимости данных. Ветвления вводят управляющие конфликты, требующие отмены работы неверного пути. Анализируйте, чего ждёт каждая операция и какое состояние удерживается. Наш итоговый проект остаётся независимым потоком; его успех не доказывает обработку зависимостей процессора.
Попробуйте сами
При R1=4 операция I0 добавляет три, I1 удваивает результат. Сравните результат I1 из старого хранилища и с правильной обходной передачей. Что если I0 — загрузка, чьи данные ещё недоступны?
Прочитать объяснение
Чтение старого 4 даёт 8; обходная передача 7 даёт 14. Недоступный результат загрузки требует остановки потребителя с сохранением операции и метки. Совпадение назначения не оправдывает передачу незавершённых данных.