Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

Примеры архитектур CISC включают сложные мэйнфрейм-компьютеры и упрощенные микроконтроллеры, в которых операции загрузки и сохранения памяти не отделены от арифметических инструкций. Конкретные архитектуры набора команд, которые были задним числом обозначены как CISC, - это от System / 360 до z / Architecture , архитектуры PDP-11 и VAX , Data General Nova и многие другие. Хорошо известные микропроцессоры и микроконтроллеры, которые также были помечены как CISC во многих научных публикациях, включают семейства Motorola 6800 , 6809 и 68000 ; Intel 8080 , iAPX432и x86 -семейство; семейства Zilog Z80 , Z8 и Z8000 ; линейки National Semiconductor 32016 и NS320xx ; семейство MOS Technology 6502 ; семейство Intel 8051 ; и другие.

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

Исторический контекст дизайна [ править ]

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

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

Новые инструкции [ править ]

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

Проблемы с дизайном [ править ]

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

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

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

Идея RISC [ править ]

Схема, которая выполняет действия, определенные микрокодом во многих (но не во всех) процессорах CISC, сама по себе является процессором, который во многих отношениях по структуре напоминает очень ранние конструкции ЦП. В начале 1970-х это породило идеи вернуться к более простым конструкциям процессоров, чтобы сделать их более возможными без ( тогда относительно больших и дорогих) таблиц ПЗУ и / или структур PLA для упорядочивания и / или декодирования. Первый (задним числом) RISC- маркированный процессор ( IBM 801  - IBMWatson 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 / Architecture .

Условия использования CISC и RISC [ править ]

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

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

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

См. Также [ править ]

  • Компьютерная архитектура
  • ЗИСЦ
  • VLIW
  • Микрокод
  • Сравнение архитектур наборов инструкций

Ссылки [ править ]

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

Общие ссылки [ править ]

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

Дальнейшее чтение [ править ]

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

Внешние ссылки [ править ]

  • COSC 243_Компьютерная архитектура 2