CPU önbelleği - CPU cache

Bir CPU önbellek a, donanım önbellek tarafından kullanılan bir merkezi işlem birimi , bir (CPU) bilgisayar erişiminin ortalama maliyet (zaman ve enerji) azaltmak için veri gelen ana bellek . Önbellek, sık kullanılan ana bellek konumlarından verilerin kopyalarını depolayan, işlemci çekirdeğine daha yakın yerleştirilmiş daha küçük, daha hızlı bir bellektir . Çoğu CPU , düzey 1'de ayrı talimata özel ve veriye özel önbelleklerle birden çok önbellek düzeyinden (L1, L2, genellikle L3 ve nadiren L4) oluşan bir hiyerarşiye sahiptir .

Çoğu CPU'nun sahip olduğu bellek yönetim biriminin (MMU) bir parçası olan çeviri önbelleği (TLB) gibi (yukarıda bahsedilen en önemli önbelleklerin "önbellek boyutuna" dahil edilmeyen) başka önbellek türleri de vardır.

genel bakış

Ana bellekteki bir konumdan okumaya veya bu konuma yazmaya çalışırken, işlemci o konumdan gelen verilerin zaten önbellekte olup olmadığını kontrol eder. Eğer öyleyse, işlemci çok daha yavaş olan ana bellek yerine önbellekten okuyacak veya önbelleğe yazacaktır.

Çoğu modern masaüstü ve sunucu işlemcileri en az üç bağımsız önbelleklerini vardır: Bir yönerge önbellek yürütülebilir talimat yukarı hıza getirme bir veri önbelleği veri getirme ve mağaza ve hızlandırmak için çeviri denetleme tampon (TLB) sanal-to-up hız için kullanılan hem yürütülebilir talimatlar hem de veriler için fiziksel adres çevirisi. Hem komutlara hem de verilere erişim için tek bir TLB sağlanabilir veya ayrı bir Komut TLB'si (ITLB) ve veri TLB'si (DTLB) sağlanabilir. Veri önbelleği genellikle daha fazla önbellek düzeyinden oluşan bir hiyerarşi olarak düzenlenir (L1, L2, vb.; ayrıca aşağıdaki çok düzeyli önbelleklere bakın). Ancak TLB önbelleği, bellek yönetim biriminin (MMU) bir parçasıdır ve doğrudan CPU önbellekleriyle ilgili değildir.

Tarih

Bir NeXTcube bilgisayarın anakartı (1990). Ortadan soldaki görüntünün alt kenarında , çip üzerinde her biri 4 KiB'lik iki ayrı seviye 1 önbellek ile 25 MHz'de çalışan Motorola 68040 CPU var , biri CPU kısmı ve biri entegre FPU için ve hayır harici önbellek.

Önbellek kullanan ilk CPU'lar yalnızca bir önbellek düzeyine sahipti; Daha sonraki seviye 1 önbelleğin aksine, L1d (veri için) ve L1i (talimatlar için) olarak bölünmemiştir. Bölünmüş L1 önbelleği 1976'da IBM 801 CPU ile başladı, 80'lerin sonunda ana akım haline geldi ve 1997'de ARMv5TE ile gömülü CPU pazarına girdi. 2015'te, doların altındaki SoC bile L1 önbelleğini böldü. Ayrıca L2 önbellekleri ve daha büyük işlemciler için L3 önbellekleri vardır. L2 önbelleği genellikle bölünmez ve zaten bölünmüş L1 önbelleği için ortak bir depo görevi görür. Çok çekirdekli bir işlemcinin her çekirdeği, özel bir L1 önbelleğine sahiptir ve genellikle çekirdekler arasında paylaşılmaz. L2 önbelleği ve daha üst düzey önbellekler, çekirdekler arasında paylaşılabilir. L4 önbelleği şu anda yaygın değildir ve genellikle statik rastgele erişimli bellek (SRAM) yerine (bir tür) dinamik rastgele erişimli bellek (DRAM) üzerindedir, ayrı bir kalıp veya yonga üzerindedir (istisnai olarak, eDRAM biçimindedir ). L1)'e kadar tüm önbellek seviyeleri için kullanılır. L1'de de tarihsel olarak durum böyleydi, ancak daha büyük yongalar, son seviyenin olası istisnası dışında, bunun ve genel olarak tüm önbellek seviyelerinin entegrasyonuna izin verdi. Her ekstra önbellek düzeyi daha büyük olma ve farklı şekilde optimize edilme eğilimindedir.

Önbellekler (tarihsel olarak RAM için olduğu gibi) genellikle şu güçlerde boyutlandırılmıştır: 2, 4, 8, 16 vb. KiB ; zaman kadar MIB (yani, daha büyük olmayan L1 için), çok erken desen bozuldu boyutları olan, örneğin, katlama-in-size paradigma zorunda olmadan daha büyük önbellekleri izin vermek için Core 2 Duo 3 MIB L2 önbellek Ancak çok daha sonra, L1 boyutları için, bu hala yalnızca az sayıda KiB sayılır, ancak 2012'den itibaren IBM zEC12 , zamanı için alışılmadık derecede büyük 96 KiB L1 veri önbelleği elde etmek için bir istisnadır ve örneğin IBM z13'ün bir 96 KiB L1 talimat önbelleği (ve 128 KiB L1 veri önbelleği) ve 2018'den Intel Ice Lake tabanlı işlemciler, 48 KiB L1 veri önbelleği ve 48 KiB L1 talimat önbelleği. 2020'de bazı Intel Atom CPU'ları (24 çekirdeğe kadar) 4,5 MiB ve 15 MiB önbellek boyutuna sahiptir.

önbellek girişleri

Veriler, önbellek satırları veya önbellek blokları adı verilen sabit boyutlu bloklar halinde bellek ve önbellek arasında aktarılır . Bir önbellek satırı bellekten önbelleğe kopyalandığında, bir önbellek girişi oluşturulur. Önbellek girişi, kopyalanan verileri ve ayrıca istenen bellek konumunu (etiket olarak adlandırılır) içerecektir.

İşlemcinin bellekteki bir konumu okuması veya yazması gerektiğinde, önce önbellekte karşılık gelen bir giriş olup olmadığını kontrol eder. Önbellek, o adresi içerebilecek herhangi bir önbellek satırında istenen bellek konumunun içeriğini kontrol eder. İşlemci, bellek konumunun önbellekte olduğunu tespit ederse, bir önbellek isabeti oluşmuştur. Ancak, işlemci önbellekte bellek konumunu bulamazsa, bir önbellek kaybı oluşmuştur. Bir önbellek isabeti durumunda, işlemci verileri hemen okur veya önbellek satırına yazar. Bir önbellek kaçırma için, önbellek yeni bir giriş tahsis eder ve verileri ana bellekten kopyalar, ardından önbellek içeriğinden istek yerine getirilir.

Politikalar

Değiştirme politikaları

Bir önbellek eksikliğinde yeni girişe yer açmak için önbelleğin mevcut girişlerden birini boşaltması gerekebilir. Tahliye girişini seçmek için kullandığı buluşsal yönteme değiştirme politikası denir. Herhangi bir değiştirme politikasındaki temel sorun, gelecekte hangi mevcut önbellek girişinin kullanılma olasılığının en düşük olduğunu tahmin etmesi gerektiğidir. Geleceği tahmin etmek zordur, bu nedenle mevcut çeşitli değiştirme politikaları arasından seçim yapmak için mükemmel bir yöntem yoktur. En son kullanılan (LRU) popüler bir değiştirme politikası, en son erişilen girdinin yerini alır.

Bazı bellek aralıklarını önbelleğe alınamaz olarak işaretlemek, nadiren yeniden erişilen bellek bölgelerinin önbelleğe alınmasını önleyerek performansı iyileştirebilir. Bu, herhangi bir yeniden kullanım olmadan önbelleğe bir şey yükleme ek yükünü ortadan kaldırır. Önbellek girişleri, bağlama bağlı olarak devre dışı bırakılabilir veya kilitlenebilir.

İlkeleri yaz

Veri önbelleğe yazılıyorsa, bir noktada ana belleğe de yazılması gerekir; bu yazmanın zamanlaması, yazma politikası olarak bilinir. Bir önbelleğe yazma önbelleğinde, önbelleğe her yazma, ana belleğe yazmaya neden olur. Alternatif olarak, bir geri yazma veya geri kopyalama önbelleğinde, yazma işlemleri hemen ana belleğe yansıtılmaz ve önbellek bunun yerine hangi konumların üzerine yazıldığını izleyerek onları kirli olarak işaretler . Bu konumlardaki veriler, yalnızca bu veriler önbellekten çıkarıldığında ana belleğe geri yazılır. Bu nedenle, bir geri yazma önbelleğindeki bir okuma ıskalaması bazen hizmete iki bellek erişimi gerektirebilir: biri önce kirli konumu ana belleğe yazmak, sonra diğeri yeni konumu bellekten okumak için. Ayrıca, bir geri yazma önbelleğinde henüz eşlenmemiş olan bir ana bellek konumuna yazma işlemi, zaten kirli olan bir konumu çıkarabilir ve böylece bu önbellek alanını yeni bellek konumu için boşaltabilir.

Ara politikalar da var. Önbellek üzerine yazma olabilir, ancak yazma işlemleri geçici olarak bir mağaza veri kuyruğunda tutulabilir, bu nedenle genellikle birden fazla mağaza birlikte işlenebilir (bu, veri yolu dönüşlerini azaltabilir ve veri yolu kullanımını iyileştirebilir).

Ana bellekten önbelleğe alınan veriler diğer varlıklar (örneğin, doğrudan bellek erişimi (DMA) kullanan çevre birimleri veya çok çekirdekli bir işlemcideki başka bir çekirdek ) tarafından değiştirilebilir; bu durumda önbellekteki kopya güncelliğini yitirebilir veya bayat. Alternatif olarak, çok işlemcili bir sistemdeki bir CPU önbellekteki verileri güncellediğinde, diğer CPU'larla ilişkili önbelleklerdeki verilerin kopyaları eski hale gelir. Verileri tutarlı tutan önbellek yöneticileri arasındaki iletişim protokolleri, önbellek tutarlılık protokolleri olarak bilinir .

Önbellek performansı

