простая конвейерная обработка и суперскалярная архитектура

рассмотрите эту схему выполнения инструкций ....

выборка команды-> декодирование команды-> выборка операндов-> выполнение команды-> обратная запись

предположим процессор, который поддерживает

как cisc, так и risc ... как Intel 486

теперь, если мы выдадим команду risc, для ее выполнения потребуется один такт, поэтому проблем нет ... но если выдается инструкция cisc, ее выполнение займет время ...

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

теперь в суперскалярной структуре две инструкции, выпущенные во время обработки первой, перенаправляются в другие доступные функциональные блоки ... но такое отклонение невозможно при простой конвейерной обработке, поскольку для выполнения инструкций доступен только один функциональный блок ...

Так что же позволяет избежать скопления инструкций в простом случае конвейерной обработки?


person AvinashK    schedule 17.06.2011    source источник


Ответы (1)


Технически говоря, x86 не является процессором RISC. Это процессор CISC. Есть инструкции, которые занимают меньше времени, но это не инструкции RISC. Я считаю, что Intel внутренне превращает инструкции в инструкции RISC, но это не совсем актуально.

Если у нас есть инструкции, которые занимают разное количество времени, тогда это становится процессор CISC. Практически невозможно конвейерно обработать процессор CISC - насколько мне известно, никто этого не делал. Есть много вещей, которые вы можете сделать внутри самого ЦП, чтобы ускорить выполнение, например выполнение вне очереди. Таким образом, у вас не может быть перегрузки конвейера, потому что все инструкции должны выполняться последовательно.

теперь, если мы выдадим команду risc, для ее выполнения потребуется один такт, поэтому проблем нет ... но если выдается инструкция cisc, ее выполнение займет время ...

Инструкция RISC не обязательно занимает один такт. На MIPS это занимает 5. Однако точка конвейерной обработки состоит в том, что после выполнения одной инструкции следующая инструкция завершит один тактовый цикл после завершения текущей.

теперь в суперскалярной структуре две инструкции, выпущенные во время обработки первой, перенаправляются в другие доступные функциональные блоки ...

В суперскалярной архитектуре две инструкции выполняются и заканчиваются одновременно. В чистой суперскалярной архитектуре цикл выглядит следующим образом (F = выборка, D = декодирование, X = eXecute, M = память, W = обратная запись):

(inst. 1) F D X M W
(inst. 2) F D X M W
(inst. 3)          F D X M W
(inst. 4)          F D X M W

но в простой конвейерной обработке такое отклонение невозможно, поскольку для выполнения инструкций доступен только один функциональный блок ...

Итак, цикл выглядит так:

(inst. 1) F D X M W
(inst. 2)   F D X M W
(inst. 3)     F D X M W
(inst. 4)       F D X M W

Теперь, если у нас есть инструкции, которые занимают разное количество времени (компьютер CISC), их сложнее конвейерно, потому что есть только один исполнительный блок, и нам, возможно, придется дождаться завершения выполнения предыдущей инструкции. Для инструкции 1 требуется 2 цикла выполнения, для инструкции 2 требуется 5, для инструкции 3 требуется два, а для инструкции 4 требуется только один в этом примере.

(inst. 1) F D X X M W
(inst. 2)         F D X X X X X M W
(inst. 3)                       F D X X M W
(inst. 4)                               F D X M W

Таким образом, мы не можем на самом деле конвейеризовать процессоры CISC - мы должны дождаться завершения цикла выполнения, прежде чем мы сможем перейти к следующей инструкции. Нам не нужно делать это в MIPS, потому что он может определить, является ли инструкция ветвью и местом назначения на этапе декодирования.

person rm5248    schedule 17.06.2011
comment
@ rm5248 в вашем примере, касающемся суперскалярной архитектуры, не должно быть F инструкций 3 и 4 чуть ниже D инструкций 1 и 2, чтобы также имела место конвейерная обработка.? - person AvinashK; 18.06.2011
comment
@avinash Это зависит. Пример, который у меня был, был только для суперскаляра. Конечно, вы можете комбинировать суперскаляр и конвейерную обработку вместе. В этом случае F из инструкций 3 и 4 будет ниже. - person rm5248; 20.06.2011