Компьютер со сложной системой команд - Википедия - Complex instruction set computer

А компьютер со сложной системой команд (CISC /ˈsɪsk/) - компьютер, в котором один инструкции может выполнять несколько низкоуровневых операций (например, загрузка из объем памяти, арифметика операция, а хранилище памяти ) или могут выполнять многоэтапные операции, или режимы адресации в пределах одной инструкции. Термин был придуман задним числом в отличие от компьютер с сокращенным набором команд (RISC)[1] и поэтому стал чем-то вроде Обобщающий термин для всего, что не является RISC, от больших и сложных мэйнфреймы к упрощенным микроконтроллерам, в которых операции загрузки и сохранения памяти не отделены от арифметических инструкций. Единственная типичная отличительная черта состоит в том, что в большинстве проектов RISC используется одинаковая длина инструкции почти для всех инструкций и используются строго отдельные инструкции загрузки и сохранения.

Примеры архитектур набора команд, которые были задним числом помечены как CISC: Система / 360 через z / Архитектура, то PDP-11 и VAX архитектуры, Данные General Nova и много других. Хорошо известные микропроцессоры и микроконтроллеры, которые также были помечены как CISC во многих научных публикациях, включают Motorola 6800, 6809 и 68000 -семьи; Intel 8080, iAPX432 и x86 -семья; Зилог Z80, Z8 и Z8000 -семьи; Национальный полупроводник 32016 и NS320xx -линия; технология MOS 6502 -семья; Intel 8051 -семья; и другие.

Некоторые авторы считают некоторые образцы пограничными. Например, Microchip Technology ПОС был назван RISC в одних кругах и CISC в других. В 6502 и 6809 Оба были описаны как RISC-подобные, хотя у них есть сложные режимы адресации, а также арифметические инструкции, которые работают с памятью, вопреки принципам RISC.

Исторический контекст дизайна

Подстрекательства и выгоды

До того, как философия RISC стала заметной, многие компьютерные архитекторы пытался преодолеть так называемый семантический разрыв, то есть для разработки наборов инструкций, которые напрямую поддерживают высокоуровневые программные конструкции, такие как вызовы процедур, управление циклами и сложные режимы адресации, позволяя объединить доступ к структуре данных и массиву в отдельные инструкции. Инструкции также обычно сильно кодируются, чтобы еще больше повысить плотность кода. Компактность таких наборов инструкций приводит к уменьшению программа размеров и меньшего (медленного) доступа к основной памяти, что в то время (начало 1960-х годов и позже) привело к огромной экономии на стоимости компьютерной памяти и дискового хранилища, а также к более быстрому выполнению. Это также означало хорошо продуктивность программирования даже в язык ассемблера, так как языки высокого уровня Такие как Фортран или же Алгол не всегда были доступны или уместны. Действительно, микропроцессоры этой категории иногда все еще программируются на языке ассемблера для определенных типов критических приложений.[нужна цитата ].

Новые инструкции

В 1970-х годах анализ языков высокого уровня показал некоторые сложные реализации машинного языка, и было определено, что новые инструкции могут улучшить производительность. Были добавлены некоторые инструкции, которые никогда не предназначались для использования на языке ассемблера, но хорошо подходят для скомпилированных языков высокого уровня. Компиляторы были обновлены, чтобы воспользоваться этими инструкциями. Преимущества семантически богатых инструкций с компактным кодированием можно увидеть и в современных процессорах, особенно в высокопроизводительном сегменте, где кеши являются центральным компонентом (в отличие от большинства встроенные системы ). Это связано с тем, что эти быстрые, но сложные и дорогие устройства памяти по своей природе ограничены в размере, что делает компактный код полезным. Конечно, основная причина их необходимости в том, что основные воспоминания (т. Е. динамическое ОЗУ сегодня) остаются медленными по сравнению с (высокопроизводительным) ядром ЦП.

Проблемы дизайна