Bellek performansı ile işlemci performansı arasındaki hız farkının katlanarak arttığı son zamanlarda önbellek performans ölçümü önem kazanmıştır. Bu hız farkını azaltmak için önbellek tanıtıldı. Bu nedenle, önbelleğin işlemci ve bellek hızındaki boşluğu ne kadar iyi kapatabildiğini bilmek, özellikle yüksek performanslı sistemlerde önemli hale gelir. Bu performansın belirlenmesinde önbellek isabet oranı ve önbellek ıskalama oranı önemli rol oynamaktadır. Önbellek performansını iyileştirmek için, diğer adımların yanı sıra, ıskalama oranını azaltmak da gerekli adımlardan biri haline gelir. Önbelleğe erişim süresinin azaltılması, performansında da artış sağlar.

CPU tezgahları

Bir önbellek satırının bellekten alınması için geçen süre ( önbellek eksikliğinden kaynaklanan okuma gecikmesi ) önemlidir çünkü CPU, önbellek satırını beklerken yapacak işleri tükenecektir. Bir CPU bu duruma ulaştığında buna durak denir. CPU'lar ana belleğe kıyasla daha hızlı hale geldikçe, önbellek kayıplarından kaynaklanan duraklamalar daha fazla potansiyel hesaplamanın yerini alır; modern CPU'lar, ana bellekten tek bir önbellek satırı almak için geçen süre içinde yüzlerce talimatı yürütebilir.

Bu süre boyunca CPU'yu meşgul etmek için çeşitli teknikler kullanılmıştır ; bunlar arasında CPU'nun önbellek kayıp verilerini bekleyen talimattan sonra bağımsız talimatları yürütmeye çalıştığı sıra dışı yürütme de vardır. Birçok işlemci tarafından kullanılan başka bir teknoloji, ilk iş parçacığı gerekli CPU kaynaklarının kullanılabilir hale gelmesini beklerken alternatif bir iş parçacığının CPU çekirdeğini kullanmasına izin veren eşzamanlı çoklu iş parçacığıdır (SMT).

çağrışım

Bellek konumlarının belirli önbellek konumları tarafından önbelleğe alınabileceği farklı yolların bir örneği

Yerleşimi politikası önbelleğinde ana belleğin belirli bir girdinin bir kopyası nereye gideceğini karar verir. Yerleştirme ilkesi, kopyayı tutmak için önbellekteki herhangi bir girişi seçmekte serbestse, önbelleğe tam ilişkisel denir . Diğer uçta, ana bellekteki her giriş önbellekte yalnızca bir yere gidebiliyorsa, önbellek doğrudan eşlenir . Birçok önbellek, ana bellekteki her girişin önbellekteki N yerden herhangi birine gidebileceği ve N-yollu küme ilişkisel olarak tanımlandığı bir uzlaşma uygular. Örneğin, bir AMD Athlon'daki 1. seviye veri önbelleği iki yönlü küme ilişkiseldir, bu da ana bellekteki herhangi bir belirli konumun 1. düzey veri önbelleğindeki iki konumdan birinde önbelleğe alınabileceği anlamına gelir.

Doğru çağrışım değerini seçmek, bir ödünleşim içerir . Yerleştirme ilkesinin bir bellek konumunu eşleyebileceği on yer varsa, bu konumun önbellekte olup olmadığını kontrol etmek için on önbellek girişi aranmalıdır. Daha fazla yeri kontrol etmek daha fazla güç ve çip alanı ve potansiyel olarak daha fazla zaman alır. Öte yandan, daha fazla ilişkilendirilebilirliğe sahip önbellekler daha az kayıp yaşar (aşağıdaki çakışma kayıplarına bakın), böylece CPU yavaş ana bellekten okumak için daha az zaman harcar. Genel kural, doğrudan eşlemeden iki yöne veya iki yönlüden dört yöne ilişkiselliği ikiye katlamanın, önbellek boyutunu iki katına çıkarmakla, isabet oranını artırma üzerinde hemen hemen aynı etkiye sahip olmasıdır. Bununla birlikte, ilişkilendirilebilirliği dörtten fazla artırmak, isabet oranını o kadar artırmaz ve genellikle başka nedenlerle yapılır (aşağıdaki sanal takma adlara bakın). Bazı CPU'lar, güç tasarrufu önlemi olarak işlev gören düşük güç durumlarında önbelleklerinin ilişkilendirilebilirliğini dinamik olarak azaltabilir.

Daha kötü ama basitten daha iyiye ama karmaşık sıraya göre:

  • Doğrudan eşlenmiş önbellek – en iyi durumda iyi, ancak en kötü durumda tahmin edilemez
  • İki yönlü küme ilişkisel önbellek
  • İki yönlü çarpık ilişkisel önbellek
  • Dört yollu küme ilişkisel önbellek
  • Sekiz yollu küme ilişkisel önbellek, sonraki uygulamalar için ortak bir seçim
  • Sekiz yolluya benzer 12 yollu küme ilişkisel önbellek
  • Tamamen ilişkilendirilebilir önbellek – en iyi ıskalama oranları, ancak yalnızca az sayıda giriş için pratik

Doğrudan eşlenmiş önbellek

Bu önbellek organizasyonunda, ana bellekteki her konum, önbellekte yalnızca bir girişe gidebilir. Bu nedenle, doğrudan eşlenmiş bir önbellek "tek yönlü küme ilişkisel" önbellek olarak da adlandırılabilir. Hangi önbellek girişinin içeriğinin çıkarılacağına dair bir seçenek olmadığından, bu şekilde bir yerleştirme politikası yoktur. Bu, iki konum aynı girişle eşleşirse, sürekli olarak birbirlerini devre dışı bırakabilecekleri anlamına gelir. Daha basit olmasına rağmen, doğrudan eşlenen bir önbellek, karşılaştırılabilir bir performans sağlamak için ilişkisel olandan çok daha büyük olmalıdır ve daha öngörülemezdir. Let X önbelleğinde blok numarası, y bellek bloğu sayı ve n, önbellek blok sayısı, daha sonra eşleme denklem yardımıyla yapılır olmak X = Y mod n .

İki yönlü küme ilişkisel önbellek

Ana bellekteki her konum, önbellekteki iki konumdan birinde önbelleğe alınabiliyorsa, mantıklı bir soru şudur: ikisinden hangisi? Yukarıdaki sağ diyagramda gösterilen en basit ve en yaygın kullanılan şema, önbellek için indeks olarak hafıza lokasyon indeksinin en az anlamlı bitlerini kullanmak ve her indeks için iki girişe sahip olmaktır. Bu şemanın bir yararı, önbellekte depolanan etiketlerin, ana bellek adresinin önbellek belleğinin indeksi tarafından ima edilen bölümünü içermesi gerekmemesidir. Önbellek etiketleri daha az bit içerdiğinden daha az transistör gerektirir, işlemci devre kartında veya mikroişlemci yongasında daha az yer kaplar ve daha hızlı okunup karşılaştırılabilir. Ayrıca LRU , her çift için yalnızca bir bitin saklanması gerektiğinden özellikle basittir.

spekülatif yürütme

Doğrudan eşlenmiş bir önbelleğin avantajlarından biri, basit ve hızlı spekülasyona izin vermesidir . Adres hesaplandıktan sonra, bellekte o konumun bir kopyasına sahip olabilecek tek önbellek dizini bilinir. Bu önbellek girişi okunabilir ve işlemci, etiketin gerçekten istenen adresle eşleştiğini kontrol etmeyi bitirmeden önce bu verilerle çalışmaya devam edebilir.

Etiket eşleşmesi tamamlanmadan önce işlemcinin önbelleğe alınmış verileri kullanması fikri, ilişkisel önbelleklere de uygulanabilir. Etiketin ipucu adı verilen bir alt kümesi , istenen adresle eşlenen olası önbellek girişlerinden yalnızca birini seçmek için kullanılabilir. İpucu tarafından seçilen giriş, daha sonra tam etiketin kontrol edilmesiyle paralel olarak kullanılabilir. İpucu tekniği, aşağıda açıklandığı gibi, adres çevirisi bağlamında kullanıldığında en iyi sonucu verir.

İki yönlü çarpık ilişkisel önbellek

Yukarıdaki gibi yol 0 için indeksin doğrudan olduğu, ancak yol 1 için indeksin bir hash fonksiyonu ile oluşturulduğu çarpık önbellek gibi başka şemalar önerilmiştir . İyi bir karma işlevi, doğrudan eşlemeyle çakışanları ele alan, karma işleviyle eşlendiğinde çakışmama eğiliminde olan bir özelliğe sahiptir ve bu nedenle, bir programın patolojik erişim nedeniyle beklenmedik şekilde çok sayıda çakışma kaçırmasından muzdarip olması daha az olasıdır. Desen. Dezavantajı, karma işlevinin hesaplanmasından kaynaklanan ekstra gecikmedir. Ek olarak, yeni bir hat yükleme ve eski bir hattı çıkarma zamanı geldiğinde, hangi mevcut hattın en son kullanıldığını belirlemek zor olabilir, çünkü yeni hat her şekilde farklı dizinlerdeki verilerle çelişir; Çarpık olmayan önbellekler için LRU izleme, genellikle set bazında yapılır. Bununla birlikte, çarpık-ilişkisel önbellekler, geleneksel küme-ilişkisel önbelleklere göre büyük avantajlara sahiptir.

Sözde ilişkisel önbellek

Gerçek bir küme ilişkisel önbellek, içerik adreslenebilir bellek gibi bir şey kullanarak tüm olası yolları aynı anda test eder . Sözde ilişkisel önbellek olası her yolu teker teker test eder. Karma yeniden karma önbellek ve sütunla ilişkili önbellek, sözde ilişkisel önbellek örnekleridir.

Test edilen ilk şekilde bir isabet bulma yaygın durumunda, sözde-ilişkisel bir önbellek, doğrudan eşlenen bir önbellek kadar hızlıdır, ancak doğrudan eşlenen bir önbellekten çok daha düşük bir çakışma kaçırma oranına sahiptir, ıskalama oranına daha yakındır. tamamen ilişkisel bir önbellek.

Önbellek giriş yapısı

Önbellek satırı girişleri genellikle aşağıdaki yapıya sahiptir:

etiket veri bloğu bayrak bitleri

Veri bloğu (önbellek hattı), gerçek veri ana bellekten getirilen içerir. Etiket gerçek veri adresi, ana bellekten getirilmiş (bir kısmını) ihtiva eder. Bayrak bitleri aşağıda tartışılmaktadır .

