ARM против x86: В чем разница между двумя архитектурами процессоров?
Вы наверняка знаете, что мир процессоров разбит на два лагеря. Если вы смотрите это видео со смартфона, то для вас работает процессор на архитектуре ARM, а если с ноутбука, для вас трудится чип на архитектуре x86.
А теперь еще и Apple объявила, что переводит свои Mac на собственные процессоры Apple Silicon на архитектуре ARM. Мы уже рассказывали, почему так происходит. А сегодня давайте подробно разберемся, в чем принципиальные отличия x86 и ARM. И зачем Apple в это все вписалась?
Итак, большинство мобильных устройств, iPhone и Android’ы работают на ARM’е. Qualcomm, HUAWEI Kirin, Samsung Exynos и Apple A13/A14 Bionic — это все ARM-процессоры.
А вот на компьютере не так — там доминирует x86 под крылом Intel и AMD. Именно поэтому на телефоне мы не можем запустить Word с компьютера.
x86 — так называется по последним цифрам семейства классических процессоров Intel 70-80х годов.

Чем же они отличаются?
Есть два ключевых отличия.
Первое — это набор инструкций, то есть язык который понимает процессор
x86 процессоры используют сложный набор инструкций, который называется CISC — Complex Instruction Set Computing.
ARM процессоры наоборот используют упрощенный набор инструкций — RISC — Reduced Instruction Set Computing.
Кстати ARM расшифровывается как Продвинутые RISC машины — Advanced RISC Machines.
Наборы инструкций ещё принято назвать архитектурой или ISA — Instruction Set Architecture.
Второе отличие — это микроархитектура. Что это такое?
От того на каком языке говорят процессоры, зависит и то, как они проектируются. Потому как для выполнения каждой инструкции на процессоре нужно расположить свой логический блок. Соответственно, разные инструкции — разный дизайн процессора. А дизайн — это и есть микроархитектура.
- x86 — CISC
- ARM — RISC
Но как так произошло, что процессоры стали говорить на разных языках?
История CISC

Памятка программиста, 1960-е годы. Цифровой (машинный) код «Минск-22».
Всё началось в 1960-х. Поначалу программисты работали с машинным кодом, то есть реально писали нолики и единички. Это быстро всех достало и появился Assembler. Низкоуровневый язык программирования, который позволял писать простые команды типа сложить, скопировать и прочее. Но программировать на Assembler’е тоже было несладко. Потому как приходилось буквально “за ручку” поэтапно описывать процессору каждое его действие.
Поэтому, если бы вы ужинали с процессором, и попросили передать его вам соль, это выглядело бы так:
- Эй процессор, посмотри в центр стола.
- Видишь соль? Возьми её.
- Теперь посмотри на меня.
- Отдай мне соль. — Ага, спасибо!
- А теперь снова возьми у меня соль.
- Поставь её откуда взял
- Спасибо большое! Продолжай свои дела.
- Кхм… Процессор, видишь перец?
- И так далее.
Этот подход стал настоящим спасением как для разработчиков, так и для бизнеса. Захотел клиент новую инструкцию — не проблема, были бы деньги — мы сделаем. А деньги у клиентов были.
Недостатки CISC
Но был ли такой подход оптимальным. С точки зрения разработчиков — да. Но вот микроархитектура страдала.
Представьте, вы купили квартиру и теперь вам нужно обставить её мебелью. Площади мало, каждый квадратный метр на счету. И вот представьте, если бы CISC-процессор обставил мебелью вам гостиную, он бы с одной стороны позаботился о комфорте каждого потенциального гостя и выделил бы для него своё персональное место.
С другой стороны, он бы не щадил бюджет. Диван для одного человека, пуф для другого, кушетка для третьего, трон из Игры Престолов для вашей Дейенерис. В этом случае площадь комнаты бы очень быстро закончилась. Чтобы разместить всех вам бы пришлось увеличивать бюджет и расширять зал. Это не рационально. Но самое главное, CISC-архитектура существует очень давно и те инструкции, которые были написаны в 60-х годах сейчас уже вообще не актуальны. Поэтому часть мебели, а точнее исполнительных блоков, просто не будут использоваться. Но многие из них там остаются. Поэтому появился RISC…
Преимущества RISC
С одной стороны писать на Assembler’е под RISC процессоры не очень-то удобно. Если в лоб сравнивать код, написанный под CISC и RISC процессоры, очевидно преимущество первого.
Так выглядит код одной и той же операции для x86 и ARM.
x86
- MOV AX, 15; AH = 00, AL = 0Fh
- AAA; AH = 01, AL = 05
- RET
- MOV R3, #10
- AND R2, R0, #0xF
- CMP R2, R3
- IT LT
- BLT elsebranch
- ADD R2. #6
- ADD R1. #1
- elsebranch:
- END
Представьте, что вы проектируете процессор. Расположение блоков на х86 выглядело бы так.

Каждый цветной квадрат — это отдельные команды. Их много и они разные. Как вы поняли, здесь мы уже говорим про микроархитектуру, которая вытекает из набора команд. А вот ARM-процессор скорее выглядит так.

