Czym różni się architektura ARM od x86? [Zamknięte]


192

Czy architektura x86 została specjalnie zaprojektowana do współpracy z klawiaturą, podczas gdy ARM oczekuje, że będzie mobilny? Jakie są kluczowe różnice między nimi?


37
O ile x86 nie ma portu ps / 2, o którym nie wiem, nie jest bardziej przystosowany do klawiatur niż para brudnej bielizny :-)
paxdiablo

6
Myślę, że klawiatura odnosi się do typowej roli komputera, a nie do fizycznego urządzenia.
bezartowy hałas

24
X86 nie został zaprojektowany; Wyewoluował na wyspie z dziwnym ptakiem, który jadł wszystko, co próbowało się na niej modlić. Wygląda teraz dziwniej niż dziobak z kaczodzióbkami i nie poradziłby sobie dobrze, gdyby pojawił się statek pełen nowych zwierząt.
ctrl-alt-delor

5
@richard - niestety, jest to najbardziej dokładny historycznie opis x86, jaki kiedykolwiek widziałem. Wiele mówi o branży.
Leeor

6
@Leeor Przepraszam, zrobiłem mały błąd w swoim komentarzu, powiedziałem, że ptak zjadł drapieżniki x86, gdzie jak ich nie zjadł, usiadł na nich. Warto również zauważyć, że miękkie pióra ptaka były tak bardzo, bardzo schludne.
ctrl-alt-delor

Odpowiedzi:


306

ARMjest architekturą RISC (Reduced Instruction Set Computing), podczas gdy x86jest to architektura CISC (Complex Instruction Set Computing).

Podstawowa różnica między tymi w tym aspekcie polega na tym, że instrukcje ARM działają tylko na rejestrach z kilkoma instrukcjami do ładowania i zapisywania danych z / do pamięci, podczas gdy x86 może również działać bezpośrednio w pamięci. Aż do wersji 8 ARM był natywną architekturą 32-bitową, faworyzując operacje czterobajtowe nad innymi.

Tak więc ARM jest prostszą architekturą, prowadzącą do małego obszaru krzemu i wielu funkcji oszczędzania energii, podczas gdy x86 staje się bestią mocy zarówno pod względem zużycia energii, jak i produkcji.

Pytanie o pytanie „ Czy architektura x86 jest specjalnie zaprojektowana do współpracy z klawiaturą, podczas gdy ARM oczekuje, że będzie mobilny? ”. x86nie jest specjalnie zaprojektowany do współpracy z klawiaturą ani ARMdla telefonów komórkowych. Jednak ponownie, z powodu podstawowych wyborów architektonicznych, x86 ma również instrukcje do bezpośredniej pracy, IOpodczas gdy ARM nie. Jednak w przypadku wyspecjalizowanych magistral IO, takich jak USB, zapotrzebowanie na takie funkcje również zanika.

Jeśli potrzebujesz dokumentu do zacytowania, oto, co Cortex-A Series Programmers Guide (4.0) mówi o różnicach między architekturami RISC i CISC:

Procesor ARM to procesor RISC (Reduced Instruction Set Computer).

Procesory CISC (Complex Instruction Set Computer), takie jak x86, mają bogaty zestaw instrukcji umożliwiających wykonywanie złożonych zadań za pomocą jednej instrukcji. Takie procesory często mają znaczną ilość wewnętrznej logiki, która dekoduje instrukcje maszynowe do sekwencji operacji wewnętrznych (mikrokodu).

W przeciwieństwie do tego, architektury RISC mają mniejszą liczbę instrukcji bardziej ogólnego przeznaczenia, które mogą być wykonywane przy użyciu znacznie mniejszej liczby tranzystorów, dzięki czemu krzem jest tańszy i bardziej energooszczędny. Podobnie jak inne architektury RISC, rdzenie ARM mają dużą liczbę rejestrów ogólnego przeznaczenia i wiele instrukcji wykonywanych w jednym cyklu. Posiada proste tryby adresowania, w których wszystkie adresy ładowania / przechowywania można określić na podstawie zawartości rejestru i pól instrukcji.

