BİLGİSAYAR MİMARİLERİ 5.Hafta: Bellek Hiyerarşisi-3 Doç.Dr. Ahmet ÖZMEN Sakarya Üniversitesi Bilgisayar Mühendisliği Bölümü
Ders Planı Özet (Ön bellek ile ilgili 4 temel soru) Blok tanımlama Blok yerleştirme (replacement) Blok yazma politikası Ön bellek miss sebeplerinin sınıflandırılması AMAT hesabı Örnekler
Özet Soru 1: Veri bloğu üst seviyede nereye konulabilir? Blok yerleştirme (placement) Soru 2: Aranan blok üst seviyede değilse, nasıl bulunacak? Blok tanımlama Soru 3: Miss durumunda hangi blok değiştirilecek? Üzerine yazılacak blok seçimi (blok re-placement) Soru 4: Yazma işlemi nasıl yapılacak? Yazma stratejisi
Blok tanımlama Her blok bellekte konumunu belirleyen bir adres etiketi “tag” barındırır. Aranılan adres içindeki kısım ile etiket eşleşirse “hit” oluşur. Karşılaştırma donanımda yapılır. Ön bellek bloğu tamamen boş ise ne olacak? Bu durum “valid bit” ile belirlenir (blok boşsa 0)
Blok tanımlama (devam) Set associative: Associativity artarsa index için ayrılan bit sayısı azalır, “tag” artar Associative ön bellek: Index yok, “tag” = “blok adres”
Direk-map ön bellek tasarımı
Direk-map ön bellek tasarımı
Set-asociative ön bellek tasarımı Temel fikir: Ön belleği kümelere ayır Blok set içinde herhangi bir yerde olabilir Avantaj: Yüksek hit oranı Dezavantaj: Fazla “tag” biti Fazla donanım Yüksek erişim süresi
Fully associative ön bellek tasarımı Temel fikir: Küme boyutu 1 blok. Her blok için bir karşılaştırıcı devre gerekiyor Adres kod çözücü yok Aşırı derecede donanım gerektirdiği için, pratik olarak sadece küçük ön-belleklerde kullanılabilir
Ön bellek içindeki bit’lerin miktarı 32 bitlik zahiri adres olduğunu düşünelim. 64 Kbyte veri tutabilecek bir direk-map ön bellek ve bir word blok boyutu verildiğinde, toplam kaç bitlik bellek gerekirdi. Aynı ön bellek eğer 4-way set associative ön bellek olarak tasarlanmak istenseydi, toplamda kaç bitlik bir belleğe ihtiyaç olurdu? Her bir blok içinde 8-word barındıran 64 Kbyte’lık direk-map bir ön bellek için (32 bitlik zahiri adres ) toplam kaç bitlik bir bellek gerekirdi?
Ön bellek içindeki bit’lerin miktarı 1. Soru: 2. Soru:
Ön bellek içindeki bit’lerin miktarı 3. Soru: Associativity artarsa => ön bellekteki bit sayısı artar Blok boyutu artarsa => ön bellekteki bit sayısı azalır
Blok replacement (tekrar) Miss durumunda veri ana bellekten okunması gerekiyor Yeni gelen veri nereye konmalı? Direk map ön bellek: sabit bir bölgeye gidiyor (hep aynı yere) Set-associative, fully associative: Küme içinde herhangi bir yere Optimal algoritma: Gelecekte ihtiyaç olmayacak veriyi kaldır (geleceği bilmek gerekiyor!) LRU: Yakın zamanda kullanılmayanı kaldır (gerçeklenmesi zor!) FIFO: Önce gelen, önce gider (kümeyi dairesel bir kuyruk gibi düşünmek ve kuyruğun en önündekini atmak) Random: Rastgele seçim (en kolay gerçeklenebilir yöntem)
Yazma stratejisi Yazma durumunda ne olacak? Özel durumlar: Write through: Belleğe yaz, iş bitinceye kadar işlemciyi beklet. Write buffer: Yazılacak veriyi bir buffer’a koy. CPU bekleme yapmadan işine devam edebilir Write back: Belleğe yazma işini, blok ön bellekten kaldırılıncaya (replace) kadar geciktir. Özel durumlar: DMA kullanılıyorsa, Çoklu işlemcili sistemlerde birçok ön bellek arasında “tutarlılığın” sağlanması.
Yazma stratejisi (write-through) CPU tarafından yazma komutu icra edildiğinde; hem ön bellek ve hem de ana bellek güncellenir Ana bellek ile ön-bellek daima tutarlı WT stratejisinde genelde write-buffer kullanılır, bu şekilde alt seviye bellek (ana bellek) beklenmez.
Write back İşlemci tarafından yazmalar, sadece ön bellek satırını günceller Güncellenen satır sadece ön-bellekten kaldırılması gerektiği zaman (yeni gelen için yer arandığında seçilenin bu olması durumunda) bir alt düzey belleğe yazılır. Her satır için «dirty bit» olması gerekir, öyle ki; blok modifiye edildiğinde set edilmeli Böylece ön-bellek satırının güncel olmadığı anlaşılır Bellek her zaman güncel değil Tekrarlanan yazmaların her seferinde alt seviyeye yazılması gerekmiyor
Store miss Write allocate: No-write allocate: Yazılacak blok ön belleğe getirilir Bloktaki word güncellenir Blok gelecekte de kullanılabilir No-write allocate: Ana bellek güncellenir Ön bellek güncellenmez, kopya varsa iptal edilir
Ön bellek temelleri (özet, tekrar) Ön bellek: CPU ile ana bellek arasında geçici bellek katmanıdır. Zamanda lokallik prensibinden hareketle toplam bellek erişimini hızlandırır Ön bellek kümelere bölünmüştür; her küme içinde ana bellekteki verilerin bir kısmını barındırır Ön bellek parametreleri: Ön bellek boyutu, blok boyutu, associativity 3 tür ön bellek (w/n blok): Direk map: n küme, her kümede 1 blok var Fully associative: 1 küme, bu kümede n adet blok var Set associative: n/m küme, her kümede m blok var
Ön bellek temelleri (özet, tekrar)
Ön bellek performansının arttırılması Ön belleğin ve bellek erişim performansının arttırılması: Ön bellek performansı: 1. Miss oranın azaltılması ile, 2. Miss cezasının azaltılması ile veya, 3. Hit zamanın azaltılması ile; arttırılabilir.
Miss’lerin sınıflandırılması Zorunlu (compulsory): Ön belleğe ilk erişimde blok yoktur ve getirilmek zorundadır. Buna «cold start misses» de denir. Bellek boyutu sonsuz bile olsa, bu tür miss olur Kapasite: Program icrası sırasında ihtiyaç duyulan tüm blokları ön-bellek barındıramıyorsa oluşan miss’lere «kapasite miss» denir. Çakışma (conflict): Eğer blok yerleştirme algoritması direk-map ya da set-associative ise (zorunlu ve kapasite miss’lerinin yanında bir de) çakışma miss’leri oluşur.
3 miss sebebi
3 miss sebebi (%100 içinde)
Miss oranı nasıl azaltılır? 3 C’ler: Compulsory, capacity, conflict Tüm durumlarda ön bellek boyutu değişmesin Aşağıdaki durumları değerlendirelim: Blok boyutu değiştirilirse: Hangi «C» bu durumdan etkilenir? Associativity değiştirilirse: Derleyici değiştirilirse:
1. Blok boyutu değiştirilirse? Lokallik prensibinden; daha büyük blok, kullanılacak kısımları bulundurma şansını arttırır.
1 Blok boyutu değiştirilirse? Blok boyutunun arttırılması miss oranını azaltır: Yerllik (lokallik) avantajı artıyor Zorunlu (Compulsary) misleri azaltıyor Ancak; Miss cezası artabilir (daha çok veri getirilmeli) Hit zamanı artabilir (ön bellekten daha fazla veri okunmalı ve büyük mux kullanılmalı) Conflict miss’ler nedeniyle toplam miss oranı artabilir Blok boyutunun arttırılması yardım edebilir fakat abartılmamalıdır. Blok boyutunun arttırılması genelde miss oranını azaltır, fakat miss cezası artar
2 Yüksek associativity Associativity’nin arttırılması çakışma (conflict) miss’lerinin azalmasına yardımcı olur. 2:1 kuralı: N boyutundaki direk-map ön belleğin miss oranı, yaklaşık yarı boyuttaki 2-way set associative ön belleğin miss oranına eşittir. Örneğin; 32 Kbyte direk map bir önbelleğin miss oranı, yaklaşık 16 Kbyte 2-way set associative ön belleğin miss oranına eşittir. Yüksek associativitenin dezavantajları: Çok fazla sayıda karşılaştırma yapılması gerekli N to 1 mux gerekli Hit zamanını arttırabilir
AMAT vs Associativity Kırmızı yerlerde associativity ile AMAT iyileşmemiş
Multilevel ön bellek Eğer direk-map bir ön bellek %95 hit oranına sahipse ve hit zamanı 4 ns, miss cezası ise 100 ns ise AMAT nedir? AMAT = Hit time + miss oranı X miss cezası = 4 + 0.05 x 100 = 9 ns. Eğer, hit zamanı 20 ns olan ve hit oranı %50 olan bir L2 ön bellek ilave edilse, yeni AMAT ne olur? AMAT = Hit zamanıL1 + miss oranıL1 X (Hit zamanıL2+miss oranıL2 X miss cezasıL2) = 4 + 0.05 X (20 + 0.5 X 100) = 7.5 ns
Örnek: Hit zamanı 5 ns ve miss cezası 100 ns olan ön bellek 2-way set associative olsun. Hit oranı %97 olduğuna göre AMAT ? AMAT = Hit zamanı + miss oranı X miss cezası = 5 + 0.03 X 100 = 8 ns. Bir işlemci 200 MHz ‘de çalışıyor (5 ns saat çevrim süresi) ve ideal CPI = 1.1 olsun (hiç miss olmadığı zaman). Komutların dağılımı (instruction mix): %50 ALU, %30 ld/st, %20 kontrol (dallanma) buna göre, %10 bellek verileri 50 çevrim miss cezası alıyor, Komutların %1’i aynı miss cezasını alıyor kabul edin. Buna göre AMAT?
Örnek: CPI = ideal CPI + ortalama komut başına stalls (boş çevrimler) CPI = 1.1 (cycle/inst) + [0.30(veriBellekKomut) X 0.10 (miss/veriBellekKomut) X 50 (çevrim/miss)] + [ 1 (komutBellek/komut) X 0.01 (miss / komutBellekKomut) X 50 (çevrim/miss)] = = (1.1 + 1.5 + 0.5) = 3.1 çevrim/komut AMAT = (1/1.3) X [1 + 0.01 X 50] + (0.3/1.3) X [1+0.1X50] = 2.54
Tümleşik & Ayrık ön bellek Örnek: 16 Kb I&D: ins. miss oranı = %0,64, data miss oranı = %6.47 32 Kb tümleşik, miss rate = %1.99 L2 görmezden gelinirse hangisi daha iyidir? %33 data işlemi olsun => %75 erişimkomutlardan (1.0 /1.33) Hit zamanı = 1, miss cezası = 50 Not: tümleşik ön bellek için data hit 1 stall (sadece tek portu var)
Tümleşik & Ayrık ön bellek