Hepimiz CPU'yu bir bilgisayarın "beyni" olarak düşünüyoruz, ama bu aslında ne anlama geliyor? Bilgisayarınızın çalışması için milyarlarca transistörde neler oluyor? Bu yeni dört bölümlü mini dizide, bir bilgisayarı çalıştıran şeyin giriş ve çıkışlarını kapsayan bilgisayar donanım tasarımına odaklanacağız.

Bu seri, bilgisayar mimarisini, işlemci devresi tasarımını, VLSI (çok büyük ölçekli entegrasyon), yonga üretimini ve hesaplamadaki gelecekteki eğilimleri kapsayacak. İşlemcilerin içeride nasıl çalıştığına dair ayrıntılarla her zaman ilgileniyorsanız, başlayın, çünkü başlamak için bilmek istediğiniz şey budur.

Bir işlemcinin yaptığı ve yapı taşlarının işleyen bir tasarımda nasıl bir araya geldiği konusunda çok yüksek bir seviyede başlayacağız. Bu, işlemci çekirdeklerini, bellek hiyerarşisini, dal tahminini ve daha fazlasını içerir. İlk olarak, CPU'nun ne yaptığının temel bir tanımına ihtiyacımız var. En basit açıklama, bir CPU'nun bir dizi girdi üzerinde işlem yapmak için bir dizi talimatı izlemesidir. Örneğin, bu, bellekten bir değer okumak, daha sonra başka bir değere eklemek ve son olarak sonucu farklı bir konumda belleğe depolamak olabilir. Önceki hesaplamanın sonucu sıfırdan büyükse, iki sayıyı bölmek gibi daha karmaşık bir şey de olabilir.

İşletim sistemi veya oyun gibi bir programı çalıştırmak istediğinizde, programın kendisi CPU'nun yürütmesi için bir dizi talimattır. Bu talimatlar bellekten ve basit bir işlemciye yüklenir, program bitinceye kadar tek tek yürütülür. Yazılım geliştiricileri programlarını C ++ veya Python gibi üst düzey dillerde yazarken, işlemci bunu anlayamıyor. Yalnızca 1'leri ve 0'ları anlar, bu nedenle kodu bu biçimde göstermenin bir yoluna ihtiyacımız vardır.

Programlar, bir dizi alt düzey talimatlar halinde derlenir. montaj dili Komut Seti Mimarisinin (ISA) bir parçası olarak. Bu, CPU'nun anlamak ve yürütmek için oluşturulduğu talimatlar kümesidir. En yaygın ISA'lardan bazıları x86, MIPS, ARM, RISC-V ve PowerPC'dir. Tıpkı C ++ 'da bir işlev yazma sözdiziminin Python'da aynı şeyi yapan bir işlevden farklı olması gibi, her ISA'nın farklı bir sözdizimi vardır.




Bu ISA'lar iki ana kategoriye ayrılabilir: sabit uzunluk ve değişken uzunluk. RISC-V ISA sabit uzunluktaki talimatları kullanır, bu da her komutta önceden tanımlanmış belirli sayıda bitin ne tür bir komut olduğunu belirlediği anlamına gelir. Bu, değişken uzunluk talimatlarını kullanan x86'dan farklıdır. X86'da, talimatlar farklı şekillerde ve farklı parçalar için farklı sayıda bitle kodlanabilir. Bu karmaşıklık nedeniyle, x86 CPU'lardaki komut kod çözücü tipik olarak tüm tasarımın en karmaşık parçasıdır.

Sabit uzunluklu talimatlar, normal yapıları nedeniyle daha kolay kod çözme sağlar, ancak bir ISA'nın destekleyebileceği toplam talimat sayısını sınırlandırır. RISC-V mimarisinin ortak sürümlerinde yaklaşık 100 yönerge bulunur ve açık kaynak kodlu olsa da, x86 tescillidir ve kimse kaç yönerge olduğunu bilmiyor. İnsanlar genellikle birkaç bin x86 talimatı olduğuna inanır, ancak kesin sayı herkese açık değildir. ISA'lar arasındaki farklılıklara rağmen, hepsi temelde aynı temel işlevselliği taşır.




Şimdi bilgisayarımızı açmaya ve bir şeyler çalıştırmaya başlamaya hazırız. Bir komutun yürütülmesi aslında bir işlemcinin birçok aşamasından parçalanan birkaç temel parçaya sahiptir.

İlk adım, çalıştırmayı başlatmak için talimatı bellekten CPU'ya getirmektir. İkinci adımda CPU'nun ne tür bir talimat olduğunu anlayabilmesi için komutun kodu çözülür. Aritmetik komutlar, dal talimatları ve bellek talimatları gibi birçok tür vardır. CPU ne tür bir talimat yürüttüğünü öğrendikten sonra, talimatın işlenenleri CPU'daki bellekten veya dahili kayıtlardan toplanır. B numarasına A sayısı eklemek istiyorsanız, A ve B değerlerini gerçekten bilmeden ekleme yapamazsınız. Çoğu modern işlemci 64 bittir, yani her veri değerinin boyutunun 64 bit olduğu anlamına gelir.

CPU, talimat için işlenenlere sahip olduktan sonra, işlemin girişte yapıldığı yürütme aşamasına geçer. Bu, sayıları eklemek, sayılar üzerinde mantıklı bir manipülasyon yapmak veya sadece sayıları değiştirmeden geçmek olabilir. Sonuç hesaplandıktan sonra, sonucu saklamak için belleğe erişilmesi gerekebilir veya CPU değeri dahili kayıtlarından birinde tutabilir. Sonuç kaydedildikten sonra, CPU çeşitli öğelerin durumunu güncelleyecek ve bir sonraki talimata geçecektir.

Bu açıklama, elbette, büyük bir basitleştirmedir ve modern işlemcilerin çoğu verimliliği artırmak için bu birkaç aşamayı 20 veya daha küçük aşamalara böler. Bu, işlemci her döngüde birkaç talimat başlatacak ve bitirecek olsa da, herhangi bir talimatın baştan sona tamamlanması 20 veya daha fazla döngü gerektirebilir. Bu model genellikle boru hattı olarak adlandırılır, çünkü boru hattını doldurmak ve sıvının tam olarak geçmesi biraz zaman alır, ancak dolduğunda sabit bir çıktı elde edersiniz.

Bir talimatın geçtiği tüm döngü çok sıkı bir koreograf işlemidir, ancak tüm talimatlar aynı anda bitmeyebilir. Örneğin, ekleme çok hızlı olurken, bellekten bölünme veya yükleme yüzlerce döngü alabilir. Yavaş bir talimat bittiğinde tüm işlemciyi durdurmak yerine, çoğu modern işlemci sıra dışı çalışır. Bu, belirli bir zamanda hangi komutun yürütülmesinin en yararlı olacağını belirleyecek ve hazır olmayan diğer talimatları arabelleğe alacakları anlamına gelir. Mevcut talimat henüz hazır değilse, işlemci başka bir şeyin hazır olup olmadığını görmek için kodda ileri atlayabilir.

Sıra dışı yürütmeye ek olarak, tipik modern işlemciler, süperskalar mimari. Bu, herhangi bir zamanda, işlemcinin boru hattının her aşamasında bir kerede birçok talimat yürütmesi anlamına gelir. Ayrıca infazlarına başlamak için yüzlerce kişi daha bekliyor olabilir. Bir kerede birçok talimat yürütebilmek için, işlemciler içerisindeki her boru hattı aşamasının birkaç kopyasına sahip olacaklardır. Bir işlemci iki komutun yürütülmeye hazır olduğunu görürse ve ayrı ayrı bitirmelerini beklemek yerine, aralarında bağımlılık olmazsa, her ikisini de aynı anda yürütür. Bunun yaygın bir uygulamasına Hyper-Threading olarak da bilinen Simultaneous Multithreading (SMT) denir. Intel ve AMD işlemciler şu anda iki yönlü SMT'yi desteklerken, IBM sekiz yönlü SMT'yi destekleyen çipler geliştirmiştir.

Bu dikkatlice koreograflanmış yürütmeyi gerçekleştirmek için, bir işlemcinin temel çekirdeğe ek olarak birçok ekstra öğesi vardır. Bir işlemcide, her biri belirli bir amaca hizmet eden yüzlerce ayrı modül vardır, ancak temelleri ele alacağız. En büyük ve en faydalı iki önbellek ve dal öngörücüsüdür. Kapsamayacağımız ek yapılar arasında yeniden sıralama arabellekleri, kayıt takma adları tabloları ve rezervasyon istasyonları gibi şeyler bulunur.

Önbelleklerin amacı genellikle RAM veya SSD gibi veri depoladıkları için kafa karıştırıcı olabilir. Önbellekleri ayıran şey, erişim gecikmeleri ve hızlarıdır. RAM son derece hızlı olmasına rağmen, CPU için çok yavaş büyüklük sırasıdır. RAM'in verilerle yanıt vermesi yüzlerce döngü sürebilir ve işlemci hiçbir şey yapmadan takılır. Veriler RAM'de değilse, bir SSD'deki verilere erişilmesi on binlerce döngü sürebilir. Önbellekler olmadan, işlemcilerimiz durma noktasına geliyordu.

İşlemciler genellikle üç önbellek düzeyine sahiptir. bellek hiyerarşisi. L1 önbellek en küçük ve en hızlı, L2 ortada ve L3 önbelleklerin en büyük ve en yavaş olanıdır. Hiyerarşideki önbelleklerin üstünde, hesaplama sırasında tek bir veri değeri depolayan küçük kayıtlar bulunur. Bu kayıtlar, büyüklük sıralarına göre sisteminizdeki en hızlı depolama aygıtlarıdır. Bir derleyici üst düzey programı derleme diline dönüştürdüğünde, bu kayıtları kullanmanın en iyi yolunu belirler.

CPU bellekten veri istediğinde, önce bu verilerin L1 önbelleğinde depolanmış olup olmadığını kontrol eder. Öyleyse, verilere sadece birkaç döngüde hızlı bir şekilde erişilebilir. Mevcut değilse, CPU L2'yi kontrol eder ve daha sonra L3 önbelleğini arar. Önbellekler genellikle çekirdeğe şeffaf olacak şekilde uygulanır. Çekirdek, yalnızca belirli bir bellek adresindeki bazı verileri soracaktır ve hiyerarşisinde hangi düzeyde olursa olsun yanıt verecektir. Bellek hiyerarşisinde sonraki aşamalara geçtikçe, boyut ve gecikme tipik olarak büyüklük sıralarıyla artar. Sonunda, CPU aradığı verileri önbelleklerin hiçbirinde bulamazsa, ancak o zaman ana belleğe (RAM) gidecektir.

Tipik bir işlemcide, her çekirdek iki L1 önbelleğine sahip olacaktır: biri veri için ve diğeri talimatlar için. L1 önbellekleri toplamda yaklaşık 100 kilobayttır ve boyut yonga ve jenerasyona bağlı olarak değişebilir. Her mimaride tipik olarak bir L2 önbellek vardır, ancak bazı mimarilerde iki çekirdek arasında paylaşılabilir. L2 önbellekleri genellikle birkaç yüz kilobayttır. Son olarak, tüm çekirdekler arasında paylaşılan ve onlarca megabayt civarında olan tek bir L3 önbellek var.

Bir işlemci kod yürütürken, en sık kullandığı talimatlar ve veri değerleri önbelleğe alınır. İşlemcinin ihtiyaç duyduğu veriler için sürekli olarak ana belleğe gitmesi gerekmediğinden, bu işlem yürütmeyi önemli ölçüde hızlandırır. Bu bellek sistemlerinin aslında bu serinin ikinci ve üçüncü bölümünde nasıl uygulandığı hakkında daha fazla konuşacağız.