Ему не нужны блоки, созданные для функций, написанных 50 лет назад.
По сути, тут блоки только для самых востребованных команд. Зато таких блоков много. А это значит, что можно одновременно выполнять больше базовых команд. А раритетные не занимают место.
Еще один бонус сокращенного набора RISC: меньше места на чипе занимает блок по декодированию команд. Да, для этого тоже нужно место. Архитектура RISC проще и удобнее, загибайте пальцы:
- проще работа с памятью,
- более богатая регистровая архитектура,
- легче делать 32/64/128 разряды,
- легче оптимизировать,
- меньше энергопотребление,
- проще масштабировать и делать отладку.
Поэтому наши смартфоны, которые работают на ARM процессорах с архитектурой RISC, долго живут, не требуют активного охлаждения и такие быстрые.
Лицензирование
Но это все отличия технические. Есть отличия и организационные. Вы не задумывались почему для смартфонов так много производителей процессоров, а в мире ПК на x86 только AMD и Intel? Все просто — ARM это компания которая занимается лицензированием, а не производством.
Даже Apple приложила руку к развитию ARM. Вместе с Acorn Computers и VLSI Technology. Apple присоединился к альянсу из-за их грядущего устройства — Newton. Устройства, главной функцией которого было распознавание текста.
Даже вы можете начать производить свои процессоры, купив лицензию. А вот производить процессоры на x86 не может никто кроме синей и красной компании. А это значит что? Правильно, меньше конкуренции, медленнее развитие. Как же так произошло?

Ну окей. Допустим ARM прекрасно справляется со смартфонами и планшетами, но как насчет компьютеров и серверов, где вся поляна исторически поделена? И зачем Apple вообще ломанулась туда со своим Apple Silicon.
Что сейчас?
Допустим мы решили, что архитектура ARM более эффективная и универсальная. Что теперь? x86 похоронен?
На самом деле, в Intel и AMD не дураки сидят. И сейчас под капотом современные CISC-процессоры очень похожи на RISC. Постепенно разработчики CISC-процессоров все-таки пришли к этому и начали делать гибридные процессоры, но старый хвост так просто нельзя сбросить.

Но уже достаточно давно процессоры Intel и AMD разбивают входные инструкции на более мелкие микро инструкции (micro-ops), которые в дальнейшем — сейчас вы удивитесь — исполняются RISC ядром.
Да-да, ребята! Те самые 4-8 ядер в вашем ПК — это тоже RISC-ядра!
Надеюсь, тут вы окончательно запутались. Но суть в том, что разница между RISC и CISC-дизайнами уже сейчас минимальна.
А что остается важным — так это микроархитектура. То есть то, насколько эффективно все организовано на самом камне.
Ну вы уже наверное знаете, что Современные iPad практически не уступают 15-дюймовым MacBook Pro с процессорами Core i7 и Core i9.

А что с компьютерами?
Недавно компания Ampere представила свой 80-ядерный ARM процессор. По заявлению производителя в тестах процессор Ampere показывает результат на 4% лучше, чем самый быстрый процессор EPYC от AMD и потребляет на 14% меньше энергии.


Компания Ampere лезет в сегменты Cloud и Workstation, и показывает там отличные цифры. Самый быстрый суперкомпьютер в мире сегодня работает на ARM ISA. С обратной стороны, Intel пытается все таки влезть в сегмент low power и для этого выпускает новый интересный процессор на микроархитектуре lakefield.
Пока у ноутбуков и процессоров от Intel есть одно неоспоримое достоинство — (охлаждение и) единство архитектуры. Пока на рынке ARM-процессоров существуют Qualcomm, Samsung, MediaTek, в мире x86 творится монополия и разработчикам сильно легче делать софт и игры под “взрослые” процессоры.
И Apple та компания, которая способна мотивировать достаточное количество разработчиков пилить под свой ARM. Но суть этого перехода скорее не в противостоянии CISC и RISC. Поскольку оба подхода сближаются, акцент смещается на микроархитектуру, которую делает Apple для своих мобильных устройств. И судя по всему микроархитектура у них крута. И они хотели бы ее использовать в своих компьютерах.
И если бы Intel лицензировал x86 за деньги другим людям, то вероятно Apple просто адаптировали свою текущую микроархитектуру под x86. Но так как они не могут этого сделать, они решили просто перейти на ARM. Проблема для нас с микроархитектурой в том, что она коммерческая тайна. И мы про нее ничего не знаем.
Итоги