Önbelleğin "boyutu", tutabileceği ana bellek verilerinin miktarıdır. Bu boyut, her bir veri bloğunda depolanan bayt sayısı ile önbellekte depolanan blok sayısı çarpı olarak hesaplanabilir. (Etiket, bayrak ve hata düzeltme kodu bitleri, bir önbelleğin fiziksel alanını etkilemelerine rağmen, boyuta dahil edilmez.)

Önbellek hattı (bellek bloğu) ile birlikte gider Etkili bellek adresi bölünmüş (olan MSB için LSB etiketi, endeks ve ofset bloğuna).

etiket dizin blok ofset

Endeks verileri koymak edildiğini hangi önbellek kümesini açıklar. Endeksi uzunluğudur için bit s önbellek setleri.

Blok ofseti, önbellek satırında saklanan veri bloğu içindeki istenen verileri belirtir. Tipik olarak etkin adres bayt cinsindendir, bu nedenle blok ofset uzunluğu bittir; burada b , veri bloğu başına bayt sayısıdır. Etiket, bu kümenin istenen adresi içerip içermediğini görmek için geçerli kümedeki (küme dizine göre alındı) tüm satırlara karşı kontrol edilen adresin en önemli bitlerini içerir. Varsa, bir önbellek isabeti oluşur. Bit cinsinden etiket uzunluğu aşağıdaki gibidir:

tag_length = address_length - index_length - block_offset_length

Bazı yazarlar, blok ofsetini basitçe "ofset" veya "yer değiştirme" olarak adlandırır.

Örnek

Orijinal Pentium 4 işlemci , 64 bayt önbellek blokları ile 8 KiB boyutunda dört yollu bir ilişkisel L1 veri önbelleğine sahipti  . Dolayısıyla 8 KiB / 64 = 128 önbellek bloğu vardır. Küme sayısı, önbellek bloklarının sayısına bölünür, bu da 128/4 = 32 kümeye ve dolayısıyla 2 5  = 32 farklı indekse yol açar . 2 6  = 64 olası ofset vardır. CPU adresi 32 bit genişliğinde olduğundan, bu etiket alanı için 32 - 5 - 6 = 21 bit anlamına gelir.

Orijinal Pentium 4 işlemcide ayrıca 128 bayt önbellek blokları ile 256 KiB boyutunda sekiz yollu bir birleşik L2 entegre önbellek vardı. Bu, etiket alanı için 32 - 8 - 7 = 17 bit anlamına gelir.

Bayrak bitleri

Bir talimat önbelleği, önbellek satırı girişi başına yalnızca bir bayrak biti gerektirir: geçerli bir bit. Geçerli bit, bir önbellek bloğunun geçerli verilerle yüklenip yüklenmediğini gösterir.

Açılışta, donanım tüm önbelleklerdeki tüm geçerli bitleri "geçersiz" olarak ayarlar. Bazı sistemler de geçerli bir biti diğer zamanlarda "geçersiz" olarak ayarlar, örneğin bir işlemcinin önbelleğindeki çoklu ana veri yolu gözetleme donanımı başka bir işlemciden bir adres yayını duyduğunda ve yerel önbellekteki belirli veri bloklarının yanlış olduğunu fark ettiğinde. şimdi eski ve geçersiz olarak işaretlenmelidir.

Bir veri önbelleği tipik olarak önbellek satırı başına iki bayrak biti gerektirir – geçerli bir bit ve bir kirli bit . Kirli bir bit setine sahip olmak, ana bellekten ("kirli") okunduğundan beri ilişkili önbellek satırının değiştiğini, yani işlemcinin bu satıra veri yazdığını ve yeni değerin ana belleğe tam olarak yayılmadığını gösterir. .

önbellek özledim

Önbellek kaçırma, önbellekteki bir veri parçasını okumak veya yazmak için başarısız bir girişimdir ve bu, çok daha uzun gecikmeli bir ana belleğe erişimle sonuçlanır. Üç tür önbellek kaçırma vardır: talimat okuma kaçırma, veri okuma kaçırma ve veri yazma kaçırma.

Bir talimat önbelleğinden önbellek okuma hataları genellikle en büyük gecikmeye neden olur, çünkü işlemci veya en azından yürütme iş parçacığı , talimat ana bellekten getirilene kadar beklemek (durmak) zorundadır. Bir veri önbelleğinden önbellek okuma hataları genellikle daha küçük bir gecikmeye neden olur, çünkü önbellek okumasına bağlı olmayan talimatlar verilebilir ve veriler ana bellekten döndürülene kadar yürütmeye devam edebilir ve bağımlı talimatlar yürütmeye devam edebilir. Bir veri önbelleğindeki önbellek yazma hataları genellikle en kısa gecikmeye neden olur, çünkü yazma işlemi sıraya alınabilir ve sonraki talimatların yürütülmesinde birkaç sınırlama vardır; işlemci sıra dolana kadar devam edebilir. Eksik türlere ayrıntılı bir giriş için önbellek performans ölçümü ve ölçümüne bakın .

Adres çevirisi

Çoğu genel amaçlı CPU, bir tür sanal bellek uygular . Özetlemek gerekirse, makinede çalışan her program , yalnızca o program için kod ve verileri içeren kendi basitleştirilmiş adres alanını görür veya tüm programlar ortak bir sanal adres alanında çalışır. Bir program, fiziksel adres uzayının adresleri yerine sanal adres uzayının adreslerini hesaplayarak, karşılaştırarak, okuyarak ve yazarak çalıştırır, programları daha basit hale getirir ve böylece yazılmasını kolaylaştırır.

Sanal bellek, işlemcinin program tarafından oluşturulan sanal adresleri ana bellekteki fiziksel adreslere çevirmesini gerektirir. İşlemcinin bu çeviriyi yapan kısmı, bellek yönetim birimi (MMU) olarak bilinir . MMU'dan geçen hızlı yol , işletim sisteminin sayfa tablosundan , segment tablosundan veya her ikisinden gelen eşlemelerin önbelleği olan çeviri bakış arabelleğinde (TLB) depolanan çevirileri gerçekleştirebilir .

Bu tartışmanın amaçları doğrultusunda, adres çevirisinin üç önemli özelliği vardır:

  • Gecikme: Fiziksel adres, sanal adres adres oluşturucudan alındıktan sonra bir süre, belki birkaç döngü MMU'dan alınabilir.
  • Aliasing: Birden çok sanal adres, tek bir fiziksel adresle eşlenebilir. Çoğu işlemci, bu tek fiziksel adrese yapılan tüm güncellemelerin program sırasına göre olacağını garanti eder. Bu garantiyi yerine getirmek için işlemci, herhangi bir zamanda önbellekte fiziksel bir adresin yalnızca bir kopyasının bulunmasını sağlamalıdır.
  • Ayrıntı düzeyi : Sanal adres alanı sayfalara bölünmüştür. Örneğin, 4  GiB'lik bir sanal adres alanı, her biri bağımsız olarak eşlenebilen 4 KiB boyutunda 1.048.576 sayfaya bölünebilir. Desteklenen birden çok sayfa boyutu olabilir; detaylandırma için sanal belleğe bakın .

Bazı eski sanal bellek sistemleri çok yavaştı çünkü ana belleğe her programlanmış erişimden önce sayfa tablosuna (ana bellekte tutulan) erişim gerektiriyorlardı. Önbellek olmadan, bu, bellek erişim hızını etkili bir şekilde yarıya indirir. Bir bilgisayar sisteminde kullanılan ilk donanım önbelleği aslında bir veri veya talimat önbelleği değil, bir TLB idi.

Önbellekler, dizin veya etiketin fiziksel veya sanal adreslere karşılık gelmesine bağlı olarak dört türe ayrılabilir:

  • Fiziksel olarak dizine eklenmiş, fiziksel olarak etiketlenmiş (PIPT) önbellekler, hem dizin hem de etiket için fiziksel adresi kullanır. Bu basit ve takma ile ilgili sorunları önlerken, aynı zamanda yavaştır, çünkü bu adres önbellekte aranmadan önce fiziksel adresin aranması gerekir (bu, bir TLB eksikliğini ve ana belleğe erişimi içerebilir).
  • Sanal olarak dizine alınmış , sanal olarak etiketlenmiş (VIVT) önbellekler, hem dizin hem de etiket için sanal adresi kullanır. Belirli bir sanal adresin fiziksel adresini belirlemek için önce MMU'ya danışılması gerekmediğinden, bu önbelleğe alma şeması çok daha hızlı aramalara neden olabilir. Bununla birlikte, VIVT, birkaç farklı sanal adresin aynı fiziksel adrese atıfta bulunabileceği takma ad sorunlarından muzdariptir. Sonuç olarak, bu tür adreslerin aynı belleğe atıfta bulunulmasına rağmen ayrı ayrı önbelleğe alınması, tutarlılık sorunlarına neden olur. Bu soruna çözümler bulunsa da, bunlar standart tutarlılık protokolleri için çalışmaz. Başka bir sorun, aynı sanal adresin birkaç farklı fiziksel adresle eşleştiği eş sesli sözcüklerdir. Potansiyel çözümler arasında şunlar yer alsa da, bu eşlemeleri yalnızca sanal dizinin kendisine bakarak ayırt etmek mümkün değildir: bir bağlam anahtarından sonra önbelleği boşaltmak, adres alanlarını çakışmamaya zorlamak, sanal adresi bir adres alanı kimliği (ASID) ile etiketlemek. ). Ek olarak, sanal-fiziksel eşlemelerin değişebileceği ve VA'lar artık geçerli olmayacağı için önbellek satırlarının temizlenmesini gerektirecek bir sorun vardır. Etiketler fiziksel adresler (VIPT) kullanıyorsa tüm bu sorunlar yoktur.
  • Sanal olarak dizinlenmiş, fiziksel olarak etiketlenmiş (VIPT) önbellekler, dizin için sanal adresi ve etiketteki fiziksel adresi kullanır. Önbellek satırı TLB çevirisine paralel olarak aranabildiğinden, PIPT'ye göre avantajı daha düşük gecikme süresidir, ancak fiziksel adres mevcut olana kadar etiket karşılaştırılamaz. VIVT'ye göre avantajı, etiketin fiziksel adresi olduğundan, önbelleğin eş anlamlıları algılayabilmesidir. Teorik olarak VIPT daha fazla etiket biti gerektirir çünkü dizin bitlerinden bazıları sanal ve fiziksel adresler arasında farklılık gösterebilir (örneğin 4 KiB sayfası için bit 12 ve üstü) ve hem sanal dizine hem de fiziksel etikete dahil edilmesi gerekir. Pratikte bu bir sorun değildir çünkü tutarlılık sorunlarından kaçınmak için VIPT önbellekleri bu tür dizin bitlerine sahip olmayacak şekilde tasarlanmıştır (örneğin, dizin için toplam bit sayısı ve 4 KiB sayfası için blok ofseti 12 ile sınırlandırılarak) ; bu VIPT önbelleklerinin boyutunu sayfa boyutu çarpı önbelleğin ilişkilendirilebilirliği ile sınırlar.
  • Fiziksel olarak indekslenmiş, sanal olarak etiketlenmiş (PIVT) önbelleklerin literatürde genellikle işe yaramaz ve var olmadığı iddia edilmektedir. Ancak MIPS R6000 , bilinen tek uygulama olarak bu önbellek türünü kullanır. R6000, TLB gibi büyük bellekler için uygun olmayan son derece hızlı bir teknoloji olan emitör-bağlı mantıkta uygulanmaktadır . R6000, TLB belleğini çip üzerinde küçük, yüksek hızlı bir TLB "dilime" sahip ikinci düzey önbelleğin ayrılmış bir bölümüne yerleştirerek sorunu çözer. Önbellek, TLB diliminden elde edilen fiziksel adres tarafından indekslenir. Ancak, TLB dilimi yalnızca önbelleği indekslemek için gerekli olan sanal adres bitlerini çevirdiğinden ve herhangi bir etiket kullanmadığından, sanal adresle etiketlenerek çözülen yanlış önbellek isabetleri oluşabilir.

