Чем архитектура ARM отличается от архитектуры x86? [закрыто]

192

Архитектура x86 специально разработана для работы с клавиатурой, а ARM ожидает мобильности? Каковы основные различия между ними?

user1922878
источник
37
Если только у x86 нет порта ps / 2, о котором я не знаю, он предназначен для клавиатур не более, чем пара грязного нижнего белья :-)
paxdiablo
6
Я думаю, что клавиатура относится к типичной роли ПК в отличие от физического устройства.
бесхитростный шум
24
X86 не был разработан; Он развивался на острове со странной птицей, которая ела все, что пыталось помолиться на нем. Теперь он выглядит более странным, чем утконос, на котором выставлен счет уткой, и не будет иметь успеха, если появится корабль, полный новых животных.
ctrl-alt-delor
5
@ Richard - к ​​сожалению, это самое исторически точное описание x86, которое я когда-либо видел. Это довольно много говорит об отрасли.
Лиор
6
@Leeor Извините, я допустил небольшую ошибку в своем комментарии, я сказал, что птица ела хищников х86, где, поскольку она их не ела, она сидела на них. Также стоит отметить, что мягкие птичьи перья очень и очень очень опрятны.
Ctrl-Alt-Delor

Ответы:

306

ARMявляется архитектурой RISC (вычисления с сокращенным набором инструкций), в то время как x86является архитектурой CISC (вычисления сложных наборов команд).

Основное различие между ними в этом аспекте состоит в том, что инструкции ARM работают только с регистрами с несколькими инструкциями для загрузки и сохранения данных из / в память, в то время как x86 также может работать непосредственно с памятью. Вплоть до v8 ARM была родной 32-битной архитектурой, предпочитая четырехбайтовые операции над другими.

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

О вопросе « Архитектура x86 специально разработана для работы с клавиатурой, в то время как ARM ожидает мобильность? ». x86не предназначен специально для работы с клавиатурой и ARMдля мобильных устройств. Однако, опять же, из-за основных архитектурных решений, x86 также имеет инструкции для работы напрямую, IOа ARM - нет. Однако со специализированными шинами ввода-вывода, такими как USB, потребность в таких функциях также исчезает.

Если вам нужен документ для цитирования, вот что рассказывает Руководство по программированию серии Cortex-A (4.0) о различиях между архитектурами RISC и CISC:

Процессор ARM - это компьютер с сокращенным набором команд (RISC).

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

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

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

Пример сравнения архитектуры набора команд:

Например, если вам понадобится какой-то блок сравнения побайтной памяти в вашем приложении (сгенерированный компилятором, пропуская детали), это может выглядеть так: x86

repe cmpsb         /* repeat while equal compare string bytewise */

в то время как в ARMкратчайшем виде может выглядеть (без проверки ошибок и т. д.)

