ARM mimarisi ile x86 arasındaki fark nedir? [kapalı]


192

X86 Mimarisi, ARM mobil olmasını beklerken özel olarak bir klavye ile çalışacak şekilde mi tasarlanmış? İkisi arasındaki temel farklar nelerdir?


37
X86, bilmediğim bir ps / 2 portuna sahip değilse, bir çift kirli iç çamaşırından daha fazla klavye için inşa edilmez :-)
paxdiablo

6
Bence klavye fiziksel cihazın aksine tipik bir PC rolüne atıfta bulunuyor.
sanatsız gürültü

24
X86 tasarlanmamıştır; Adada, üzerinde dua etmeye çalışan her şeyi yiyen garip bir kuşla gelişti. Şimdi ördek faturalı bir platypustan daha garip görünüyor ve yeni hayvanlarla dolu bir gemi ortaya çıkarsa iyi olmaz.
ctrl-alt-delor

5
@richard - ne yazık ki, bu şimdiye kadar gördüğüm x86'nın tarihsel olarak en doğru açıklaması oluyor. Endüstri hakkında oldukça fazla şey söylüyor.
Leeor

6
@Leeor Üzgünüm Yorumumda küçük bir hata yaptım, kuşun x86'nın yırtıcılarını yediğini söyledim, burada onları yemediği için üzerlerine oturdu. Ayrıca kuşun yumuşak tüylerinin çok çok çok düzenli olduğu da unutulmamalıdır.
ctrl-alt-delor

Yanıtlar:


306

ARMBir olan RISC iken (RISC) mimarisi x86bir olan CISC (Complex Instruction Set Computing) bir.

Bu açıdan olanlar arasındaki temel fark, ARM komutlarının yalnızca x86 bellekte / belleğe veri yüklemek ve belleğe kaydetmek için birkaç talimat içeren kayıtlarda çalışmasıdır. V8 ARM, 32 bitlik bir yerel mimariydi ve diğerlerine göre dört baytlık işlemleri destekliyordu.

ARM daha basit bir mimaridir ve küçük silikon alanı ve birçok güç tasarrufu özelliği sağlarken, x86 hem güç tüketimi hem de üretim açısından bir güç canavarı haline gelir.

" X86 Mimarisi, ARM mobil olmasını beklerken klavyeyle çalışmak için özel olarak tasarlanmış mı? " mobil cihazlar için x86klavye ile çalışmak üzere özel olarak tasarlanmamıştır ARM. Yine de temel mimari seçimler nedeniyle aslında x86 IO, ARM olmasa da doğrudan çalışmak için talimatlar var. Bununla birlikte, USB gibi özel IO veri yollarında, bu tür özelliklere ihtiyaç da ortadan kalkar.

Alıntı yapmak için bir belgeye ihtiyacınız varsa, Cortex-A Serisi Programcılar Kılavuzu (4.0) RISC ve CISC mimarileri arasındaki farkları anlatır:

ARM işlemci, İndirgenmiş Komut Takımı Bilgisayarı (RISC) işlemcisidir.

Karmaşık Komut Seti Bilgisayarı (CISC) işlemcileri, x86 gibi, tek bir komutla karmaşık şeyler yapabilen zengin bir komut setine sahiptir. Bu tür işlemciler genellikle makine talimatlarını dahili işlem dizilerine (mikrokod) kodlayan önemli miktarlarda dahili mantığa sahiptir.

RISC mimarileri ise, daha az sayıda transistörle gerçekleştirilebilen daha az sayıda daha genel amaçlı talimatlara sahiptir, bu da silikonu daha ucuz ve daha verimli hale getirir. Diğer RISC mimarileri gibi ARM çekirdeklerinde de çok sayıda genel amaçlı kayıt vardır ve birçok komut tek bir döngüde yürütülür. Tüm yükleme / depolama adreslerinin kayıt içeriğinden ve talimat alanlarından belirlendiği basit adresleme modları vardır.

ARM şirketi ayrıca bu terimlerin işlerine nasıl uygulandığını açıklayan Mimariler, İşlemciler ve Cihaz Geliştirme Makalesi başlıklı bir makale de sunmaktadır .