Bu yinelemenin hızı ( yük gecikmesi ) CPU performansı için çok önemlidir ve bu nedenle çoğu modern seviye-1 önbellek sanal olarak indekslenir, bu da en azından MMU'nun TLB aramasının önbellek RAM'inden veri almaya paralel olarak ilerlemesini sağlar.

Ancak sanal indeksleme, tüm önbellek seviyeleri için en iyi seçim değildir. Sanal takma adlarla uğraşmanın maliyeti, önbellek boyutuyla birlikte artar ve sonuç olarak, çoğu düzey-2 ve daha büyük önbellekler fiziksel olarak endekslenir.

Önbellekler geçmişte önbellek etiketleri için hem sanal hem de fiziksel adresleri kullanmıştır, ancak sanal etiketleme artık yaygın değildir. TLB araması, önbellek RAM aramasından önce tamamlanabilirse, fiziksel adres, etiket karşılaştırması için zamanında kullanılabilir ve sanal etiketlemeye gerek yoktur. Bu durumda, büyük önbellekler fiziksel olarak etiketlenme eğilimindedir ve yalnızca küçük, çok düşük gecikme süreli önbellekler sanal olarak etiketlenir. Son zamanlardaki genel amaçlı CPU'larda, aşağıda açıklandığı gibi sanal etiketlemenin yerini vhint'ler almıştır.

Homonym ve eşanlamlı sorunlar

Aynı sanal adres, etiketleme için fiziksel adres kullanılarak veya adres alanı tanımlayıcısını önbellek satırında depolayarak çözülebilen farklı fiziksel adreslerle ( eşadlı ) eşlendikten sonra, sanal dizin oluşturmaya ve etiketlemeye dayanan bir önbellek tutarsız hale gelir . Bununla birlikte, ikinci yaklaşım, birkaç önbellek satırının aynı fiziksel adres için veri depolamasıyla sonuçlandığı eşanlamlı soruna karşı yardımcı olmaz . Bu tür konumlara yazma, önbellekteki yalnızca bir konumu güncelleyerek diğerlerini tutarsız verilerle bırakabilir. Bu sorun, farklı adres alanları için çakışmayan bellek düzenleri kullanılarak çözülebilir veya aksi takdirde, eşleme değiştiğinde önbelleğin (veya bunun bir bölümünün) boşaltılması gerekir.

Sanal etiketler ve ipuçları

Sanal etiketlerin en büyük avantajı, ilişkisel önbellekler için sanaldan fiziksele çeviri yapılmadan önce etiket eşleşmesinin devam etmesine izin vermeleridir. Bununla birlikte, tutarlılık incelemeleri ve tahliyeler, eylem için fiziksel bir adres sunar. Donanım, genellikle fiziksel etiketlerin yanı sıra sanal etiketleri de depolayarak, fiziksel adresleri bir önbellek dizinine dönüştürmek için bazı araçlara sahip olmalıdır. Karşılaştırma için, fiziksel olarak etiketlenmiş bir önbelleğin sanal etiketleri tutması gerekmez, bu daha basittir. TLB'den sanaldan fiziksele eşleme silindiğinde, bu sanal adreslere sahip önbellek girişlerinin bir şekilde temizlenmesi gerekir. Alternatif olarak, TLB tarafından eşlenmemiş sayfalarda önbellek girişlerine izin verilirse, bu sayfalardaki erişim hakları sayfa tablosunda değiştirildiğinde bu girişlerin temizlenmesi gerekecektir.

İşletim sisteminin, önbellekte aynı anda hiçbir sanal takma adın bulunmadığından emin olması da mümkündür. İşletim sistemi bu garantiyi aşağıda açıklanan sayfa renklendirmesini uygulayarak sağlar. Bazı eski RISC işlemcileri (SPARC, RS/6000) bu yaklaşımı benimsedi. Sanal takma adları algılamanın ve çıkarmanın donanım maliyeti düştüğü ve mükemmel sayfa renklendirmenin yazılım karmaşıklığı ve performans cezası arttığı için son zamanlarda kullanılmamaktadır.

İlişkili bir önbellekteki etiketlerin iki işlevini ayırt etmek yararlı olabilir: bunlar, giriş kümesinin hangi yolunun seçileceğini belirlemek için kullanılırlar ve önbelleğin isabet edip etmediğini belirlemek için kullanılırlar. İkinci fonksiyon her zaman doğru olmalıdır, ancak ilk fonksiyonun tahminde bulunmasına ve ara sıra yanlış cevap almasına izin verilir.