Firma ARM udostępnia również artykuł zatytułowany Architectures, Processors and Devices Development Article, w którym opisano, w jaki sposób te warunki odnoszą się do ich działalności.

Przykład porównujący architekturę zestawu instrukcji:

Na przykład, jeśli potrzebujesz jakiegoś bajtowego bloku porównującego pamięć w swojej aplikacji (wygenerowanego przez kompilator, pomijając szczegóły), tak może to wyglądać x86

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

podczas gdy w ARMnajkrótszej formie może wyglądać (bez sprawdzania błędów itp.)

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                 */

co powinno dać ci wskazówkę, jak zestawy instrukcji RISC i CISC różnią się złożonością.


9
ARMv8-A ma 64-bitową architekturę o nazwie AArch64.
kyrias

9
Chociaż x86 ma kilka bardzo potężnych instrukcji, ramię nadal może pokonać go w walce (jeśli oba mają tę samą prędkość zegara). Dzieje się tak częściowo dlatego, że ramię ma dobry zestaw rejestrów, gdzie x86 spędza połowę czasu na przenoszeniu danych do i z ograniczonego zestawu rejestrów (jest to mniej prawdziwe w przypadku x86-64, czy ma więcej rejestrów ). Częściowo dlatego, że prostota Arm pozostawia miejsce na większą pamięć podręczną i ma wszystkie instrukcje warunkowe (zmniejszając liczbę braków w pamięci podręcznej). Wiele instrukcji ruchu ramienia (jedyna instrukcja bez RISC) umożliwia szybkie przenoszenie danych.
ctrl-alt-delor

4
Mógłbym szybciej pisać kod ARM, choć większy, przy użyciu większej liczby rejestrów. Jeśli spojrzę na tę implementację, x86 przyjmuje zegary 5 + 9 × N, ARM przyjmuje zegary 4 × N (obie liczby są bez chybionych w pamięci podręcznej). Procesor x86 uzyskuje lepsze wyniki dla bajtów instrukcji w tym przykładzie: x86 = 2 bajty, ramię = 16 bajtów. ARM osiąga znacznie lepsze wyniki w tej metryki w bardziej realistycznych testach, np. Na wyjściu z pętli r2 będzie zawierał informacje o tym, czy łańcuchy są równe / które są większe, tak samo jak kody warunków. Ramię może wykonywać inne instrukcje przed sprawdzeniem kodów stanu. Ramię nie musi się rozgałęziać podczas sprawdzania kodów stanu.
ctrl-alt-delor

2
@JeremyFelix Wygląda na to, że to stackoverflow.com/questions/13106297/… Istnieją różne potoki dla różnych typów instrukcji, nawet są zduplikowane. Procesor dzieli instrukcje na mikroinstrukcje, które mogą działać równolegle w potoku.
auselen

2
Mówisz „podczas gdy x86 może również działać bezpośrednio na pamięci”. jednak w przypadku x86 (przed x86-64) ma tak mało rejestrów, że nie było „tak samo”, trzeba było przechowywać wszystko w pamięci; około ½ instrukcji w programie, w których można tylko poruszać. Podczas gdy w ARM potrzeba bardzo niewielu instrukcji, aby przenieść dane.
ctrl-alt-delor

94

Żaden z nich nie ma nic specyficznego dla klawiatury lub telefonu komórkowego, poza tym, że od lat ARM ma dość znaczną przewagę pod względem zużycia energii, co czyni go atrakcyjnym dla wszelkiego rodzaju urządzeń zasilanych bateryjnie.

Jeśli chodzi o rzeczywiste różnice: ARM ma więcej rejestrów, obsługuje predykację dla większości instrukcji na długo przed dodaniem go przez firmę Intel i od dawna stosuje różne techniki (nazywaj je „sztuczkami”, jeśli wolisz), aby oszczędzać energię prawie wszędzie, gdzie tylko było to możliwe.

Istnieje również znaczna różnica w sposobie kodowania tych dwóch instrukcji. Firma Intel używa dość złożonego kodowania o zmiennej długości, w którym instrukcja może zajmować od 1 do 15 bajtów. Dzięki temu programy są dość małe, ale sprawia, że ​​dekodowanie instrukcji jest stosunkowo trudne (jak w przypadku: szybkie równoległe dekodowanie instrukcji jest bardziej jak kompletny koszmar).

