Чим архітектура ARM відрізняється від x86? [зачинено]


192

Чи архітектура x86 спеціально розроблена для роботи з клавіатурою, тоді як ARM розраховує на мобільність? Які ключові відмінності між ними?


37
Якщо у x86 є порт PS / 2, про який я не знаю, він не будується для клавіатур, ніж пара брудної нижньої білизни :-)
paxdiablo

6
Я думаю, що клавіатура має на увазі типову роль ПК на відміну від фізичного пристрою.
невгамовний шум

24
X86 не був розроблений; Він розвивався на острові, з дивним птахом, який їв усе, що намагався на ньому молитися. Зараз це виглядає дивніше, ніж качка, виставлена ​​на облік, і не зробить це добре, якби корабель, що переповнений новими тваринами, прийшов.
ctrl-alt-delor

5
@richard - на жаль, це, здається, найбільш історично точний опис x86, який я коли-небудь бачив. Це дуже багато говорить про галузь.
Ліор

6
@Leeor Вибачте, що я зробив невелику помилку у своєму коментарі, я сказав, що птах їв хижаків x86, де як би їх не їв, він сидів на них. Варто також зазначити, що м'які пір'я птаха там, де так дуже-дуже охайно.
ctrl-alt-delor

Відповіді:


306

ARM- це архітектура RISC (Reduced Instruction Set Computing), тоді x86як CISC (Комплексний набір обчислень).

Основна відмінність між даними в цьому аспекті полягає в тому, що інструкції ARM працюють лише на регістрах з кількома інструкціями щодо завантаження та збереження даних з / в пам'ять, в той час як x86 може працювати також безпосередньо в пам'яті. До v8 ARM була власною 32-бітовою архітектурою, яка віддала перевагу чотирьом байтовим операціям над іншими.

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

Питання на тему " Чи архітектура x86 спеціально розроблена для роботи з клавіатурою, тоді як ARM очікує бути мобільним? ". x86не розроблений спеціально для роботи з клавіатурою, ні ARMдля мобільних пристроїв. Однак знову ж таки, оскільки основні архітектурні варіанти насправді x86 також має вказівки по роботі безпосередньо, IOпоки ARM цього не робить. Однак у спеціалізованих IO-шинах, таких як 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 відрізняються за складністю.


9
ARMv8-A має 64-бітну архітектуру під назвою AArch64.
kyrias

9
Незважаючи на те, що x86 має кілька дуже потужних інструкцій, рука все ж може бити її в сутичці (якщо обоє мають однакову тактову частоту). Частково це пояснюється тим, що у групи є гарний набір регістрів, де x86 витрачає 1/2 свого часу на переміщення даних у і поза його обмеженим набором регістрів (це менш вірно для x86-64, чи є більше регістрів ). Частково тому, що простота Arm залишає місце для більшого кешу, і всі інструкції є умовними (завдяки чому кеш пропускає менше). Багаторазова інструкція з переміщення руки (єдина інструкція, що не належить до RISC), дозволяє швидко переміщувати дані.
ctrl-alt-delor

4
Я міг би написати ARM-код швидше, хоча і більший, використовуючи більше регістрів. Якщо я дивлюся на цю реалізацію, x86 займає 5 + 9 × N годин, ARM приймає 4 × N тактових годин (обидві цифри не мають пропусків кешу). На цьому прикладі x86 набирає кращих результатів для байтів інструкцій: x86 = 2 байти, arm = 16 байт. ARM набагато краще оцінює цю метрику в більш реалістичних тестах, наприклад, при виході з циклу r2 буде інформація про те, чи є рядки рівними / що більше, тому буде умовою кодів. Перед перевіркою кодів стану рука може виконувати інші інструкції. Arm не має розгалужуватися під час перевірки кодів стану.
ctrl-alt-delor

2
@JeremyFelix Це схоже на цей stackoverflow.com/questions/13106297/… Існують різні труби для різних типів інструкцій, навіть є дублюються. Процесор розбиває інструкції на мікроінструкції та може працювати паралельно між конвеєрами.
аузелен

2
Ви кажете: «хоча x86 може працювати і безпосередньо на пам'яті». однак для x86 (pre 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 продає конструкції та залишає виготовлення іншим).

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

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

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

Отже, порівнюючи обидві, ви повинні бути обережними щодо того, що вимірюєте, щоб бути впевненим, що це відображає те, про що ви чесно дбаєте. ARM дуже добре спрацьовує з енергоспоживанням, але залежно від ситуації ви можете легше дбати про споживання енергії, ніж миттєве споживання електроенергії.


ось чому ? RISC потребує більшої кількості оперативної пам’яті, тоді як CISC робить акцент на менший розмір коду і використовує менше RAM в цілому, ніж RISC
Waqar Naeem

Режим великого пальця (змінна довжина, що дозволяє короткі кодування) - це не різниця ; ось так працює x86 (але, тим більше, що довжина інструкцій варіюється від 1 до 15 байтів і набагато складніше декодувати, ніж Thumb2). Режим ARM (кодування з фіксованою шириною за допомогою 3-операндних неруйнівних інструкцій) - це відмінність від x86!
Пітер Кордес

