Ana içeriğe geç

CPU Önbelleği

İngilizcesi
CPU Cache
Türkçe karşılığı
işlemci önbelleği
Okunuşu
si-pi-yu keş

Günlük kullanımda iki ad da yaygın.

Güncellendi 2 dk okuma

Bu sayfayı paylaşın

Bağlantıyı gönderin, tanımı bağlantısıyla birlikte alıntılayın ya da kendi sitenizde bir kart olarak gösterin.

https://softwaredictionary.org/tr/terimler/cpu-cache

Kısaca

CPU önbelleği, işlemcideki küçük ve çok hızlı bir bellektir; RAM'den yakın zamanda kullanılan verinin kopyalarını tutar, böylece CPU belleği daha az bekler.

CPU önbelleği (CPU cache) nedir?

Ana bellek modern bir CPU'dan çok daha yavaştır: RAM'den bir değer getirmek yaklaşık 100 nanosaniye sürebilir, bu yüzlerce komut için yeterli bir süredir. CPU önbelleği, işlemcinin içine yerleşik, CPU'nun yakın zamanda kullandığı ya da bir sonraki adımda ihtiyaç duyacağı verinin ve komutların kopyalarını tutan küçük miktarda çok hızlı bellektir.

Önbellekler seviyeler halinde düzenlenir: L1 en küçük ve en hızlı olandır, çekirdek başına on kilobaytlar düzeyindedir ve komut ile veri önbelleklerine ayrılır; L2 daha büyük ve biraz daha yavaştır; genellikle onlarca megabayt olan L3 ise tüm çekirdekler tarafından paylaşılır. Veri, bellek ile önbellek arasında tipik olarak 64 bayt olan cache line denen sabit boyutlu bloklar halinde hareket eder. CPU ihtiyaç duyduğunu önbellekte bulursa buna cache hit denir; bulamazsa cache miss, satırı bir sonraki seviyeden ya da RAM'den getirmeye zorlar. Önbellekler, programların yakın zamanda kullanılan veriyi yeniden kullanma ve yakın adreslere erişme eğiliminde olması sayesinde işe yarar; çok çekirdekli yongalar da her çekirdeğin güncel değerleri görmesi için bir tutarlılık (coherence) protokolü kullanır.

Bir kütüphanedeki masayı düşünün. Kullandığınız kitaplar masanızda (L1), birkaçı yakındaki bir arabada (L2), okuma salonunun rafı daha fazlasını tutar (L3) ve bodrumdaki depo RAM'dir. CPU önbelleğinin günlük kod için önemli olmasının nedeni budur: bir diziyi sırayla dolaşmak, belleğe dağılmış bir bağlı listedeki işaretçileri izlemekten çok daha hızlıdır ve aynı cache line üzerindeki farklı değişkenlere yazan iki thread birbirini yavaşlatabilir; bu soruna false sharing denir.

CPU önbelleği çoğu zaman bir veritabanının önündeki bellek içi önbellek ya da HTTP önbelleği gibi uygulama önbelleğiyle karıştırılır. İkisi de veriyi ihtiyaç duyulan yere daha yakın tutar, ancak CPU önbelleği donanım tarafından otomatik olarak yönetilir ve nanosaniye ölçeklerinde çalışır; yazılım önbellekleri ise ne zaman geçersiz kılacağına karar vermesi gereken kodunuz tarafından yönetilir. CPU yazmaçları ise yine farklıdır: çekirdeğin içinde, daha da küçük ve hızlı depolamadır.

Önemli noktalar

  • CPU önbelleği, işlemcide RAM'deki verinin kopyalarını tutan hızlı bellektir.
  • Önbellekler seviyelidir: L1 en küçük ve en hızlı, L3 en büyük ve paylaşımlıdır.
  • Veri, tipik olarak 64 bayt uzunluğundaki cache line'lar halinde hareket eder.
  • Sıralı, öngörülebilir bellek erişimi önbelleği en iyi şekilde kullanır.
  • Uygulama düzeyindeki önbelleklerin aksine CPU kendi önbelleğini otomatik olarak yönetir.

Örnek

C'de aynı iş, çok farklı hızc
#define N 4096
static int grid[N][N];
long sum_rows(void) {  /* fast: reads memory in order, */
  long s = 0;          /* so every 64-byte cache line is fully used */
  for (int i = 0; i < N; i++)
    for (int j = 0; j < N; j++) s += grid[i][j];
  return s;
}

long sum_cols(void) {  /* slow: jumps 16 KB on every step, */
  long s = 0;          /* so almost every read is a cache miss */
  for (int j = 0; j < N; j++)
    for (int i = 0; i < N; i++) s += grid[i][j];
  return s;
}

Sık sorulan sorular

L1, L2 ve L3 önbelleği arasındaki fark nedir?

Bunlar boyutu hızla takas eden önbellek seviyeleridir. L1 en küçük ve en hızlı olandır ve tek bir çekirdeğe aittir, L2 daha büyük ve biraz daha yavaştır, L3 ise en büyük ve en yavaş önbellek seviyesidir ve genellikle tüm çekirdekler tarafından paylaşılır.

Cache miss nedir?

Cache miss, CPU'nun ihtiyaç duyduğu veri önbellekte olmadığında gerçekleşir; bu yüzden daha yavaş bir önbellek seviyesinden ya da RAM'den getirilmesi gerekir. Sık cache miss'ler bir programı birkaç kat yavaşlatabilir.

CPU önbellek boyutu önemli mi?

Etkin verisi neredeyse önbelleğe sığan oyunlar, veritabanları ve bilimsel kod gibi iş yükleri için önemlidir. Daha büyük önbellek RAM'e daha az gidiş anlamına gelir, ancak koddaki erişim örüntüleri çoğu zaman ham boyuttan daha önemlidir.

İlgili sayfalar

Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin

Daha fazla

Ayarlar