Komut kümesi mimarisini karşılaştıran bir örnek:

Örneğin, uygulamanızda bir çeşit bytewise bellek karşılaştırma bloğuna ihtiyacınız varsa (derleyici tarafından oluşturulan, ayrıntıları atlama), bu şekilde görünebilir x86

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

Hareket halindeyken ARMen kısa formu gibi görünebilir (vb kontrol hatasız)

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

bu da size RISC ve CISC komut setlerinin karmaşıklık bakımından nasıl farklı olduğuna dair bir ipucu vermelidir.


9
ARMv8-A, AArch64 adında 64 bit bir mimariye sahiptir.
kyrias

9
X86'nın çok güçlü talimatları olmasına rağmen, kol yine de bir kavgada yenebilir (her ikisinin de aynı saat hızına sahip olması durumunda). Bunun nedeni, kolun iyi bir kayıt setine sahip olmasıdır, çünkü x86 zamanının 1 / 2'sini sınırlı kayıt kümesine girip çıkarırken (bu x86-64 için daha az doğrudur, daha fazla kayıt vardır) ). Ve kısmen, Kol'un sadeliği daha büyük bir önbellek için yer bırakır ve tüm talimatlara koşullu sahiptir (önbelleği daha az kaçırır). Ve kolun hareket çoklu talimatı (tek RISC olmayan talimat), verileri hızlı bir şekilde taşımasına izin verir.
ctrl-alt-delor

4
Daha fazla kayıt kullanarak ARM kodunu daha hızlı yazabildim. Bu uygulamaya bakarsam, x86 5 + 9 × N saatler alır, ARM 4 × N saatler alır (her iki şekil de önbellek kaçırma içindir). X86, bu örnekte talimat baytları için daha iyi puan alır: x86 = 2 bayt, kol = 16 bayt. ARM, daha gerçekçi testlerde bu metrikte çok daha iyi puan alır, örneğin, döngü r2'den çıkarken dizelerin eşit / büyük olup olmadığı hakkında bilgi sahibi olur, bu nedenle koşul kodları olur. Kol, durum kodlarını kontrol etmeden önce diğer talimatları çalıştırabilir. Koşul kodlarını kontrol ederken kolun dallanması gerekmez.
ctrl-alt-delor

2
@JeremyFelix Bu gibi görünüyor stackoverflow.com/questions/13106297/… Farklı talimatlar için farklı borular var, hatta çoğaltılmış olanlar bile. CPU talimatları mikro talimatlara böler ve bunlar boru hattı arasında paralel olarak çalışabilir.
auselen

2
“X86 doğrudan bellekte de çalışırken” diyorsunuz. ancak x86 (pre x86-64) için o kadar az kayıt vardır ki “de” yoktu, her şeyi hafızada saklamak zorundaydınız; sadece bir şeyleri hareket ettirmek için bir programdaki talimatlar hakkında. Oysa ARM'de veri taşımak için çok az talimat gerekiyor.
ctrl-alt-delor

94

İkisinin de klavye ya da mobil cihazlara özgü bir şey yok, ARM'nin yıllardır güç tüketimi açısından oldukça önemli bir avantaja sahip olması, bu da onu pille çalışan her türlü cihaz için cazip hale getirdi.

Gerçek farklılıklara gelince: ARM, daha fazla kayıta sahiptir, Intel eklemeden çok önce birçok yönerge için tahmin tahmini içerir ve neredeyse her yerde güçten tasarruf etmek için her türlü tekniği (tercih ederseniz onlara "numaralar" deyin) uzun süredir dahil etmiştir.

İkisinin talimatları nasıl şifrelediği konusunda da önemli bir fark var. Intel, bir komutun 1 ila 15 bayt arasında herhangi bir yerde yer alabileceği oldukça karmaşık bir değişken uzunlukta kodlama kullanır. Bu, programların oldukça küçük olmasına izin verir, ancak komut kod çözmeyi nispeten zorlaştırır (olduğu gibi: paralel olarak hızlı kod çözme komutları tam bir kabusa benzer).

