2014-09-02 2 views
2

Вот пример выхода из строя трубопровода от «Семейства микропроцессоров Intel» Джеймса Антонакоса.Неполадки с ультрафиолетовыми трубопроводами

Рассмотрите эту последовательность инструкций. Для этого примера создается количество тактовых циклов, назначенных каждой команде.

1: MOV AL, 2  ; 1 cycle 
2: MOV DL, [SI] ; 3 cycles 
3: MUL DL   ; 2 cycles 
4: INC SI   ; 1 cycle 
5: SUB BX, 4  ; 1 cycle 
6: ADD AX, BX  ; 1 cycle 
7: MOV CX, 2000 ; 1 cycle 

Планирование инструкции в порядке между двумя трубопроводами: (я знаю основную концепцию этого.)

Clock Cycle  Pipeline # 1  Pipeline # 2 

1    MOV AL, 5   MOV DL, [SI] 
2    idle    busy 
3    idle    busy 
4    MUL DL   INC SI 
5    busy    SUB BX, 4 
6    ADD AX, BX  MOV CX, 2000 

инструкции Планирование из строя между двумя трубопроводами:

Clock Cycle  Pipeline # 1  Pipeline # 2 

1    MOV AL, 5   MOV DL, [SI] 
2    INC SI   SUB BX, 4 
3    MOV CX, 2000  busy 
4    MUL DL   idle 
5    ADD AX, BX  idle 

Может кто-нибудь объяснить мне, как не работает конвейер? Спасибо!

+1

есть блок, который анализирует предстоящий код и вычисляет зависимости между отдельными инструкциями , если (скажем) загружается загрузка памяти, которая некоторое время остановит канал, процессор попытается запланировать некоторые другие независимые инструкции до/после операции загрузки, поэтому они могут выполняться, пока загрузка ожидает, что система памяти будет отвечать. при этом действуют одни и те же инструкции, но работают меньше циклов, потому что вы тратите впустую циклы на ожидание других вещей. –

+0

Я вижу. Другой вопрос. Когда нас просят нарисовать УФ-конвейер, NOP используется в качестве заполнителя. В чем разница между занятой и простой в конвейерной обработке? – ellekaie

+1

Занято означает, что трубопровод все еще заканчивает инструкцию (так как некоторые инструкции занимают более 1 цикла). Idle означает, что трубопровод ничего не делает. – jliv902

ответ

1

Неисправный двигатель просто возьмет любые готовые (те, которые не ждут каких-либо зависимостей) коды операций (инструкции, разбитые на несколько частей) и планируют их выполнение. Как далеко он смотрит в будущее, зависит от того, сколько команд было извлечено и декодировано передним концом.

В вашем случае не в порядке, вы не сможете выполнить «INC SI» до тех пор, пока «MOV DL, [SI]» не запустит SI и не пройдет через AGEN (генерация адресов) для загрузки. «SUB BX, 4», однако, не имеет зависимостей и готов к выполнению запланированного выполнения, когда HW видит его и т. Д.