Bazı işlemciler (örneğin eski SPARC'lar) hem sanal hem de fiziksel etiketlere sahip önbelleklere sahiptir. Sanal etiketler yol seçimi için, fiziksel etiketler isabet veya ıska belirlemek için kullanılır. Bu tür bir önbellek, sanal olarak etiketlenmiş bir önbelleğin gecikme avantajından ve fiziksel olarak etiketlenmiş bir önbelleğin basit yazılım arayüzünden yararlanır. Bununla birlikte, yinelenen etiketlerin ek maliyetini taşır. Ayrıca, eksik işleme sırasında, dizinlenen önbellek satırının alternatif yolları, sanal takma adlar ve tahliye edilen eşleşmeler için araştırılmalıdır.

Fazladan alan (ve biraz gecikme) , sanal etiketler yerine her önbellek girişinde sanal ipuçları tutularak azaltılabilir . Bu ipuçları, sanal etiketin bir alt kümesi veya karmasıdır ve verinin ve fiziksel bir etiketin alınacağı önbelleğin yolunu seçmek için kullanılır. Sanal olarak etiketlenmiş bir önbellek gibi, sanal bir ipucu eşleşmesi olabilir, ancak fiziksel etiket uyuşmazlığı olabilir, bu durumda eşleşen ipucu ile önbellek girişi tahliye edilmelidir, böylece bu adresteki önbellek doldurma işleminden sonra önbellek erişimleri yalnızca bir ipucu eşleşmesine sahip olacaktır. Sanal ipuçlarının, onları birbirinden ayıran sanal etiketlerden daha az biti olduğu için, sanal olarak ipucu verilen bir önbellek, sanal olarak etiketlenen bir önbelleğe göre daha fazla çakışma kaybına maruz kalır.

Belki de sanal ipuçlarının nihai azalması Pentium 4'te (Willamette ve Northwood çekirdekleri) bulunabilir. Bu işlemcilerde sanal ipucu etkin bir şekilde iki bittir ve önbellek dört yönlü küme ilişkiseldir. Etkili bir şekilde, donanım sanal adresten önbellek dizinine basit bir permütasyon sağlar, böylece getirilen dört yoldan doğru olanı seçmek için içerik adreslenebilir bellek (CAM) gerekmez.

Sayfa boyama

Büyük fiziksel olarak dizine alınmış önbellekler (genellikle ikincil önbellekler) bir sorunla karşılaşır: Önbellekte hangi sayfaların birbiriyle çarpıştığını uygulamadan çok işletim sistemi kontrol eder. Bir program çalışmasından diğerine sayfa tahsisindeki farklılıklar, önbellek çakışma modellerinde farklılıklara yol açar ve bu da program performansında çok büyük farklılıklara yol açabilir. Bu farklılıklar, bir kıyaslama çalışması için tutarlı ve tekrarlanabilir bir zamanlama elde etmeyi çok zorlaştırabilir.

Sorunu anlamak için, 1 MiB fiziksel olarak dizine eklenmiş, doğrudan eşlenmiş 2. düzey önbelleğe ve 4 KiB sanal bellek sayfasına sahip bir CPU düşünün. Sıralı fiziksel sayfalar önbellekteki sıralı konumlara eşlenir, ta ki 256 sayfadan sonra desen sarana kadar. Önbellekte nereye gidebileceğini belirtmek için her bir fiziksel sayfayı 0–255 arasında bir renkle etiketleyebiliriz. Farklı renklere sahip fiziksel sayfalardaki konumlar önbellekte çakışamaz.

Önbellekten maksimum düzeyde yararlanmaya çalışan programcılar, programlarının erişim modellerini, herhangi bir zamanda yalnızca 1 MiB verinin önbelleğe alınmasını gerektirecek şekilde düzenleyebilir, böylece kapasite kayıplarını önleyebilir. Ancak erişim modellerinde çakışma kayıplarının olmamasını da sağlamalıdırlar. Bu sorunu düşünmenin bir yolu, programın kullandığı sanal sayfaları bölmek ve onlara daha önce fiziksel sayfalara atanan fiziksel renklerle aynı şekilde sanal renkler atamaktır. Programcılar daha sonra aynı sanal renge sahip iki sayfanın aynı anda kullanılmaması için kodlarının erişim modellerini düzenleyebilir. Büyük ölçüde Yüksek Performanslı Bilgi İşlem (HPC) topluluğundan gelen bu tür optimizasyonlar (örneğin döngü yuva optimizasyonu ) hakkında geniş bir literatür vardır .

Sorun şu ki, herhangi bir anda kullanımda olan tüm sayfalar farklı sanal renklere sahip olabilirken, bazıları aynı fiziksel renklere sahip olabilir. Aslında, işletim sistemi sanal sayfalara rastgele ve tek biçimli fiziksel sayfalar atarsa, bazı sayfaların aynı fiziksel renge sahip olması ve bu sayfalardaki konumların önbellekte çakışması son derece olasıdır (bu doğum günü paradoksu ).

Çözüm, işletim sisteminin, sayfa renklendirme adı verilen bir teknik olan farklı sanal renklere farklı fiziksel renkli sayfalar atamaya çalışmasını sağlamaktır . Sanaldan fiziksel renge gerçek eşleme sistem performansıyla alakasız olsa da, tek eşlemelerin izlenmesi zordur ve çok az faydası vardır, bu nedenle sayfa renklendirmeye yönelik çoğu yaklaşım yalnızca fiziksel ve sanal sayfa renklerini aynı tutmaya çalışır.

İşletim sistemi, her bir fiziksel sayfanın yalnızca bir sanal renkle eşlenmesini garanti edebiliyorsa, sanal takma ad yoktur ve işlemci, yanlış işleme sırasında ekstra sanal takma ad araştırmalarına gerek kalmadan sanal olarak dizine alınmış önbellekleri kullanabilir. Alternatif olarak, işletim sistemi bir sanal renkten diğerine geçtiğinde bir sayfayı önbellekten temizleyebilir. Yukarıda bahsedildiği gibi, bu yaklaşım bazı erken SPARC ve RS/6000 tasarımları için kullanılmıştır.

Modern bir işlemcide önbellek hiyerarşisi

AMD Bulldozer sunucusunun bellek hiyerarşisi

Modern işlemciler, birden çok etkileşimli çip üzerinde önbelleğe sahiptir. Belirli bir önbelleğin çalışması, önbellek boyutu, önbellek blok boyutu, bir kümedeki blok sayısı, önbellek kümesi değiştirme ilkesi ve önbellek yazma ilkesi (geriye yazma veya geri yazma) ile tamamen belirlenebilir.

Belirli bir önbellekteki tüm önbellek blokları aynı boyutta ve aynı ilişkiye sahipken, tipik olarak "alt düzey" önbellekler (Seviye 1 önbellek olarak adlandırılır) daha az sayıda bloğa, daha küçük blok boyutuna ve daha az bloğa sahiptir. ayarlanmış, ancak erişim süreleri çok kısa. "Üst düzey" önbellekler (yani Düzey 2 ve üstü) giderek daha fazla sayıda bloğa, daha büyük blok boyutuna, bir kümede daha fazla bloğa ve nispeten daha uzun erişim sürelerine sahiptir, ancak yine de ana bellekten çok daha hızlıdır.

Önbellek girişi değiştirme politikası, işlemci tasarımcıları tarafından uygulanmak üzere seçilen bir önbellek algoritması tarafından belirlenir . Bazı durumlarda, farklı türdeki iş yükleri için birden çok algoritma sağlanır.

Özel önbellekler

Boruhatlı CPU'lar erişim birden çok noktadan bellek boru hattının : komut getirme, sanal-to-fiziksel adres dönüştürme ve veri (bkz getirme klasik RISC boru hattı ). Doğal tasarım, bu noktaların her biri için farklı fiziksel önbellekler kullanmaktır, böylece hiçbir fiziksel kaynağın boru hattındaki iki noktaya hizmet vermek üzere programlanması gerekmez. Böylece boru hattı doğal olarak her biri kendi rolüne göre uzmanlaşmış en az üç ayrı önbellek (talimat, TLB ve veri) ile sonuçlanır .

kurban önbelleği

Bir kurban önbellek değiştirme üzerine bir işlemci önbelleği tahliye tutma blokları için kullanılan bir önbelleğidir. Kurban önbelleği, ana önbellek ile yeniden doldurma yolu arasında yer alır ve yalnızca ana önbellekten çıkarılan veri bloklarını tutar. Kurban önbelleği genellikle tamamen ilişkiseldir ve çakışma kayıplarını azaltmayı amaçlar. Yaygın olarak kullanılan birçok program, tüm erişimler için bir ilişkisel eşleme gerektirmez. Aslında, programın bellek erişimlerinin yalnızca küçük bir kısmı yüksek bir ilişkilendirme gerektirir. Kurban önbelleği, yalnızca bu erişimlere yüksek ilişkilendirme sağlayarak bu özelliği kullanır. 1990 yılında DEC'den Norman Jouppi tarafından tanıtıldı .

Intel'in Haswell işlemcilerinin Crystalwell varyantı , işlemcilerin Seviye 3 önbelleğine kurban önbelleği olarak hizmet eden paket üzerinde 128 MB eDRAM Seviye 4 önbelleği tanıttı. In Skylake mikromimarisine Seviye 4 önbellek artık mağdur önbelleği olarak çalışır.

İz önbelleği

Önbellek uzmanlığının en uç örneklerinden biri , Intel Pentium 4 mikroişlemcilerinde bulunan izleme önbelleğidir ( yürütme izleme önbelleği olarak da bilinir ) . İzleme önbelleği, önceden alınmış ve kodu çözülmüş talimatların izlerini depolayarak talimat getirme bant genişliğini artırmak ve güç tüketimini azaltmak (Pentium 4 durumunda) için bir mekanizmadır .

Bir izleme önbelleği, talimatları çözüldükten sonra veya kullanımdan kaldırıldıktan sonra depolar. Genel olarak, bireysel temel blokları veya dinamik talimat izlerini temsil eden gruplar halinde izleme önbelleklerine talimatlar eklenir . Pentium 4'ün izleme önbelleği , x86 talimatlarının kodunun çözülmesinden kaynaklanan mikro işlemleri depolar ve ayrıca bir mikro işlem önbelleğinin işlevselliğini sağlar. Buna sahip olarak, bir dahaki sefere bir talimat gerektiğinde, kodun tekrar mikro işlemlere dönüştürülmesi gerekmez.

Birleştirme Önbelleği (WCC) Yaz

Yaz Birleştirme Önbellek L2 önbellek parçası olan özel bir önbellektir AMD 'nin Bulldozer mikromimarisine . Modüldeki her iki L1D önbelleğindeki depolar, arabelleğe alındıkları ve birleştirildikleri WCC'den geçer. WCC'nin görevi, L2 önbelleğine yazma sayısını azaltmaktır.

Mikro işlem (μop veya uop) önbelleği

Bir mikro işlem önbelleği ( μop önbellek , uop önbellek veya UC ), doğrudan talimat kod çözücülerinden veya talimat önbelleğinden alındığı gibi kodu çözülmüş talimatların mikro işlemlerini depolayan özel bir önbellektir. Bir talimatın kodunun çözülmesi gerektiğinde, μop önbelleği, önbelleğe alınırsa yeniden kullanılan kodu çözülmüş formu için kontrol edilir; mevcut değilse, talimatın kodu çözülür ve ardından önbelleğe alınır.

μop önbelleğini Intel P6 işlemci ailesi için alternatif bir ön uç olarak tanımlayan ilk çalışmalardan biri, 2001 tarihli "Micro-Operation Cache: A Power Aware Frontend for Variable Instruction Length ISA" başlıklı makaledir . Daha sonra Intel, Sandy Bridge işlemcilerine ve Ivy Bridge ve Haswell gibi ardışık mikro mimarilere μop önbellekleri dahil etti . AMD, Zen mikro mimarisinde bir μop önbellek uyguladı .

Önceden kodu çözülmüş eksiksiz talimatların alınması, değişken uzunluktaki karmaşık talimatların daha basit sabit uzunluktaki mikro işlemlere tekrar tekrar kod çözme ihtiyacını ortadan kaldırır ve getirilen talimatları tahmin etme, getirme, döndürme ve hizalama sürecini basitleştirir. Bir μop önbellek, alma ve kod çözme donanımını etkin bir şekilde boşaltır, böylece güç tüketimini azaltır ve kodu çözülen mikro işlemlerin ön uç tedarikini iyileştirir. μop önbellek ayrıca, kodu çözülmüş mikro işlemleri arka uca daha tutarlı bir şekilde sunarak ve CPU'nun getirme ve kod çözme mantığındaki çeşitli darboğazları ortadan kaldırarak performansı artırır.

Bir μop önbellek izleme önbelleğiyle pek çok benzerliğe sahiptir, ancak μop önbellek çok daha basittir ve bu nedenle daha iyi güç verimliliği sağlar; bu, pille çalışan cihazlarda uygulamalar için daha uygun olmasını sağlar. İzleme önbelleğinin güç verimsizliğine yol açan ana dezavantajı, dinamik olarak oluşturulmuş komut izlerini önbelleğe alma ve yeniden kullanma konusunda sezgisel karar vermesi için gereken donanım karmaşıklığıdır .

Şube hedef talimat önbelleği

Bir dal hedef önbellek veya şube hedef talimat önbellek , kullanılan isim ARM mikroişlemci , bir alınan şube hedefe ilk birkaç talimatları tutan özel bir önbelleğidir. Bu, normal talimat önbelleğine ihtiyaç duymayan düşük güçlü işlemciler tarafından kullanılır, çünkü bellek sistemi, bir olmadan CPU'yu tatmin edecek kadar hızlı talimatlar verebilir. Ancak bu yalnızca sıralı ardışık talimatlar için geçerlidir; Yeni bir adreste talimat getirmeyi yeniden başlatmak için hala birkaç gecikme döngüsü gerekiyor ve bir kontrol aktarımından sonra birkaç döngü ardışık düzen balonuna neden oluyor. Dal hedef önbelleği, alınan dalların çoğundan sonra gecikmeyi önleyen bu birkaç döngü için talimatlar sağlar.

Bu, geleneksel tam zamanlı talimat önbelleğinden çok daha küçük bir önbellekle tam hızda çalışmaya olanak tanır.

Akıllı önbellek

Akıllı önbellek , Intel tarafından geliştirilen, birden çok yürütme çekirdeği için düzey 2 veya düzey 3 önbelleğe alma yöntemidir .

Akıllı Önbellek, gerçek önbelleği çok çekirdekli bir işlemcinin çekirdekleri arasında paylaşır . Atanmış çekirdek başına önbelleğe kıyasla, tüm çekirdekler önbellek alanının eşit bölümlerine ihtiyaç duymadığında genel önbellek kaçırma oranı azalır. Sonuç olarak, diğer çekirdekler etkin değilse, tek bir çekirdek tam seviye 2 veya seviye 3 önbelleğini kullanabilir. Ayrıca, paylaşılan önbellek, belleğin farklı yürütme çekirdekleri arasında paylaşılmasını hızlandırır.

Çok seviyeli önbellekler

Diğer bir konu, önbellek gecikmesi ile isabet oranı arasındaki temel ödünleşimdir. Daha büyük önbellekler daha iyi isabet oranlarına ancak daha uzun gecikme süresine sahiptir. Bu ödünleşimi ele almak için birçok bilgisayar, daha büyük, daha yavaş önbellekler tarafından yedeklenen küçük hızlı önbelleklerle birden çok önbellek düzeyi kullanır. Çok seviyeli önbellekler genellikle önce en hızlı, seviye 1 ( L1 ) önbelleği kontrol ederek çalışır ; vurursa, işlemci yüksek hızda ilerler. Bu daha küçük önbellek eksikse, harici belleğe erişmeden önce bir sonraki en hızlı önbellek ( seviye 2 , L2 ) kontrol edilir ve bu şekilde devam eder.

Ana bellek ile en hızlı önbellek arasındaki gecikme farkı büyüdükçe, bazı işlemciler üç seviyeli yonga üzerinde önbellek kullanmaya başladı. Fiyata duyarlı tasarımlar bunu tüm önbellek hiyerarşisini çip üzerinde çekmek için kullandı, ancak 2010'larda en yüksek performanslı tasarımlardan bazıları, genellikle eDRAM'de uygulanan ve çok çipli bir modül üzerine monte edilen büyük çip dışı önbelleklere geri döndü. , dördüncü önbellek düzeyi olarak. Ana bilgisayar CPU IBM z15 (2019) gibi nadir durumlarda, L1'e kadar olan tüm seviyeler eDRAM tarafından uygulanır ve SRAM'ın tamamen yerini alır (önbellek için, SRAM hala kayıtlar için kullanılır). ARM tabanlı elma M1 dört yüksek performanslı çekirdekleri, rastlanmadık şekilde büyük bir miktarda her biri için bir 192 KB L1 önbellek sahiptir; ancak dört yüksek verimli çekirdek yalnızca 128 KB'ye sahiptir.

L3 ve L4 önbelleklerinin faydaları, uygulamanın erişim modellerine bağlıdır. L3 ve L4 önbelleklerini içeren ürün örnekleri aşağıdakileri içerir:

  • Alpha 21164 (1995), 1 ila 64 MB yonga dışı L3 önbelleğe sahiptir.
  • IBM POWER4 (2001), çeşitli işlemciler arasında paylaşılan, işlemci başına 32 MB'lik yonga dışı L3 önbelleklerine sahiptir.
  • Itanium 2 (2003), kalıp üzerinde 6 MB birleşik düzey 3 (L3) önbelleğe sahiptir; Itanium 2 (2003) MX 2 modülü üzerinde paylaşılan 64 MB L4 önbellek ile birlikte iki Itanium 2 işlemci içeriyor çoklu çip modülü bir Madison işlemci ile uyumlu pin oldu.
  • Intel'in "Tulsa" (2006) kod adlı Xeon MP ürünü, iki işlemci çekirdeği arasında paylaşılan 16 MB yerleşik L3 önbelleğe sahiptir.
  • AMD Phenom II (2008), 6 MB'a kadar kalıp üzerinde birleşik L3 önbelleğe sahiptir.
  • Intel Core i7 (2008), tüm çekirdekler tarafından paylaşılan, kapsayıcı bir 8 MB kalıp üzerinde birleşik L3 önbelleğe sahiptir.
  • Entegre Intel Iris Pro Graphics içeren Intel Haswell CPU'lar, esasen bir L4 önbellek görevi gören 128 MB eDRAM'a sahiptir.

Son olarak, bellek hiyerarşisinin diğer ucunda, CPU kayıt dosyasının kendisi, yazılımda programlanması özel özelliği ile sistemdeki en küçük, en hızlı önbellek olarak kabul edilebilir - genellikle bir derleyici tarafından, kayıtları tutmak için tahsis eder. örneğin, döngü yuva optimizasyonu için ana bellekten alınan değerler . Bununla birlikte, kayıt yeniden adlandırma ile çoğu derleyici kayıt ataması, çalışma zamanında donanım tarafından dinamik olarak bir kayıt bankasına yeniden tahsis edilir, bu da CPU'nun yanlış veri bağımlılıklarını kırmasına ve böylece boru hattı tehlikelerini hafifletmesine izin verir.

Kayıt dosyaları bazen hiyerarşiye de sahiptir: Cray-1 (1976 dolaylarında) genellikle kullanılabilir sekiz adres "A" ve sekiz skaler veri "S" kaydına sahipti. Ayrıca erişimi daha uzun süren, ancak ana bellekten daha hızlı olan 64 adres "B" ve 64 skaler veri "T" kaydı da vardı. Cray-1'in bir veri önbelleği olmadığı için "B" ve "T" kayıtları sağlandı. (Ancak Cray-1'in bir talimat önbelleği vardı.)

