Mikroişlemciler. SPARC ve ARM mimarisi

Özetin bölümlerine devam ediyorum. Bu sefer SPARC ve ARM mimarileri hakkında.

SPARC

RISC işlemcileri oluştururken ana belleğin yavaşlığı dikkate alınır. Buna yapılan çağrılar (farklı önbelleklerle bile) “pahalıdır” ve ek hesaplamalar gerektirir ve bu nedenle mümkün olduğunca kaçınılmalıdır. Ancak Yükleme/Depolama mimarisi ve çok sayıda yazmaç yapılabilecek tek şey değildir.

Herhangi bir program kodunda, birçok işlev çağrısı bulabilirsiniz – aslında, işlemcinin programda belirli bir yere gitmesi, özel bir geri dönüş talimatına kadar programın yürütülmesine devam etmesi ve ardından çağrının gerçekleştiği yere geri dönmesi için gereksinimler , işlev çağrısından önceki durumunu neredeyse tamamen geri yükler. Bunu yapabilmek için işlemci, işlevi çağırırken mevcut durumunu – özellikle bazı genel amaçlı kayıtların içeriğini ve özel kayıtların büyük bir kısmını – “hatırlamalıdır”. Geleneksel çözüm, gerekli tüm verileri özel bir yapıya “itmektir” – işlemcinin donanım düzeyinde desteklediği ve çoğu işlemcide bir çift hizmet kaydı ve özel bir RAM alanı olarak uygulanan bir yığın, yığına yerleştirilen tüm verilerin yazıldığı yer. Bu nedenle, geleneksel şemadaki herhangi bir işlev çağrısı dolaylı olarak RAM’e onlarca, hatta yüzlerce baytlık bilgi yazılmasına yol açar. Hatta bu konuda bir takım model sorunları vardır – depolanan bilgi miktarını en aza indiren bir derleyici nasıl yazılır; ve bu gelişmelerden bazıları popüler derleyiciler tarafından desteklenir (örneğin, bazı C/C++ derleyicilerindeki hızlı çağrı kuralı). Ancak tüm bunların önlenebileceği ortaya çıktı.

Tipik bir SPARC mimarisi 128 kayıttan oluşan bir kayıt dosyası kullanır; ayrıca, bu dosyada bir pencere oluşturan yalnızca 24 ardışık kayıt, kullanıcı için hemen kullanılabilir durumdadır ve ayrıca birbirinden ayrı sekiz global kayıt daha vardır. Global değişkenler için global kayıtlar kullanılır; kayıt penceresi – yerel için. Bir işlevi çağırmamız gerektiğinde, çalışması için gerekli olan ilk verileri pencerenin sonuna yazarız ve işlemci, işlevi çağırırken pencereyi kayıt dosyası boyunca kaydırır, böylece yazılan veriler en sonunda biter. yeni ama boş bir pencerenin başlangıcı. Arayanın kaydedilmesi gereken geçici verileri pencerenin dışındadır, bu nedenle yanlışlıkla yapılan işlemlerle bunları karıştırmak imkansızdır. Ve işlev sona erdiğinde, sonuçlar pencerenin başındaki aynı kayıtlara yazılır ve ardından işlemci onu geri kaydırır. Ve yığını kurtarmak-geri yüklemek için maliyet yok.

SPARC’lardaki pencerelerin düzenlenmesi, programın en verimli şekilde kullanılmasını sağlayacak şekilde programlanabilir (programda ne tür işlevlerin bulunduğuna bağlı olarak çok sayıda pencere, ancak küçük veya az – ancak büyük) – bu gerçek şudur: hatta işlemci adına da yansır (Ölçeklenebilir İşlemci AR Mimarisi). 80’lerin ortalarında geliştirilen ve 90’ların ortalarında gelişen RISC kız kardeşlerinin çoğu gibi, SPARC mimarisi de megahertz yarışından sağ çıkamadı ve bugün neredeyse öldü. Ancak onun tarafından önerilen yaklaşım canlı ve iyi – örneğin IA-64 (Itanium) mimarisi tarafından kullanılabilir.

KOL

ARM (Gelişmiş RISC Makineleri) mimarisi, 1983-85 yıllarında Acorn Computers tarafından geliştirilmiştir. Roger Wilson ve Steve Ferber’den oluşan ekip, ARM komut setinin temeli olarak bir zamanlar popüler olan ancak şimdi unutulan MOS Technology 6502 işlemcisini aldı ve ona herhangi bir talimata eklenebilecek özel bir dört bitlik durum kodu sağladı.

Koşullu komutlar fikri dahiyane olan her şey kadar basittir: koşullu kodlu bir komut, yalnızca ilgili koşul biti işlemcide ayarlanmışsa yürütülür. Aksi takdirde göz ardı edilir. x86 komut setindeki en yakın analog, yalnızca işlemcide bir veya daha fazla bayrak ayarlanmışsa çalışan koşullu dal talimatlarıdır; ARM mimarisinde, bu tür “koşullar” herhangi bir talimat için geçerlidir ve bayraklar bağımsız olarak tanımlanabilir. Buradaki fikir, geleneksel yapıyı yazmak yerine “If (condition) then 1 Execute 2 Execute 2” gibi bir kodda olmasıdır:

