1)Чтение после записи(ЧПЗ/RAW) - команда j читает некие данные x до того, как предшествующая команда i успела записать x, т.е. jошибчно получит старое значение x. ЧПЗявляется типичным риском (конфликтом) для конвейеров команд, определяемым порядком исполнения стадий команд.
2)Запись после чтения(ЗПЧ/WAR) - командаj записывает данные х до того, как предшествующая команда i успела прочитать х, то естьi ошибочно прочитает новое значение х.
3)Запись после записи(ЗПЗ/WAW) - команда i перезаписывает данные х после того, как их записала последующая команда j, то есть осталось записано старое значение. Конфликты ЗПЧ и ЗПЗвозникают, если используется выполнение команд с нарушением порядка и в специальных случаях задержки предыдущей команды (например, из-за структ. конфликта) при продолжении исполнения последующей. Конфликты ЗПЧ и ЗПЗне встречаются при «естественной» работе конвейера.
4)Чтение после записи(ЧПЧ/RAR) - команда j считывает значение х прежде, чем команда i успела считать значение х. Хотя порядок обращения к данным и нарушен, но данные в обоих случаях считаны корректно и ОШИБКИ НЕ ПРОИЗОШЛО.
К методам предотвращения конфликтов по данным относят:
Программные (инструментальные):
1)возможность конфликта устраняется на этапе компиляции программ – компиляторы не допускают возникновения последовательностей конфликтующих команд или, если этого не избежать, вставляют между конфликтующими командами операции NOP, чтобы конвейер смог продвинуться на требуемое число шагов.
Аппаратные (архитектурные):
1)Используется механизм ускоренного продвижения данных (forwarding или bypassing или short-circuiting).
2)Автоматически вводятся задержки исполнения команд (stalls), которые приводят к появлению «пустых» стадий – «пузырьков» (bubble). Благодаря этому приостанавливают «последующие» стадии обращения к данным приостанавливаются до окончания «предыдущих». «Пузырьки» в конвейере приводят к снижению его производительности; приостановка отдельных команд и попытки «догонять» поток команд, могут привести к новым конфликтам.
Механизм ускоренного продвижения данных (data forwarding). Поддержка ускоренного продвижения в структуре процессора. Комбинация продвижения и простоя.
Механизм ускоренного продвижения данных -когда требуется операнд, уже вычисленный, но не сохраненный предыдущей командой, он может быть получен из промежуточного буферного регистра (например, на выходе АЛУ), минуя промежуточные ступени конвейера. Для поддержки данног механизма в конвейере должны быть предусмотрены дополнительные тракты пересылки информации между промежуточными буферными регистрами и функциональными блоками (тракты опережения/обхода), коммутируемые мультиплексорами.
Приостановка конвейера позволяет выстроить операции чтения и записи в корректном порядке.
Комбинация продвижения и простоя -если продвижение невозможно из-за сильного отставания последующей команды, то оно может быть устранено неполным (только 1-2 стадии) ожиданием.
Риски по управлению по причине задержки выборки команды перехода и по причине задержки проверки условия перехода.
Конфликты по управлению (Control Hazards) - возникают в результате изменения «естественного» порядка исполнения в результате переходов, вызовов подпрограмм, прерываний, приводят к приостановкам конвейера и снижению производительности, из-за:
1)Задержки выборки команды перехода: выявление команд переходов происходит только после стадии декодирования команды (ID), при этом в конвейер уже помещена минимум одна или две команды, выбранная «по порядку», которую придется откинуть.
2)Задержки проверки условия перехода: для условных переходов проверка условия осуществляется только на стадии исполнения (EX), при этом в конвейер уже помещены минимум две следующие команды, которые придется откинуть.
Устранение рисков по управлению по причине задержки выборки команды перехода: использование буфера адресов перехода, использование кэш-памяти команд в точке перехода, использование буфера цикла.
Способы устранения задержки выборки команд перехода
1)Вычисление адреса перехода на стадии декодирования команды ID;
В результате декодирования команды выясняется не только ее принадлежность к командам перехода, но также способ адресации и адресный код точки перехода. Это позволяет сразу же приступить к вычислению исполнительного адреса перехода, не дожидаясь передачи команды на следующую ступень конвейера, и тем самым сократить время остановки конвейера с двух тактов до одного. Для реализации этого метода в состав ступени декодирования вводятся дополнительные блоки, вычисляющие исполнительный адрес точки перехода.
2)Использование буфера адресов перехода;
BTB(Branch Target Buffer) - память для хранения адресов успешных переходов
Представляет собой кэш-память небольшой емкости, в которой хранятся исполнительные адреса точек перехода нескольких последних команд. Перед выборкой очередной команды ее адрес (содержимое счетчика команд) сравнивается с адресами команд, представленных в ВТВ. Для команды, найденной в буфере адресов перехода, исполнительный адрес точки перехода не вычисляется, а берется из ВТВ, благодаря чему выборка команды из точки перехода может быть начата на один такт раньше. Команда, ссылка на которую в ВТВ отсутствует, обрабатывается стандартным образом. Если это команда перехода, то полученный при ее выполнении исполнительный адрес точки перехода заносится в ВТВ, при условии, что команда завершилась переходом. Применение ВТВ дает наибольший эффект, когда отдельные команды перехода в программе выполняются многократно, что типично для циклов.
3)Использование кэш-памяти хранения команд в точке перехода;
Кэш-память команд, расположенных в точке перехода (Branch Target Instruction Cache –BTIC), – это усовершенствованный вариант ВТВ, где в кэш-память помимо исполнительного адреса команды в точке перехода записывается также и код этой команды. За счет увеличения емкости кэш-памяти BTIC позволяет при повторном выполнении команды перехода исключить не только этап вычисления исполнительного адреса точки перехода, но и этап выборки расположенной там команды. Преимущества данного подхода в наибольшей степени проявляются при многократном исполнении одних и тех же команд перехода, главным образом при реализации программных циклов.
4)Использование буфера цикла.
Буфер цикла представляет собой быстродействующую память, входящую в состав первой ступени конвейера, где производится выборка команд. В этом буфере сохраняются коды нескольких последних команд в той последовательности, в которой они выбирались. Когда имеет место переход, аппаратными средствами сначала проверяется, нет ли нужной команды в буфере, и если это так, то команда извлекается из буфера. Такой метод наиболее эффективен при реализации циклов и итераций, чем и объясняется название буфера. Если буфер достаточно велик, чтобы охватить все тело цикла, выборку команд из памяти достаточно выполнить только один раз в первой итерации, поскольку необходимые для последующих итераций команды уже находятся в буфере. Буфер цикла принципиально близок к BTIC. Однако в буфере цикла сохраняется последовательность выполнения команд, что и отличает его от BTIC.
Устранение рисков по управлению по причине задержки проверки условия перехода: использование конвейеров с множественными потоками, статическое предсказание переходов, динамическое предсказание переходов.