Почему процессоры CISC сложнее конвейерно? В каком смысле некоторые инструкции "более сложные", чем другие?

Согласно "Архитектуре и организации компьютеров" Майлза Мурдоки и Винсента Хойринга,

Инструкции CISC не очень хорошо подходят для конвейерной архитектуры. Для эффективной работы конвейера каждая инструкция должна иметь сходство с другими инструкциями, по крайней мере, с точки зрения относительной сложности инструкции.

Почему это правда? Что подразумевается под сложностью инструкции; не все ли инструкции занимают один такт, чтобы начать выполнение? Если инструкция читает или записывает в память, то это займет больше времени, но процессоры RISC тоже читают или записывают в память (конечно)?

Ответ 1

"Сложность" инструкций связана с тем, насколько сильно могут варьироваться их размер и формат. Возьмите архитектуру x86 IA32 (Intel 32-bit), например CISC. Размер инструкций может варьироваться от 1 до 15 байтов, и их формат также сильно различается (формат - это количество битов, используемых для каждого поля, где эти биты расположены и т.д.).

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

С другой стороны, все инструкции ARM (архитектура RISC) имеют ровно 4 байта. Поэтому, получив 4 байта, вы знаете, что можете отправить эти байты для фазы декодирования конвейера, и вы можете немедленно начать выборку следующей инструкции.

Ответ 2

Что подразумевается под архитектурой CISC, обычно есть инструкции, которые относительно длиннее RISC. Поэтому планирование сложнее. В CISC часто встречаются простые инструкции, а более сложные инструкции занимают больше времени. Таким образом, в трубопроводе есть вещи, называемые опасностями, которые могут создавать проблемы для гладкой конвейерной обработки. Инструкции по плавающей точке X86 будут длиннее, чем загрузка или сохранение x86, например.