Обходной метод для инструкционного конвейера - PullRequest
0 голосов
/ 15 января 2012

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

R1<-M1
R2<-M2
R3<-R1*R2
M3<-R3

Теперь мы создадим конвейер, как показано ниже, без обхода: [XXX: пузырь]

IF1 ID1 EX1 ME1 WB1
    IF2 ID2 EX2 ME2 WB2
        IF3 XXX XXX XXX ID3 EX3 WB3
        XXX XXX XXX XXX IF4 ID4 EX4 WB4

И мы создадим конвейер с обходом, как показано ниже: [XXX: пузырь]

IF1 ID1 EX1 ME1 WB1
    IF2 ID2 EX2 ME2 WB2
        IF3 XXX ID3 EX3 WB3
        XXX XXX IF4 ID4 EX4 WB4

Мы должны подождать, пока WB1 и WB2 не будут выполнены, тогда мы можем выполнить инструкцию 3. Таким образом, в обход метода мы будем хранить значения R1 и R2 после уровней EX1 и EX2 в буфере.

Но ... В обход, после EX1, как мы можем получить значение регистра R1 ?? мы не достигли значения WB1. Зачем нам нужен буфер, почему бы не прочитать R1 напрямую ??

1 Ответ

1 голос
/ 15 января 2012

Поскольку значение, считанное из памяти для загрузки в R1, еще не было записано в файл регистров. Если бы вы читали значение из R1, вы бы получили значение R1, содержащееся до инструкции R1 <-M1. Новое значение R1 сохраняется в регистре конвейера ME-> WB после ME1.

...