Главная Случайная страница


Категории:

ДомЗдоровьеЗоологияИнформатикаИскусствоИскусствоКомпьютерыКулинарияМаркетингМатематикаМедицинаМенеджментОбразованиеПедагогикаПитомцыПрограммированиеПроизводствоПромышленностьПсихологияРазноеРелигияСоциологияСпортСтатистикаТранспортФизикаФилософияФинансыХимияХоббиЭкологияЭкономикаЭлектроника






Методы устранения негативных влияний конфликтов

Для устранения негативных последствий конфликтов применяются как программные, так и аппаратные методы.

Программные методы нацелены на устранение самой возможности конфликтов еще на стадии компиляции программ. Оптимизирующий компилятор пытается создать такой объектный код, чтобы между конфликтующими командами находилось достаточное количество нейтральных в плане конфликтов команд. Если также не удается, то между конфликтующими командами компилятор вставляет необходимое количество пустых команд типа “Нет операции”, что ведет, естественно, к замедлению работы процессора. Поэтому наряду с программными используют также и аппаратные методы устранения конфликтов. Естественным методом устранения конфликтов является приостановка выполнения команды j на несколько тактов для того, чтобы предшествующая команда i успела миновать этап конвейера, вызвавший конфликт. Очевидно такая приостановка ведет к задержке выполнения команд, следующих в конвейере за j-ой командой. Такую ситуацию называют “пузырьком” в конвейере. За счет усложнения конвейера можно сделать так, чтобы задержать выполнение только j-ой команды, не задерживая остальных, следующих за ней. Это более эффективное решение проблемы устранения конфликтов, которое достигается ценой определенных аппаратных затрат. Например, для борьбы с ЧПЗ наибольшее распространение получил прием ускоренного продвижения информации (forwarding). Обычно между двумя соседними ступенями конвейера располагается буферный регистр, через который предшествующая ступень передает результат своей работы на последующую ступень, то есть передача информации возможна лишь между соседними ступенями конвейера. При ускоренном продвижении, когда для выполнения команды требуется операнд, уже вычисленный предыдущей командой, этот операнд может быть получен непосредственно из соответствующего буферного регистра, минуя все промежуточные ступени конвейера. С данной целью в конвейере предусматриваются дополнительные тракты пересылки информации, такие как тракты опережения, тракты обхода, снабженные средствами мультиплексирования:

ИК – этап исполнения команды.

Таким образом, при forwardingоперанд читается не из ячейки памяти, а выбирается из буферного регистра АЛУ при выполнении команды j.

 

 

Риск по управлению

Простейший конвейер ориентирован на линейные программы. Однако реальные программы практически никогда не бывают линейными, поскольку в них обязательно присутствуют команды перехода, изменяющие естественный порядок вычислений. Это команды условного и безусловного перехода, вызова процедур, возврата из процедур и т.д. доля подобных команд в программе не ниже 10-20%. Выполнение команд перехода может приводить к приостановке конвейера на несколько тактов, из-за чего производительность процессора снижается. Существует два фактора ведущих к приостановке конвейера.

Первый фактор характерен для любой команды перехода и связан с выборкой команды из точки перехода по адресу, указанному в команде. То, что текущая команда является командой перехода, становится известным лишь на второй ступени, т.е. на стадии декодирования команды DK спустя два такта с момента поступления команды на конвейер. За это время на первые ступени конвейера уже поступят новые команды, извлеченные из памяти в предположении, что естественный порядок вычислений не будет нарушен. В случае перехода эти ступени нужно очистить и загрузить в конвейер команду, расположенную по адресу перехода. Исполнительный адрес перехода вычисляется только на третьем этапе. Таким образом, реализация перехода в конвейере требует определенных затрат времени, что равносильно остановке конвейера на два-три такта.

Второй фактор нарушения ритмичности работы конвейера имеет отношение только к командам условного перехода. До завершения команды перехода невозможно определить, какая из команд i-ая или j-ая должна выполняться следующей.

Поэтому конвейер просто загружает i-ую команду, следующую за (i-1)-ой командой перехода и продолжает свою работу по левой ветке. Если по завершении команды перехода выяснится, что переход произошел, т.е. следующей должна выполняться j-ая команда, то все ранее выбранные по левой ветке команды исполнять не надо, а нужно выбрать из памяти j-ую команду и вновь начать загружать конвейер, предварительно очистив его от команд левой ветки. Поскольку на загрузку конвейера требуется время, то это и есть плата из-за невозможности предвидения исхода команды условного перехода. Поэтому в современных ЭВМ применяются различные методы, позволяющие сократить потери времени на новую загрузку конвейера в случае, если переход произошел.

Эти потери времени можно сократить либо за счет ускорения процесса вычисления адресов и выборки команд, либо за счет решения проблемы условного перехода в целом.

 

Последнее изменение этой страницы: 2016-07-23

lectmania.ru. Все права принадлежат авторам данных материалов. В случае нарушения авторского права напишите нам сюда...