stringtranslate.com

Компьютер со сложным набором команд

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

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

Некоторые авторы рассматривают некоторые конструкции как пограничные случаи. [ ВОЗ? ] Например, PIC Microchip Technology в одних кругах обозначается как RISC, а в других — CISC.

Поощрения и льготы

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

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

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

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

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

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

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

Идея RISC

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

Ранний (задним числом) процессор с маркировкой RISC ( IBM 801  – Исследовательский центр Уотсона компании IBM , середина 1970-х годов) представлял собой простую машину с жесткой конвейеризацией, первоначально предназначенную для использования в качестве внутреннего ядра микрокода или механизма в конструкциях CISC . нужен ] , но также стал процессором, который представил идею RISC несколько более широкой аудитории. Простота и регулярность видимого набора команд облегчили бы реализацию перекрывающихся стадий процессора ( конвейерную обработку ) на уровне машинного кода (т. е. уровне, видимом компиляторами). Однако конвейеризация на этом уровне уже использовалась в некоторых высокопроизводительных «суперкомпьютерах» CISC для сокращения времени цикла команд (несмотря на сложности реализации в рамках ограниченного количества компонентов и сложности проводки, возможной в то время). С другой стороны, внутреннее выполнение микрокода в процессорах CISC может быть более или менее конвейерным в зависимости от конкретной конструкции и, следовательно, более или менее похоже на базовую структуру процессоров RISC.

Суперкомпьютер CDC 6600 , впервые выпущенный в 1965 году, также задним числом обозначался как RISC. [2] [3] Он имел архитектуру загрузки-сохранения, которая позволяла одновременно выполнять до пяти загрузок и двух сохранений под контролем программиста. У него также было несколько функциональных блоков, которые могли работать одновременно.

Суперскаляр

В более современном контексте сложное кодирование переменной длины, используемое некоторыми типичными архитектурами 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 Pentium P5 было суперскалярной версией этих принципов. Однако современные процессоры x86 также (обычно) декодируют и разделяют инструкции на динамические последовательности микроопераций с внутренней буферизацией , что помогает выполнять большее подмножество инструкций конвейерным (перекрывающимся) способом и облегчает более сложное извлечение параллелизма из кода. поток, для еще более высокой производительности.

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

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

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

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

  1. ^ Паттерсон, Д.А .; Дитцель, доктор медицинских наук (октябрь 1980 г.). «Дело о компьютере с сокращенным набором команд». SIGARCH Новости компьютерной архитектуры . АКМ . 8 (6): 25–33. дои : 10.1145/641914.641917. S2CID  12034303.
  2. ^ «История компьютеров: Аппаратная архитектура серии CDC 6000» . Музей Ваальсдорп . 23 июля 2023 г. Проверено 19 января 2024 г.
  3. Энтони, Себастьян (10 апреля 2012 г.). «История суперкомпьютеров». ЭкстримТех . Проверено 19 января 2024 г.
  4. ^ Хеннесси, Джон ; Паттерсон, Дэвид . Компьютерная архитектура: количественный подход (PDF) . Архивировано (PDF) из оригинала 14 июня 2023 г. Проверено 13 июня 2023 г.

Общие ссылки

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