ARM ma dwa różne tryby kodowania instrukcji: ARM i THUMB. W trybie ARM masz dostęp do wszystkich instrukcji, a kodowanie jest niezwykle proste i szybkie w dekodowaniu. Niestety, kod trybu ARM jest dość duży, więc dość często program zajmuje około dwa razy więcej pamięci niż kod Intela. Tryb kciuka próbuje to złagodzić. Nadal używa dość regularnego kodowania instrukcji, ale redukuje większość instrukcji z 32 do 16 bitów, na przykład poprzez zmniejszenie liczby rejestrów, wyeliminowanie predykacji z większości instrukcji i zmniejszenie zakresu rozgałęzień. Przynajmniej z mojego doświadczenia, to zwykle nie daje całkiemtak gęstego kodowania, jak może uzyskać kod x86, ale jest dość blisko, a dekodowanie jest nadal dość proste i proste. Niższa gęstość kodu oznacza, że ​​generalnie potrzebujesz co najmniej trochę więcej pamięci i (ogólnie rzecz biorąc) większej pamięci podręcznej, aby uzyskać równoważną wydajność.

Kiedyś Intel kładł większy nacisk na szybkość niż na zużycie energii. Zaczęli podkreślać zużycie energii przede wszystkim w kontekście laptopów. W przypadku laptopów ich typowa docelowa moc wynosiła około 6 watów dla dość małego laptopa. Niedawno ( znacznie niedawno) zaczęli kierować reklamy na urządzenia mobilne (telefony, tablety itp.) Na tym rynku patrzą na maksymalnie kilka watów. Wydaje się, że radzą sobie w tym całkiem nieźle, chociaż ich podejście znacznie różniło się od ARM, kładąc nacisk na technologię produkcji, w której ARM kładł głównie nacisk na mikroarchitekturę (nic dziwnego, biorąc pod uwagę, że ARM sprzedaje projekty i pozostawia produkcję innym).

W zależności od sytuacji zużycie energii przez procesor jest jednak często ważniejsze niż zużycie energii. Przynajmniej tak, jak używam tych terminów, zużycie energii odnosi się do zużycia energii (mniej więcej) chwilowego. Zużycie energii normalizuje się jednak pod względem szybkości, więc jeśli (na przykład) procesor A zużywa 1 W na 2 sekundy, aby wykonać zadanie, a procesor B zużywa 2 waty przez 1 sekundę, aby wykonać to samo zadanie, oba procesory zużywają tę samą łączną ilość energii (dwie waty sekundy), aby wykonać tę pracę - ale z procesorem B otrzymujesz wyniki dwukrotnie szybciej.

Procesory ARM zwykle radzą sobie bardzo dobrze pod względem zużycia energii. Więc jeśli potrzebujesz czegoś, co wymaga „obecności” procesora prawie bez przerwy, ale tak naprawdę nie wykonuje dużo pracy, mogą one działać całkiem nieźle. Na przykład, jeśli prowadzisz wideokonferencje, zbierasz kilka milisekund danych, kompresujesz je, wysyłasz, odbierasz dane od innych, dekompresujesz, odtwarzasz i powtarzasz. Nawet naprawdę szybki procesor nie może spędzać dużo czasu na spaniu, więc w przypadku takich zadań ARM radzi sobie naprawdę dobrze.

Procesory Intela (zwłaszcza ich procesory Atom, które są w rzeczywistości przeznaczone do zastosowań o niskim poborze mocy) są niezwykle konkurencyjne pod względem zużycia energii. Gdy zbliżają się do swojej pełnej prędkości, zużywają więcej energii niż większość procesorów ARM - ale także szybko kończą pracę, dzięki czemu mogą szybciej zasnąć. W rezultacie mogą łączyć dobrą żywotność baterii z dobrą wydajnością.

Więc porównując te dwa, musisz uważać na to, co mierzysz, aby mieć pewność, że odzwierciedla to, na czym szczerze Ci zależy. ARM bardzo dobrze radzi sobie z poborem mocy, ale w zależności od sytuacji możesz z łatwością przejmować się bardziej zużyciem energii niż chwilowym.