top:
ldrb r2, [r0, #1]! /* load a byte from address in r0 into r2, increment r0 after */
ldrb r3, [r1, #1]! /* load a byte from address in r1 into r3, increment r1 after */
subs r2, r3, r2    /* subtract r2 from r3 and put result into r2      */
beq  top           /* branch(/jump) if result is zero                 */

который должен дать вам подсказку о том, как наборы команд RISC и CISC отличаются по сложности.

auselen
источник
9
ARMv8-A имеет 64-битную архитектуру под названием AArch64.
Кириас
9
Хотя у x86 есть несколько очень мощных инструкций, рука все равно может победить его в бою (если у обоих одинаковая тактовая частота). Отчасти это связано с тем, что плечо имеет хороший набор регистров, где, поскольку x86 тратит половину своего времени на перемещение данных в и из своего ограниченного набора регистров (это менее верно для x86-64, если у него больше регистров ). И частично потому, что простота Arm оставляет место для большего кеша и имеет все инструкции условные (кеш пропускает меньше). И инструкция перемещения руки (единственная инструкция, не относящаяся к RISC), позволяет быстро перемещать данные.
Ctrl-Alt-Delor
4
Я мог бы написать код ARM быстрее, хотя и больше, используя больше регистров. Если я посмотрю на эту реализацию, x86 берет 5 + 9 × N тактов, ARM берет 4 × N тактов (обе цифры без пропусков кэша). В этом примере результат x86 лучше для инструктивных байтов: x86 = 2 байта, arm = 16 байтов. Показатели ARM намного лучше по этой метрике в более реалистичных тестах, например, при выходе из цикла r2 будет иметь информацию о том, равны ли строки / что больше, так и коды условий. Рука может выполнить другие инструкции перед проверкой кодов состояния. Рука не должна разветвляться при проверке кодов условий.
Ctrl-Alt-Delor
2
@JeremyFelix Это выглядит так: stackoverflow.com/questions/13106297/… Существуют разные каналы для команд разного типа, даже есть дублированные. CPU делит инструкции на микро инструкции, которые могут выполняться параллельно между конвейерами.
auselen
2
Вы говорите: «Хотя x86 может работать и с памятью». однако для x86 (до x86-64) у него было так мало регистров, что «также» не было, вы должны были хранить все в памяти; около ½ инструкций в программе, где просто что-то передвигать. В то время как в ARM требуется очень мало инструкций для перемещения данных.
Ctrl-Alt-Delor
94

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

Что касается реальных различий: ARM имеет больше регистров, поддерживает предикацию для большинства инструкций задолго до того, как Intel добавила их, и уже давно включает в себя всевозможные методы (называют их «хитростями», если хотите) для экономии энергии практически везде, где это возможно.

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

ARM имеет два разных режима кодирования команд: ARM и THUMB. В режиме ARM вы получаете доступ ко всем инструкциям, а кодировка чрезвычайно проста и быстро декодируется. К сожалению, код режима ARM имеет тенденцию быть достаточно большим, поэтому программа обычно занимает примерно вдвое больше памяти, чем код Intel. Режим большого пальца пытается смягчить это. Он по-прежнему использует довольно обычное кодирование команд, но уменьшает большинство команд с 32 бит до 16 бит, например, за счет уменьшения количества регистров, исключения предикации из большинства команд и уменьшения диапазона ветвей. По крайней мере , в моем опыте, это по- прежнему не дают обычно достаточнонастолько плотный код, насколько может получить код x86, но он достаточно близок, а декодирование все еще довольно просто и понятно. Более низкая плотность кода означает, что вам обычно требуется как минимум немного больше памяти и (как правило, более серьезно) больший кэш, чтобы получить эквивалентную производительность.

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

В зависимости от ситуации энергопотребление ЦП зачастую более важно, чем его энергопотребление. По крайней мере, поскольку я использую термины, энергопотребление относится к энергопотреблению (более или менее) мгновенно. Однако энергопотребление нормализуется по скорости, поэтому, если (например) ЦП A потребляет 1 Вт в течение 2 секунд для выполнения работы, а ЦП B потребляет 2 Ватта в течение 1 секунды для выполнения одной и той же работы, оба ЦП потребляют одинаковое общее количество. энергии (две ватт-секунды), чтобы выполнить эту работу - но с процессором B вы получаете результаты в два раза быстрее.

Процессоры ARM, как правило, работают очень хорошо с точки зрения энергопотребления. Так что если вам нужно что-то, что требует «присутствия» процессора почти постоянно, но на самом деле не выполняет много работы, они могут работать довольно хорошо. Например, если вы проводите видеоконференции, вы собираете несколько миллисекунд данных, сжимаете их, отправляете, получаете данные от других, распаковываете их, воспроизводите и повторяете. Даже действительно быстрый процессор не может тратить много времени на сон, поэтому для таких задач ARM отлично справляется.

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

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

Джерри Гроб
источник
поэтому ? RISC требуется больше оперативной памяти, в то время как CISC делает упор на меньший размер кода и использует в целом меньше оперативной памяти, чем RISC
Вакар Наим
Режим большого пальца (переменная длина, допускающая короткие кодировки) не имеет значения ; это то, как всегда работает x86 (но более того, длина инструкций варьируется от 1 до 15 байт и намного сложнее декодировать, чем Thumb2). Режим ARM (кодирование с фиксированной шириной с 3-операндными неразрушающими инструкциями) отличается от x86!
Питер Кордес
Наличие намного более быстрого процессора - не большая помощь. Видеоконференция может быть лучшим примером: низкая задержка означает, что вы не можете просто выполнить пакетное декодирование в буфер приличного размера и вернуться в состояние глубокого или среднего уровня сна. , «Race to sleep» является ключевым понятием в потреблении энергии для фиксированного объема вычислений, учитывая, что современные процессоры могут экономить значительную мощность, когда полностью простаивают (часы выключены, или даже выключают части ядра. Или в более глубоких снах, также кэшируются после обратной записи.) ... и это то, что вы делаете в следующем параграфе, конечно. >. <
Питер Кордес
@PeterCordes: кодировка Thumb Mode не очень похожа на кодировку x86. Хотя это не совсем так регулярно , как ARM кодирования, он по - прежнему в значительной степени фиксируется увеличение format.Density в значительной степени от устранения битов, которые просто редко используются в кодировке ARM. Например, практически все инструкции ARM являются условными, но условия используются только в довольно небольшом проценте времени (поэтому большинство не ветвящихся команд THUMB являются безусловными).
Джерри Гроб
@PeterCordes: Вы правы: видеоконференция - лучший пример - я отредактировал это. Спасибо.
Джерри Гроб
39

Дополнительно к первому абзацу Джерри Коффина . То есть дизайн ARM дает меньшее энергопотребление.

Компания ARMтолько лицензирует технологию CPU. Они не делают физические чипы. Это позволяет другим компаниям добавлять различные периферийные технологии, обычно называемые SOC или система на кристалле. Является ли устройство планшетом, мобильным телефоном или автомобильной развлекательной системой. Это позволяет производителям микросхем адаптировать остальную часть микросхемы к конкретному приложению. Это имеет дополнительные преимущества,

  1. Более низкая стоимость доски
  2. Нижняя мощность (примечание 1)
  3. Более простое производство
  4. Меньший форм-фактор

ARMподдерживает поставщиков SOC с AMBA , позволяя разработчикам SOC приобретать готовые сторонние модули; как Ethernet, память и контроллеры прерываний. Некоторые другие процессорные платформы, такие как MIPS , поддерживают это, но MIPS не так энергосберегающий.

Все это выгодно для портативного / батарейного дизайна. Некоторые просто хороши вокруг. Кроме того, ARMимеет историю устройств с батарейным питанием; Apple Newton , Psion Организаторы . PDA программное обеспечение инфра-структуры было привлечено некоторыми компаниями для создания смарт - телефон устройств типа. Хотя те, кто заново изобрел графический интерфейс для использования со смартфоном , добились большего успеха .

Подъем Open sourceнаборов инструментов, а operating systemsтакже облегчил различные SOCчипы. У закрытой организации возникнут проблемы с попыткой поддержки всех различных устройств, доступных для ARM. Две самые популярные сотовые платформы, Andriod и OSx / IOS, основаны на Linux и FreeBSD, Mach и NetBSD . Open Sourceпомогает SOCпоставщикам обеспечивать программную поддержку своих чипсетов.

Надеюсь, почему x86 используется для клавиатуры , очевидно. У этого есть программное обеспечение, и что более важно люди, обученные использовать это программное обеспечение. Netwinder - это ARMсистема, изначально разработанная для клавиатуры . Кроме того, производители в настоящее время ищут ARM64 для рынка серверов. Мощность / тепло - это проблема в круглосуточных дата-центрах.

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

Примечание 1: для нескольких микросхем требуются драйверы шины для взаимодействия при известных напряжениях и привода. Также, как правило, отдельным микросхемам необходимы поддерживающие конденсаторы и другие компоненты питания, которые могут использоваться в системе SOC .

бесшумный шум
источник
22

ARM похож на итальянский спортивный автомобиль:

  • Хорошо сбалансированный, хорошо настроенный, двигатель. Дает хорошее ускорение и максимальную скорость.
  • Отличная погоня, тормоза и подвеска. Может быстро останавливаться, может поворачивать без замедления.

X86 похож на американский мускул кар:

  • Большой двигатель, большой топливный насос. Дает отличную максимальную скорость и ускорение, но расходует много топлива.
  • Ужасные тормоза, вам нужно записаться на прием в свой дневник, если вы хотите замедлиться.
  • Ужасное рулевое управление, вам придется сбавить скорость на повороте.

В итоге: x86 основан на дизайне 1974 года и хорош по прямой (но потребляет много топлива). Рука использует мало топлива, не тормозит на поворотах.


Метафора закончена, вот некоторые реальные различия.

  • Рука имеет больше регистров.
  • В Arm есть несколько регистров специального назначения, x86 - все регистры специального назначения (поэтому меньше движущихся вещей).
  • Arm имеет несколько команд доступа к памяти, только регистр загрузки / сохранения.
  • Арм внутренне гарвардская архитектура моего дизайна.
  • Рука проста и быстра.
  • Инструкции по постановке на охрану выполняются по одному циклу (кроме загрузки / сохранения нескольких).
  • Инструкции руки часто делают больше чем одну вещь (в одном цикле).
  • Там, где требуется более одной инструкции Arm, такой как хранилище циклов x86 и автоинкремент, Arm все равно делает это за меньшее количество тактов.
  • Рука имеет более условные инструкции.
  • Предсказатель ветвления Arm является тривиально простым (если он безусловный или обратный, то принимает ветвление, иначе принимает не-ветвление) и работает лучше, чем очень-очень сложный в x86 (здесь недостаточно места для его объяснения, не то чтобы я мог ).
  • Arm имеет простой последовательный набор инструкций (вы можете скомпилировать вручную и быстро выучить набор инструкций).
Ctrl-Alt-Делор
источник
7
Эта аналогия нарушает тот факт, что итальянские спортивные автомобили ломаются в любой момент, когда они могут получить, в то время как процессоры ARM этого не делают, и что, хотя это может быть легко сделано, вы не можете купить один процессор ARM, который может работать на настольных ПК. не говоря уже о сокетах и ​​материнских платах для их установки. :)
Evi1M4chine
1
По производительности он конкурирует напрямую с некоторыми из самых больших / более быстрых процессоров Xeon (например, E5-2690 v3), но при меньших затратах энергии и мощности. quora.com/…
ctrl-alt-delor
1
Конечно, для массово параллельных рабочих нагрузок, таких как базы данных и серверы ввода-вывода. Для обеспечения однопоточной производительности никто не спроектировал ядро ​​ARM, даже такое большое, как x86. Нет причин, по которым они не могли, просто никто не имеет. «Налог x86» на мощность и площадь кристалла не так велик по сравнению с количеством кремния, используемого для вышедшего из строя оборудования в мощных ядрах ЦП. В x86, конечно, есть бородавки, но RISC имеет недостаток плотности кода (который обычно не имеет большого значения, но все же имеет значение). Это неоднократно утверждается на форумах realworldtech.com .
Питер Кордес
1
@ Richard: Есть много вещей, которые вам не «нужны», но это увеличивает плотность кода. Хитрость заключается в том, чтобы сбалансировать сложность декодирования с размером кода / количеством команд. Увеличение ширины вышедшего из строя ядра чрезвычайно затратно по энергопотреблению, поэтому большое количество работы в каждой инструкции является ценным. Небольшое увеличение сложности декодирования намного дешевле. Современные процессоры x86 уже способны быстро декодировать x86. (Не достаточно быстро, чтобы поддерживать подачу ядра 4 в ширину из декодеров вместо uop-кеша или буфера петли, и, конечно, при высокой стоимости энергии.)
Питер Кордес
3
@ Evi1M4chine, это также нарушает тот факт, что итальянский спортивный автомобиль очень дорогой, в то время как американский мускул-кар относительно дешевый. И мускул кар это то, что он есть, потому что он прост, а что-то вроде Ferrari очень и очень сложно. Совершенно противоположно CISC против RISC
Лоренцо Дематте
15

Архитектура ARM изначально была разработана для персональных компьютеров Acorn (см. Acorn Archimedes , около 1987 г. и RiscPC ), которые были такими же персональными компьютерами на основе клавиатуры, как и модели IBM PC на базе x86. Лишь более поздние реализации ARM были ориентированы в первую очередь на сегмент мобильных и встраиваемых систем.

Первоначально простые процессоры RISC с примерно эквивалентной производительностью могли разрабатывать гораздо меньшие инженерные группы (см. Berkeley RISC ), чем те, кто работает над разработкой x86 в Intel.

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

Таким образом, любые текущие различия между двумя архитектурами в большей степени связаны с конкретными рыночными потребностями продуктовых ниш, на которые ориентируются команды разработчиков. (Случайное мнение: ARM, вероятно, делает больше в лицензионных отчислениях от встраиваемых приложений, которые, как правило, имеют гораздо большую мощность и ограничены в затратах. И Intel необходимо поддерживать преимущество в производительности ПК и серверов для получения прибыли. Таким образом, вы видите различные оптимизации реализации.)

hotpaw2
источник
Есть все еще огромные архитектурные различия. Однако Intel проделала замечательную работу и вложила кучу денег, чтобы заставить плохо спроектированный процессор работать очень хорошо (интересно, что можно было бы сделать, если бы все эти усилия были вложены в хорошо спроектированный процессор).
Ctrl-Alt-Delor