Çok çekirdekli çipler

Birden çok çekirdeğe sahip bir çip düşünüldüğünde , önbelleklerin paylaşılması mı yoksa her bir çekirdek için yerel mi olması gerektiği sorusu vardır. Paylaşılan önbelleği uygulamak, kaçınılmaz olarak daha fazla kablolama ve karmaşıklık getirir. Ancak daha sonra, çekirdek yerine çip başına bir önbelleğe sahip olmak , gereken alan miktarını büyük ölçüde azaltır ve böylece daha büyük bir önbellek içerebilir.

Tipik olarak, L1 önbelleğinin paylaşılması istenmez, çünkü gecikmede ortaya çıkan artış, her bir çekirdeğin tek çekirdekli bir yongadan önemli ölçüde daha yavaş çalışmasına neden olur. Ancak, belleğe erişmeden önce çağrılan en üst düzey önbellek için, tek bir çekirdeğin tüm önbelleği kullanmasına izin vermek, farklı işlemlere izin vererek veri fazlalığını azaltmak veya önbelleğe alınmış verileri paylaşmak ve kullanılan önbellek tutarlılık protokollerinin karmaşıklığını azaltmak için iş parçacıkları. Örneğin, üç seviyeli sekiz çekirdekli bir çip, her çekirdek için bir L1 önbelleği, her çekirdek çifti için bir ara L2 önbelleği ve tüm çekirdekler arasında paylaşılan bir L3 önbelleği içerebilir.

Belleğe erişmeden önce çağrılan paylaşılan en üst düzey önbelleğe genellikle son düzey önbellek (LLC) denir . LLC birden çok çekirdek arasında paylaşıldığında, paralellik düzeyini artırmak için ek teknikler kullanılır; buna, belirli bellek adres aralıklarını adresleyen ve bağımsız olarak erişilebilen birden çok parçaya dilimlemek de dahildir.

Ayrı ve birleşik

Ayrı bir önbellek yapısında, talimatlar ve veriler ayrı ayrı önbelleğe alınır, yani bir önbellek satırı, talimatları veya verileri önbelleğe almak için kullanılır, ancak ikisini birden değil; ayrı veri ve komut çevirisine bakan arabelleklerle çeşitli faydalar gösterilmiştir . Birleşik bir yapıda bu kısıtlama mevcut değildir ve hem talimatları hem de verileri önbelleğe almak için önbellek satırları kullanılabilir.

Özel ve kapsayıcı

Çok seviyeli önbellekler yeni tasarım kararları sunar. Örneğin bazı işlemcilerde L1 önbelleğindeki tüm veriler de L2 önbelleğinde bir yerde olmalıdır. Bu önbelleklere kesinlikle kapsayıcı denir . Diğer işlemciler ( AMD Athlon gibi ) özel önbelleklere sahiptir: verilerin L1 ve L2 önbelleklerinden en fazla birinde olması garanti edilir, hiçbir zaman ikisinde birden bulunmaz. Yine de diğer işlemciler (Intel Pentium II , III ve 4 ) L1 önbelleğindeki verilerin L2 önbelleğinde de bulunmasını gerektirmez, ancak bunu sıklıkla yapabilir. Bu ara politika için evrensel olarak kabul edilmiş bir isim yoktur; iki yaygın ad "münhasır olmayan" ve "kısmen kapsayıcı"dır.

Özel önbelleklerin avantajı, daha fazla veri depolamalarıdır. Bu avantaj, özel L1 önbelleği, L2 önbelleğiyle karşılaştırılabilir olduğunda daha büyüktür ve L2 önbelleği, L1 önbelleğinden çok daha büyük olduğunda azalır. L1 ıskaladığında ve L2 bir erişime ulaştığında, L2'deki isabet önbelleği satırı, L1'deki bir satırla değiştirilir. Bu değişim, kapsayıcı bir önbelleğin yaptığı gibi, yalnızca L2'den L1'e bir satırı kopyalamaktan biraz daha fazla iştir.

Kesin olarak kapsayıcı önbelleklerin bir avantajı, çok işlemcili bir sistemdeki harici aygıtlar veya diğer işlemciler işlemciden bir önbellek hattını kaldırmak istediklerinde, işlemcinin yalnızca L2 önbelleğini kontrol etmesini istemeleridir. Dahil etmeyi zorunlu kılmayan önbellek hiyerarşilerinde, L1 önbelleği de kontrol edilmelidir. Bir dezavantaj olarak, L1 ve L2 önbelleklerinin ilişkilendirmeleri arasında bir korelasyon vardır: L2 önbelleğinin en az tüm L1 önbelleklerinin birlikte olduğu kadar çok yolu yoksa, L1 önbelleklerinin etkin ilişkilendirilebilirliği kısıtlanır. Kapsayıcı önbelleğin bir başka dezavantajı, L2 önbelleğinde bir tahliye olduğunda, kapsayıcılığı korumak için L1'deki (muhtemelen) karşılık gelen satırların da tahliye edilmesi gerektiğidir. Bu oldukça fazla bir iştir ve daha yüksek bir L1 ıskalama oranı ile sonuçlanacaktır.

