Технически говоря, 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