Наявність набагато швидшого процесора не є великою допомогою - відеоконференції можуть бути кращим прикладом: низька затримка означає, що ви не можете просто зробити сплеск розшифровки в буфер пристойного розміру і повернутися в стан глибокого або середнього рівня сну . "Гонка до сну" - це ключове поняття споживання енергії для фіксованого обсягу обчислень, враховуючи, що сучасні процесори можуть економити значну потужність, коли вони повністю працюють у режимі очікування (годинник зупиняється або навіть вимикає частини ядра. Або в більш глибокому режимі сну, також кешується після зворотного запису.) ... і це, звичайно, наступний абзац. >. <
Пітер Кордес

@PeterCordes: Кодування режиму великого пальця не дуже схоже на кодування x86. Хоча це не зовсім так регулярно , як ARM кодування, він по - , як і раніше в значній мірі фіксується збільшення format.Density в значній мірі від усунення бітів, які просто рідко використовуються в кодуванні ARM. Наприклад, практично всі вказівки щодо ARM є умовними, але умови використовуються лише порівняно невеликий відсоток часу (тому більшість інструкцій THUMB, які не є галузевими, є безумовними).
Джеррі Труну

@PeterCordes: Ти маєш рацію: відеоконференції - кращий приклад - я це відредагував. Дякую.
Джеррі Труну

39

Доповнення до першого абзацу Джеррі Коффіна . Тобто, конструкція ARM забезпечує меншу енергоспоживання.

Компанія ARMлише ліцензує технологію процесора. Вони не роблять фізичні фішки. Це дозволяє іншим компаніям додавати різні периферійні технології, зазвичай їх називають SOC або "система на мікросхемі". Незалежно від того, чи це пристрій планшетний ПК, стільниковий телефон чи система розваг у автомобілі. Це дозволяє постачальникам чіпів підлаштувати решту мікросхем під конкретну програму. Це має додаткові переваги,

  1. Нижня вартість борту
  2. Нижня потужність (примітка1)
  3. Легше виготовлення
  4. Менший форм-фактор

ARMпідтримує постачальників SOC разом з AMBA , дозволяючи реалізаторам SOC придбати сторонні модулі на полиці; як Ethernet, контролери пам'яті та переривання. Деякі інші платформи процесора підтримують це, як MIPS , але MIPS не настільки енергетично усвідомлений.

Все це корисно для ручної / акумуляторної конструкції. Деякі просто гарні навколо. Крім того, ARMмає історію акумуляторних пристроїв; Apple Newton , Psion Organizers . 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 все одно робить це за менший тактовий цикл.
  • Арм має більш умовні вказівки.
  • Провізор гілки Арм тривіально простий (якщо безумовний або зворотний, то припустимо гілку, інший припустимо, що не є гілкою), і виконує краще, ніж той самий дуже складний у x86 (тут не вистачає місця, щоб це пояснити, не те, що я міг би ).
  • Arm має простий послідовний набір інструкцій (ви можете скласти вручну та швидко вивчити набір інструкцій).

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-широке ядро ​​OOO, яке подається з декодерів замість загального кешу чи циклічного буфера, і, звичайно, з високою витратою на потужність.)
Пітер Кордес,

3
@ Evi1M4chine, це також порушує той факт, що італійський спортивний автомобіль є надзвичайно дорогим, а м'язовий автомобіль в Америці порівняно дешевим. І м'язова машина - це те, що вона є, тому що вона проста, тоді як щось на кшталт Ferrari дуже складне. Зовсім навпаки CISC проти RISC
Лоренцо Дематте

15

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

Спочатку прості процесори RISC приблизно еквівалентної продуктивності могли бути розроблені значно меншими інженерними командами (див. Berkeley RISC ), ніж ті, хто працює над розробкою x86 в Intel.

Але в наш час найшвидші мікросхеми ARM мають дуже складні блоки випуску інструкцій без випуску, розроблені великими інженерними командами, і ядра x86 можуть мати щось на зразок ядра RISC, що подається блоком перекладу інструкцій.

Отже, будь-які поточні відмінності між двома архітектурами більшою мірою пов'язані з конкретними потребами ринку в товарних нішах, на які спрямовані команди розробників. (Випадкова думка: ARM, ймовірно, заробляє більше плати за ліцензії від вбудованих додатків, які, як правило, набагато більше обмежують енергію та витрати. І Intel потребує підтримки продуктивності на ПК та серверах для їх прибутку. Таким чином, ви бачите різні оптимізації впровадження.)


Досі існують масові архітектурні відмінності. Однак Intel зробили чудову роботу і вклали велику кількість грошей, щоб змусити там погано зорієнтований процесор працювати дуже добре (можна задатися питанням, що можна було б зробити, якби всі ці зусилля були вкладені в добре архітектурний процесор).
ctrl-alt-delor
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.