Какое количество тактов требуется в данной последовательности команд с использованием 5-ступенчатого конвейерного процессора? - PullRequest
0 голосов
/ 18 декабря 2011

5-ступенчатый конвейерный ЦП имеет следующую последовательность этапов:

  • IF - извлечение инструкций из памяти инструкций.

  • RD - Инструкция по декодированию и считыванию регистра.

  • EX - Выполнить: операция ALU для вычисления данных и адресов.

  • MA - Доступ к памяти данных - для доступа на запись регистр, считанный в состоянии RD, используется.

  • WB - Регистрация обратной записи.

Рассмотрим следующую последовательность инструкций:

I1: L  R0, loc 1       ; R0 <=M[loc1]
I2: A  R0, R0 1        ; R0 <= R0 + R0
I3: S  R2, R0 1        ; R2 <= R2 - R0

Пусть каждый этап занимает один такт. Какое количество тактов используется для завершения вышеуказанной последовательности инструкции, начиная с получения I1?

Так вот мое решение.

    1   2   3   4   5   6   7   8   9   10  11  12  13
I1: IF  RD  EX  MA  WB
I2:     IF  -   -   -   RD  EX  MA  WB
I3:         IF  -   -   -   -   -   -   RD  EX  MA  WB

Таким образом, я получаю всего 13 циклов. Я предполагаю, что, поскольку пересылка операнда не упоминается явно в вопросе. Так что регистрация будет доступна только после этапа WB. Но вариант таков:

  • A. 8
  • B. 10
  • C. 12
  • D. 15

Ответы [ 2 ]

2 голосов
/ 05 ноября 2016

Для доступа на запись используется регистр чтения на стадии RD - это означает, что если мы не можем опередить значение на ступень MA. Таким образом, мы можем предположить, что пересылка операнда может быть выполнена для других этапов.

С пересылкой данных:

T1 T2 T3 T4 T5 T6 T7 T8

ЕСЛИ RD EX MA WB
-IF RD - EX MA WB
--IF - RD EX MA WB

Следовательно, ответ будет 8.

http://www.cs.iastate.edu/~prabhu/Tutorial/PIPELINE/forward.html

1 голос
/ 14 февраля 2014

Данная проблема основана на структурной опасности из-за строки ниже

" MA - Доступ к памяти данных - для доступа на запись используется регистр, считанный в состоянии RD "

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

Опасность для конструкции указана в инструкции по нагрузке. И, следовательно, выполнение следующей инструкции не может начаться до выполнения первой инструкции, потому что эффективный адрес ячейки памяти, указанный как M [loc1] , будет вычислен только во время фазы выполнения конвейера. Таким образом, до тех пор шина не будет освобождена и, следовательно, вторая инструкция не может быть получена. Таким образом, вторая инструкция займет дополнительные 2 такта .

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

Hence, total clock cycles = (CC for I1) + (CC for I2) + (CC for I3) 
= 5 + 2 + 3
= 10 clock cycles
...