Önbelleklerin ve önbelleğe almanın geliştirilmesi, bilgi işlem tarihindeki en önemli olaylardan biridir. ARM Cortex-A5 gibi ultra düşük güçlü yongalardan en üst düzey Intel Core i9’a kadar neredeyse her modern CPU çekirdeği önbellek kullanır. Üst düzey mikrodenetleyiciler bile genellikle küçük önbelleklere sahiptir veya bunları seçenek olarak sunar. Performans avantajları, ultra düşük güçlü tasarımlarda bile göz ardı edilemeyecek kadar büyüktür.
Önbelleğe alma, önemli bir sorunu çözmek için icat edildi. Bilgi işlemin ilk yıllarında, ana bellek son derece yavaştı ve inanılmaz derecede pahalıydı, ancak CPU’lar da özellikle hızlı değildi. 1980’lerden başlayarak, boşluk hızla genişlemeye başladı. Mikroişlemci saat hızları yükseldi, ancak bellek erişim süreleri çok daha az önemli ölçüde iyileşti. Bu boşluk büyüdükçe, boşluğu kapatmak için yeni bir tür hızlı belleğe ihtiyaç olduğu giderek daha açık hale geldi.
Yalnızca 2000 yılına kadar çalışsa da, 1980’lerin artan tutarsızlıkları, ilk CPU önbellekleri.
Önbelleğe Alma Nasıl Çalışır
CPU önbellekleri, CPU’nun daha sonra ihtiyaç duyacağı bilgileri depolayan küçük bellek havuzlarıdır.
Önbellek sisteminin amacı, CPU’nun ihtiyaç duyacağı bir sonraki veri bitinin, aramaya başladığında önbelleğe yüklenmiş olmasını sağlamaktır (önbellek isabeti de denir).
Bir önbellek özledim ise, CPU’nun verileri başka bir yerde bulmak için acele etmesi gerektiği anlamına gelir. L2 önbelleği burada devreye giriyor – daha yavaş olsa da çok daha büyük. Bazı işlemciler kapsayıcı bir önbellek tasarımı kullanır (yani L1 önbelleğinde depolanan veriler L2 önbelleğinde de çoğaltılır), diğerleri özeldir (yani iki önbellek hiçbir zaman veri paylaşmaz). Veriler L2 önbelleğinde bulunamazsa, CPU zinciri L3’e (tipik olarak hala devrede), ardından L4’e (varsa) ve ana belleğe (DRAM) kadar devam eder.
< /p>
Bu grafik, sabit isabet oranına sahip bir L1 önbelleği, ancak daha büyük bir L2 önbelleği arasındaki ilişkiyi gösterir. L2’nin boyutu arttıkça toplam isabet oranının keskin bir şekilde arttığına dikkat edin. Daha büyük, daha yavaş ve daha ucuz bir L2, büyük bir L1’in tüm avantajlarını sağlayabilir, ancak kalıp boyutu ve güç tüketimi cezası olmadan. Çoğu modern L1 önbellek oranları, burada gösterilen teorik yüzde 50’nin çok üzerinde isabet oranlarına sahiptir – Intel ve AMD’nin her ikisi de tipik olarak yüzde 95 veya daha yüksek önbellek isabet oranlarına sahiptir.
Bir sonraki önemli konu, küme ilişkilendirilebilirliğidir.
RAM etiketi, herhangi bir önbellek bloğuna eşlenebilen tüm bellek konumlarının bir kaydıdır. Bir önbellek tamamen ilişkilendirilebilirse, bu, herhangi bir RAM veri bloğunun herhangi bir önbellek bloğunda saklanabileceği anlamına gelir. Böyle bir sistemin avantajı, isabet oranının yüksek olması, ancak arama süresinin son derece uzun olmasıdır – CPU’nun, ana bellekte arama yapmadan önce verilerin mevcut olup olmadığını öğrenmek için tüm önbelleğini gözden geçirmesi gerekir.
Spektrumun diğer ucunda, doğrudan eşlenmiş önbelleklerimiz var. Doğrudan eşlenmiş önbellek, her önbellek bloğunun bir ve yalnızca bir ana bellek bloğu içerebildiği bir önbellektir. Bu tür önbellek son derece hızlı bir şekilde aranabilir, ancak 1:1 bellek konumlarına eşlendiğinden, düşük bir isabet oranına sahiptir. Bu iki uç arasında n-yollu ilişkisel önbellekler bulunur. 2 yönlü bir ilişkisel önbellek (Piledriver’ın L1’i 2 yönlüdür), her bir ana bellek bloğunun iki önbellek bloğundan biriyle eşlenebileceği anlamına gelir. Sekiz yollu ilişkisel önbellek, ana belleğin her bloğunun sekiz önbellek bloğundan birinde olabileceği anlamına gelir. Ryzen’in L1 talimat önbelleği 4 yollu ilişkiseldir, L1 veri önbelleği ise 8 yönlü küme ilişkiseldir.
Sonraki iki slayt, küme ilişkilendirilebilirliği ile isabet oranının nasıl arttığını gösterir. İsabet oranı gibi şeylerin oldukça özel olduğunu unutmayın — farklı uygulamaların farklı isabet oranları olacaktır.
Cache-HitRate1.png>Neden CPU Önbellekleri Büyüyor
Öyleyse neden ekleyelim? ilk etapta sürekli daha büyük önbellekler? Çünkü her ek bellek havuzu, ana belleğe erişim ihtiyacını geri iter ve belirli durumlarda performansı iyileştirebilir.
Her merdiven basamağı yeni bir önbellek seviyesini temsil eder. Kırmızı çizgi, L4’lü çiptir. Büyük dosya boyutları için, diğer iki Intel çipinden neredeyse iki kat daha hızlı olduğunu unutmayın.
Öyleyse, çok büyük miktarda bellek ayırmak mantıklı görünebilir. -die kaynakları önbelleğe almak için – ancak bunu yapmak için azalan bir marjinal getiri olduğu ortaya çıktı. Daha büyük önbellekler hem daha yavaş hem de daha pahalıdır. SRAM (6T) biti başına altı transistörde önbellek de pahalıdır (kalıp boyutu ve dolayısıyla dolar maliyeti açısından). Belli bir noktayı geçtikten sonra, çipin güç bütçesini ve transistör sayısını daha fazla yürütme birimine, daha iyi şube tahmini veya ek çekirdeklere harcamak daha mantıklı. Hikayenin en üstünde Pentium M (Centrino/Dothan) çipinin bir görüntüsünü görebilirsiniz; kalıbın sol tarafının tamamı büyük bir L2 önbelleğine ayrılmıştır. Tek iş parçacıklı CPU’ların son günlerinde durum böyleydi, artık çok çekirdekli yongalarımız ve çoğu durumda GPU’larımız hazır olduğundan, genel CPU’nun daha küçük bir yüzdesi önbelleğe ayrılmıştır.
Önbellek Tasarımı Performansı Nasıl Etkiler
Bir CPU önbelleği eklemenin performansa etkisi, verimliliği veya isabet oranıyla doğrudan ilişkilidir; tekrarlanan önbellek kayıplarının CPU performansı üzerinde feci bir etkisi olabilir.
L1 önbelleğinde 1ns erişim gecikmesi ve yüzde 100 isabet oranı vardır. Bu nedenle, bu işlemi gerçekleştirmek CPU’muzun 100 nanosaniyesini alır.
Haswell-E kalıp çekimi (yakınlaştırmak için tıklayın). Çipin ortasındaki tekrarlayan yapılar, 20MB’lık paylaşılan L3 önbelleğidir.
Şimdi, önbelleğin yüzde 99’luk bir isabet oranına sahip olduğunu varsayalım, ancak CPU’nun aslında 100. erişimi için ihtiyaç duyduğu veriler L2’de oturuyor. , 10 döngü (10ns) erişim gecikmesi ile. Bu, CPU’nun ilk 99 okumayı gerçekleştirmesi için 99 nanosaniye ve 100. okumayı gerçekleştirmek için 10 nanosaniye sürmesi gerektiği anlamına gelir. İsabet oranındaki yüzde 1’lik bir azalma, CPU’yu sadece yüzde 10 yavaşlattı.
Gerçek dünyada, bir L1 önbelleğinin genellikle yüzde 95 ile 97 arasında bir isabet oranı vardır, ancak bu ikisinin performans üzerindeki etkisi basit örneğimizdeki değerler yüzde 2 değil – yüzde 14. Unutmayın, kaçırılan verilerin her zaman L2 önbelleğinde olduğunu varsayıyoruz. Veriler önbellekten çıkarıldıysa ve 80-120ns erişim gecikmesiyle ana bellekte bulunuyorsa, yüzde 95 ile 97 isabet oranı arasındaki performans farkı, kodu yürütmek için gereken toplam süreyi neredeyse iki katına çıkarabilir.
AMD’nin Bulldozer ailesi Intel’in işlemcileriyle karşılaştırıldığında, önbellek tasarımı ve performans etkisi konusu çok fazla gündeme geldi.
Her Bulldozer/Piledriver/Steamroller modülü, aşağıda gösterildiği gibi L1 talimat önbelleğini paylaştı:
İki farklı iş parçacığı aynı belleğe veri yazarken ve üzerine yazarken bir önbellek sorunu oluşur Uzay. Her iki iş parçacığının performansına zarar verir – her çekirdek kendi tercih ettiği verileri L1’e yazmak için zaman harcamak zorunda kalır, ancak diğer çekirdek bu bilgilerin hemen üzerine yazar. AMD’nin eski Steamroller’ı, AMD L1 kod önbelleğini 96KB’ye çıkarmasına ve iki yerine üç yönlü ilişkilendirme yapmasına rağmen hala bu sorundan etkileniyor. Daha sonra Ryzen CPU’lar bu şekilde önbelleği paylaşmazlar ve bu sorundan muzdarip olmazlar.
Anandtech’ten görüntü
Bu grafik, Opteron 6276’nın (orijinal bir Buldozer) isabet oranının nasıl olduğunu gösterir. işlemci) en azından bazı testlerde her iki çekirdek de etkinken düştü. Ancak açıkçası tek sorun önbellek çekişmesi değil — 6276, tarihsel olarak, her iki işlemci de eşit isabet oranlarına sahipken 6174’ten daha iyi performans göstermek için mücadele etti.
Zen 2’nin bugün bu tür zayıflıkları yok ve Zen ve Zen 2’nin genel önbellek ve bellek performansı, eski Piledriver mimarisinden çok daha iyidir.
AMD’nin ilk Ryzen çıkışından.
AMD ve Intel bu tür önbelleği kullanır; Zen 2.048 µOP önbelleğe sahipken, Zen 2 4.096 µOP önbelleğe sahiptir. Bu küçük önbellek havuzları, L1 ve L2 ile aynı genel ilkeler altında çalışır, ancak CPU’nun L1’den daha düşük gecikmelerde erişebileceği daha da küçük bir bellek havuzunu temsil eder. Çoğu zaman şirketler bu yetenekleri birbirlerine göre ayarlayacaktır. Zen 1 ve Zen+ (Ryzen 1xxx, 2xxx, 3xxx APU’lar), 4 yönlü küme ilişkisel olan 64KB L1 talimat önbelleğine ve 2.048 µOP L0 önbelleğe sahiptir. Zen 2 (Ryzen 3xxx masaüstü CPU’ları, Ryzen Mobile 4xxx), 8 yollu küme ilişkisel olan 32KB L1 talimat önbelleğine ve 4.096 µOP önbelleğe sahiptir. Ayarlanan ilişkilendirilebilirliği ve µOP önbelleğinin boyutunu ikiye katlamak, AMD’nin L1 önbelleğinin boyutunu yarıya indirmesine izin verdi. Bu tür değiş tokuşlar CPU tasarımlarında yaygındır.
Geleceğin Yenilikleri
IBM kısa süre önce ilginç ve sıra dışı bir önbellek yapısıyla Telum mikroişlemcisini piyasaya sürdü. Telum normal L1 ve L2’ye sahiptir, ancak fiziksel bir L3 yerine CPU sanal bir L3 dağıtır. Yeni nesil CPU, CPU’nun artık ihtiyaç duymadığına inandığı L2 verilerini tamamen çıkarmak yerine, aynı silikon dilimi üzerindeki farklı bir CPU’nun L2 önbelleğine çıkarır ve L3 verileri olarak işaretler.
IBM, bu yeteneği çok çipli sistemler arasında bile paylaşabilir ve toplam 8192 MB veri depolamaya sahip sanal bir L4 oluşturabilir.
Bu tür sanal önbellek sistemi benzersizdir – öyle değil denklemin x86 tarafında bir eşdeğeri var – ve bu, şirketlerin önbellek tasarımının sınırlarını nasıl zorladığının ilginç bir örneği. AMD’nin V-Önbelleği, L2 yerine ek L3 sağlamak için tasarlanmış olsa da, bundan hiç bahsetmemeyi ihmal ederiz. AMD’nin son başarısı ve gelecekteki Zen CPU’larda ortaya çıkması beklenen bir yetenek, mevcut yongaların üzerine dikey olarak monte edilen ve onlara kalıp içi silikon yoluyla bağlanan büyük bir L3 önbellektir. Önbellek şu anda 40 yaşında olabilir, ancak üreticiler ve tasarımcılar hala onu geliştirmenin ve faydasını genişletmenin yollarını buluyor.
Önbelleğe Alma
Önbellek yapısı ve tasarımı hala iyi durumda. -Araştırmacılar daha küçük önbelleklerden daha yüksek performans elde etmenin yollarını aradıkça ayarlandı. Şimdiye kadar, Intel ve AMD gibi üreticiler, daha büyük önbellekler için önemli ölçüde zorlamadı veya tasarımları L4’e kadar götürmedi.
Bu yüzden CPU daha eski olmasına rağmen yukarıdaki Haswell örneğini kullandık. Muhtemelen, büyük bir L4 önbelleğin faydaları, çoğu kullanım durumu için maliyetlerden daha ağır basmıyor.
Her ne olursa olsun, önbellek tasarımı, güç tüketimi ve performans, gelecekteki işlemcilerin performansı için kritik öneme sahip olacak ve önemli mevcut tasarımlardaki iyileştirmeler, hangi şirketin bunları uygulayabildiğinin durumunu artırabilir.
Şimdi Okuyun:
Şimdiye Kadar Yapılan En Kötü CPU’larOrijinal Intel 8086’nın 40. Yıldönümü Moore Yasası
Ayrıca, günümüzün en popüler teknoloji konularını daha derinlemesine incelemek için ExtremeTech Açıklamaları serimize de göz atın.
.