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