1. Koşulu hesaplayın;

2. Koşul karşılanıyorsa, 5’e gidin;

3. Çalıştır2;

4. 6’ya gidin;

5. Çalıştır1;

6. …

koşullu ifadeleri kullanarak şunları yazabilirsiniz:

1. Koşulu hesaplayın ve Bayrak1’i hesaplama sonuçlarına göre ayarlayın;

2. Bayrak1 ayarlanmışsa Yürüt1;

3. Bayrak1 ayarlanmamışsa 2’yi yürütün.

Lütfen elde edilen kodun yalnızca daha kompakt olmadığını, aynı zamanda klasik sürümde bulunan bir koşullu ve bir koşulsuz atlamadan yoksun olduğunu unutmayın – bunlar genellikle ardışık düzen mimarilerinin performansına zarar veren atlamalardır.

ARM’ye yapılan bir dizi ekleme, aynı anda birkaç basit işlemi gerçekleştiren talimatların eklenmesini içeriyordu, böylece ara hesaplamaların sonuçlarını depolamak için işlemci kayıtlarına olan ihtiyacı ortadan kaldırdı ve kodun hesaplama yoğunluğunu artırdı. Bu yaklaşım, RISC işlemcileri için tipik değildir, çünkü maksimum basitleştirmelerinin “ana fikri” ile tam olarak uyuşmaz, ancak sonunda Acorn işlemcilerinin, diğer her şey eşit olduğunda, birim başına daha fazla performans almasına yol açtı. Sıklık. Elbette, ARM yaklaşımının dezavantajları da vardır (örneğin, boş talimatları yürütme ihtiyacı), ancak genel olarak çok iyi performansa sahip çok basit işlemciler oluşturmanıza olanak tanır.

1985 yılında, ARM mimarisinin ilk doğuşu çıktı – 32-bit ARM1 işlemci; 1986’da – mimarinin ilk ticari versiyonu olan ARM2 işlemci. ARM2 gerçek bir başyapıttı: çekirdeğinde sadece 30 bin transistör vardı (i80286’dan dört kat daha az ve MC68000’den üç kat daha az), son derece düşük güç tüketimi ile karakterize edildi ve yine de, 286. işlemcinin performansı (286’nın 16 bit işlemci ve ARM2’nin 32 bit işlemci olduğundan bahsetmiyorum bile). Biraz sonra, ARM3, ARM işlemcilerinin performansını daha da artıran dört kilobayt önbelleğin ortaya çıktığı ışığı gördü.

Acorn Computers’ın böyle bir başarı bekleyip beklemediğini, ancak bundan tam olarak yararlandığını söylemek zor. ARM’nin geliştirilmesi üzerinde Apple ile işbirliği içinde çalışan Acorn, 1990’da ARM bölümünü ayrı bir şirket olan Advanced RISC Machines’e dönüştürdü. Ortak çalışmanın sonucu, özellikle dünyanın ilk PDA’larından biri olan Apple Newton’da kullanılan ARM6 çekirdeği ve ARM610 işlemcisiydi. ARM6 çekirdeği hala inanılmaz derecede basitti (sadece 35.000 transistör), düşük güç tüketimi ve iyi bir performans seviyesi sağladı. İ386 gibi çok daha karmaşık canavarlarla performans açısından rekabet edemediği için (ve yüksek performanslı bilgi işlem alanı MIPS tarafından sıkıca işgal edildi), Advanced RISC Machines yönetimi orijinal bir iş yapma yöntemi seçti – ARM6’yı “gömülü” olarak konumlandırdı. Göreceli olarak küçük bir para karşılığında herkesin özel işlemcilerine entegre edilebileceği bilgi işlem çekirdeği. ARM6 çekirdeğinin çok başarılı olduğu ve bu iş modeline çok uygun olduğu ortaya çıktı (basitliği nedeniyle, çok eski ucuz ekipmanlarda bile yapılabilirdi), ARM mimarisi kısa sürede yaygın olarak kullanılmaya başlandı. Böyle bir “hibrit”in en çarpıcı örneği, cep telefonu işlemcilerinin büyük çoğunluğunun temelini oluşturan ARM7TDMI çekirdeğidir. Bugün ARM, sabit disk denetleyicilerinden, hesap makinelerinden ve oyuncak mikroişlemcilerden ağ yönlendiricilerine kadar dünyada üretilen tüm entegre işlemcilerin %75’inden fazlasında kullanılmaktadır. Yani, işlemcinin çok yüksek hız gerektirmediği yer.

ARM’nin bugün “yaşadığı” bir başka yön, PDA’larda, iletişim cihazlarında ve bazı terminallerde yaygın olarak kullanılan daha üretken StrongARM mimarisidir. StrongARM, 1995 yılında DEC tarafından ARM ile işbirliği içinde geliştirildi; ve daha sonra, bir denemeden sonra, şu anda onu bir dizi XScale işlemcisi şeklinde geliştiren Intel Corporation’ın ilgili bölümü ile birlikte satıldı.

Similar Posts

Leave a Reply

Your email address will not be published.