ARM'nin iki farklı komut kodlama modu vardır: ARM ve THUMB. ARM modunda, tüm talimatlara erişirsiniz ve kodlamanın kodlanması son derece basit ve hızlıdır. Ne yazık ki, ARM modu kodu oldukça büyük olma eğilimindedir, bu nedenle bir programın Intel kodundan iki kat daha fazla bellek işgal etmesi oldukça yaygındır. Başparmak modu bunu azaltmaya çalışır. Yine de oldukça düzenli bir komut kodlaması kullanıyor, ancak kayıt sayısını azaltarak, çoğu komuttan tahminleri ortadan kaldırarak ve dalların aralığını azaltarak, 32 bit'ten 16 bite kadar çoğu talimatı azaltır. Tecrübelerime En azından, bu yine de genellikle vermez oldukçax86 kodunun alabileceği kadar kodlama yoğun, ancak oldukça yakın ve kod çözme hala oldukça basit ve anlaşılır. Düşük kod yoğunluğu, eşdeğer performans elde etmek için genellikle en az biraz daha fazla belleğe ve (genellikle daha ciddi) daha büyük bir önbelleğe ihtiyacınız olduğu anlamına gelir.

Bir zamanlar Intel hıza güç tüketiminden çok daha fazla önem verdi. Güç tüketimini öncelikle dizüstü bilgisayarlar bağlamında vurgulamaya başladılar. Dizüstü bilgisayarlar için tipik güç hedefleri, oldukça küçük bir dizüstü bilgisayar için 6 watt civarındaydı. Daha yakın zamanda ( çok daha yakın zamanda) mobil cihazları (telefonlar, tabletler, vb.) Hedeflemeye başladılar. Bu konuda oldukça iyi görünüyorlar, ancak yaklaşımları ARM'lerden önemli ölçüde farklı olsa da, ARM'nin çoğunlukla mikro mimariyi vurguladığı imalat teknolojisini vurgulamaktadır (ARM'nin tasarımlar sattığını ve imalatını başkalarına bıraktığını düşünmek şaşırtıcı değildir).

Duruma bağlı olarak, bir CPU'nun enerji tüketimi genellikle güç tüketiminden daha önemlidir. En azından terimleri kullandığım için, güç tüketimi (az ya da çok) anlık olarak güç kullanımını ifade eder. Bununla birlikte, enerji tüketimi hız için normalleşir, bu nedenle (örneğin) CPU A bir işi yapmak için 2 saniye boyunca 1 watt tüketirse ve CPU B aynı işi yapmak için 1 saniye boyunca 2 watt tüketirse, her iki CPU da aynı toplam miktarı tüketir Bu işi yapmak için iki watt saniye (iki watt saniye) - ancak CPU B ile, sonuçları iki kat daha hızlı elde edersiniz.

ARM işlemcileri güç tüketimi açısından çok iyi performans gösterir. Dolayısıyla, neredeyse bir işlemcinin "varlığına" ihtiyaç duyan bir şeye ihtiyacınız varsa, ancak çok fazla iş yapmazsanız, oldukça iyi çalışabilirler. Örneğin, video konferans yapıyorsanız, birkaç milisaniye veri toplar, sıkıştırır, gönderir, başkalarından veri alır, sıkıştırır, oynatır ve tekrarlarsınız. Gerçekten hızlı bir işlemci bile uyumak için fazla zaman harcayamaz, bu nedenle bu gibi görevler için ARM gerçekten iyi çalışır.

Intel'in işlemcileri (özellikle düşük güç uygulamaları için tasarlanan Atom işlemcileri) enerji tüketimi açısından son derece rekabetçi. Tam hızlarına yaklaştıklarında, çoğu ARM işlemcisinden daha fazla güç tüketeceklerdir - ancak aynı zamanda işi hızlı bir şekilde bitirirler, böylece daha erken uykuya dönebilirler. Sonuç olarak, iyi pil ömrünü iyi performansla birleştirebilirler.

Bu nedenle, ikisini karşılaştırırken, dürüstçe önem verdiğiniz şeyi yansıttığından emin olmak için neyi ölçtüğünüze dikkat etmelisiniz. ARM güç tüketiminde çok başarılıdır, ancak duruma bağlı olarak enerji tüketimini anlık güç tüketiminden daha fazla önemseyebilirsiniz.


bu yüzden ? RISC daha fazla RAM'e ihtiyaç duyarken, CISC daha küçük kod boyutuna vurgu yapar ve genel olarak
RISC'den

Başparmak modu (kısa kodlamaya izin veren değişken uzunluk) bir fark değildir ; x86 her zaman böyle çalışır (ancak moreso, komut uzunluğu 1 ila 15 bayt arasında değişir ve kod çözülmesi Thumb2'den çok daha zordur). ARM modu (3-operand tahribatsız talimatlarla sabit genişlik kodlaması) x86'dan farktır!
Peter Cordes

Çok daha hızlı bir işlemciye sahip olmak büyük bir yardımcı değildir - video konferans daha iyi bir örnek olabilir: düşük gecikme süresi, iyi bir boyuttaki arabelleğe kod çözme patlaması yapamayacağınız ve derin veya orta düzeyde bir uyku durumuna geçemeyeceğiniz anlamına gelir. . "Uykudan yarış", modern CPU'ların tamamen boşta kaldığında (saat durduğunda veya hatta çekirdeğin parçalarını kapattığında) önemli miktarda güç tasarrufu sağlayabildiği göz önüne alındığında, sabit bir hesaplama için enerji tüketiminde önemli bir kavramdır. yazdıktan sonra.) ... ve elbette bir sonraki paragrafta bahsettiğiniz nokta budur. > <.
Peter Cordes

@PeterCordes: Thumb Mode kodlaması x86 kodlamasına pek benzemez. O olmasa da oldukça ARM kodlama olarak düzenli olarak, hala oldukça fazla sabit format.Density artış basitçe nadiren ARM kodlamada kullanılan bit ortadan kaldırarak büyük ölçüde olduğunu bu. Örneğin, neredeyse tüm ARM komutları koşulludur, ancak koşullar yalnızca oldukça küçük bir yüzde oranında kullanılır (bu nedenle dal olmayan THUMB komutlarının çoğu koşulsuzdur).
Jerry Coffin

@PeterCordes: Haklısın: video konferans daha iyi bir örnek - bunu düzenledim. Teşekkür ederim.
Jerry Coffin

39

Jerry Coffin'in ilk paragrafına ek olarak . Yani, ARM tasarımı daha düşük güç tüketimi sağlar.

Şirket ARM, yalnızca CPU teknolojisini lisanslar. Fiziksel çip yapmıyorlar. Bu, diğer şirketlerin genellikle SOC veya çip üzerinde sistem olarak adlandırılan çeşitli çevresel teknolojiler eklemelerine olanak tanır . Cihazın tablet, cep telefonu veya araç içi eğlence sistemi olup olmadığı. Bu, yonga satıcılarının yonganın geri kalanını belirli bir uygulamaya uyarlamasını sağlar. Bunun ek faydaları vardır,

  1. Daha düşük kart maliyeti
  2. Düşük güç (not1)
  3. Daha kolay üretim
  4. Daha küçük form faktörü

ARMile destekler SOC satıcıları AMBA raf 3. parti modüllere kapalı satın alma SOC uygulayıcılar sağlayan; Ethernet, bellek ve kesinti kontrolörleri gibi. MIPS gibi diğer bazı CPU platformları bunu destekler , ancak MIPS güç bilincine sahip değildir.

Tüm bunlar elde taşınan / pille çalışan bir tasarım için faydalıdır. Bazıları her yerde iyidir. Ayrıca ARM, pille çalışan cihazların bir geçmişi var; Apple Newton , Psion Organizatörleri . PDA yazılım alt yapısı oluşturmak için bazı şirketler tarafından kaldıraçlı edilmiştir akıllı telefon tipi cihazlar. Bununla birlikte, GUI'yi akıllı telefonla kullanmak için yeniden icat edenler daha fazla başarı elde etti .

Open sourceAlet takımlarının yükselişi operating systemsve çeşitli SOCtalaşları kolaylaştırdı . Kapalı bir kuruluş, ARM için mevcut tüm çeşitli cihazları desteklemeye çalışırken sorunlar yaşayacaktır. En popüler iki hücresel platform olan Andriod ve OSx / IOS, Linux ve FreeBSD, Mach ve NetBSD işletim sistemlerini temel alır. satıcıların yonga setleri için yazılım desteği sağlamasına Open Sourceyardımcı olur SOC.

Umarım, x86 neden klavye için kullanılır ? Yazılımı vardır ve daha da önemlisi insanlar bu yazılımı kullanmak için eğitilmişlerdir. NetwinderARM orijinal olarak klavye için tasarlanmış bir sistemdir . Ayrıca, üretici şu anda sunucu pazarı için ARM64'e bakıyor. 24/7 veri merkezlerinde güç / ısı bir sorundur.

Dolayısıyla, bu çiplerin etrafında büyüyen ekosistemin , düşük güç tüketimi gibi özellikler kadar önemli olduğunu söyleyebilirim . ARMbir süredir (1980'lerin ortalarından sonuna kadar) düşük güç, daha yüksek performanslı bilgi işlem için çalışıyor ve gemide çok sayıda insan var.

Not1: Birden fazla yonga, bilinen voltajlarda ve sürücüde iletişim kurmak için otobüs sürücülerine ihtiyaç duyar. Ayrıca, tipik olarak ayrı yongalar, bir SOC sisteminde paylaşılabilen destek kapasitörlerine ve diğer güç bileşenlerine ihtiyaç duyar .


22

ARM bir İtalyan spor otomobiline benziyor:

  • İyi dengelenmiş, iyi ayarlanmış motor. İyi hızlanma ve en yüksek hız sağlar.
  • Mükemmel kovalar, frenler ve süspansiyon. Hızlı bir şekilde durabilir, yavaşlamadan köşeyi açabilir.

X86 bir Amerikan arabası gibi:

  • Büyük motor, büyük yakıt pompası. Mükemmel en yüksek hız ve ivme sağlar, ancak çok fazla yakıt kullanır.
  • Korkunç frenler, yavaşlamak istiyorsanız günlüğünüze bir randevu almanız gerekir.
  • Korkunç direksiyon, köşeye yavaşlamanız gerekiyor.

Özetle: x86, 1974'teki bir tasarıma dayanmaktadır ve düz bir çizgide iyidir (ancak çok fazla yakıt kullanır). Kol az yakıt kullanır, köşeler (dallar) için yavaşlamaz.


Metafor bitti, işte bazı gerçek farklılıklar.

  • Arm'un daha fazla kaydı var.
  • Kolun birkaç özel amaçlı kaydı vardır, x86'nın hepsi özel amaçlı kayıtlardır (böylece daha az hareket eden şeyler).
  • Kolun az sayıda bellek erişim komutu vardır, sadece kayıt / depolama kaydı.
  • Kol iç tasarımım Harvard mimarisidir.
  • Kol basit ve hızlıdır.
  • Kol talimatları mimari olarak tek döngüdür (çoklu yük / depolama hariç).
  • Kol talimatları genellikle birden fazla şey yapar (tek bir döngüde).
  • X86'nın döngü deposu ve otomatik artış gibi bir Kol komutundan daha fazlasına ihtiyaç duyulduğunda, Kol bunu hala daha az saat döngüsünde yapar.
  • Kolun daha koşullu talimatları var.
  • Kolun dal tahmincisi çok basittir (koşulsuz veya geriye doğru dal varsayalım, başka bir dal olmadığını varsayalım) ve x86'daki çok çok karmaşık olandan daha iyi performans gösterir (burada açıklamak için yeterli alan yok, yapabileceğim değil ).
  • Kol basit bir tutarlı komut setine sahiptir (elle derleyebilir ve komut setini hızlı bir şekilde öğrenebilirsiniz).

7
Bu benzetme, İtalyan spor otomobillerinin ARM CPU'ları yokken alabilecekleri her anda bozulduğu ve kolayca yapılabilirken, masaüstü CPU hızları yapabilen tek bir ARM CPU satın alamayacağınız gerçeğini kırıyor. , onları sokmak için
soketli

1
Performans açısından en büyük / daha hızlı Xeon işlemcilerden bazılarıyla (örneğin E5-2690 v3) doğrudan rekabet eder, ancak daha düşük güçte, maliyette. quora.com/…
ctrl-alt-delor

1
Veritabanları ve G / Ç sunucuları gibi büyük ölçüde paralel iş yükleri için, elbette. Tek iş parçacıklı performans için, hiç kimse x86 kadar büyük bir yerde bir ARM çekirdeği tasarlamadı. Yapamamaları için bir sebep yok, sadece kimse yoktu. Güç ve kalıp alanındaki "x86 vergisi", yüksek güçlü CPU çekirdeklerindeki sıra dışı makineler için kullanılan silikon miktarıyla karşılaştırıldığında o kadar büyük değildir. X86'da kesinlikle siğiller vardır, ancak RISC'nin kod yoğunluğu dezavantajı vardır (bu genellikle önemli değildir, ancak yine de önemlidir). Bu, realworldtech.com forumlarında tekrar tekrar tartışılıyor .
Peter Cordes

1
@richard: "İhtiyacınız olmayan" pek çok şey var, ama bu kod yoğunluğunu arttırıyor. Hile, kod çözme karmaşıklığını kod boyutuna / talimat sayısına göre dengeliyor. Sıra dışı bir çekirdeğin genişliğini arttırmak güç tüketiminde son derece pahalıdır, bu nedenle her bir talimat için daha fazla çalışma yapmak değerlidir. Kod çözme karmaşıklığında küçük bir artış çok daha ucuzdur. Modern x86 CPU'lar zaten x86'nın kodunu hızlı bir şekilde çözmeyi başarıyor. (4 geniş OOO çekirdeğini uop-cache veya loop buffer yerine dekoderlerden beslemek için yeterince hızlı değil ve elbette yüksek güç maliyetiyle.)
Peter Cordes

3
@ Evi1M4chine, aynı zamanda bir İtalyan spor otomobilinin çok pahalı olduğu, bir Amerika kas arabasının nispeten ucuz olduğu gerçeğini de kırıyor. Ve kas arabası basit, çünkü Ferrari gibi bir şey çok çok karmaşık. CISC ve
RISC'nin

15

ARM mimarisi aslen x86 tabanlı IBM PC modelleri kadar klavye tabanlı kişisel bilgisayarlar olan Acorn kişisel bilgisayarlar için ( 1987 dolaylarında Acorn Archimedes ve RiscPC'ye bakın ) tasarlanmıştır. Sadece daha sonra ARM uygulamaları öncelikle mobil ve yerleşik pazar segmentini hedef aldı.

Başlangıçta, Intel'deki x86 geliştirme üzerinde çalışanlardan çok daha küçük mühendislik ekipleri (bkz. Berkeley RISC ) tarafından tasarlanan basit RISC CPU'lar tasarlanabilir .

Ancak, günümüzde, en hızlı ARM yongaları, büyük mühendislik ekipleri tarafından tasarlanan çok karmaşık çok sayıda sipariş dışı talimat gönderme birimlerine sahiptir ve x86 çekirdeği, bir talimat çeviri birimi tarafından beslenen bir RISC çekirdeği gibi bir şeye sahip olabilir.

Dolayısıyla, iki mimari arasındaki mevcut farklılıklar, geliştirme ekiplerinin hedeflediği ürün nişlerinin spesifik pazar ihtiyaçları ile daha fazla ilgilidir. (Rastgele görüş: ARM muhtemelen daha fazla güç ve maliyet kısıtlaması olan gömülü uygulamalardan lisans ücretlerinde daha fazlasını yapar. Intel'in kar marjları için PC'lerde ve sunucularda bir performans avantajı sağlaması gerekir. Böylece farklı uygulama optimizasyonları görürsünüz.)


Hala büyük mimari farklılıklar var. Bununla birlikte, intel harika bir iş çıkardı ve kötü tasarlanmış CPU'ların çok iyi çalışmasını sağlamak için bir miktar para yatırdı (biri, tüm bu çaba iyi tasarlanmış bir CPU'ya yerleştirildiyse ne yapılabileceğini merak ediyor).
ctrl-alt-delor
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.