В этом случае эта аппаратура
В этом случае эта аппаратура приостанавливает конвейер начиная с команды, которая хочет использовать данные в то время, когда предыдущая команда, результат которой является операндом для нашей, вырабатывает этот результат. Эта аппаратура вызывает приостановку конвейера или появление "пузыря" точно также, как и в случае структурных конфликтов.
Методика планирования компилятора для устранения конфликтов по данным
Многие типы приостановок конвейера могут происходить достаточно часто. Например, для оператора А = B + С компилятор скорее всего сгенерирует следующую последовательность команд (рисунок 3.6):
LW R1,В |
IF |
ID |
EX |
MEM |
WB |
|
|
|
|
LW R2,С |
|
IF |
ID |
EX |
MEM |
WB |
|
|
|
ADD R3,R1,R2 |
|
|
IF |
ID |
stall |
EX |
MEM |
WB |
|
SW A,R3 |
|
|
|
IF |
stall |
ID |
EX |
MEM |
WB |
Рис. 3.6. Конвейерное выполнение оператора А = В + С
Очевидно, выполнение команды ADD должно быть приостановлено до тех пор, пока не станет доступным поступающий из памяти операнд C. Дополнительной задержки выполнения команды SW не произойдет в случае применения цепей обхода для пересылки результата операции АЛУ непосредственно в регистр данных памяти для последующей записи.
Для данного простого примера компилятор никак не может улучшить ситуацию, однако в ряде более общих случаев он может реорганизовать последовательность команд так, чтобы избежать приостановок конвейера. Эта техника, называемая планированием загрузки конвейера (pipeline scheduling) или планированием потока команд (instruction scheduling), использовалась начиная с 60-х годов и стала особой областью интереса в 80-х годах, когда конвейерные машины стали более распространенными.
Пусть, например, имеется последовательность операторов: a = b + c; d = e - f;
Как сгенерировать код, не вызывающий остановок конвейера? Предполагается, что задержка загрузки из памяти составляет один такт. Ответ очевиден (рисунок 3.7):
Неоптимизированная
последовательность команд |
Оптимизированная
последовательность команд |
LW Rb,b |
LW Rb,b |
LW Rc,c |
LW Rc,c |
ADD Ra,Rb,Rc |
LW Re,e |
SW a,Ra |
ADD Ra,Rb,Rc
|
LW Re,e |
LW Rf,f |
LW Rf,f |
SW a,Ra |
SUB Rd,Re,Rf |
SUB Rd,Re,Rf
|
SW d,Rd |
SW d,Rd |
<
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий