RISC ve CISC Mimarilerinin Günümüzdeki Karşılaştırması
10 Temmuz 2024
Gelecekteki okurum, beni buldun! Evet, yayınlamış olduğum bu ilk blog yazısını bulduğun için kendini şanslı hissetmelisin. Çünkü, her ne kadar birlikte üzerinde duracağımız bu RISC ve CISC konusu biraz karmaşık görünüyor olsa da, işin biraz tarihine baktığımızda ve birazcık da derinlerine indiğimizde, kafamızdaki karmaşık bilgi yumağının hızla çözüleceğini ve soru işaretlerinin ortadan kalkacağına şahit olacaksın.
Kafein içeren herhangi bir içecek hazırla, rahat ancak çok da uykunu getirmeyecek bir pozisyona geç ve zihnini boşalt. Hazırsan başlıyoruz.
● ● ●
Yukarıdaki resimde gördüğünüz güler yüzlü amcamız David Andrew Patterson, Walter White değil. Kendisi RISC (Reduced Instruction Set Computing) terimini ortaya atan kişi olmakla beraber oldukça başarılı bir bilgisayar bilimcisidir. 1976–2016 yılları arasında Kaliforniya Üniversitesi’nde profesör olarak çalışmış, daha sonrasında Google şirketi ile anlaşmıştır.
Profesör olarak çalıştığı sırada yönetmiş olduğu Berkeley RISC projesinde, RISC mimarisine önemli katkılar sağlamıştır. David Andrew Patterson ve ekibi, RISC işlemcilerin tasarımında karmaşık komut kümesi yerine daha basit komutlardan oluşan bir yaklaşımı benimsemişlerdir. Bu, işlemcilerin daha hızlı ve daha verimli çalışmasına olanak sağlamış, ayrıca Berkeley RISC projesi sonrası, MIPS (Microprocessor without Interlocked Pipeline Stages) işlemci mimarisinin geliştirilmesinin önünü açmıştır. MIPS mimarisi, RISC tasarımının önde gelen örneklerinden biri haline gelmiştir ve birçok farklı üretici tarafından sevilerek kullanılmıştır.
IBM 801
IBM 801 tasarlanan ilk RISC sistemidir. John Cocke tarafından 1975 yılında tasarlanmaya başlanmış olan bu sistem 1980 yılında üretilmeye başlanmıştır. Firmanın müşterilerilerinden topladığı istatistikler sonucunda üretilmiştir. Müşteriler, işlemcilerdeki kayıtçıların çok çabuk tükenmesinden şikayetçi oluyordu. Daha fazla kayıtçı kullanmanın daha iyi performans vereceği fikri ortaya çıktı ve IBM 801'in tasarlanma süreci başladı.
Belki daha önceden aşinasınızdır. Eskiden telefon santralleri ve bu santrallerin içinde çalışan onlarca insan bulunurdu. Telefon hatlarını birbirine bağlamak ile görevlilerdi. Bir yerdeki hattı çıkarıp diğerine takar ve bu sayede görüşmeleri manuel olarak anahtarlarlardı.
IBM 801'in tasarlanan ilk 24-bit’lik bu versiyonu, saniyede 300 telefon görüşmesini anahtarlayabiliyordu ki bu saatte 1 milyondan fazla görüşmeye tekabül ediyor. Bir işlemcinin, yüzlerce hatta binlerce insanın yapabileceği bir işi tek başına, adeta elektronlara hükmederek gerçekleştirebilmesi, insanlık için adeta bir devrim niteliğinde olmakla beraber son derecede heyecan ve ilham verici.
IBM 801'in sonraki 32-bit’lik tasarımı 1981 yılında, 24-bit’lik tasarımdan bir yıl sonra üretildi. Bu işlemci, yüksek işlem gücü isteyen işlemlerde, IBM’in çevre arabirimlerinde ve kanal denetleyicilerinde kullanım alanı buldu.
Sun UltraSPARC
Sun Microsystems firmasını, Java programlama dili ile ilgilenenleriniz bilir. Şu anda ismini veya logosunu pek göremememizin sebebi, Oracle tarafından satın alınmış olması. Sun Microsystems tarafından üretilmiş olan Java, Oracle tarafından geliştirilmeye devam ediyor fakat üzerinde konuşmak istediğim konu bu değil. Üzerinde konuşmak istediğim konu, SPARC işlemcilerinin nihai başarısı.
Bu öyle bir başarı ki, ABD hükümetinin Bilgi İşlem ve İletişimde Yenilikler Komitesi (Funding a Revolution: Government Support for Computing Research by Committee on Innovations in Computing and Communications, 1999), RISC konseptinin uygulanabilirliğinin kabulünü SPARC sisteminin başarısına borçludur. SPARC’ın başarısı, 1990'da yeni RISC sistemlerini ve 1995'te RISC işlemcilerini piyasaya süren IBM’e olan ilgiyi yeniden canlandırdı ve 15 milyar dolarlık bir sunucu endüstrisinin temelini oluşturdu.
SPARC işlemcileri, başarısını pek çok farklı nedene borçludur. Öncelikle, SPARC açık bir işlemci mimarisine ve açık bir standarda sahipti. Farklı üreticiler arasında uyumlu ve esnek üretim seçenekleri sunulmuştu. Dönemine göre oldukça iyi performans sergiliyordu. Büyük sunucu sistemlerinde ve veritabanlarında sıklıkla tercih ediliyordu. Pek çok işletim sistemini destekliyor ve yüksek güvenilirlik sağlıyordu. Tüm bu durumlar, yazılım geliştiricileri için de daha fazla esneklik sunuyor ve uygulamaların SPARC işlemcileri üzerinde sorunsuz çalışmasını kolaylaştırıyordu.
ARM ve RISC-V
Birazda günümüzü inceleyelim. Qualcomm Snapdragon gibi mobil cihaz işlemcilerinde, Apple M serisi gibi genel amaçlı bilgisayar işlemcilerinde ve IBM Power gibi büyük sunucu işlemcilerinde, ARM (Advanced RISC Machines) mimarisi kullanılmaktadır.
Bu durumun pek çok farklı nedeni bulunmaktadır. RISC mimarisinin çalışma prensibi üzerine birazdan daha detaylı çalışmalar yapacağız ancak şimdiden kısaca bilgi vermek gerekirse; RISC işlemcileri, temelde komut kümesinin basit olmasından dolayı yüksek güç tasarrufuna sahiptir. Mobil cihazların ve taşınabilir bilgisayarların daha uzun süre kullanılabilmesi ve IBM Power gibi sunucuların daha az masrafla çalışabilmesi için tercih edilmektedir.
Bir de, Ağustos 2014 yılında tanıtılan RISC-V hakkında konuşmadan, RISC’in çalışma prensibine geçmek istemiyorum. RISC’in doğum yeri Kaliforniya Üniversitesi’nde tasarlanan RISC-V, açık kaynaklı bir CPU tasarımı standartları setidir. Herkes RISC-V tabanlı bir işlemci geliştirebilir veya geliştirilmesine katkıda bulunabilir. Geniş kullanım alanına, modüler tasarıma ve düşük maliyete sahip olması nedeniyle RISC-V; araştırma, eğitim ve endüstri gibi bir çok alanda sıklıkla kullanılıyor. Diğer işlemci tasarımı standartları genellikle telif hakkı veya patentlerle sınırlı olduğundan dolayı RISC-V, teknoloji severler arasında “İşlemcilerin Linux’u.” olarak saygı ve sevgiyle anılıyor. Şahsen ben de, her ne kadar RISC-V ile profesyonel olarak ilgilenmesem de, insanlığa sağladığı katkılardan dolayı projenin misyonuna son derecede saygı duyuyorum ve manevi olarak bu projeyi destekliyorum.
● ● ●
RISC Mimarisi
RISC mimarisinin tarihine az çok hakim olduğumuza göre, artık çalışma prensibi üzerine konuşabileceğimizi düşünüyorum. Okumaya devam etmeden önce yukarıdaki diyagramı biraz incelemenizi öneririm.
Yukarıdaki diyagram üzerinde dikkatinizi çeken ilk şey ne oldu? Şahsen benim dikkatimi çeken ilk şey, ana belleğin hem talimat önbelleğiyle hem de veri önbelleğiyle bağlantılı olmasıydı. RISC mimarisinin hedeflediği hıza ulaşmak için kullandığı bir özelliktir bu.
Talimat Önbelleği, işlemcinin talimatlara hızlı bir şekilde erişebilir olmasını sağlar. İşlemci, programın sıradaki talimatlarını beklemek zorunda kalmadan bu önbellekte saklanan talimatları alabilir. Bu, programın daha hızlı çalışmasına olanak tanır. Veri Önbelleği, işlemcinin verilere hızlıca erişmesini sağlar. Özellikle sık kullanılan verilere erişimi son derecede hızlandırır ve bu da işlemci performansını ve verimliliğini geliştirir.
RISC mimarisinin tarihi hakkında konuşurken, bu mimarinin mobil cihazlarda düşük güç tüketimi sebebiyle tercih edildiğini okumuştunuz. İşte bu mimarinin düşük güç tüketmesinin sebeplerinden birisi de, Talimat Önbelleği ve Veri Önbelleğinin ayrı konumlandırılması. İşlemci, talimata ihtiyacı olduğunda Talimat Önbelleğine, veriye ihtiyacı olduğunda Veri Önbelleğine erişiyor, bu sayede erişim sıklığı ve süresi düşüyor.
RISC mimarisinin düşük güç tüketiminin yanında yüksek performans sergilemesinin bir diğer sebebi, komut seti tasarımıdır. RISC mimarisinde bulunan komut seti talimatlarının boyları eşittir. İşlemci, gelen talimat üzerindeki işlem kodu ve talimatların kaçıncı bit üzerinde olduğunu bildiği için, işlemleri çok daha hızlı ve optimize bir şekilde tamamlar. Bu durum, işlem hızını ve güç verimliliğini geliştirir. Aynı zamanda, RISC, genellikle direkt olarak ana bellek üzerinde işlem yapmaz. Ana bellekten veriyi alır ve işlemcide bulunan kayıtçılar üzerinde talimatları uyguladıktan sonra ana belleğe işlenmiş veriyi geri yükler. Bu durum bellek erişim sayısını ve süresini azaltacağı için, performansı artırır ve güç tasarrufu sağlar.
Ana belleği, yalnızca LOAD ve STORE talimatları için kullanın. Diğer işlemler kayıtçılar arasında halledilsin.
Bu kısıtlama, tasarımı basitleştirecektir.
- David Andrew Patterson
32-bit RISC Talimatı
Yukarıdaki diyagramda, tipik bir 32-bit RISC talimatı bulunmakta. İşlemciden işlemciye bu talimat yapısı değişkenlik göstermekle birlikte, CISC’ten en keskin farkı, işlem kodunun daha kısa ve talimatın daha uzun olmasıdır. RISC mimarisindeki temel tasarım amacı, komut setindeki talimatların kısa ve spesifik olması ve bu sayede her bir talimatın az sayıda (genellikle bir) işlemci döngüsünde tamamlanabilmesidir. Bu durum hem güç tasarrufu sağlar hem de işlemci tasarımını kolaylaştırır.
Komut kümesinin ve adresleme modlarının basitliği, çoğu talimatın tek bir makine döngüsünde çalışmasına izin
verir ve her talimatın basitliği kısa bir döngü süresi garanti eder. Ayrıca, böyle bir makinenin tasarım
süresi çok daha kısa olacaktır.
- David Andrew Patterson
RISC Mimarisi Talimat Dönüşümü
RISC mimarisine sahip işlemciler, talimatları daha basit ve özelleştirilmiş mikro işlemlere dönüştürmezler. Talimatlar doğrudan işlemci tarafından yürütülür. Bu, işlemcinin hızını artırabilir, ancak daha fazla talimat gerekebilir. Evet, daha spesifik işleri tamamlayan ve sabit uzunlukta olan kısa talimatlar daha hızlı çalışabilir ancak daha fazla talimat kodlanması gerekecektir. Bu durum daha uzun olacak programlar sebebiyle sistemin depolama ve bellek gereksinimini artıracaktır.
RISC Mimarisi Talimat Yapısı ve Boru Hattı Özelliği
Tüm bunların yanında, RISC mimarisinde ek bir uğraş gerekmeden Boru Hattı (Pipelining) özelliği kullanılabilir. Pipelining, işlemcinin talimatları aşamalara böldüğü ve her aşamanın ardışık talimatları işlemesi için ayrıldığı teknik bir işlemdir. Her aşama, farklı bir işlemi gerçekleştirir. Ardışık talimatlar bu aşamalardan geçerken aynı anda birden fazla talimat işlenir. Böylelikle, aynı anda birden fazla işlem tamamlanabilir.
RISC mimarisinde, talimat uzunlukları ve yapıları aynı olacağından, işlemcinin pipelining özelliğini kullanması çok daha pratik olacaktır. Çünkü RISC mimarisine sahip olan işlemci, işlem kodunun ve talimatın kaçıncı bitler üzerinde olacağını çok net bir şekilde bilir. İşlemleri ve aşamaları bunlara göre sıralar ve çalıştırır. CISC mimarisi de pipelining özelliğini destekler ancak öncesinde mikro işlemlere dönüştürmesi gerekir. Bu durum CISC mimarisine sahip olan işlemci için ekstra yük ve enerji maliyeti oluşturur ancak avantajları da yok değildir.
CISC’ten bahsetmeye başlamışken, RISC hakkında yeterince konuştuğumuzu düşünüyorum. Şimdi, efsanevi x86 mimarisinin arkasındaki tasarım yaklaşımı olan CISC mimarisine göz atmanın vakti.
● ● ●
IBM S/360
IBM (International Business Machines), dünyadaki ilk CISC (Complex Instruction Set Computing) mimarisini kullanan IBM S/360 bilgisayar sistemini, 1964 yılında tanıttı ve 1978 yılına kadar satışına devam etti. Bu on dört yıllık süreç içerisinde, bilgisayar pazarını domine etti ve belirli bilgisayar endüstrisi standartlarının belirlenmesine liderlik etti.
Yüksek performans, uyumluluk ve güvenilirlik sağlaması hedeflenerek üretilen IBM S/360, çeşitli işletim sistemleri ve yazılım uygulamaları ile birlikte kullanılabilecek özel bir yazılım paketi ile satışa sunuldu. Bu özel yazılım paketi sayesinde IBM, işletmelerin veri işleme ihtiyaçlarına daha iyi yanıt verdi ve dünya çapındaki işletmeler tarafından öncelikli olarak tercih edilen markalar arasındaki yerini sağlamlaştırdı.
IBM S/360, günümüz koşullarında, tabiri caizse çöp sayılabilecek teknik özelliklere sahip olsa da, 1964–1978 arasındaki yıllar için adeta bir canavardı. İşlemci tarafında 16 adet 32-bit kapasiteli genel kullanım amaçlı kayıtçılar barındırıyordu. 50MHz bandına kadar işlemci saat hızına ulaşabiliyordu. Zengin bir komut setine sahipti ve çeşitli işlemci komutlarıyla programlanabiliyordu. Bu komutlar; bellek yönetimi, aritmetik işlemler, veri işleme ve kontrol işlevlerini gerçekleştirmek için kullanılıyordu. Zengin komut seti ve yüksek pazar payı sebebiyle bilgisayar programcılarının dikkatini çekiyor, uygulama çeşitliliği ve kalitesi de günden güne artıyordu.
Ana bellek tarafında ise, ilk IBM S/360 sistemleri 8KB — 16KB arasında kapasitelere sahip olsa da, sisteme duyulan yoğun ilgi sonrasında, yüzlerce megabayt ana bellek kapasitesine sahip sistemler de üretildi. Ana belleğin frekansı ise günümüz koşullarına göre oldukça yavaş ancak o dönemin koşullarına göre oldukça yeterli kabul edilen 300kHz ve 1MHz arasındaydı.
Dönemine göre tüm bu üstün donanımsal ve yazılımsal özellikler, IBM S/360 sisteminin iş dünyasında adeta iyi huylu bir tümör gibi yayılmasına ve günden güne popülerleşmesine sebep oldu. IBM firması, günümüzdeki statüsünü belki de IBM S/360 sistemlerinin bu tartışılmaz başarısına borçlu.
Intel C8086
C8086, Intel tarafından üretilmiş ve x86 mimarisinin gelişmesine yol açmış, 16-bit mimarili bir işlemcidir. İşlemcinin tasarlanmasına 1976 yılının baharında başlandı ve üretimi 1978 yılının yazında tamamlandı. Böylelikle dünyanın en başarılı işlemci mimarilerinden birisi doğmuş oldu.
Projenin başında Stephen Paul Morse bulunuyordu. Stephen Paul Morse, bir donanım uzmanından çok yazılım uzmanıydı. İşlemci tasarımında, donanım merkezli yaklaşımdan çok yazılım merkezli yaklaşımın önemli olduğunu vurgulayarak, 8086 mimarisinin yoğun ilgi görmesini sağladı ve kısa sürede Zilog ve Motorola gibi rakip firmalar karşısında, Intel pazar hakimiyetini ele geçirdi.
C8086, daha önce de bahsettiğim üzere 16-bit mimarili bir işlemcidir. 16-bit kapasiteli kayıtçılara ve 16-bit kapasiteli veri yoluna sahiptir. 16-bit kapasiteli kayıtçıların getirdiği 64KB bellek sınırlamasını, segment kayıtları ile ekarte ediyordu. Segment kayıtları, kod segmenti ve veri segmenti olarak ikiye ayrılıyor, işlemci ihtiyacına göre CS (Code Segment) veya DS (Data Segment) kayıt değerlerini kullanıyordu. Böylelikle 64KB bellek kapasitesinden daha yüksek kapasiteli bellekler, C8086 işlemci ailesinin güç verdiği sistemlerde kullanılabiliyordu.
Bugün hala çoğu Intel markalı işlemci "Sanal 8086 Modu" kullanmaktadır. Bu mod, eski 16-bit uygulamaların 32-bit ve 64-bit mimarili sistemlerde çalıştırılabilmesine olanak sağlar. Yani 8086 işlemci ailesi varlığını somut olarak olmasa da, soyut olarak sürdürmektedir.
AMD ve Intel
CISC mimarisine sahip kişisel kullanım amaçlı işlemci üretiminde, günümüzde iki lider firma bulunmaktadır. Intel (Integrated Electronics) ve AMD (Advanced Micro Devices), CISC mimarisine sahip işlemci pazarında, rekabet eden iki devasa şirkettir.
Intel firmasını teknolojiye sağladığı katkılardan ve ürettiği işlemcilerin gösterdiği yüksek performanstan dolayı her ne kadar sevsem de, AMD firmasının kullanıcı politikasını her zaman daha çok sevmişimdir.
Intel, anakartlar üzerinde kullandığı soket tipini sürekli olarak değiştirmekte. LGA1150, LGA1151, LGA1155, LGA1156, LGA1200, LGA1700, derken, kullanıcılar değişen her işlemci soketinde yeni anakart almak zorunda kalmakta. Intel firmasının, anakart firmaları ile para için anlaşmış olabileceği tartışması, yaşanan bu gelişmelerin analizi ışığında pek de imkansız görünmüyor.
Öte yandan AMD firmasına baktığımızda, popüler olarak kullanılan soketlerde bir AM4 var bir de AM5. Yeni çıkan işlemciler neredeyse her zaman eski anakartları destekleyecek şekilde piyasa sürülüyor. Kullanıcılar yeni çıkan her işlemci modeli için anakartlarını değiştirmek zorunda kalmıyorlar. Bu durum hem daha ekonomik hem daha çevreci. Ayrıca AMD firması AMD64 adındaki 64-bit işlemci mimarisini dünyada geliştiren ilk firmadır.
Performans bakımından Intel ve AMD zaman zaman birbirinin tepesine çıkıyor ancak bunlar tamamen kağıt üzerinde. Şahsi fikrim ve diğer pek çok teknoloji meraklısı objektif bakış açısına sahip insanın fikri, Intel işlemcilerin daha yüksek performans gösterdiği yönünde. Bunun da asıl sebebi donanımsal üstünlükten ziyade, yazılımsal tasarım. Çoğu yazılım geliştiricisi geliştirdikleri projeleri Intel işlemciler ile daha uyumlu çalışacak şekilde tasarlıyorlar. Bu tasarım yaklaşımının sebebi sistemsel uyumluluk mu yoksa maddi çıkar mı tartışılır, ancak bu durum, Intel işlemcilerin genellikle daha yüksek performans sağladığı gerçeğini değiştirmiyor. Hem, Intel işlemcilerin yonga setlerinin daha az ısındığını da ıskalamamak gerek.
● ● ●
CISC Mimarisi
CISC mimarisinin tarihine hakim olduğumuza göre, artık bu mimarinin çalışma prensibi hakkında konuşabiliriz.
Yukarıdaki diyagram üzerinde bulunan bir modüle dikkatinizi çekmek istiyorum, Mikro Program Belleğini inceleyin lütfen. Bu tampon bellek, CISC mimarisinin RISC mimarisindeki gibi yüksek performans gösterebilmesinin nedeni olan Mikro Operasyonlar (Micro Operations / μops) için görevlendirilmiştir.
RAM üzerinden alınan talimatlar ve veriler, öncelikle önbelleğe yüklenir. Talimat ve Veri Yolu kullanılarak bu talimat ve veriler Kontrol Birimine ulaştırılır. Kontrol Biriminde bu talimat ve veriler μops, yani mikro operasyonlara bölünür ve işlenir.
Evet, talimatları ve verileri mikro operasyonlara dönüştürürken bir zaman maliyeti vardır fakat bu zaman maliyeti, dönüşüm sonrasındaki işlem performansı kazancı açısından oldukça önemsizdir. Bu dönüşüm sonrası, CISC mimarisine sahip işlemci için, Boru Hattı (Pipelining) özelliğini kullanmak mümkün hale gelecektir. Çünkü talimatlar, belirli bir format çerçevesinde dönüştürülmüştür ve dönüşüm sonrasındaki talimat yapısı işlemci tarafından net bir şekilde bilinmektedir. Böylelikle, işlemler paralel olarak sıralanabilecek ve yürütülebilecektir.
32-bit CISC Talimatı
Yukarıdaki diyagramda tipik bir 32-bit CISC talimatı bulunmaktadır. RISC talimatlarından en önemli farkı, işlem kodunun daha uzun olması ve talimat uzunluğunun değişken olması. Talimatın uzun olması, evet, performansı negatif yönde etkileyebilir ancak programın kısa olmasını sağlar. Bu durum bellek ve depolama gereksinimlerini düşürecektir.
Konuya daha da açıklık getirmek gerekirse; CISC mimarisinde her işlem için RISC mimarisindeki gibi spesifik talimatlar kullanılması gerekmez. Bu sebeple CISC mimarisindeki talimatlar uzun olabilir fakat program çok daha kısa olacaktır. Evet, RISC mimarisindeki gibi talimatlar pek düzenli olmayacaktır ancak program kısa olacağından ve μops, yani mikro operasyon dönüşümü yapılacağından, CISC mimarisinde de yüksek performans elde edilecektir. Ancak güç tüketimi RISC kadar verimli olmayacaktır.
CISC Mimarisi Talimat Dönüşümü
RISC mimarisinden farklı olarak, CISC mimarisindeki makine talimatları doğrudan çalıştırılmazlar. Talimatların uzunlukları ve yapısı birbirinden farklı olacağından dolayı, RISC mimarisindeki talimat yapısına benzer bir yapı elde etmek için Mikrokod Dönüşümü gerçekleştirilir.
Mikrokod Dönüşümü gerçekleştikten sonra elde edilen kod yığını, işlemcinin tasarımına göre Mikrotalimatlara yani μops’a dönüştürülür. Daha sonrasında, RISC mimarisine benzer şekilde dönüştürülmüş bu talimatlardan elde edilen μops’lar çalıştırılır. Uzun talimatlar parçalara ayrıldığı için, her bir parça (μop), genellikle bir işlemci döngüsünde tamamlanır. Böylelikle işlemler hızlı bir şekilde paralel olarak işlenebilir.
CISC Mimarisi Talimat Yapısı ve Boru Hattı Özelliği
RISC mimarisine sahip işlemcilerden farklı olarak, CISC mimarisine sahip işlemcilerin talimat uzunlukları farklı boyutlarda. Farklı uzunluktaki talimat boyutları, programın kısa olmasını sağlıyor ancak işlemcinin talimatları ayıklamasını zorlaştırıyor. Aynı zamanda, farklı uzunluklarda olan bu talimatlar, boru hattı özelliğinin kullanılmasını imkansız kılıyor. Çünkü farklı uzunluktaki talimatlarda, işlem kodlarının ve talimatların yerleri değişkenlik göstereceğinden, talimatlar arasında ardışık düzenleme yapılamıyor.
CISC Mimarisinde Programın Yürütülme Prensibi
Talimat boyutu ve yapısındaki bu tutarsızlığın giderilmesi için, Mikro Operasyon yaklaşımı benimsenmiştir. Yukarıdaki diyagramda da görüleceği üzere, ele alınan talimat döngüsü parçalara ayrılıyor. Getirme (fetch), dolaylı operasyon (indirect), yürütme (execute) ve kesme (interrupt) şeklinde ayrılan bu parçalar daha sonrasında daha da küçük, genellikle tek bir işlemci döngüsünde tamamlanabilecek şekilde Mikro Operasyonlara (μops) ayrılıyor.
Böylelikle, RISC mimarisindeki talimat yapısına benzer bir talimat yapısı elde ediliyor ve boru hattı kullanılarak, paralel işlem yürütmek oldukça kolaylaşıyor. Aynı zamanda, bu yapıyı elde etmek için harcanan zaman maliyetine karşılık elde edilen performans da yanımıza kar olarak kalıyor.
● ● ●
Bir milyon transistör bile bir bilgisayarın tamamının ondan inşa edilmesi gerektiğinde yetersiz kalabilir.
Bu durum, CISC mimarisini uygulamak için gerekli olan ekstra donanımın bu kıt kaynaklarımızı en iyi şekilde
kullanmanın yolunun olup olmadığı sorusunu gündeme getiriyor.
- David Andrew Patterson
David Andrew Patterson, CISC mimarisine sahip işlemcilerin artan maliyetlerine ve tasarımlarındaki karmaşıklığın getirdiği zaman kaybına yönelik sorgulamalarının sonucunda yukarıdaki bu sözleri sarfetmiştir.
CISC mimarisine sahip işlemciler çok sayıda karmaşık komutu destekliyor ve her komutun yürütülmesi için birçok transistör kullanabiliyordu. Bu nedenle, CISC mimarisine sahip işlemciler, genellikle daha fazla transistör içeriyor ve bu karmaşıklıkları nedeniyle daha fazla donanım maliyeti ortaya çıkıyordu. 1970—1980 arasında zaten işlemci tasarımları oldukça karmaşık ve maliyetli bir hal almıştı. İşte bu sebepler ışığında, RISC yaklaşımı, daha basit tasarıma sahip ve daha az maliyetli işlemciler üretmek için ortaya atıldı ve piyasaya sürüldüğünde oldukça başarılı da oldu.
Ancak günümüz için bu durum geçerliliğini tam olarak korumuyor. Günümüzde, RISC ve CISC terimleri artık kesin bir sınıflandırma yapmaktan ziyade, işlemci tasarımında kullanılan farklı tekniklerin bir karışımını tanımlamak için kullanılıyor. Günümüzde üretilen işlemciler, karmaşıklıklarını azaltmak ve performanslarını arttırmak için karma RISC — CISC yapısı kullanıyorlar. Bu nedenle, günümüzdeki bir işlemcinin tam olarak hangi mimariyi benimsediği, modeli veya nesliyle ilgilidir.
Ayrıca, CISC mimarisi programcılar için dışarıdan bakıldığında daha karmaşıktır ve daha zengin bir komut setine sahiptir. Bu durum, CISC mimarisine sahip işlemcilerin programcılar için geniş bir komut kümesine ve zengin bir işlemci yeteneğine sahip oldukları anlamına gelir. CISC mimarisine sahip işlemciler farklı işlemleri gerçekleştirmek için tek bir komutta birden fazla işlem yapabilirler. Bu durum, programcıların karmaşık işlemleri daha kolay bir şekilde işleyecek programları kodlamalarına olanak tanır.
Öte yandan, RISC mimarisi basit ve sade bir komut setine sahiptir. Bu durum, programcıların farklı işlemleri gerçekleştirebilmesi için birden fazla komut kullanmasını gerektirir. Bu durum bellek gereksinimi arttırır ancak RISC mimarisine sahip işlemcilerin donanımsal yapısındaki basitliğin getirmiş olduğu güç tasarrufu ve yüksek performans, kodlanan bu programların yüksek verimlilikle çalışmasını sağlar.
İki işlemci de boru hattı özelliğini destekler ancak CISC mimarisine sahip işlemcilerin paralel ve hızlı işlem yapabilmeleri için, talimatları Mikro Operasyonlara indirgemesi gerekmektedir. RISC mimarisine sahip işlemciler, makine talimatlarını doğrudan çalıştırabilir, çünkü talimatların formatları ve uzunluğu her zaman işlemci tarafından net olarak bilinmektedir.
Anladığınız üzere, her iki işlemci mimarisi de avantaj ve dezavantajlara sahiptir. CISC mimarisine sahip işlemciler özellikle genel amaçlı bilgisayarlar için kullanılırken, RISC mimarisine sahip işlemciler sunucular ve taşınabilir cihazlar gibi enerji verimliliğinin önemli olduğu alanlarda kullanılmaktadır.
Günümüzde, tüm modern Intel ve AMD işlemciler, CISC talimatı tarzındaki x86 talimatlarını çevirmek için kod
çözücülere arayüzlenmiş RISC benzeri çekirdeklere sahiptir. İki işlemci için de “Hangisi daha popüler?” veya
“Hangisi daha başarılı?” gibi sorular sormak yanlıştır. Doğru soru; “X için hangisi daha uygun?” şeklindedir.
“X” bir kullanım senaryosu veya belirli bir amaç olabilir.
- Quora Kullanıcısı
● ● ●
Son olarak, RISC ve CISC mimarisine sahip olan işlemciler hakkındaki fikrimi derinden etkileyen bir forum tartışmasından elde edindiğim bilgileri toparlayarak aşağıda sizlerle paylaşmak istiyorum.
Günümüzde, her şeyden önce, bireysel talimatları yürütme hızının genel yürütme hızı üzerinde artık yalnızca çok küçük bir etkisi var. Yürütme hızı artık büyük ölçüde önbellek kapasitesine ve önbelleğe alma yetkinliğine bağlı. İşlemcilerin saat hızları, neredeyse güç tüketiminin ve ısı limitinin sınırladığı noktalara kadar yükseldi. Bu durum, RISC ve CISC mimarisine sahip işlemcilerin saat hızlarını kabaca aynı seviyede tutuyor.
Günümüzde, RISC ve CISC mimarisine sahip işlemcilerin, talimat başına harcadıkları ortalama süre de neredeyse aynı durumda. Transistör bütçeleri zaman içinde genişledikçe, CISC mimarisine sahip işlemciler, tıpkı RISC mimarisine sahip işlemcilerde olduğu gibi, çoğu talimatı sabit boyutlarda ele alıyorlar.
Günümüzde, CISC mimarisine sahip işlemcilerin, talimatları mikro operasyonlara çevirme yetkinliği de epey gelişim gösterdi. Her ne kadar x86 talimatlarının çözülmesi pek basit olmasa da, talimatların kodunu çözmek için kullanılan transistörlerin sayısı artık pek de önem taşımıyor. Günümüzdeki işlemcilerde bulunan tipik talimat çözücüler, her bir işlemci döngüsünde, üç talimatı dönüştürecek kadar geliştiler. Bu talimat çözücüleri, bir sistemdeki transistörlerin %1'inden azını oluşturuyor. Bu durum, RISC ve CISC mimarisine sahip işlemcilerin günümüzde neredeyse aynı teknik eşitlikte olduğunu gözler önüne seriyor.
Ancak günümüzde RISC mimarisi çok büyük sorunlar barındırıyor. Tasarımı basit tutmak için talimatların basitleştirilip büyütülmesi yüzünden, tipik bir durumda x86 kodunun, bir RISC tasarımına yönelik eşdeğer kodun yaklaşık yarısı boyutunda olmasını bekleyebiliriz. Bu durum, RISC mimarisine sahip bir işlemcinin talimatları getirmek için ana belleğe yönelik bant genişliğinin yaklaşık iki katı kadarını x86 mimarisine göre kullanacağı anlamına gelir. Bu durum, RISC mimarisine sahip bir işlemcinin aynı performansa ulaşmak için x86 mimarisine sahip bir işlemcinin yaklaşık iki katı büyüklüğünde bir talimat önbelleğine ihtiyaç duyduğu anlamına da gelmektedir.
● ● ●
Yukarıdaki bu tartışmayı okumak CISC mimarisine sahip işlemcilere bakış açımı tamamen değiştirdi. Önceden “RISC bu kadar mükemmel ise neden CISC kullanmaya devam ediyoruz?” sorusu kafamda dolanır dururdu. Ancak araştırmaya devam ettikçe CISC mimarisine sahip işlemcilerin de oldukça önemli olduğunu anlamış oldum. Ve şunu da söylemeliyim ki, herhangi bir bilim dalında bulunan şeyler arasında bir karşılaştırma mevcutsa, genellikle bu şeylerin kendilerine göre kullanım alanı olduğunu ve bu şeylerin önemli olduğunu ıskalamamak gerekiyor. Bu durumda, RISC ve CISC tasarımlarının insanlığın faydası için önemli olan iki işlemci tasarımı olduğunu rahatlıkla söyleyebiliriz.
David Andrew Patterson