Önbelleklerin yanı sıra, modern bir işlemcinin diğer önemli yapı taşlarından biri doğru şube öngörücüsü. Şube talimatları, bir işlemcinin "if" ifadelerine benzer. Koşul doğruysa bir komut kümesi yürütülür ve koşul yanlışsa bir komut dizisi yürütülür. Örneğin, iki sayıyı karşılaştırmak isteyebilirsiniz ve eğer eşitse, bir işlevi yerine getirebilir ve farklıysa başka bir işlevi yerine getirebilirsiniz. Bu şube talimatları son derece yaygındır ve bir programdaki tüm talimatların yaklaşık% 20'sini oluşturabilir.

Yüzeyde, bu dal talimatları bir sorun gibi görünmeyebilir, ancak aslında bir işlemcinin doğru olması çok zor olabilir. Herhangi bir zamanda, CPU bir kerede on veya yirmi talimat yürütme sürecinde olabileceğinden, bilmek çok önemlidir hangi yürütmek için talimatlar. Mevcut komutun bir dal olup olmadığını belirlemek için 5 döngü ve koşulun doğru olup olmadığını belirlemek için 10 döngü daha gerekebilir. Bu süre zarfında, işlemci, bunların doğru talimatlar olup olmadığını bilmeden onlarca ek talimat yürütmeye başlamış olabilir.

Bu sorunu çözmek için, tüm modern yüksek performanslı işlemciler spekülasyon adı verilen bir teknik kullanır. Bunun anlamı, işlemcinin dal talimatlarını takip edip dalın alınıp alınmayacağını tahmin edeceğidir. Tahmin doğruysa, işlemci daha sonraki talimatları uygulamaya başladı, bu da bir performans kazancı sağlar. Tahmin yanlışsa, işlemci yürütmeyi durdurur, yürütmeye başladığı tüm yanlış talimatları kaldırır ve doğru noktadan başlar.

Bu dal tahmincileri, makinist öğrenmenin en erken biçimlerinden bazılarıdır, çünkü tahminci dalların davranışlarını gittikçe öğrenir. Eğer çok fazla yanlış tahmin ederse, doğru davranışı öğrenmeye başlayacaktır. Şube tahmin teknikleri üzerine onlarca yıl süren araştırmalar, modern işlemcilerde% 90'dan fazla doğrulukla sonuçlandı.

Spekülasyon muazzam performans kazanımları sunarken, işlemci meşgul olanları beklemek yerine hazır olan talimatları yürütebilse de, güvenlik açıklarını da ortaya çıkarır. Ünlü Spectre saldırısı, şube tahmini ve spekülasyondaki hataları sömürüyor. Saldırgan, işlemcinin bellek değerlerini sızdıran kodu spekülatif olarak yürütmesini sağlamak için özel hazırlanmış kod kullanır. Spekülasyonun bazı yönleri, verilerin sızdırılamamasını sağlamak için yeniden tasarlanmak zorundaydı ve bu da performansta hafif bir düşüşle sonuçlandı.

Modern işlemcilerde kullanılan mimari son birkaç on yıl içinde çok yol kat etti. Yenilikler ve akıllı tasarım, daha fazla performans ve altta yatan donanımın daha iyi kullanılmasını sağlamıştır. CPU üreticileri, işlemcilerindeki teknolojiler hakkında çok gizli, bu yüzden içeride neler olduğunu tam olarak bilmek imkansız. Bununla birlikte, bilgisayarların nasıl çalıştığının temelleri tüm işlemcilerde standartlaştırılmıştır. Intel, önbellek isabet oranlarını artırmak için gizli soslarını ekleyebilir veya AMD, gelişmiş bir dal tahmincisi ekleyebilir, ancak her ikisi de aynı görevi yerine getirir.

Bu ilk bakış ve genel bakış, işlemcilerin nasıl çalıştığı ile ilgili temel bilgilerin çoğunu kapsıyordu. Bir sonraki bölümde, CPU'ya giren bileşenlerin nasıl tasarlandığını, mantık kapılarını, saati, güç yönetimini, devre şemalarını ve daha fazlasını kapsayacağını tartışacağız. Bizi izlemeye devam edin.

Önerilen Okumalar:

Masthead kredisi: Elektronik devre kartı Raimuda tarafından yakın çekim