простая конвейерная и суперскалярная архитектура - PullRequest
0 голосов
/ 17 июня 2011

рассмотрим эту диаграмму потока команд ....

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

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

и cisc, и risc ... как intel 486

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

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

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

так, что позволяет избежать перегрузки инструкций в простой конвейерной обработке.как таковые?

1 Ответ

1 голос
/ 17 июня 2011

Технически говоря, 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, потому что он может определить, является ли инструкция ветвью и местом назначения в фазе декодирования.

...