Kapsayıcı önbelleklerin bir başka avantajı, daha büyük önbelleğin daha büyük önbellek satırlarını kullanabilmesidir, bu da ikincil önbellek etiketlerinin boyutunu azaltır. (Özel önbellekler, her iki önbelleğin de aynı boyutta önbellek satırlarına sahip olmasını gerektirir, böylece önbellek satırları bir L1 ıska, L2 isabetinde değiştirilebilir.) İkincil önbellek, birincilden bir büyüklük sırası büyükse ve önbellek verileri bir Önbellek etiketlerinden daha büyük bir büyüklük sırasına göre, kaydedilen bu etiket alanı, L1 önbellek verilerini L2'de depolamak için ihtiyaç duyulan artımlı alanla karşılaştırılabilir.

karalama defteri belleği

Bilgisayar terminolojisinde karalama defteri, karalama defteri RAM'i veya yerel depo olarak da bilinen karalama defteri belleği (SPM), hesaplamaların, verilerin ve devam eden diğer işlerin geçici olarak depolanması için kullanılan yüksek hızlı bir dahili bellektir.

Örnek: K8

Hem uzmanlaşmayı hem de çok seviyeli önbelleğe almayı göstermek için, AMD Athlon 64 CPU'daki K8 çekirdeğinin önbellek hiyerarşisini burada bulabilirsiniz .

AMD Athlon 64 CPU'daki K8 çekirdeğinin önbellek hiyerarşisi.

