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 и 8051 ; семейства Zilog Z80 , Z8 и Z8000 ; семейство National Semiconductor NS320xx ; семейство MOS Technology 6502 и другие.

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

Поощрения и выгоды

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

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

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

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

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

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

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

Идея RISC

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

Ранний (ретроактивно) процессор с маркировкой RISC ( IBM 801  – Исследовательский центр IBM Watson, середина 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 P5 Pentium было суперскалярной версией этих принципов. Однако современные процессоры 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 г.). «Дело в пользу компьютера с сокращенным набором команд». ACM SIGARCH Computer Architecture News . 8 (6). ACM : 25–33. doi :10.1145/641914.641917. S2CID  12034303.
  2. ^ "История компьютеров: Архитектура оборудования серии CDC 6000". Музей Ваальсдорпа . 23 июля 2023 г. Получено 19 января 2024 г.
  3. Энтони, Себастьян (10 апреля 2012 г.). «История суперкомпьютеров». ExtremeTech . Получено 19 января 2024 г. .
  4. ^ Хеннесси, Джон ; Паттерсон, Дэвид . Computer Architecture: A Quantitative Approach (PDF) . Архивировано (PDF) из оригинала 14 июня 2023 г. Получено 13 июня 2023 г.

Общие ссылки

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