Хотя многие проекты достигли цели более высокой пропускной способности при более низких затратах, а также позволяли выражать языковые конструкции высокого уровня с помощью меньшего количества инструкций, было замечено, что это не так. всегда дело. Например, младшие версии сложных архитектур (т. Е. С меньшим количеством оборудования) могут привести к ситуациям, когда можно повысить производительность за счет нет используя сложную инструкцию (например, вызов процедуры или инструкцию ввода), а вместо этого используйте последовательность более простых инструкций.

Одной из причин этого было то, что архитекторы (микрокод писатели) иногда «переоценивали» инструкции на языке ассемблера, включая функции, которые не могли быть эффективно реализованы на доступном базовом оборудовании. Например, могут быть «побочные эффекты» (выше обычных флагов), такие как установка регистра или ячейки памяти, которая, возможно, использовалась редко; если бы это было сделано через обычные (не дублированные) внутренние шины или даже внешнюю шину, это потребовало бы дополнительных циклов каждый раз и, следовательно, было бы довольно неэффективным.

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

Идея RISC

Схема, которая выполняет действия, определенные микрокодом во многих (но не во всех) процессорах CISC, сама по себе является процессором, который во многих отношениях по структуре напоминает очень ранние конструкции ЦП. В начале 1970-х это дало толчок идеям вернуться к более простым конструкциям процессоров, чтобы облегчить работу без (тогда относительно большие и дорогие) таблицы ROM и / или PLA структуры для секвенирования и / или декодирования. Первый (задним числом) RISC-маркированный процессор (IBM 801  – IBM Watson Research Center, середина 1970-х годов) представляла собой простую машину с жестким конвейером, изначально предназначенную для использования в качестве внутреннего ядра микрокода или механизма в проектах CISC, но также стал процессором, который представил идею RISC несколько более широкой публике. Простота и регулярность также в видимом наборе команд упростят реализацию перекрывающихся этапов процессора (конвейерная обработка ) на уровне машинного кода (т. е. на уровне, видимом компиляторами). Однако конвейерная обработка на этом уровне уже использовалась в некоторых высокопроизводительных «суперкомпьютерах» CISC для сокращения времени цикла команд (несмотря на сложности реализации в рамках ограниченного количества компонентов и сложности соединения, возможной в то время). С другой стороны, выполнение внутреннего микрокода в процессорах CISC может быть более или менее конвейерным в зависимости от конкретной конструкции и, следовательно, более или менее похоже на базовую структуру процессоров RISC.

Суперскаляр

В более современном контексте сложное кодирование переменной длины, используемое некоторыми типичными архитектурами CISC, делает сложным, но все же выполнимым создание суперскалярный реализация модели программирования CISC напрямую; заказанный суперскалярный оригинал Pentium и вышедший из строя суперскаляр Cyrix 6x86 хорошо известные примеры этого. Частые обращения к памяти для операндов типичной машины CISC могут ограничивать параллелизм на уровне команд, который может быть извлечен из кода, хотя это сильно опосредовано быстрыми структурами кеша, используемыми в современных проектах, а также другими мерами. Из-за по своей сути компактных и семантически богатых инструкций средний объем работы, выполняемой на единицу машинного кода (то есть на один байт или бит), выше для CISC, чем для процессора RISC, что может дать ему значительное преимущество в современной реализации на основе кэша.

Транзисторы для логики, PLA и микрокода больше не являются дефицитным ресурсом; только большая высокоскоростная кэш-память ограничена максимальным количеством транзисторов сегодня. Несмотря на сложность, количество транзисторов в декодерах CISC не растет экспоненциально, как общее количество транзисторов на процессор (большинство из которых обычно используется для кэшей). Вместе с более совершенными инструментами и усовершенствованными технологиями это привело к новым реализациям проектов с высокой степенью кодирования и переменной длины без ограничений загрузки и сохранения (т.е. без RISC). Это регулирует повторные реализации старых архитектур, таких как вездесущая x86 (см. Ниже), а также новые разработки для микроконтроллеры за встроенные системы и аналогичное использование. Суперскалярная сложность в случае современной x86 была решена путем преобразования инструкций в одну или несколько микрооперации и динамическое выполнение этих микроопераций, т.е. косвенное и динамическое суперскалярное выполнение; то Pentium Pro и AMD K5 ранние примеры этого. Он позволяет разместить довольно простой суперскалярный дизайн после (довольно сложных) декодеров (и буферов), давая, так сказать, лучшее из обоих миров во многих отношениях. Этот метод также используется в IBM z196 и позже z / Архитектура микропроцессоры.