K8'in dört özel önbelleği vardır: talimat önbelleği, talimat TLB'si , veri TLB'si ve veri önbelleği. Bu önbelleklerin her biri uzmanlaşmıştır:

  • Talimat önbelleği, 64 baytlık bellek satırlarının kopyalarını tutar ve her döngüde 16 bayt getirir. Bu önbellekteki her bir bayt, sekiz yerine on bitte depolanır ve fazladan bitler talimatların sınırlarını işaretler (bu bir ön kod çözme örneğidir). Önbellek ECC yerine yalnızca eşlik korumasına sahiptir , çünkü eşlik daha küçüktür ve herhangi bir hasarlı veri, bellekten alınan yeni verilerle değiştirilebilir (her zaman talimatların güncel bir kopyasına sahiptir).
  • TLB talimatı, sayfa tablosu girişlerinin (PTE'ler) kopyalarını tutar. Her döngünün talimat getirme işlemi, bu TLB aracılığıyla fiziksel bir adrese çevrilmiş sanal adresine sahiptir. Her giriş bellekte ya dört ya da sekiz bayttır. K8'in değişken bir sayfa boyutu olduğundan, TLB'lerin her biri, biri 4 KB sayfaları eşleyen PTE'leri tutmak ve diğeri 4 MB veya 2 MB sayfaları eşleyen PTE'leri tutmak için iki bölüme ayrılmıştır. Bölme, her bölümdeki tam ilişkisel eşleşme devresinin daha basit olmasını sağlar. İşletim sistemi, farklı boyuttaki PTE'lerle sanal adres alanının farklı bölümlerini eşler.
  • TLB verilerinin aynı girişleri tutan iki kopyası vardır. İki kopya, sanal adresleri fiziksel adreslere çevirmek için döngü başına iki veri erişimine izin verir. TLB talimatı gibi, bu TLB de iki tür girişe bölünmüştür.
  • Veri önbelleği, 64 baytlık bellek satırlarının kopyalarını tutar. 8 bankaya bölünmüştür (her biri 8 KB veri depolar) ve bu veriler farklı bankalarda olduğu sürece her döngüde iki adet 8 baytlık veri getirebilir. Etiketlerin iki kopyası vardır, çünkü her 64 baytlık satır sekiz bankanın tümüne yayılmıştır. Her etiket kopyası, döngü başına iki erişimden birini yönetir.

K8 ayrıca çok seviyeli önbelleklere sahiptir. Yalnızca 4 KB eşlemeli PTE'leri depolayan ikinci düzey talimat ve veri TLB'leri vardır. Hem talimat hem de veri önbellekleri ve çeşitli TLB'ler, büyük birleşik L2 önbelleğinden doldurulabilir . Bu önbellek hem L1 talimatına hem de veri önbelleklerine özeldir; bu, herhangi bir 8 baytlık satırın yalnızca L1 talimat önbelleğinden, L1 veri önbelleğinden veya L2 önbelleğinden birinde olabileceği anlamına gelir. Bununla birlikte, veri önbelleğindeki bir satırın, yine TLB'lerden birinde bulunan bir PTE'ye sahip olması mümkündür; işletim sistemi, bellekteki sayfa tabloları güncellendiğinde bazı kısımlarını temizleyerek TLB'leri tutarlı tutmaktan sorumludur.

K8 ayrıca, asla bellekte saklanmayan bilgileri, yani tahmin bilgilerini önbelleğe alır. Bu önbellekler yukarıdaki şemada gösterilmemiştir. Bu CPU sınıfı için olağan olduğu gibi, K8 dalların alınıp alınmadığını tahmin etmeye yardımcı olan tablolarla ve dalların ve sıçramaların hedeflerini tahmin eden diğer tablolarla oldukça karmaşık dal tahminine sahiptir . Bu bilgilerin bir kısmı, hem 1. düzey talimat önbelleğindeki hem de birleşik ikincil önbellekteki talimatlarla ilişkilidir.

K8, ikincil önbellekte talimatlarla birlikte tahmin bilgilerini depolamak için ilginç bir numara kullanır. İkincil önbellekteki satırlar, bu satırların veriden veya talimat birincil önbelleklerinden çıkarılıp çıkarılmadığına bağlı olarak ECC veya eşlik tarafından kazara veri bozulmasından (örneğin bir alfa parçacığı çarpması ile) korunur . Eşlik kodu, ECC kodundan daha az bit aldığından, talimat önbelleğindeki satırların birkaç yedek biti vardır. Bu bitler, bu talimatlarla ilişkili dal tahmin bilgilerini önbelleğe almak için kullanılır. Net sonuç, dal tahmincisinin daha büyük bir etkin geçmiş tablosuna sahip olması ve dolayısıyla daha iyi doğruluğa sahip olmasıdır.

Daha fazla hiyerarşi

Diğer işlemcilerin başka tür tahmin edicileri vardır (örneğin, DEC Alpha 21264'teki depodan yüklemeye atlama tahmincisi ) ve çeşitli özel tahmin edicilerin gelecekteki işlemcilerde gelişmesi muhtemeldir.

Bu öngörücüler, hesaplanması maliyetli olan bilgileri depoladıkları için önbelleklerdir. Belirleyicilerini tartışırken kullanılan terminolojinin bazıları (biri bahseder cache aynıdır hit bir dal önbelirleyicisi), ancak belirleyiciler genellikle önbellek hiyerarşisi kapsamında yer almazlar.

K8, talimatı ve veri önbelleklerini donanımda tutarlı tutar; bu, mağaza talimatını yakından takip eden bir talimata bir mağazanın, aşağıdaki talimatı değiştireceği anlamına gelir. Alpha ve MIPS ailesindekiler gibi diğer işlemciler, talimat önbelleğini tutarlı tutmak için yazılıma güvendi. Bir program tutarlılığı sağlamak için bir işletim sistemi tesisini çağırana kadar mağazaların talimat akışında görünmesi garanti edilmez.

Etiket RAM'i

Bilgisayar mühendisliğinde, olası bellek konumlarından hangisinin şu anda bir CPU önbelleğinde depolandığını belirtmek için bir RAM etiketi kullanılır. Basit, doğrudan haritalanmış bir tasarım için hızlı SRAM kullanılabilir. Daha yüksek ilişkilendirilebilir önbellekler genellikle içerik adreslenebilir bellek kullanır .

uygulama

Önbellek okumaları , tek bir döngüden fazlasını alan en yaygın CPU işlemidir. Program yürütme süresi, 1. düzey bir veri önbelleği isabetinin gecikmesine karşı çok hassas olma eğilimindedir. Önbellekleri olabildiğince hızlı hale getirmek için çok fazla tasarım çabası ve genellikle güç ve silikon alanı harcanır.

En basit önbellek, sanal olarak dizine alınmış, doğrudan eşlenmiş bir önbellektir. Sanal adres bir toplayıcı ile hesaplanır, adresin ilgili kısmı çıkarılır ve yüklenen verileri döndüren bir SRAM'ı indekslemek için kullanılır. Veriler bir bayt kaydırıcıda bayt hizalanır ve oradan bir sonraki işleme atlanır. İç döngüde herhangi bir etiket kontrolüne gerek yoktur – aslında etiketlerin okunmasına bile gerek yoktur. İşlem hattında daha sonra, ancak yükleme talimatı kullanımdan kaldırılmadan önce, yüklenen verilerin etiketi okunmalı ve bir önbellek isabeti olduğundan emin olmak için sanal adrese göre kontrol edilmelidir. Bir kayıpta, önbellek istenen önbellek satırıyla güncellenir ve işlem hattı yeniden başlatılır.

İlişkili bir önbellek daha karmaşıktır, çünkü önbelleğin hangi girişinin seçileceğini belirlemek için bir tür etiketin okunması gerekir. N-yollu küme-ilişkisel düzey-1 önbellek genellikle N olası etiketi ve N veriyi paralel olarak okur ve ardından eşleşen etiketle ilişkili verileri seçer. Seviye-2 önbellekleri bazen önce etiketleri okuyarak güç tasarrufu sağlar, böylece veri SRAM'ından yalnızca bir veri öğesi okunur.

2 yönlü ilişkisel önbellek için okuma yolu

Bitişik diyagram, adresin çeşitli alanlarının nasıl kullanıldığını açıklığa kavuşturmayı amaçlamaktadır. Adres biti 31 en önemli, bit 0 en az önemlidir. Diyagram, 64 bayt (B) satır, 32 bit okuma genişliği ve 32 bit sanal adres ile 4 KB, 2 yollu küme ilişkisel, sanal olarak dizinlenmiş ve sanal olarak etiketlenmiş önbellek için SRAM'leri, dizinlemeyi ve çoğullamayı gösterir .

Önbellek 4 KB olduğundan ve 64 B satıra sahip olduğundan, önbellekte sadece 64 satır vardır ve her biri 21 bitlik bir çift etikete sahip 32 satırdan oluşan bir Tag SRAM'den her seferinde iki tane okuruz. 31'den 6'ya kadar olan sanal adres bitlerinin herhangi bir işlevi, etiket ve veri SRAM'lerini indekslemek için kullanılabilse de, en az anlamlı bitleri kullanmak en basitidir.

Benzer şekilde, önbellek 4 KB olduğundan ve 4 B okuma yoluna sahip olduğundan ve her erişim için iki yol okuduğundan, Data SRAM 512 satır x 8 bayt genişliğindedir.

Daha modern bir önbellek 16 KB, 4 yollu küme ilişkisel, sanal olarak dizinlenmiş, sanal olarak ipucu verilmiş ve fiziksel olarak etiketlenmiş, 32 B satır, 32 bit okuma genişliği ve 36 bit fiziksel adres olabilir. Böyle bir önbellek için okuma yolu tekrarı, yukarıdaki yola çok benzer. Etiketler yerine, ipuçları okunur ve sanal adresin bir alt kümesiyle eşleştirilir. Daha sonra işlem hattında, sanal adres TLB tarafından fiziksel bir adrese çevrilir ve fiziksel etiket okunur (vhint, önbelleğin hangi yolunu okuyacağını sağladığı için yalnızca bir etiket). Son olarak, bir isabet olup olmadığını belirlemek için fiziksel adres fiziksel etiketle karşılaştırılır.

Bazı SPARC tasarımları, sanal adres toplayıcıyı SRAM kod çözücülerine daraltarak L1 önbelleklerinin hızını birkaç geçit gecikmesiyle iyileştirdi. Bkz. Toplam adresli kod çözücü .

Tarih

Önbellek teknolojisinin erken tarihi, sanal belleğin icadı ve kullanımıyla yakından bağlantılıdır. Yarı iletken belleklerin kıtlığı ve maliyeti nedeniyle, 1960'ların ilk ana bilgisayarları, programlar tarafından kullanılan düz bir sanal bellek alanına eşlenen karmaşık bir fiziksel bellek hiyerarşisi kullandı. Bellek teknolojileri yarı iletken, manyetik çekirdek, tambur ve diski kapsayacaktır. Programlar tarafından görülen ve kullanılan sanal bellek düz olacak ve önbelleğe alma, verileri ve talimatları işlemci erişiminden önce en hızlı belleğe getirmek için kullanılacaktı. Önbellek boyutlarını optimize etmek için kapsamlı çalışmalar yapıldı. Optimal değerlerin büyük ölçüde Algol'ün en küçüğüne ihtiyaç duyduğu ve Fortran ve Cobol'un en büyük önbellek boyutlarına ihtiyaç duyduğu programlama diline bağlı olduğu bulundu.

Mikrobilgisayar teknolojisinin ilk günlerinde, bellek erişimi, kayıt erişiminden yalnızca biraz daha yavaştı . Ancak 1980'lerden beri işlemci ve bellek arasındaki performans farkı büyüyor. Mikroişlemciler, özellikle çalışma frekansları açısından bellekten çok daha hızlı gelişti , bu nedenle bellek bir performans darboğazı haline geldi . Tüm ana belleğe CPU kadar hızlı sahip olmak teknik olarak mümkün olsa da, ekonomik olarak daha uygun bir yol izlendi: bol miktarda düşük hızlı bellek kullanın, ancak aynı zamanda performans boşluğunu azaltmak için küçük bir yüksek hızlı önbellek ekleyin. Bu, yalnızca biraz azaltılmış birleşik performansla aynı fiyata daha fazla kapasite sağladı.

İlk TLB uygulamaları

TLB'nin ilk belgelenmiş kullanımları , her ikisi de TLB olarak bir ilişkisel bellek kullanan GE 645 ve IBM 360/67'deydi .

İlk talimat önbelleği

Bir talimat önbelleğinin ilk belgelenmiş kullanımı CDC 6600'deydi .

İlk veri önbelleği

Bir veri önbelleğinin ilk belgelenmiş kullanımı IBM System/360 Model 85'teydi.

68k mikroişlemcilerde

68.010 1982 yılında yayımlanan, sadece iki talimatlar oluşan döngüler hızlandıran küçük ve özel durum talimat önbellek kabul edilebilir bir "döngü modu" vardır. 68020 , 1984 yılında yayınlanan, özelliği, gerçek çip önbellek ilk 68k dizi işlemcisi olan 256 bayt tipik kullanım önbelleğe sahip olduğu yerini aldı.

68030 , 1987 yılında yayınlanan, temel olarak, bir ek 256-baytlık veri önbelleğine sahip bir 68020 çekirdek, bir çip-üstü hafıza yönetim birimi (MMU), bir işlem küçültme ve cache ilave patlama kipi. 68040 1990 yılında piyasaya, bölünmüş talimat ve dört kilobayt her veri önbellek bulunmaktadır. 68060 8 KB veri önbellek (dört-yollu birleştirici), 8 KB yönerge önbellek (dört-yollu birleştirici), 96 bayt FIFO kullanıcı tamponu, 256 giriş dal önbelleği ve 64 giriş: 1994 yılında yayımlanan, aşağıdaki vardır adres çeviri önbelleği MMU arabelleği (dört yönlü ilişkisel).

x86 mikroişlemcilerde

Gibi x86 20 MHz'lik ve üzeri mikroişlemciler ulaştığı saat hızlarında 386 , hızlı cache bellek az miktarda performansını artırmak için sistemlerde özellikli başlandı. Bunun nedeni, ana bellek için kullanılan DRAM'in yenileme döngülerinin yanı sıra 120 ns'ye kadar önemli gecikme süresine sahip olmasıydı . Önbellek, daha pahalı, ancak önemli ölçüde daha hızlı, o sırada 10-25 ns civarında gecikme süresi olan SRAM bellek hücrelerinden oluşturuldu. İlk önbellekler işlemcinin dışındaydı ve tipik olarak, isteğe bağlı bir ekstra veya yükseltme özelliği olarak önbelleği etkinleştirmek için yuvalara yerleştirilmiş sekiz veya dokuz DIP aygıtı biçiminde ana kartta bulunuyordu .

Intel 386 işlemcinin bazı sürümleri, 16 ila 256 KB harici önbelleği destekleyebilir.

486 işlemci ile 8 KB'lik bir önbellek doğrudan CPU kalıbına entegre edildi. Bu önbelleğe, daha yavaş anakart üzerindeki veya Düzey 2 (L2) önbelleğinden ayırt etmek için Düzey 1 veya L1 önbellek adı verildi. Bu anakart üzerindeki önbellekler çok daha büyüktü ve en yaygın boyut 256 KB idi. On-anakart önbellek popülerlik boyunca devam Pentium MMX dönem ama katılmasıyla eskimiş yapıldığı SDRAM ve sadece biraz ana bellekten daha hızlı olması için on-anakart cache neden veriyolu saat oranları ve CPU saat oranları arasındaki artan ayrılık.

x86 mikroişlemcilerinde önbellek uygulamasındaki sonraki gelişme , ikincil önbelleği mikroişlemciyle aynı pakete getiren ve mikroişlemciyle aynı frekansta saat hızına sahip Pentium Pro ile başladı .

Anakart üzerindeki önbellekler , daha önce Intel tarafından anakart üstü önbelleklerle kullanılan Soket 7'yi kullanan AMD K6-2 ve AMD K6-III işlemciler sayesinde uzun süre popülerlik kazandı . K6-III, 256 KB on-die L2 önbelleği içeriyordu ve L3 adlı üçüncü seviye bir önbellek olarak yerleşik önbelleğin avantajından yararlandı (2 MB'a kadar yerleşik önbelleğe sahip anakartlar üretildi). Soket 7'nin modası geçtikten sonra, x86 sistemlerinden anakart üzerindeki önbellek kayboldu.

Üç seviyeli önbellekler, ilk olarak, L3 önbelleğinin CPU kalıbına eklendiği çoklu işlemci çekirdeğinin tanıtılmasıyla tekrar kullanıldı. Yeni işlemci nesillerinde toplam önbellek boyutlarının giderek daha büyük olması yaygınlaştı ve son zamanlarda (2011 itibariyle) onlarca megabaytlık Düzey 3 önbellek boyutlarını bulmak nadir görülen bir durum değil.

Intel , Haswell mikro mimarisi ile bir Seviye 4 paket önbelleği tanıttı . Intel'in entegre Iris Pro grafiklerinin GT3e varyantı ile donatılmış Crystalwell Haswell CPU'ları, aynı paket üzerinde etkin bir şekilde 128 MB gömülü DRAM ( eDRAM ) içeriyor . Bu L4 önbelleği, yerleşik GPU ve CPU arasında dinamik olarak paylaşılır ve CPU'nun L3 önbelleğine kurban önbelleği olarak hizmet eder .

ARM mikroişlemcilerinde

Apple M1 CPU, çekirdek tipine bağlı olarak her çekirdek için 128 veya 192 KB talimat L1 önbelleğine sahiptir (gecikme/tek iş parçacığı performansı için önemlidir), yalnızca bir dizüstü bilgisayar için değil, herhangi bir CPU türünün L1 önbelleği için alışılmadık derecede büyük, toplam önbellek ise bir dizüstü bilgisayar için bellek boyutu alışılmadık derecede büyük değildir (toplam verim için daha önemlidir), ve IBM'in ana bilgisayarlarında çok daha büyük toplam boyutlar (örneğin L3 veya L4) mevcuttur.

Mevcut araştırma

İlk önbellek tasarımları, tamamen önbellek ve RAM'in doğrudan maliyetine ve ortalama yürütme hızına odaklandı . Daha yeni önbellek tasarımları ayrıca enerji verimliliği , hata toleransı ve diğer hedefleri de dikkate alır .

Önbellek döngü süresi, enerji ve alan arasındaki ödünleşimleri keşfetmeye yardımcı olmak için bilgisayar mimarlarının kullanabileceği çeşitli araçlar vardır; CACTI önbellek simülatörü ve SimpleScalar komut seti simülatörü iki açık kaynak seçeneğidir.

Çok bağlantı noktalı önbellek

Çok bağlantı noktalı önbellek, aynı anda birden fazla isteğe hizmet edebilen bir önbellektir. Geleneksel bir önbelleğe erişirken normalde tek bir bellek adresi kullanırız, oysa çok bağlantı noktalı bir önbellekte bir seferde N adres isteyebiliriz - burada N, işlemci ve önbellek aracılığıyla bağlanan bağlantı noktası sayısıdır. Bunun yararı, ardışık düzendeki bir işlemcinin, işlem hattındaki farklı aşamalardan belleğe erişebilmesidir. Diğer bir faydası ise, farklı önbellek seviyeleri aracılığıyla süper-skaler işlemciler kavramına izin vermesidir.

Ayrıca bakınız

Notlar

Referanslar

Dış bağlantılar