Спрос на ARM в итоге вырастет. Для индустрии это не просто важный шаг, а архиважный. Линус Торвальдс говорил, что пока рабочие станции не станут работать на ARM — на рынке серверов будут использовать x86.
И вот это случилось — в перспективе это миллионы долларов, вложенных в серверные решения. Что, конечно, хорошо и для потребителей. Нас ждет светлое будущее и Apple, действительно, совершила революцию!
Редактор материала: Антон Евстратенко. Этот материал помогли подготовить наши зрители Никита Куликов и Григорий Чирков. Спасибо ребята!
- Блог компании Droider.Ru
- Программирование
- Смартфоны
- Ноутбуки
- Процессоры
Современные процессорные архитектуры
В статье кратко описаны современные процессорные архитектуры, перечислены их особенности и преимущества.
В ЗАКЛАДКИ
Процессорная архитектура
В ходе развития компьютерных технологий были разработаны различные вычислительные системы. Многие из них забыты, а влияние некоторых было весьма значимым. Наметились стратегические тенденции в развитии вычислительной техники и сформировались компьютерные архитектуры. На текущий момент существует несколько основных архитектур и значительное количество процессоров на их основе.
Процессорную архитектуру можно трактовать как комбинацию вычислительной архитектуры и её реализацию в процессоре (в кремнии), то есть рассматривать в аспекте программирования и аппаратно-технических (и технологических) решений. Нужно отметить, что кардинальное отличие архитектур и их несовместимость обнаруживаются именно на уровне машинного кодирования или низкоуровневого программирования (ассемблирования).
С программной точки зрения, процессорная архитектура определяет набор регистров, команд, их структуру и способ выполнения, в результате чего, с одной стороны, программы, собранные для процессоров одной архитектуры, могут выполняться практически на всех процессорах одинаковой (или подобной) архитектуры, а с другой – не смогут работать на процессорах иной архитектуры. Для работы на разных платформах производители программного обеспечения вынуждены выпускать специально скомпилированные (или портированные – перенесённые) для них версии. Примером может служить операционная система Ubuntu Server (ядро Linux), для которой производитель, компания Canonical, кроме основной версии для архитектуры Intel x86 (AMD64), выпустила версии для архитектур ARM, IBM Power и s390x [1]. Также в качестве примера можно привести компанию Microsoft, которая изначально распространяла операционную систему Windows исключительно для архитектуры х86, но с недавнего времени, следуя требованиям рынка и отрасли, объявила о сотрудничестве с компанией Qualcomm [2] и выпустила версию операционной системы Windows 10, работающую на устройствах с процессорами архитектуры ARM (Qualcomm Snapdragon 835) [3]. Из российских ОС следует отметить многоплатформенную операционную систему Astra Linux Special Edition компании АО «НПО РусБИТех», которая существует в версиях для архитектур x86-64 (релиз «Смоленск»), ARM (релиз «Новороссийск»), MIPS (релиз «Севастополь»), IBM System Z (релиз «Мурманск»), POWER (релиз «Керчь») и «Эльбрус» (релиз «Ленинград») [4].
С аппаратной точки зрения, архитектура процессора – это набор составных частей, компонентов и технологий, присущих линейке процессоров. Аппаратная часть постоянно совершенствуется, как по микроархитектуре, так и по технологическому процессу. Выпускаются новые поколения процессоров с целью увеличения производительности и функциональности. Так, на рынке существуют процессоры Intel нескольких поколений: Coffee Lake (восьмое поколение), Kaby Lake (седьмое поколение), Skylake (шестое поколение) и другие. Несмотря на смену микроархитектуры (аппаратной части), они остаются программной архитектурой x86, и на них работает всё ранее написанное для этой архитектуры программное обеспечение, за некоторым исключением, если разработчик ПО использовал недокументированные методы, вызовы и процедуры.
Поэтому, с точки зрения практического применения процессоров, основной является программная архитектура. На текущий момент актуальные и распространённые архитектуры – это CISC, RISC, VLIW.
Архитектура CISC
Первоначально почти все производители первых микропроцессоров использовали архитектуру с расширенным набором команд – CISC (Complex Instruction Set Computer). Причина этого в том, что разработчики пытались уменьшить так называемый семантический разрыв между тем, что компьютеры способны делать, и тем, что требуют языки программирования высокого уровня, пытаясь заменить одной инструкцией многочисленные машинные коды. Также в то время на рынке коммерческих вычислений доминировали мини-компьютеры PDP компании DEC и мейнфреймы компании IBM, которые были основаны на архитектуре CISC. Среди микропроцессоров типичными представителями данной архитектуры стали процессоры компании Intel. На начальном этапе развития микропроцессоров (семидесятые годы прошлого века) были и другие процессоры подобной архитектуры производства компаний Motorola, Zilog, MOS Technology и т.д. Но именно благодаря коммерческой привлекательности микропроцессоров Intel эта архитектура стала самой популярной на текущий момент и практически единственной для персональных компьютеров. Даже компания Apple в своих компьютерах Apple Macintosh в итоге перешла от процессоров PowerPC к процессорам Intel.
Первый процессор Intel, обозначивший начало эпохи микропроцессоров, – микросхема Intel 4004 (рис. 1) – появился в 1971 году [5].
Это был первый коммерческий процессор, реализованный в одной микросхеме. Следует отметить, что сотрудники Intel не догадывались, какое грандиозное открытие они совершили. Эта микросхема вызвала большой интерес и значительный спрос. Компания Intel стала наращивать функциональность, разрядность и повышать частоту микропроцессора. В 1978 году был представлен 16-битный процессор Intel 8086, положивший начало архитектуре x86, или Intel x86. Популярность микроархитектуры х86 была столь велика, что аналогичные процессоры стали выпускать другие производители.
В 1985 году компания Intel выпустила первый 32-битный процессор Intel 386 (рис. 2).
Таким образом сформировалось понятие архитектуры Intel Architecture 32-bit (IA-32), она же Intel х86, или просто x86 [6].
В дальнейшем она стала 64-битной и получила название x86-64, или AMD64, так как впервые 64-битное расширение архитектуры х86 представила компания AMD. Нужно отметить, что Intel x86 не следует путать с Intel Architecture 64-bit (IA-64), которая является принципиально другой архитектурой VLIW, о чём будет сказано позже.
Формально все процессоры х86 являются процессорами CISC-архитектуры.
Итак, x86 – это типичный представитель CISC-архитектуры. Таким образом, в современной интерпретации, говоря CISC, подразумеваем х86, и наоборот.
Для архитектуры CISC характерно:
1) малое количество регистров общего назначения;
2) большое количество различных машинных команд, каждая из которых выполняется за несколько тактов процессора;
3) различные форматы команд с разной длиной;
4) преобладание двухадресной системы команд;
5) развитой механизм адресации операндов.
Основными плюсами данной архитектуры можно считать простоту и эффективность программирования (несколько команд могут быть заменены одной более сложной), а также большое историческое наследие в виде множества написанных для неё программ.
Данная архитектура на текущий момент является основной для настольных и серверных систем.
Производительность
Разработчики вычислительных систем постоянно стремятся к повышению их производительности, определяющим показателем которой является количество инструкций, выполненных за единицу времени.
Общую формулу производительности можно представить в виде:
P = N ⁄ t, (1)
где P – производительность, N – количество инструкций, t – время выполнения.
Добавив количество тактов, необходимых для выполнения инструкций (n), формулу (1) можно представить следующим образом:
P = N ⁄n × n ⁄t. (2)
Первая часть произведения – это количество инструкций, выполняемых за один такт, а вторая – количество тактов процессора за единицу времени, то есть тактовая частота процессора. Таким образом, как следует из выражения (2), для увеличения производительности процессора нужно либо поднимать тактовую частоту, либо увеличивать число инструкций, выполняемых за один такт.
Самый простой способ увеличения скорости вычислений – повышение тактовой частоты процессора. Однако на этом пути существуют некоторые технологические ограничения, не позволяющие постоянно наращивать частоту. Поэтому большинство проектировщиков для повышения производительности при данной тактовой частоте процессора применяют параллелизм – исполнение двух и более инструкций одновременно.
Параллелизм может быть на уровне команд и уровне процессоров. В случае параллелизма на уровне команд происходит запуск большего количества команд в секунду. В случае параллелизма на уровне процессоров над одним заданием работают одновременно несколько процессоров. Каждый подход имеет свои преимущества, и в современных системах используются оба подхода.
Конвейер