dlatego ? RISC potrzebuje więcej pamięci RAM, podczas gdy CISC kładzie nacisk na mniejszy rozmiar kodu i ogólnie zużywa mniej pamięci RAM niż RISC
Waqar Naeem

Tryb kciuka (zmienna długość umożliwiająca krótkie kodowanie) nie ma znaczenia ; tak zawsze działa x86 (ale więcej, z długością instrukcji wahającą się od 1 do 15 bajtów i znacznie trudniejszą do zdekodowania niż Thumb2). Tryb ARM (kodowanie o stałej szerokości z 3-operandowymi instrukcjami nieniszczącymi) różni się od x86!
Peter Cordes

Posiadanie dużo szybszego procesora nie jest dużą pomocą - lepszym przykładem mogą być wideokonferencje: małe opóźnienie oznacza, że ​​nie możesz po prostu wykonać serii dekodowania do przyzwoitego bufora i wrócić do głębokiego lub średniego stanu uśpienia . „Wyścig do uśpienia” jest kluczową koncepcją w zużyciu energii dla ustalonej ilości obliczeń, biorąc pod uwagę, że nowoczesne procesory mogą oszczędzać znaczną ilość energii, gdy są w pełni bezczynne (zatrzymanie zegara lub nawet wyłączanie części rdzenia). po odpisaniu.) ... i oczywiście o tym mowa w następnym akapicie. >. <
Peter Cordes

@PeterCordes: Kodowanie w trybie kciuka nie przypomina kodowania x86. Chociaż nie jest tak regularne jak kodowanie ARM, nadal ma prawie stały format. Wzrost gęstości wynika w dużej mierze z eliminacji bitów, które są po prostu rzadko używane w kodowaniu ARM. Na przykład praktycznie wszystkie instrukcje ARM są warunkowe, ale warunki są używane tylko w stosunkowo niewielkim procencie czasu (więc większość instrukcji THUMB niezwiązanych z odgałęzieniami jest bezwarunkowa).
Jerry Coffin

@PeterCordes: Masz rację: wideokonferencje to lepszy przykład - zredagowałem to w. Dziękuję.
Jerry Coffin

39

Dodatek do pierwszego akapitu Jerry'ego Coffina . To znaczy konstrukcja ARM zapewnia mniejsze zużycie energii.

Firma ARMudziela licencji tylko na technologię procesora. Nie wytwarzają fizycznych chipów. Umożliwia to innym firmom dodawanie różnych technologii peryferyjnych, zwykle nazywanych SOC lub system-on-chip. Niezależnie od tego, czy urządzenie to tablet, telefon komórkowy czy samochodowy system rozrywki. Umożliwia to dostawcom chipów dostosowanie pozostałej części chipa do określonej aplikacji. Ma to dodatkowe korzyści,

  1. Niższy koszt płyty
  2. Niższa moc (uwaga 1)
  3. Łatwiejsza produkcja
  4. Mniejszy rozmiar

ARMobsługuje dostawców SOC z AMBA , umożliwiając wdrażającym SOC zakup gotowych modułów innych firm; jak Ethernet, kontrolery pamięci i przerwań. Niektóre inne platformy procesorów obsługują to, jak MIPS , ale MIPS nie jest tak świadomy mocy.

Wszystko to jest korzystne dla konstrukcji ręcznej / zasilanej bateryjnie. Niektóre są po prostu dobre pod każdym względem. Jak dobrze, ARMma historię urządzeń zasilanych bateryjnie; Apple Newton , organizatorzy Psion . PDA oprogramowanie infra-struktura została wykorzystywane przez niektóre firmy do tworzenia inteligentnych telefonów urządzeń typu. Chociaż większy sukces odnieśli ci, którzy ponownie wymyślili GUI do użytku ze smartfonem .

Powstanie Open sourcezestawów narzędzi, a operating systemstakże ułatwiło różne SOCchipy. Zamknięta organizacja miałaby problemy z obsługą wszystkich różnych urządzeń dostępnych dla ARM. Dwie najpopularniejsze platformy komórkowe, Andriod i OSx / IOS, są oparte na systemach operacyjnych Linux i FreeBSD, Mach i NetBSD . Open Sourcepomaga SOCdostawcom zapewnić obsługę oprogramowania dla ich zestawów chipów.