Условия CISC и RISC

Термины CISC и RISC стали менее значимыми с продолжающейся эволюцией проектов и реализаций как CISC, так и RISC. Первые реализации x86 с высокой (или жесткой) конвейеризацией, 486 проектов от Intel, AMD, Cyrix, и IBM, поддержали все инструкции, которые выполняли их предшественники, но добились максимальная эффективность только на довольно простом подмножестве x86, которое было лишь немного больше, чем типичный набор инструкций RISC (т. е. без типичного RISC грузовой магазин пределы). Intel P5 Pentium поколение было суперскалярной версией этих принципов. Однако современные процессоры x86 также (обычно) декодируют и разбивают инструкции на динамические последовательности с внутренней буферизацией. микрооперации, который помогает выполнять большее подмножество инструкций конвейерным (перекрывающимся) способом и способствует более продвинутому извлечению параллелизма из потока кода для еще более высокой производительности.

Вопреки популярным упрощениям (присутствующим также в некоторых академических текстах,[который? ]) не все CISC закодированы или содержат «сложные» инструкции. Поскольку CISC стал универсальным термином, означающим все, что не является архитектурой загрузочного хранилища (RISC), это не количество инструкций, не сложность реализации или инструкций, которые определяют CISC, но эти арифметические инструкции также выполняют память доступы.[нужна цитата ] По сравнению с небольшим 8-битным процессором CISC, инструкция с плавающей запятой RISC сложна. CISC даже не требует сложных режимов адресации; 32- или 64-разрядные процессоры RISC могут иметь более сложные режимы адресации, чем небольшие 8-разрядные процессоры CISC.

А PDP-10, а PDP-8, Intel 80386, Intel 4004, а Motorola 68000, а Система z мэйнфрейм, а Берроуз B5000, а VAX, а Зилог Z80000, а Технология MOS 6502 все они сильно различаются по количеству, размерам и форматам инструкций, количеству, типам и размерам регистров и доступным типам данных. Некоторые из них имеют аппаратную поддержку таких операций, как сканирование подстроки, арифметика BCD произвольной точности или трансцендентные функции, в то время как другие имеют только 8-битное сложение и вычитание. Но все они относятся к категории CISC, потому что у них есть инструкции «загрузка-работа», которые загружают и / или сохраняют содержимое памяти в рамках тех же инструкций, которые выполняют фактические вычисления. Например, PDP-8, имеющий только 8 инструкций фиксированной длины и совсем не имеющий микрокода, является CISC из-за как инструкции работают, PowerPC, который имеет более 230 инструкций (больше, чем некоторые VAX), и сложные внутренние компоненты, такие как переименование регистров и буфер переупорядочения, является RISC, в то время как Минимальный CISC имеет 8 инструкций, но явно является CISC, поскольку объединяет доступ к памяти и вычисления в одних и тех же инструкциях.

Смотрите также

Рекомендации

  1. ^ Паттерсон, Д.А.; Дицель, Д. Р. (октябрь 1980 г.). «Кейс для компьютера с сокращенным набором команд». Новости компьютерной архитектуры SIGARCH. ACM. 8 (6): 25–33. Дои:10.1145/641914.641917.

Общие ссылки

  • Таненбаум, Эндрю С. (2006) Структурированная компьютерная организация, пятое издание, Pearson Education, Inc. Верхняя река Сэдл, штат Нью-Джерси.

дальнейшее чтение

  • Мано, М. Моррис. Архитектура компьютерной системы (3-е издание). ISBN  978-0131755635.

внешняя ссылка