История и эволюция наборов инструкций по цисцисту с 1970-х годов по настоящее время
Введение: Непреходящее наследие архитектуры CISC
Архитектура Комплексного набора инструкций (CISC) формировала основу современных вычислений на протяжении более пяти десятилетий. От мейнфреймов размером с комнату 1970-х годов до карманных устройств сегодня наборы инструкций CISC непрерывно развивались, чтобы удовлетворить требования все более сложных программных и аппаратных сред. Понимание истории и эволюции CISC имеет важное значение для любого, кто работает в компьютерной архитектуре, системном программировании или дизайне оборудования. Эта статья прослеживает полную дугу развития CISC, начиная с его истоков в эпоху ранних мэйнфреймов и заканчивая передовыми гибридными архитектурами, которые питают сегодняшние серверы, настольные компьютеры и ноутбуки.
Основная предпосылка CISC элегантна: проектировать процессор, который может выполнять сложные многоступенчатые операции с одними инструкциями, тем самым уменьшая семантический разрыв между языками программирования высокого уровня и машинным кодом. Такой подход обещал более простые компиляторы, меньшие размеры программ и более эффективное использование памяти в то время, когда и память, и хранение были чрезвычайно дороги. В то время как рост архитектуры RISC в 1980-х годах бросил вызов этой философии, CISC не только выжил, но и адаптировался, включив методы RISC-стиля при сохранении обратной совместимости и богатых наборов инструкций. Сегодня CISC остается доминирующей архитектурой на рынках настольных, серверных и мобильных вычислений через вездесущие наборы команд x86 и x86-64.
Происхождение CISC в 1970-х: мейнфреймы и зарождение сложных инструкций
Семена архитектуры CISC были посажены в конце 1960-х и начале 1970-х годов, период, когда стоимость памяти была астрономической по современным стандартам. Компьютерные дизайнеры стремились максимизировать объем работы, выполняемой за инструкцию, потому что каждая инструкция потребляла ценные циклы памяти. Система IBM System/360, представленная в 1964 году, часто упоминается как первая крупная коммерческая система, которая воплотила принципы CISC. Его набор инструкций был удивительно богат для своего времени, поддерживая несколько режимов адресации и различные типы данных, от целых чисел до упакованных десятичных чисел. Система/360 продемонстрировала, что один комплексный набор инструкций может охватывать целое семейство машин, от недорогих моделей до высокопроизводительных мэйнфреймов.
Сам термин «CISC» не существовал до конца 1970-х годов, когда исследователи из IBM и Стэнфордского университета начали противопоставлять его зарождающейся философии RISC. До этого все процессоры были просто «процессорами». Архитектурный подход, который позже будет помечен CISC, был обусловлен несколькими практическими ограничениями: ограниченная пропускная способность памяти, высокая стоимость чипов памяти и желание сделать программирование на языке ассемблера более продуктивным. Дизайнеры упаковывали инструкции с максимально возможной функциональностью. Одна инструкция могла загружать данные из памяти, выполнять арифметику и сохранять результат обратно, все в одной операции. Это резко контрастировало с минималистским подходом, который позже будет отстаивать RISC.
К середине 1970-х годов такие компании, как Digital Equipment Corporation (DEC) с ее VAX-11/780 и Intel с ее процессором 8086, продвигали принципы CISC дальше. Архитектура VAX, в частности, стала учебным примером CISC, включающим более 300 инструкций и 16 режимов адресации. VAX мог выполнять такие инструкции, как (полиномиальная оценка) и (редактировать и сравнивать строку символов) в аппаратном обеспечении, задачи, для выполнения которых архитектурам RISC требовалось бы множество инструкций. Хотя эта сложность была мощной, она также затрудняла конвейеризацию VAX и оптимизацию для высоких тактовых частот.
Основные характеристики ранних процессоров CISC
- Большие наборы команд: Ранние чипы CISC часто содержали сотни различных инструкций, многие из которых выполняли узкоспециализированные операции.
- Переменные длины команд: Инструкции могут варьироваться от одного байта до нескольких десятков байтов, что позволяет гибко кодировать, но усложняет декодирование.
- Множественные режимы адресации: Процессоры поддерживали множество способов указания операндов, включая режимы регистрации прямого, непрямого, индексированного и смещения базы.
- Комплексный микрокод: Логика управления была реализована с использованием микрокода, слоя низкоуровневых инструкций, которые переводили каждую машинную инструкцию в аппаратные управляющие сигналы. Этот подход упрощал дизайн процессора, но ограничивал производительность.
- Операции памяти к памяти: Многие ранние инструкции CISC могли работать непосредственно на операндах памяти без необходимости регистров для промежуточного хранения.
Эти характеристики сделали ранние процессоры CISC исключительно гибкими для программистов и компиляторов.Однако сложность декодирования инструкций переменной длины и выполнения микрокодированных операций означала, что эти процессоры обычно работали на более медленных тактовых частотах и требовали больше площади кремния, чем более простые конструкции.
Расцвет CISC: Intel 8086 и наследие x86
Наиболее значимым событием в истории CISC стало введение в 1978 году Intel 8086. 8086 представлял собой 16-битный процессор с 20-битной адресной шиной, позволяющий адресовать до 1 МБ памяти. Его набор команд был намеренно разработан, чтобы быть обратно совместимым с более ранним 8-битным процессором 8080, облегчая переход для разработчиков программного обеспечения. Этот набор команд, известный как x86, станет самой прочной и широко развернутой архитектурой CISC в истории.
Решение IBM в 1981 году использовать Intel 8088 (более дешевую, 8-битную версию 8086) в своем оригинальном персональном компьютере IBM эффективно помазало x86 в качестве стандарта для архитектуры ПК. Каждое последующее поколение процессоров Intel, от 80286 и 80386 до семейств Pentium, Core и Xeon, поддерживало обратную совместимость с оригинальным набором инструкций 8086. Эта совместимость стала как силой, так и бременем: она позволила десятилетиям программного обеспечения работать на современном оборудовании, но также заставила Intel выполнять устаревшие инструкции и причуды кодирования, которые усложняют современные высокопроизводительные реализации.
80386, выпущенный в 1985 году, был знаковым чипом, который представил 32-битную обработку линии x86. Он также принес подачу памяти, защищенный режим и виртуальный режим 8086, возможности, которые заложили основу для современных операционных систем, таких как Linux и Windows NT. Набор инструкций 80386 был значительно расширен с 8086, добавив новые инструкции общего назначения, струнные операции и команды системного уровня. Несмотря на свою сложность, 80386 был поразительно успешным, цементируя доминирование Intel на рынке процессоров ПК в течение следующих двух десятилетий.
Дискуссии CISC против RISC: Великий архитектурный раскол
К середине 1980-х годов в исследованиях компьютерной архитектуры возник философский раскол. С одной стороны стояло учреждение CISC, возглавляемое Intel, Motorola и National Semiconductor. С другой стороны стояло новое поколение архитекторов, отстаивающих более простые, более быстрые процессоры. Это движение, получившее название RISC (Reduced Instruction Set Computing), отстаивалось исследователями из Калифорнийского университета в Беркли и Стэнфордского университета. Первоначальные проекты RISC-I и Стэнфордский MIPS продемонстрировали, что процессор с небольшим, однородным набором инструкций может превосходить современные чипы CISC на многих рабочих нагрузках, несмотря на выполнение большего количества инструкций в программе.
Основные аргументы лагеря RISC были убедительными:
- Более простые инструкции декодируют быстрее , обеспечивая более высокую тактовую частоту.
- Инструкции фиксированной длины упрощают конвейерирование, позволяя одновременно выполнять несколько инструкций.
- Архитектура магазина загрузки , где только загрузка и хранение инструкций доступа к памяти, облегчают оптимизацию использования регистра и уменьшают киоски трубопровода.
- Большие файлы регистра уменьшают количество доступов к памяти, улучшая производительность.
- Оптимизация компилятора часто может достигать лучших результатов с более простыми инструкциями, чем с микрокодированными сложными инструкциями.
Некоторое время RISC казался готовым полностью заменить CISC. Рабочие станции от Sun (SPARC), Silicon Graphics (MIPS) и IBM (POWER) продемонстрировали преимущества производительности RISC. К началу 1990-х годов чипы RISC работали на более высоких тактовых частотах и обеспечивали превосходную производительность целых чисел и плавающих точек по сравнению с современными процессорами CISC. Многие отраслевые наблюдатели предсказывали возможную кончину CISC.
Однако ответ CISC состоял не в том, чтобы отказаться от набора инструкций, а в том, чтобы принять методы RISC внутри. Intel 80486, выпущенный в 1989 году, включал в себя пятиступенчатый конвейер, кэш на чипе и более эффективный движок микрокода. Pentium, запущенный в 1993 году, добавил суперскалярную архитектуру, которая могла выполнять две инструкции на тактовый цикл. Но настоящий прорыв пришел с Pentium Pro в 1995 году, который представил слой аппаратного перевода , который преобразовал инструкции x86 в микрооперации (микро-операции), которые затем были выполнены быстрым, похожим на RISC ядром. Этот гибридный подход, известный как «CISC передний конец, RISC задний конец», позволил Intel поддерживать обратную совместимость, закрывая разрыв в производительности с чистыми конструкциями RISC.
CISC Renaissance: микро-опс, пипелинирование и внезапная казнь
Метод перевода микроопераций Pentium Pro был преобразующей инновацией. Современные процессоры x86 от Intel и AMD декодируют каждую сложную команду x86 в одну или несколько простых микроопераций фиксированной длины. Эти микрооперации затем отправляются через глубоко конвейерный, сверхскалярный механизм исполнения, который поддерживает внепорядковое исполнение, переименование регистра и спекулятивное исполнение. Сам ядро исполнения по существу RISC-подобно, оптимизировано для простоты и параллелизма, в то время как передний конец обрабатывает сложность набора инструкций CISC.
Эта философия дизайна достигла своего зенита с Микроархитектура Intel Core (2006) и ее преемниками.
- Широкое выполнение не по порядку: Процессор может извлекать, декодировать и выполнять до четырех инструкций за цикл, переупорядочение их для максимального использования трубопровода.
- Макро- и микро-фьюжн: Примыкающие инструкции x86 можно объединить в один микро-оператор, улучшая полосу пропускания декодирования.
- Расширенное предсказание ветвей: Многоуровневые предикторы и буферы обратного стека уменьшили штраф за неверные предсказания ветвей, критический фактор в конвейерных процессорах.
- Энергоэффективное состояние сна: Динамическое напряжение и частотное масштабирование позволили процессору снизить энергопотребление при низком спросе.
Конкурирующие архитектуры AMD K8 и K10, а позже и серии Ryzen/Zen, преследовали аналогичные стратегии. Архитектура Zen, представленная в 2017 году, отличалась полностью переработанной микроархитектурой с массивным кэшем команд 32KB L1, кэшем микроопераций, четырьмя ALU и поддержкой одновременного многопоточного (SMT) . Подход AMD продемонстрировал, что процессоры CISC могут не только соответствовать, но и превосходить производительность многих конструкций RISC в широком диапазоне рабочих нагрузок.
Ключевые технологии в современной реализации CISC
- Перевод микроопераций: Сложные инструкции x86 разлагаются на более простые, фиксированные микрооперации, которые могут быть запланированы не по порядку.
- Макро-операционный кэш: Часто используемые микрооперации кэшируются, пропуская стадию декодирования и снижая энергопотребление.
- Внепорядковое исполнение: Инструкции (микро-операции) выполняются в порядке потока данных, а не в программном порядке, что улучшает использование исполнительных блоков.
- Регистровое переименование: Большой набор регистров x86 отображается на гораздо большем пуле физических регистров, устраняя ложные зависимости.
- Специальное исполнение: Процессор прогнозирует результаты ветвей и выполняет инструкции заранее, откатываясь от неправильных прогнозов.
- Одновременная многопоточность (SMT): Несколько аппаратных потоков совместно используют ресурсы выполнения, улучшая пропускную способность без дублирования всего ядра.
Эти методы позволяют современным процессорам x86 достигать параллелизма уровня команд, который конкурирует или превосходит аналогичный RISC-проекты, сохраняя при этом полную обратную совместимость.Результатом является процессор, который может выполнять многолетнее программное обеспечение с невероятной скоростью, а также поддерживать современные рабочие нагрузки, такие как виртуализация, шифрование и вывод машинного обучения.
Современный CISC: x86-64, виртуализация и расширение безопасности
64-битное расширение архитектуры x86, известное как AMD64 (позже принятое Intel как Intel 64 или x86-64), было введено AMD с процессором Opteron в 2003 году. Это расширение добавило 64-битные регистры общего назначения, расширило виртуальное адресное пространство до 48 бит (и в конечном итоге 57 бит с 5-уровневой подачей), и представило новый набор инструкций для 64-битных операций. Критически, AMD64 поддерживала полную обратную совместимость с устаревшим 32-битным и 16-битным кодом x86, что позволило плавный переход. Сегодня x86-64 является доминирующим ISA для настольных и серверных вычислений, поддерживаемых всеми основными операционными системами и приложениями.
Поддержка виртуализации была еще одной важной вехой в эволюции CISC. Технология Intel VT-x (Vanderpool), представленная в 2005 году, добавила аппаратную виртуализацию к архитектуре x86. AMD последовала за расширением AMD-V (Pacifica). Эти функции позволили гипервизорам запускать несколько гостевых операционных систем с почти нативной производительностью, революционизируя эффективность центров обработки данных и обеспечивая революцию облачных вычислений. Расширения аппаратного обеспечения упростили сложную задачу виртуализации архитектуры CISC, которая ранее требовала двоичного перевода и методов паравиртуализации.
Расширения безопасности также стали определяющей особенностью современных процессоров CISC. Расширения безопасности Intel SGX (Расширения защиты программного обеспечения) и TDX (Расширения доверенной доменной зоны) (SEV (Защищенная зашифрованная виртуализация)] (Защищенная защищенная виртуализация) Intel CET (Технология обеспечения соблюдения контроля потока) и AMD Shadow Stack защищают от атак обратно-ориентированного программирования (ROP) и программирования с переходной ориентацией (JOP). Эти функции безопасности используют богатый набор инструкций CISC для обеспечения защиты, которую было бы трудно реализовать на более простых архитектурах.
AI и векторная обработка также были интегрированы в современные CISC. Реализации Intel AVX-512 (Advanced Vector Extensions) и AMD AVX2 и будущие AVX-512 обеспечивают 512-битные широкие SIMD-операции (Single Instruction, Multiple Data). Эти расширения ускоряют рабочие нагрузки, начиная от научных вычислений до вывода машинного обучения. Intel DL Boost (Deep Learning Boost) добавляет целочисленные векторные инструкции нейронной сети, в то время как AMD VNNI (Vector Neural Network Instructions) аналогично ускоряет вывод AI на аппаратном обеспечении x86.
Современные реализации CISC: Intel Core и AMD Ryzen
По состоянию на середину 2020-х годов, два доминирующих семейства процессоров CISC являются Intel Core (теперь в своем 14-м поколении) и AMD Ryzen (на основе микроархитектур Zen 4 и Zen 5).
Последние процессоры Intel Core Ultra (Meteor Lake и преемники) используют дизайн на основе плитки, который разделяет вычисления, графику и I/O на отдельные чиплеты. Вычислительная плитка включает в себя смесь микроархитектуры Performance-cores (P-cores) на основе Redwood Cove и эффективных ядер (E-cores) на основе Crestmont . Этот гетерогенный подход, вдохновленный большим ARM.LITTLE, позволяет процессору оптимизировать как однопоточное исполнение, так и многопоточное пропускное способность при сохранении энергоэффективности. Микроархитектура продолжает совершенствовать синтез микро-операций, прогнозирование ветвей и выполнение вне порядка, обеспечивая двузначный прирост производительности по сравнению с предыдущим поколением.
Процессоры AMD Ryzen 7000 и 8000 серии, построенные на микроархитектуре Zen 4, имеют до 16 ядер (32 потока) в основной настольной платформе. Архитектура Zen 4 увеличила кэш L2 на ядро до 1 МБ, улучшила предиктор ветвей и добавила поддержку инструкций AVX-512. Контроллер памяти поддерживает память DDR5 и обеспечивает до 28 полос PCIe 5.0 непосредственно от процессора. Технология AMD 3D V-Cache поверх вычислительного кристалла обеспечивает дополнительный 64 МБ кэша L3 поверх вычисления, обеспечивая существенный прирост производительности для чувствительных к кэшу рабочих нагрузок, таких как игры и операции с базами данных.
Обе компании продолжают вкладывать значительные средства в чиплетные архитектуры, которые позволяют им объединять несколько меньших матриц в единый пакет. Такой подход повышает производительность, снижает затраты и обеспечивает гибкие конфигурации продукта. Тенденция чиплетов представляет собой фундаментальный сдвиг в дизайне процессора, отход от монолитных матриц к модульным системам на основе межсоединений.
Будущее CISC: гибридные архитектуры и специализированные ускорители
Эволюция CISC далека от завершения. Несколько тенденций формируют будущее дизайна набора инструкций:
- Ускорители, специфичные для домена: Современные процессоры CISC все чаще интегрируют специализированные аппаратные блоки для ИИ, криптографии, кодирования мультимедиа и сетей. Эти ускорители обычно управляются с помощью новых инструкций, добавленных в ISA, расширяя традицию CISC включения сложных операций в набор команд.
- Инструкции, ориентированные на безопасность: Новые инструкции для тегов памяти, аутентификации указателей и конфиденциальных вычислений добавляются к x86-64, что отражает растущую важность безопасности в вычислительных системах.
- RISC-V конкуренция: Архитектура набора инструкций с открытым исходным кодом RISC-V представляет собой долгосрочную проблему доминирования x86. В то время как RISC-V в настоящее время не хватает экосистемы и производительности x86, его модульный характер и нейтральное управление поставщиками привлекают инвестиции от крупных компаний. Если RISC-V получает значительную долю рынка, это может оказать давление на Intel и AMD, чтобы ускорить инновации в своих проектах CISC.
- Ответная совместимость как обоюдоострый меч: Требование поддерживать десятилетия унаследованных инструкций накладывает значительную сложность и затраты на площадь кремния. Однако полная ликвидация унаследованной поддержки рискует нарушить огромное количество существующего программного обеспечения. Отрасль изучает способы оптимизировать набор инструкций, сохраняя совместимость посредством эмуляции или динамического перевода.
- Гибридные вычисления:] Интеграция элементов CISC и RISC продолжается. Некоторые будущие проекты могут принять двухуровневый подход: RISC-подобное ядро для высокопроизводительного, энергоэффективного исполнения с передним концом CISC, который переводит устаревшие инструкции. Это размывание традиционной границы CISC/RISC предполагает, что будущее вычислений будет определяться не идеологической чистотой, а прагматической инженерией.
Особенно интригующей возможностью является использование динамического двоичного перевода для отделения набора инструкций, представленных программному обеспечению, от родной внутренней архитектуры процессора. Это уже распространено в виртуализации (например, QEMU) и в некоторых реализациях процессора (например, в режиме совместимости с x86 Itanium). Если технология двоичного перевода достаточно созревает, она может позволить будущим процессорам CISC постепенно поэтапно удалять кодирование устаревших инструкций при сохранении совместимости программного обеспечения через слой перевода программного обеспечения.
Вывод: CISC, RISC и размывание границ
История наборов инструкций CISC - это история адаптации и устойчивости. Родившиеся из практических ограничений вычислений 1970-х годов, архитектуры CISC доминировали в отрасли на протяжении десятилетий, столкнулись со смертельной проблемой от RISC в 1980-х и 1990-х годах, а затем заново изобрели себя, приняв методы, подобные RISC, внутренне сохраняя обратную совместимость. Результатом является зрелая, высокоразвитая экосистема, которая продолжает питать подавляющее большинство серверов, настольных компьютеров и ноутбуков во всем мире.
Сегодняшние процессоры CISC, примером которых являются семейства Intel Core и AMD Ryzen, представляют собой гибридные конструкции, которые сочетают богатую семантику большого набора инструкций с удобной для конвейера моделью исполнения RISC. Слой трансляции микроопераций, который соединяет эти два мира, теперь является стандартной особенностью всех высокопроизводительных процессоров x86. Это слияние CISC и RISC-философий произвело чипы, которые одновременно богаты функциями и исключительно быстры, способны обрабатывать все, от унаследованных бизнес-приложений до передовых рабочих нагрузок ИИ.
Заглядывая вперед, граница между CISC и RISC, вероятно, продолжит размываться. Развивающиеся архитектуры, такие как RISC-V и ARM v9, включают в себя более сложные инструкции для специализированных задач, в то время как проекты CISC упорядочивают свои исполнительные ядра и добавляют больше аппаратного ускорения. Долгосрочные дебаты между CISC и RISC были решены не победой одного лагеря над другим, а конвергенцией обоих в прагматическую среднюю точку. Для инженеров и архитекторов урок ясен: лучший набор инструкций - тот, который наилучшим образом удовлетворяет потребности своих пользователей, уравновешивая сложность, производительность, мощность и совместимость в постоянно меняющемся технологическом ландшафте.
Для дальнейшего чтения документация Intel Architecture Instruction Set Extensions предоставляет авторитетные детали современных инструкций x86, в то время как обзор AMD Zen Microarchitecture предлагает понимание современной реализации CISC. IBM System/360 исторический архив предоставляет ценный контекст для понимания происхождения CISC, а технические спецификации RISC-V International иллюстрируют альтернативный модульный подход к проектированию набора инструкций.