Miejmy nadzieję, że dlaczego klawiatura x86 jest używana w klawiaturze jest oczywista. Ma oprogramowanie, a co ważniejsze, ma ludzi przeszkolonych w używaniu tego oprogramowania. Netwinder to jeden ARMsystem, który został pierwotnie zaprojektowany dla klawiatury . Ponadto producenci szukają obecnie ARM64 na rynek serwerów. Energia / ciepło to problem w całodobowych centrach danych.

Powiedziałbym więc, że ekosystem, który rośnie wokół tych chipów, jest równie ważny, jak funkcje takie jak niskie zużycie energii. ARMod jakiegoś czasu (od połowy do późnych lat 80-tych) dąży do energooszczędnych i wydajnych obliczeń i ma na pokładzie wielu ludzi.

Uwaga 1: Wiele układów wymaga sterowników magistrali do komunikacji między sobą przy znanych napięciach i jazdy. Ponadto zwykle oddzielne układy scalone wymagają kondensatorów pomocniczych i innych elementów zasilania, które mogą być współużytkowane w systemie SOC .


22

ARM jest jak włoski samochód sportowy:

  • Dobrze wyważony, dobrze zestrojony silnik. Zapewnia dobre przyspieszenie i prędkość maksymalną.
  • Doskonałe pościgi, hamulce i zawieszenie. Może szybko się zatrzymać, może zakręcić bez zwalniania.

X86 jest jak amerykański muscle car:

  • Duży silnik, duża pompa paliwa. Daje doskonałą prędkość maksymalną i przyspieszenie, ale zużywa dużo paliwa.
  • Straszne hamulce, jeśli chcesz zwolnić, musisz umówić się na wizytę w swoim kalendarzu.
  • Straszne kierowanie, musisz zwolnić do zakrętu.

Podsumowując: x86 jest oparty na konstrukcji z 1974 roku i jest dobry w linii prostej (ale zużywa dużo paliwa). Ramię zużywa mało paliwa, nie zwalnia na zakrętach (gałęzie).


Metafora, oto kilka rzeczywistych różnic.

  • Ramię ma więcej rejestrów.
  • Arm ma kilka rejestrów specjalnego przeznaczenia, x86 to wszystkie rejestry specjalnego przeznaczenia (więc mniej rzeczy do przenoszenia).
  • Arm ma kilka poleceń dostępu do pamięci, tylko załaduj / zapisz rejestr.
  • Ramię jest wewnętrznie architekturą Harvardu, moim projektem.
  • Ramię jest proste i szybkie.
  • Instrukcje ramienia są architektonicznie jednym cyklem (z wyjątkiem ładowania / przechowywania wielu).
  • Instrukcje dotyczące ramion często robią więcej niż jedną rzecz (w jednym cyklu).
  • Tam, gdzie potrzeba więcej niż jedna instrukcja Arm, na przykład zapętlona pamięć x86 i automatyczna inkrementacja, Arm nadal robi to w mniejszych cyklach zegara.
  • Arm ma więcej instrukcji warunkowych.
  • Predykator gałęzi Arm jest banalnie prosty (jeśli jest bezwarunkowy lub wsteczny, przyjmij gałąź, w przeciwnym razie załóż, że nie jest odgałęzieniem) i działa lepiej niż bardzo bardzo złożony w x86 (nie ma tu wystarczająco dużo miejsca, aby to wyjaśnić, nie żebym mógł ).
  • Arm ma prosty spójny zestaw instrukcji (możesz skompilować ręcznie i szybko nauczyć się zestawu instrukcji).

7
Ta analogia zrywa z faktem, że włoskie samochody sportowe psują się w każdej chwili, w której mogą, podczas gdy procesory ARM nie, i chociaż można to łatwo zrobić, w rzeczywistości nie można kupić pojedynczego procesora ARM, który może wykonywać szybkości procesora komputera stacjonarnego , nie mówiąc już o
gniazdach i płytach