Первоначально с целью повышения быстродействия при той же тактовой частоте в центральный процессор была введена конвейерная архитектура (Pipelining).
Обычно для выполнения каждой команды требуется осуществить некоторое количество однотипных операций, таких как выборка команды, дешифрация команды, выборка операнда, выполнение команды и запись результата.
Выполнение каждой из этих операций сопоставляют с одной ступенью конвейера (рис. 3).
На рисунке видно, как работает конвейер во времени. В момент времени 5 происходит выполнение уже пяти команд одновременно. Если принять время цикла равным 2 нс, тогда для выполнения инструкции (прохождения через конвейер) потребуется 10 нс. В результате конвейерной обработки, когда каждый такт конвейер выдаёт результат, время выполнения инструкции будет 2 нс.
Архитектура RISC

Повышение производительности CISC-микропроцессоров из-за особенностей архитектуры приводило к росту количества транзисторов, в результате чего кристаллы становились всё более сложными и дорогостоящими в производстве. Вопросы закрывались конструктивно-технологическими решениями, но в конечном итоге по экономическим соображениям уже не давали адекватного роста производительности.
CISC-архитектура в первозданном своём виде достигла потолка производительности. Применение конвейера для повышения производительности требовало использования простых и быстрых команд. Необходимость дальнейшего роста производительности привела к использованию архитектуры RISС (Reduced Instruction Set Computer), что означает «компьютер с сокращённым набором команд» (табл. 1).
Архитектура была разработана в рамках проекта Berkeley RISC. В 1980 году группа разработчиков приступила к созданию процессора, не ориентированного на интерпретацию, в котором инструкции должны выполняться процессорным ядром без использования микрокода. Исследования работы процессора Motorola 68000 показали, что программы попросту не использовали подавляющее большинство инструкций, заложенных в процессор. Работал принцип 80/20, то есть большее время выполнения типовых программ (80–90%) приходится на относительную малую часть команд процессора (10–20%). Планировалось создать процессор, который бы содержал лишь самые необходимые инструкции. При этом не только уменьшилось общее количество процессорных инструкций, принципиальное отличие заключается в том, что любая инструкция платформы RISC является простой и выполняется за один такт (по крайней мере, должна выполняться), тогда как на выполнение СISC-инструкции могло уходить несколько десятков тактов. При этом длина команды является фиксированной.
Основные особенности RISC-процессоров [7]:
- Сокращённый набор команд.
Первый «настоящий» RISC-процессор имел всего 31 команду. В дальнейшем их количество постепенно росло и достигло 100–200 инструкций в зависимости от реализации процессора. Но это всё равно в несколько раз, а то и на порядок меньше инструкций CISC-процессоров. - Большинство команд выполняется за один такт.
Все команды выполняются непосредственно аппаратным обеспечением, то есть напрямую без интерпретации микрокомандами. Устранение уровня интерпретации повышает скорость выполнения команд. В компьютерах типа CISC более сложные команды разбиваются на несколько шагов, которые потом выполняются как последовательность микрокоманд. - Большое количество регистров общего назначения.
Доступ к памяти происходит относительно медленно. Если слово было загружено из памяти, оно может храниться в регистрах до тех пор, пока не потребуется. Возвращение слова из регистра в память весьма нежелательно, и лучший способ избежать лишних изменений – это наличие достаточного количества регистров. - Наличие жёстких многоступенчатых конвейеров.
Компьютер должен запускать как можно большее количество команд в секунду. Важным фактором повышения производительности является параллелизм, поскольку запустить на выполнение большое количество команд за короткий промежуток времени можно только в случае, если есть возможность одновременного выполнения нескольких команд. Параллелизм на уровне команд (одновременный запуск) обеспечивается многоступенчатыми конвейерами. - Все команды имеют простой формат, и используются немногие способы адресации.
Команды легко декодируются, и к памяти обращаются только команды загрузки и сохранения. - Наличие вместительной раздельной кэш-памяти.
Это необходимо для уменьшения обращений к памяти и тем самым обеспечения необходимого быстродействия для заполнения регистров и конвейеров. - Использование оптимизирующих компиляторов, которые анализируют исходный код и частично меняют порядок следования команд.
Упрощение набора команд призвано сократить конвейер, что позволяет избежать задержек на операциях условных и безусловных переходов. Однородный набор регистров упрощает работу компилятора при оптимизации исполняемого программного кода. Кроме того, RISC-процессоры отличаются меньшим энергопотреблением и тепловыделением.
Уже первые микропроцессоры RISC значительно опережали процессоры CISC по производительности. Учитывая это, можно было предположить, что они должны были занять доминирующее положение на рынке. Но этого не произошло, по крайней мере, по двум причинам. Во-первых, компьютеры RISC несовместимы с архитектурой Intel x86, а многие компании уже вложили значительные средства в программное обеспечение для продукции Intel. И во-вторых, компания Intel сумела воплотить те же идеи в своей архитектуре. Здесь следует отметить, что упомянутый ранее процессор Intel 386 был последним процессором Intel с так называемой классической CISC-архитектурой. Столкнувшись с ограничениями по повышению производительности, компания Intel в процессоре следующего поколения Intel 486 применила RISC-ядро и добавила другие элементы RISC-архитектуры, такие как кэш-память и конвейеры. Теперь процессорное ядро стало выполнять самые простые (и обычно самые распространённые) команды за один цикл, а по обычной технологии CISC интерпретируются более сложные команды. В результате обычные команды выполняются быстро, а более сложные и редкие – медленно. Хотя при таком смешанном подходе производительность ниже, чем в архитектуре RISC, новая архитектура CISC имеет ряд преимуществ, поскольку, с одной стороны, появилась возможность повышения производительности, а с другой, можно использовать старое программное обеспечение без изменений.
Эта гибридная структура привела современные процессоры x86 к тому, что бо́льшую часть площади кристалла занимают элементы, предназначенные для переделки CISC-инструкций в RISC-инструкции, разрешения конфликтов, прогнозирования переходов, исправления последствий неправильных прог-нозов и для решения других подобных задач. Для реальной вычислительной работы остаётся только небольшое количество элементов.
Реализацией RISC-архитектуры являются процессоры ARM, MIPS, PowerPC, SPARC и R1000 – российский процессор с 64-битной архитектурой SPARC v.9 производства АО «МЦСТ».
Суперскалярность
Вычислительные операции могут быть скалярными и векторными.
При выполнении инструкции скалярным процессором обрабатывается один или два операнда (скаляра). В векторных операциях в качестве операндов выступают упорядоченные массивы данных – векторы.
В векторном процессоре, в отличие от обычного, который также может выполнять однотипные операции с множеством данных (инструкция SIMD – Single Instruction Multiple Date), все операции выполняются в одном блоке суммирования, который имеет конвейерную структуру. Примером являются процессоры компании Cray Research, начиная с модели Cray 1, выпущенной в 1974 году.
Скалярный процессор выполняет операции последовательно одна за другой. Последним скалярным процессором компании Intel была модель 80486 – 32-битный микропроцесcор x86 четвёртого поколения, выпущенный в 1989 году. Он имел пятиступенчатый конвейер [8]. Следующий процессор Intel Pentium имел уже два таких конвейера.
Схема с двумя конвейерами представлена на рис. 4.
После выборки из памяти двух инструкций каждая помещается в один из конвейеров. Чтобы выполняться параллельно, инструкции не должны конфликтовать из-за ресурсов и ни одна из них не должна зависеть от результата выполнения другой. Как и в случае с одним конвейером, либо компилятор должен гарантировать отсутствие конфликтов при выполнении инструкций, либо это выявляется и устраняется дополнительным оборудованием непосредственно в ходе выполнения инструкции.
Специальные компиляторы для процессора Intel Pentium объединяли совместимые команды в пары и генерировали программы, которые могли выполняться быстрее, чем в предыдущих версиях процессоров. В некоторых случаях, например при операциях с целыми числами, при той же тактовой частоте программы на процессоре Intel Pentium исполнялись вдвое быстрее, чем на процессоре Intel 486. Выигрыш достигался благодаря второму конвейеру.
Дальнейшее увеличение конвейеров было весьма сложно и громоздко в технической реализации, поэтому был использован другой подход – один конвейер с большим количеством функциональных блоков – суперскалярная архитектура.
Суперскалярный процессор реализует параллелизм на уровне инструкций, это обеспечивается за счёт включения в конвейер нескольких функциональных узлов. В 1987 году для обозначения данного подхода был введён термин «суперскалярная архитектура». На рис. 5 показан конвейер с пятью функциональными блоками.
VLIW-процессоры
Архитектура VLIW (Very Long Instruction Word – сверхдлинное командное слово) основывается на явно выраженном параллелизме вычислений, заложенном в систему команд процессора, – EPIC (Explicitly Parallel Instruction Computing – вычисления с явным параллелизмом команд).
Основной принцип организации этой архитектуры сводится к тому, чтобы перенести нагрузку с периода исполнения в период компиляции. Суперскалярный процессор в ходе исполнения переупорядочивает команды, подменяет регистры, распределяет функциональные блоки и выполняет множество других функций, что ведёт к максимальной загрузке аппаратных ресурсов. В архитектуре VLIW эти задачи заранее решает компилятор, который располагает полной и достоверной информацией о регистрах процессора и генерирует оптимальный код, в котором нет конфликтов между регистрами. Кроме того, компилятор следит за загрузкой функциональных блоков и не запускает команды, в которых предполагается обращение к занятым функциональным блокам.
Поток команд в суперскалярном процессоре планируется динамически аппаратным планировщиком с ограничениями по времени и ресурсам. В архитектуре VLIW компилятор планирует поток команд статически и в принципе не ограничен временны́ми и аппаратными ресурсами, что позволяет генерировать оптимальный исполнительный код. В результате на вход VLIW-процессора поступает последовательность больших команд, состоящих из нескольких простых операций, которые могут выполняться параллельно разными функциональными блоками (рис. 6). 
В отличие от суперскалярной архитектуры VLIW-процессор имеет простой, а значит, и более быстрый исполнительный конвейер с минимальным количеством ступеней (рис. 7). 
Итогом такого подхода, с одной стороны, являются следующие преимущества архитектуры [9].
- Прежде всего, это более тщательное планирование выполнения программы и оптимизация кода, что даёт лучшее заполнение исполнительных устройств и выполнение большего количества операций за такт.
- В связи с переносом функциональности на компилятор в процессоре меньше места тратится на функциональные блоки, отвечающие за управление, и больше площади остаётся непосредственно на вычислительные ресурсы, такие как регистры, исполнительные устройства и кэш-память.
- Это, в свою очередь, приводит к упрощению конструкции процессора и технологического процесса его производства, уменьшению количества транзисторов и понижению тепловыделения.
С другой стороны, необходимо учитывать некоторые особенности.
- Сложный компилятор, разработка, поддержка и оптимизация которого довольно ресурсоёмки, требует постоянных доработок и оптимизации и целиком лежит в зоне ответственности разработчика процессора.
- Компилятор должен иметь точную информацию об архитектуре процессора – регистрах и исполнительных устройствах. Таким образом, возникает необходимость компиляции кода для каждого типа процессора при изменении в его архитектуре.
- Возрастает время компиляции, что, в принципе, не является проблемой при наличии высокопроизводительных рабочих станций у программистов.
- Становится сложно учесть динамику исполнения программы при наличии условных ветвлений на основе входящих динамических данных.
Несмотря на ограничения, связанные с несовместимостью процессоров VLIW с классической архитектурой, они незаменимы в случае, когда необходимо добиться высочайшей производительности. Примерами VLIW-процессора являются Intel Itanium архитектуры IA-64 (Intel Architecture 64-bit) и «Эльбрус» (архитектура «Эльбрус 2000») производства компании «МЦСТ».
Заключение
Развитие процессорных архитектур характеризуется постоянным стремлением к повышению производительности вычислительных систем. Каждая из указанных архитектур стремится компенсировать недостатки и ограничения других. И в то же время при улучшении одних характеристик могут ухудшиться другие. Поэтому все современные архитектуры находят применение в компьютерных системах, в зависимости от решаемых задач и условий применения. ●
Литература
1. Scale out with Ubuntu Server [Электронный ресурс] // Режим доступа : https://ubuntu.com/server.
2. Qualcomm Collaborates with Microsoft to Support Windows 10 Computing Devices on Next Generation Qualcomm Snapdragon Processors [Электронный ресурс] // Режим доступа : https://www.qualcomm.com/news/releases/2016/12/08/qualcomm-collaborates-microsoft-support-windows-10. .
3. Windows 10 на архитектуре ARM [Электронный ресурс] // Режим доступа : https://docs.microsoft.com/ru-ru/windows/uwp/porting/apps-on-arm.
4. Операционная система специального назначения Astra Linux ® Special Edition [Электронный ресурс] // Режим доступа : https://astralinux.ru/products/astra-linux-special-edition/.
5. The Story of the Intel® 4004. Intel’s First Microprocessor. Its invention, introduction, and kasting influence [Электронный ресурс] // Режим доступа : https://www.intel.ru/content/www/ru/ru/history/museum-story-of-intel-4004.html.
6. Intel ® 64 and IA-32 Architectures Software Developer’s Manual [Электронный ресурс] // Режим доступа : https://software.intel.com/sites/default/files/managed/a4/60/253665-sdm-vol-1.pdf.
7. Sivarama P. Dandamudi. Guide to RISC Processors: For Programmers and Engineers. – USA : Springer Science+Business Media, Inc., 2005.
8. Embedded Intel486™ Processor Family Developer’s Manual. – USA : Intel Corporation, 1997.
9. An Introduction To Very-Long Instruction Word (VLIW) Computer Architecture [Электронный ресурс] // Режим доступа : http://twins.ee. nctu.edu.tw/courses/ca_08/literature/11_vliw.pdf.
Авторы – сотрудники фирмы «Адвантикс»
Телефон: (495) 232-1693
E-mail: info@advatix-pc.ru
Виды популярных архитектур процессоров
В этой статье мы познакомимся с определением архитектуры процессора и самыми распространёнными и актуальными архитектурами.
Прежде чем рассмотреть основные виды архитектур процессоров, необходимо понять, что это такое. Под архитектурой процессора обычно понимают две совершенно разные сущности.
С программной точки зрения архитектура процессора — это совместимость с определённым набором команд (Intel x86), их структуры (система адресации, набор регистров) и способа исполнения (счётчик команд).
Говоря простым языком, это способность программы, собранной для архитектуры x86, работать практически на любой x86-совместимой системе. При этом такая программа не будет работать, например, на ARM системе.
С аппаратной точки зрения архитектура процессора — это некий набор свойств и качеств, присущий целому семейству процессоров (Skylake – процессоры Intel Core 5 и 6 поколений).
Если тема кажется сложной, можно начать со статьи о том, чем CPU отличается от GPU.
Виды архитектур
В этой статье мы рассмотрим самые распространенные и актуальные архитектуры с программной точки зрения, кроме узкоспециализированных (графических, математических, тензорных).
CISC
CISC (англ. Complex Instruction Set Computer — «компьютер с полным набором команд») — тип процессорной архитектуры, в первую очередь, с нефиксированной длиной команд, а также с кодированием арифметических действий в одной команде и небольшим числом регистров, многие из которых выполняют строго определенную функцию.
Самый яркий пример CISC архитектуры — это x86 (он же IA-32) и x86_64 (он же AMD64).
В CISC процессорах одна команда может быть заменена ей аналогичной, либо группой команд, выполняющих ту же функцию. Отсюда вытекают плюсы и минусы архитектуры: высокая производительность благодаря тому, что несколько команд могут быть заменены одной аналогичной, но большая цена по сравнению с RISC процессорами из-за более сложной архитектуры, в которой многие команды сложнее раскодировать.
RISC
RISC (англ. Reduced Instruction Set Computer — «компьютер с сокращённым набором команд») — архитектура процессора, в котором быстродействие увеличивается за счёт упрощения инструкций: их декодирование становится более простым, а время выполнения — меньшим. Первые RISC-процессоры не имели даже инструкций умножения и деления и не поддерживали работу с числами с плавающей запятой.
По сравнению с CISC эта архитектура имеет константную длину команды, а также меньшее количество схожих инструкций, позволяя уменьшить итоговую цену процессора и энергопотребление, что критично для мобильного сегмента. У RISC также большее количество регистров.
Примеры RISC-архитектур: PowerPC, серия архитектур ARM (ARM7, ARM9, ARM11, Cortex).
В общем случае RISC быстрее CISC. Даже если системе RISC приходится выполнять 4 или 5 команд вместо одной, которую выполняет CISC, RISC все равно выигрывает в скорости, так как RISC-команды выполняются в 10 раз быстрее.
Отсюда возникает закономерный вопрос: почему многие всё ещё используют CISC, когда есть RISC? Всё дело в совместимости. x86_64 всё ещё лидер в desktop-сегменте только по историческим причинам. Так как старые программы работают только на x86, то и новые desktop-системы должны быть x86(_64), чтобы все старые программы и игры могли работать на новой машине.
Для Open Source это по большей части не является проблемой, так как пользователь может найти в интернете версию программы под другую архитектуру. Сделать же версию проприетарной программы под другую архитектуру может только владелец исходного кода программы.
MISC
MISC (англ. Minimal Instruction Set Computer — «компьютер с минимальным набором команд»).
Ещё более простая архитектура, используемая в первую очередь для ещё большего уменьшения итоговой цены и энергопотребления процессора. Используется в IoT-сегменте и недорогих компьютерах, например, роутерах.
Для увеличения производительности во всех вышеперечисленных архитектурах может использоваться “спекулятивное исполнение команд”. Это выполнение команды до того, как станет известно, понадобится эта команда или нет.
VLIW
VLIW (англ. Very Long Instruction Word — «очень длинная машинная команда») — архитектура процессоров с несколькими вычислительными устройствами. Характеризуется тем, что одна инструкция процессора содержит несколько операций, которые должны выполняться параллельно.
По сути является архитектурой CISC со своим аналогом спекулятивного исполнения команд, только сама спекуляция выполняется во время компиляции, а не во время работы программы, из-за чего уязвимости Meltdown и Spectre невозможны для этих процессоров. Компиляторы для процессоров этой архитектуры сильно привязаны к конкретным процессорам. Например, в следующем поколении максимальная длина «очень длинной команды» может из условных 256 бит стать 512 бит, и тут приходится выбирать между увеличением производительности путём компиляции под новый процессор и обратной совместимостью со старым процессором. Опять же, Open Sourсe позволяет простой перекомпиляцией получить программу под конкретный процессор.
Примеры архитектуры: Intel Itanium, Эльбрус-3.
Виртуальные архитектуры
Но раз нельзя запустить программу одной архитектуры на другой, то откуда берутся магические JAR-файлы, которые можно запустить на любой машине? Это пример виртуальной JVM-архитектуры, которая, по сути, эмулируется на целевой реальной машине. Поэтому достаточно JVM-машины для целевой архитектуры для запуска на ней любой Java-программы. Другим примером виртуальной архитектуры является .NET CIL.
Из минусов виртуальных архитектур можно выделить меньшую производительность по сравнению с реальными архитектурами. Этот минус нивелируется с помощью JIT- и AOT-компиляции. Однако большим плюсом будет кроссплатформенность.
Дальнейшим развитием этих архитектур стали гибридные архитектуры. Например современные x86_64 процессоры хотя и CISC-совместимы, но являются процессорами с RISC-ядром. В таких гибридных CISC-процессорах CISC-инструкции преобразовываются в набор внутренних RISC-команд. Какое дальнейшее развитие получат архитектуры процессора, покажет только время.
Архитектуры х64 и х86: в чем разница
![]()
Архитектуры х64 и х86 являются одними из наиболее широко используемых типов архитектур системы команд (АСК или ISA – Instruction Set Architecture), созданными Intel и AMD. ISA определяет поведение машинного кода и то, как программное обеспечение управляет процессором.
ISA – это аппаратный и программный интерфейс, определяющий, что и как может делать ЦП.
Прочитав эту статью, вы узнаете разницу между архитектурами х64 и х86.
Что из себя представляет архитектура х86?
х86 – это тип ISA для компьютерных процессоров, разработанный Intel в 1978 году. Архитектура х86 основана на микропроцессоре Intel 8086 (отсюда и название) и его модификации 8088. Изначально это была 16-битная система команд для 16-битных процессоров, а позже она выросла до 32-битной системы команд.
Количество битов показывает, сколько информации ЦП может обработать за цикл. Так, например, 32-разрядный ЦП передает 32 бита данных за тактовый цикл.
Благодаря своей способности работать практически на любом компьютере, от обычных ноутбуков до домашних ПК и серверов, архитектура х86 стала достаточно популярной среди многих производителей микропроцессоров.
Наиболее значительным ограничением архитектуры х86 является то, то она может обрабатывать максимум 4096 Мб ОЗУ. Поскольку общее количество поддерживаемых комбинаций равно 2 32 (4 294 967 295), то 32-разрядный процессор имеет 4,29 миллиарда ячеек памяти. В каждой ячейке хранится 1 байт данных, а в сумме это примерно 4 Гб доступной памяти.
На сегодняшний день термин х86 обозначает любой 32-разрядный процессор, способный выполнять систему команд х86.
Что из себя представляет архитектура х64?
х64 (сокращение от х86-64) – это архитектура системы команд, расширенная до 64-битного кода. В ее основе лежит архитектура х86. Впервые она была выпущена в 2000 году. Она представляла два режима работы – 64-битный режим и режим совместимости, который позволяет пользователям запускать 16-битные и 32-битные приложения.
Поскольку вся система команд х86 остается в х64, то старые исполняемые файлы работают практически без потери производительности.
Архитектура х64 поддерживает гораздо больший объем виртуальной и физической памяти, чем архитектура х86. Это позволяет приложениям хранить в памяти большие объемы данных. Кроме того, х64 увеличивает количество регистров общего назначения до 16, обеспечивая тем самым дополнительную оптимизацию использования и функциональность.
Архитектура х64 может использовать в общей сложности 2 64 байта, что соответствует 16 миллиардам гигабайт (16 эксабайт) памяти. Гораздо большее использование ресурсов делает эту архитектуру пригодной для обеспечения работы суперкомпьютеров и машин, которым требуется доступ к огромным ресурсам.
Архитектура х64 позволяет ЦР обрабатывать 64 бита данных за тактовый цикл, что намного больше, чем может себе позволить архитектура х86.
х86 VS х64
Несмотря на то, что оба эти типа архитектуры основаны на 32-битной системе команд, некоторые ключевые отличия позволяют их использовать для разных целей. Основное различие между ними заключается в количестве данных, которые они могут обрабатывать за каждый тактовый цикл, и в ширине регистра процессора.
Процессор сохраняет часто используемые данные в регистре для быстрого доступа. 32-разрядный процессор на архитектуре х86 имеет 32-битные регистры, а 64-разрядный процессор – 64-битные регистры. Таким образом, х64 позволяет ЦП хранить больше данных и быстрее к ним обращаться. Ширина регистра также определяет объем памяти, который может использовать компьютер.
В таблице ниже продемонстрированы основные различия между системами команд архитектур х86 и х64.