- •Глава 23. Сравнение архитектур cisc и risc
- •23.1. Особенности cisc-архитектур
- •23.2. Особенности risc-архитектур
- •23.3. Влияние конвейерной обработки
- •23.4. Суперскалярность и внеочередное выполнение команд
- •Предсказание переходов
- •23.5. Регистровые окна
- •23.6. Основные принципы разработки современных компьютеров
- •23.7. Контрольные вопросы
23.4. Суперскалярность и внеочередное выполнение команд
У полноценной конвейеризации, более или менее эффективно обходящей перечисленные выше проблемы, есть одно несомненное достоинство: она настолько сложна, что, единожды реализованная, позволяет легко построить на ее основе целый ряд интересных новшеств. Для начала заметим, что коль уж есть очереди готовых к выполнению команд и известны взаимозависимости между ними по данным, есть техника переименования регистров, позволяющая разным командам одновременно задействовать одни и те же регистры для разных целей, и, наконец, есть надежно работающая система сброса конвейера, то можно:
запускать на исполняющие устройства сразу несколько команд (если они не зависят друг от друга и могут быть безболезненно выполнены одновременно);
переупорядочивать независящие друг от друга команды так, как это необходимо (этот подход назвали внеочередное выполнение команд - Out-of-Order).
Техника переупорядочивания и внеочередного выполнения команд ослабляет негативные эффекты от медленной оперативной памяти и от наличия зависимых цепочек команд. Реализация внеочередного выполнения команд - это всего лишь усложнение схемы планировщиков, запускающих готовые к исполнению команды на исполнительные устройства в другом порядке, нежели они на планировщики поступили, плюс усложнение схем сброса конвейера и сохранения полученных результатов: результат выполнения прошедших вне очереди команд все равно должен сохраняться в последовательности, строго соответствующей расположению команд в изначальной программе (если случится какая-то ошибка, то результаты выполнения запущенных вне очереди команд придется аннулировать).
Для того, чтобы обеспечить эффективное использование большого количества специализированных исполнительных устройств (например, 4-6 команд в течение одного такта) необходимо иметь и соответствующую производительность подсистемы подготовки команд (Front-end процессора) для выполнения (например, 4 команд за такт).
Ядра процессоров, в которых обеспечивается генерация (подготовка к выполнению) нескольких команд за такт, называют суперскалярными.
В ядрах современных процессоров на выполнение в исполнительные устройства выдаются внутренние упрощенные команды. На этом этапе развития различия между RISC- и CISC-процессорами почти стираются - просто у ядер RISC-процессоров декодер, превращающий исходные архитектурные команды в содержимое очередей планировщиков, устроен гораздо проще, чем декодер, дешифрирующий хитро упакованные команды CISC-архитектуры. Т. е., фактически все ядра современных CISC-процессоров "в глубине души" являются полноценными ядрами типа RISC-процессоров - ведь исходные программы они в любом случае преобразуют «на лету» во внутреннее RISC-подобное представление. Правда, разной сложностью декодеров дело не ограничивается: все-таки классическую RISC-программу не только проще преобразовывать, но и результирующая внутренняя программа из него получается лучше - планировщикам гораздо легче его обрабатывать (в ней меньше зависимостей и операций с оперативной памятью).