1
Pod względem wydajności konkuruje bezpośrednio z niektórymi z największych / szybszych procesorów Xeon (np. E5-2690 v3), ale przy niższej mocy i koszcie. quora.com/…
ctrl-alt-delor

1
Oczywiście w przypadku masowo równoległych obciążeń, takich jak bazy danych i serwery we / wy. Aby zapewnić wydajność jednowątkową, nikt nie zaprojektował rdzenia ARM tak dużego jak x86. Nie było powodu, dla którego nie mogli, po prostu nikt nie ma. „Podatek x86” od mocy i obszaru matrycy nie jest tak duży w porównaniu z ilością krzemu używanego w niesprawnych maszynach w rdzeniach procesorów o dużej mocy. Z pewnością istnieją brodawki w x86, ale RISC ma wadę związaną z gęstością kodu (co zwykle nie ma większego znaczenia, ale nadal ma znaczenie). Jest to wielokrotnie dyskutowane na forach realworldtech.com .
Peter Cordes,

1
@richard: Jest wiele rzeczy, których „nie potrzebujesz”, ale to zwiększa gęstość kodu. Sztuczka polega na równoważeniu złożoności dekodowania z rozmiarem kodu / liczbą instrukcji. Zwiększenie szerokości niesprawnego rdzenia jest niezwykle kosztowne pod względem zużycia energii, więc pakowanie większej ilości pracy do każdej instrukcji jest cenne. Niewielki wzrost złożoności dekodowania jest znacznie tańszy. Nowoczesne procesory x86 już teraz potrafią szybko dekodować x86. (Nie dość szybko, aby utrzymać rdzeń OOO o szerokości 4 cali zasilany z dekoderów zamiast pamięci podręcznej uop lub bufora pętli, i oczywiście przy wysokim koszcie energii.)
Peter Cordes

3
@ Evi1M4chine, łamie się również faktem, że włoski samochód sportowy jest bardzo drogi, podczas gdy amerykański muscle car jest stosunkowo tani. A muscle car jest tym, czym jest, ponieważ jest prosty, podczas gdy coś w rodzaju Ferrari jest bardzo, bardzo skomplikowane. Wręcz przeciwnie niż CISC kontra RISC
Lorenzo Dematté

15

Architektura ARM została pierwotnie zaprojektowana dla komputerów osobistych Acorn (patrz Acorn Archimedes , około 1987 i RiscPC ), które były w takim samym stopniu jak komputery osobiste oparte na klawiaturze, jak modele IBM PC oparte na x86. Dopiero późniejsze wdrożenia ARM były ukierunkowane przede wszystkim na segment rynku mobile i embedded.

Początkowo proste procesory RISC o mniej więcej równoważnej wydajności mogły być projektowane przez znacznie mniejsze zespoły inżynierów (patrz Berkeley RISC ) niż te pracujące nad rozwojem x86 w firmie Intel.

Ale obecnie najszybsze układy ARM mają bardzo złożone jednostki wysyłające rozkazy rozkazów poza kolejnością, zaprojektowane przez duże zespoły inżynierów, a rdzenie x86 mogą mieć coś w rodzaju rdzenia RISC zasilanego przez jednostkę tłumaczenia instrukcji.

Zatem wszelkie obecne różnice między dwiema architekturami są bardziej związane z konkretnymi potrzebami rynkowymi nisz produktowych, na które kierują się zespoły programistyczne. (Losowa opinia: ARM prawdopodobnie zarabia więcej na opłatach licencyjnych z aplikacji wbudowanych, które zwykle są znacznie bardziej wydajne i ograniczone kosztami. A Intel musi utrzymywać przewagę wydajności w komputerach PC i serwerach ze względu na ich marże zysku. W ten sposób widać różne optymalizacje implementacji).


Nadal istnieją ogromne różnice architektoniczne. Jednak firma Intel wykonała wspaniałą robotę i zainwestowała dużo pieniędzy, aby słabo zaprojektowany procesor działał bardzo dobrze (można się zastanawiać, co można było zrobić, gdyby cały ten wysiłek został włożony w dobrze zaprojektowany procesor).
ctrl-alt-delor
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.