2016-12-02 4 views
0

В трубопроводе 5 ступеней.Как выполнить команду после загрузки, выполнить?

IF - Instruction fetch 
ID - Instruction Decode, read the register 
EX - On a memeory reference add up base and offset, 
     and for arithmetic instruction do the math. 
MEM - If load or store access memory 
WB - Place the result in appropriate register.  



I1 : R0 <- M[loc]  IF | ID | EX | MEM | WB | 

I2 - R0 <- R0 + R0     | IF | ID | EX | MEM | WB | 

I3 - R2 <- R2 - R0      | IF | ID | EX | MEM | WB | 

Учтите, что используется «Операндная переадресация».
Решение говорит: -

Инструкция I1 является Load инструкция. Таким образом, следующая инструкция (I2) не может получить, пока I1 не закончит свою стадию EXE.

Но я думаю: в стадии MEM процессор обращается к памяти и выбирает нужное слово. И в WB этап обновления реестра реестра.
Итак, до MEM этапом процессор держит управление памятью, поэтому I2 начнет получать после MEM из I1.

Какой именно?

Описание этапов не дано, оно написано в соответствии с моими знаниями.

+0

Я отредактировал ваш вопрос. Если вы обнаружите, что мои изменения неприятны, вы можете отменить их, нажав кнопку «Изменить» в левом нижнем углу. –

ответ

1

конвенция:

I обозначает общую инструкцию.
I1, I2, I3, ... обозначают конкретные инструкции. S обозначают общий этап трубопровода.
IF, ID, EX, MEM, WB обозначают конкретные этапы трубопровода.
I.S обозначают цикл, в котором инструкция I находилась на этапе S.

Инструкция I2 нуждается R0 но этот регистр не будет готов от I1 до I1.WB закончил, предполагая, что основной трубопровод.
с пересылкой операнд настоящее I2 может считывать результат, а I1 записывает его обратно в регистровый файл, то есть во время I1.WB.

Так как операнд считывается в ID стадии, I2.ID и I1.WB должно произойти в то же самое время.
Это означает, что I2.IF должно происходить одновременно с I1.MEM.


Теперь вы по праву сомнительны о способности процессора выполнять две операции чтения (один для выборки команд и один для загрузки) в те же часы.
Очень простые процессоры на самом деле останавливаются на таком конфликте (в вашем примере I2.IF произойдет на I1.WB).

Самый простой способ избежать сваливания - это Harvard architecture, где CPU извлекает инструкции из другой памяти.

Гарвардская архитектура has been modified с использованием кэшей и предварительной выборки данных и инструкций.
В этом контексте срыв происходит только в том случае, если загрузка и выборка команд требуют доступа к памяти (а не кэш-памяти).

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

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

+0

У меня есть ваше мнение. Спасибо ! – Tushar

Смежные вопросы