Загрузка 0
ПОДЕЛИТЬСЯ

Мой блог

Листай вниз

Как архитектуры RISC и CISC заимствовали лучшие идеи друг друга

Как архитектуры RISC и CISC заимствовали лучшие идеи друг друга

Споры между сторонниками архитектур RISC и CISC потеряли актуальность, поскольку процессоры обеих концепций со временем переняли ключевые технические решения друг у друга. Первоначально считалось, что x86-процессоры в ПК относятся к CISC, а мобильные чипы Arm — к RISC. Однако за последние три десятка лет производители высокопроизводительных x86-ядер активно внедряли методы, характерные для RISC, тогда как современные мощные ядра Arm используют решения из мира CISC.

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

Эволюция подхода CISC и роль микрокода

Исторически сложные процессоры опирались на микрокод. В архитектуре Intel 8086, выпущенной в 1978 году, микрокод управлял выполнением большинства x86-инструкций. Эти процедуры размещались в постоянной памяти чипа и задавали базовые шаги для обработки команд. Процесс обратного инжиниринга выявил контрольное хранилище, содержащее сотни микроинструкций для поддержки различных типов операций. Другие задачи выполнялись с помощью выделенной логики.

Реклама

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

Внедрение RISC-технологий в процессоры x86

К концу 1980-х годов судьба архитектуры x86 казалась многим неопределенной, но инженеры пошли по пути изменения принципов выполнения инструкций, а не отказа от них. Intel 486 получил пятиступенчатый конвейер, способный обрабатывать простую инструкцию за такт при благоприятных условиях, хотя сложные операции по-прежнему требовали больше времени.

Появление микроопераций и влияние NexGen с AMD

Серьезные изменения произошли в середине 1990-х годов. Первопроходцем в x86-мире стала компания NexGen со своей разработкой Nx586, которая преобразовывала x86-инструкции в более простые внутренние операции. Компания AMD при создании процессора K5 применила схожий подход, опираясь на наработки своего главного архитектора, ранее проектировавшего RISC-решения. Декодер K5 переводил команды x86 в несколько внутренних операций.

В ноябре 1995 года компания Intel выпустила Pentium Pro. Его декодер переводил команды x86 в простые внутренние операции, получившие название микроопераций или uops. Это позволило применять методы высокопроизводительных RISC-архитектур, сохраняя обратную совместимость. Ядро могло выполнять готовые операции вне порядка, а затем выдавать результаты в исходной последовательности. Микрокод при этом полностью не исчез: стандартные инструкции обрабатывались аппаратными декодерами, а для сложных сценариев задействовались длинные микрокодовые цепочки.

Заимствования в современных ядрах Arm

Современные ядра Arm выполняют обратные заимствования, активно используя методы, ранее присущие x86. Например, они разделяют сложные инструкции на микрооперации. В суперкомпьютерном чипе Fujitsu A64FX векторные и арифметические операции могут расщепляться на десятки внутренних микроопераций для выполнения вычислений.

Еще одна заимствованная из мира x86 технология — кэширование декодированных операций. Начиная с архитектуры Cortex-A77, в ядра Arm внедрили кэш макроопераций, позволяющий повторно использовать результаты декодирования для повышения пропускной способности и снижения нагрузки на конвейер. Хотя AArch64 сохраняет фиксированную длину инструкций и отделяет арифметику от работы с памятью, масштаб и сложность внутренней обработки сближают современные процессорные архитектуры.

Особенности реализации и споры об эффективности

Сам термин «RISC-подобный» применительно к микрооперациям в x86 вызывает споры среди разработчиков. Архитектор Pentium Pro Боб Колвелл возражал против стирания границ между программным набором инструкций и аппаратной реализацией. С его точки зрения, набор инструкций представляет собой обещание программе, а микроархитектура — способ выполнения этого обещания. Внутренние микрооперации не являются самостоятельными командами для софта, поэтому прямое сравнение их ширины с RISC-инструкциями некорректно.

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

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

01.