CPU önbellek neden bu kadar hızlı?


58

CPU önbelleğini ana bellekten daha hızlı yapan şey nedir? Katmanlı bir önbellek sisteminde bazı avantajlar görebiliyorum. Daha küçük bir önbellek aramak daha hızlı olduğu anlamına gelir. Ama daha fazlası olmalı.


2
Ana hafıza ile ne demek istiyorsun ?
marcocs

1
@ marcocs netlik için düzenlenmiş. CPU önbellek hafızasına ve ana sistem belleğine, yani çoğu anakarttaki çıkarılabilir kısmalara atıfta bulunuyorum.
ConditionRacer


2
@ratchetfreak Uh ... OP açıkça kesin bir neden istiyor, nihai bir neden değil.
Kyle Strand

1
Vay, bilgisayar mühendisliği diplomamı kullanacağımı hiç düşünmedim. Kabul edilen cevap gerçekten bir cevap değil. İşlemci önbelleğinin çok daha yüksek bir saat hızında (CPU saat hızı, 4GHz civarında), ana hafıza veriyolu saat hızında (1600MHz civarında) çalıştığından dolayıdır. Sadece bu değil, aynı zamanda CPU önbellek 4 saat döngüsünde okuyabilir, ancak sistem RAM'i 100 sistem saat döngüsü alabilir. Ayrıca, sistem belleği, disk veya ağ gibi diğer çevre birimlerle çelişirken CPU önbellek özeldir. Kablo ne kadar uzun olursa, çalışabildiği saat hızı o kadar yavaş olur. tinyurl.com/zkdsstd
Chloe,

Yanıtlar:


115

Bir CPU önbelleği durumunda, daha hızlıdır çünkü işlemciyle aynı kalıptadır. Başka bir deyişle, istenen verilerin işlemciye aktarılması gerekmez; zaten orada.

Sabit sürücüdeki önbellek durumunda, daha hızlıdır çünkü katı halde bellektedir ve hala dönen plakalarda değildir.

Bir web sitesindeki önbellek durumunda, veriler daha önce veritabanından alındığı için daha hızlıdır (bazı durumlarda dünyanın herhangi bir yerinde bulunabilir).

Bu yüzden çoğunlukla, yerellik hakkında . Önbellek veri aktarma adımını ortadan kaldırır .

Yerellik, zaman içinde veya uzayda "birbirine yakın" olan verileri söylemenin süslü bir yoludur. Daha küçük, daha hızlı (ancak genellikle daha pahalı) bir bellekle önbellekleme çalışır, çünkü genel olarak göreceli olarak küçük miktarda bir veri en az erişilen veridir.

Wikipedia'da Daha Fazla Okuma
Önbelleği (Bilgi İşlem)


29
Bence bu iyi bir cevap. Ancak, önbelleğe alınacak maliyet hiyerarşisinin de var olduğunu eklemeye değer olabilir: ağ depolama, yerel bir sabit sürücüden daha ucuzdur; RAM'den daha ucuzdur, CPU'da önbellekten çok daha ucuzdur. Eğer böyle olmasaydı sadece 120GB hafızaya sahip CPU'ları hazırlar ve işini bitirirdik.
Charles E. Grant,

1
@ConditionRacer: Aynı sebepler. L1 daha hızlı, ancak daha pahalı, bu nedenle size biraz çok pahalı L1 ve daha az pahalı ama daha yavaş L2 veriyorlar. Ayrıca bkz. Stackoverflow.com/questions/3699582/…
Robert Harvey

9
"Neden L1 hızlı L2 daha" - Soru Programmers.SE için konu dışı olur ve Electronics.SE üzerinde sorulmalıdır
mattnz

5
@ConditionRacer IIRC, belleği uygulamak için kullanılan teknolojiyle ilgilidir. Sanırım L2 çipli DRAM, oysa L1 SRAM ya da onun gibi bir şey; çok daha pahalı, ama çok daha hızlı. CPU tasarımı üzerinde çalıştığımdan bu yana 10 yıl geçti…
Donal Fellows,

4
@ CharlesE.Grant: Maliyet hiyerarşisi iyi bir örnek olsa da, 120 GB'lık çip önbellek olmamasının başka bir nedeni daha var: daha büyük belleğe hitap etmek için daha büyük adreslere ihtiyaç var, bu yüzden daha büyük talimatlar veya daha fazla CPU çevrimi gerekiyor. Bu yüzden en hızlı olmak için, kayıt sayısının nispeten küçük kalması gerekiyor. Elbette , kayıtların dışında çipli bir bellek de olabilirdi , ama en hızlı seviye küçük kalmalı, aksi halde artık bu kadar hızlı olmazdı.
vsz

33

Daha hızlı çünkü hem daha yakın hem de SRAM DRAM değil.

SRAM, DRAM'den oldukça hızlıdır ve değerler statik olarak tutulur ( S RAM'deki S ), böylece döngüleri ortadan kaldıran yenilenmeleri gerekmez. DRAM dinamiktir, minik şarj edilebilir piller gibi, pilleri düzenli olarak yeniden şarj etmeniz gerekir; böylece boşalmaz ve sıfır olurlar. Bu, bitlere vs. nasıl erişmeniz gerektiğine ek olarak döngü süresini de çalar.

İşlemci ile aynı kalıba yakın olan işlemci, gidiş dönüşü azaltır, hem L1 hem de L2, erişim açısından DRAM'den daha hızlıdır.

SRAM, DRAM'den elmaları elmalara götürmekten daha hızlıdır ve önbellekler genellikle çip veya daha yakın veya DRAM'den daha hızlı otobüslerdedir ve erişim süresini de hızlandırır.


1
SRAM ayrıca, bit başına daha fazla güç aç, bu yüzden ona radyatör eklemek zorunda kalacaksınız ve pille çalışan herhangi bir şey zarar görebilir.
9000

1
SRAM'ı büyütmenin, YOLU yavaşlattığı gerçeğinden bahsetmiyorum bile.
Darkhogg

kabul, daha fazla güç ve diğer sram göre daha yavaş. Ben sram için bit başına 4 transistör ve dram için bit başına 1 olduğunu düşünüyorum. dram, sramın eski moda mantığa dayandığı fetetteki kapasitansa dayanır. bu yüzden tüm bu transistörlere her zaman güç vermeniz ve sadece yükü periyodik olarak pompalamanız gerekmez.
old_timer

4
Önbelleklerdeki SRAM genellikle 4T değil 6T'dir. Ayrıca, SRAM (kesinlikle 6T değişkeni) daha verimlidir. DRAM'deki asıl güç yenileme döngüsüdür ve SRAM buna ihtiyaç duymaz. SRAM transistörleri anahtarlama sırasında güç çekerler, DRAM kapasitör sürekli sızıntı yapar. DRAM'ın sızdıran kapağını değiştirirseniz, EEPROM ile bitirdiniz ancak bu hızlı değil: şarjın sızması zorsa, normal yoldan çıkarmak da zor.
MSalters

@dwelch CMOS FET'ler açık veya kapalı durumdaysa gücü boşalmaz, bu nedenle güç tüketimi argümanı geçersizdir. Dahası, işlemcilerin güçlerinin çoğunu tüketmesini sağlayan CMOS mantık değiştirme sistemidir - bu, şu anki durumdaki (1 olmayan ve 0 olmayan) mevcut zirvelerdir, bu yüzden durum söylediklerinizin tersi olur :)
Ruslan

21

Açıkça belirtilmesi gereken bir şey, ışık hızının etkisidir. Gelen bu video Grace Hopper bir elektrik sinyali * Bir nanosaniye seyahat edebilirsiniz ne kadar uzakta uzun bir ayak, yaklaşık bir tel parçasını gösterir. Bir CPU 3GHz'de çalışıyorsa, bu saat devri başına 4 "mesafeye işaret eder. Bu, bellek erişim hızlarında zor bir fiziksel sınırdır. Bu, CPU'ya (L1 önbellek olduğu gibi) yakın olmanın nedeninin büyük bir parçasıdır. hafızanın daha hızlı olması için.

EDIT * aslında ışığın vakumda ne kadar uzağa gidebildiğini, bakır / silikon ile arasındaki mesafe daha azdır.


2
Bakır için zor sınır. Bu iyi bir nokta olsa da, modern işlemcilerin ne kadar gülünç derecede hızlı olduğunu düşünmedim.
ConditionRacer

@ConditionRacer Az önce bir düzeltme ekledim, 11.8 inç bir boşlukta hafif.
Matthew Finlay

2
Belleği almak için bir gidiş-dönüş yapmanız gerektiğinden bu sayıyı yarıya indirmeniz gerekir. Bu yüzden sadece vakumda gecikme döngüsü başına 10 cm değil 5 cm'dir .
KodlarInChaos

2
Ana bellek veri yolu saat (? 2000ish) birkaç yıl önce daha hızlı hale Bu doğrudan etki değil neden durduğunu ışık hızını - bu CMOS mantık sinyalleri otobüs frekanslarda artık mükemmel kare dalgalar olmamak ile ilgisi var - ama c gösterileri belirgin matematikte kadar.
zwol

5

Diğer cevaplar halihazırda tüm ilgili bitleri kapsamıştır: yerellik (ve ilgili veri transfer maliyeti, veri yolu genişliği ve saati vb.); ışık hızı (yine, transfer maliyetleri ve veri yolu genişliği ve verimi ile ilişkili); farklı bellek teknolojisi (SRAM vs.DRAM). Bütün bunlar maliyet / performans dengesi ışığında görülüyor .

Dışarıda bırakılan bir bit ve sadece Darkhogg'un yorumunda belirtildi: daha büyük önbelleklerin daha iyi isabet oranları var ancak daha uzun gecikme süresi var. Bu tradeoffu ele almak için tanıtılan çoklu önbellek seviyeleri.

Elektronik SE bu konuda mükemmel bir soru ve cevap var

Cevaplardan, bana vurgulanması gereken bir nokta olduğu anlaşılıyor: Önbellek okuması için gerekli tüm işlemleri gerçekleştiren mantık o kadar basit değil (özellikle önbellek günümüzde çoğu önbellek gibi). Kapıları ve mantığı gerektirir. Öyleyse, masrafları ekarte edip mekandan ölsek bile

Birisi gülünç derecede büyük bir L1 önbelleği uygulamaya çalışırsa, önbellek okuması için gerekli tüm işlemleri yapan mantık da büyük olacaktır. Bir noktada, tüm bu mantık boyunca yayılma gecikmesi çok uzun olacak ve önceden sadece bir saat döngüsü almış olan işlemlerin birkaç saat döngüsüne bölünmesi gerekecektir. Bu gecikmeyi artıracak.


5

Diğer cevaplarda ortaya çıkan birçok iyi nokta var, ancak bir faktör eksik görünüyor: adres çözme gecikmesi.

Aşağıdakiler, hafıza adres kod çözme işleminin nasıl yürüdüğüne dair geniş bir basitleştirmedir, ancak büyük DRAM yongalarının neden genellikle oldukça yavaş olduğu konusunda iyi bir fikir verir.

İşlemci belleğe erişmesi gerektiğinde, kullanmak istediği sözcüğü seçmek için bellek yongasına bir komut gönderir. Bu komut bir Sütun Adres Seçimi olarak adlandırılır (şimdilik satır adreslerini yok sayacağız). Bellek yongası şimdi, sütunu tüm hücrelere bağlanan tek bir yazı yazmak için adresi bir mantık geçitleri çağlayanına göndermek suretiyle istenen sütunu etkinleştirmelidir. Nasıl uygulandığına bağlı olarak, sonuç diğer sona erene kadar her adres için belirli bir gecikme süresi olacaktır. Buna hafızanın CAS gecikmesi denir. Bu bitlerin sırayla incelenmesi gerektiğinden, bu işlem bir işlemci döngüsünden çok daha uzun sürer (bu genellikle bekleyecek sırayla yalnızca birkaç transistöre sahiptir). Aynı zamanda veri yolu döngüsünden çok daha uzun sürüyor (bu genellikle bir işlemci döngüsünden birkaç kez daha yavaş). Tipik bir bellek yongası üzerindeki bir CAS komutunun 5ns (IIRC - zamanlamalara baktığımdan beri) işlemiş olması muhtemel.

Neyse ki, adresleri üç parçaya ayırırız (sütun, satır ve sıra), her bir parçanın daha küçük olmasına ve bu parçaları aynı anda işlemesine izin verir, aksi takdirde gecikme daha uzun olur.

İşlemci önbelleği, ancak, bu sorun yok. Sadece çok daha küçük değil, bu yüzden adres çevirisi daha kolay bir iş, aslında adresin küçük bir parçasından daha fazlasını çevirmek zorunda kalmayacak (bazı değişkenlerde, hiçbiri değil) ilişkisel. Bu, her bir önbelleğe alınmış bellek satırı boyunca, adresin bir kısmını (veya tümünü) depolayan fazladan bellek hücrelerinin olduğu anlamına gelir. Açıkçası bu, önbelleği daha da pahalı hale getiriyor, ancak bu, tüm hücrelerin aynı anda istediğimiz belirli bir bellek satırına sahip olup olmadıklarını görmek için sorgulanabilecekleri anlamına geliyor ve sonra doğru veriye sahip olan tek kişi (umarım) tüm belleği ana işlemci çekirdeğine bağlayan bir veriyolu üzerine. Bu, bir döngüden daha kısa sürede gerçekleşir, çünkü çok daha basittir.


-2

Çalıştığım felsefelerden biri, herhangi bir önbellek temelli hafızadan bahsettiğimizde, bu amaçla CPU önbelleği, önbellek önbelleği veya bellek önbelleği olduğunda, elde edilen maksimum verim-minimum-donanım hareketi idi. Temel gerekçe, veri almak / okumak / yazmak için en az donanım hareketi olduğunda veya hiç olmadığında ve işlem daha hızlı tamamlandığında elde edilir.

Veri, disk -> ana bellekten (RAM) (geçici depolama) -> CPU önbelleğinden (sık erişilen veriler için CPU'nun yakınında daha küçük geçici depolama) -> CPU'dan (işleme) aktarılır.

CPU önbelleği, en son kullanılan ana bellek konumlarından verilerin kopyalarını saklayan daha küçük ve daha hızlı bir bellek alanıdır.

Tampon önbellek, verilerin kopyalarını en son kullanılan disk konumlarından saklayan bir ana hafıza alanıdır.

Tarayıcı önbelleği, kullanıcılar tarafından en son ziyaret edilen web sitelerinden verilerin kopyalarını saklayan dizin veya benzeri bir alandır.

Başvuru: Bilgisayar Belleği Nasıl Çalışır?


"işletim sistemleri felsefesi ..." - bu sadece senin fikrin mi, yoksa nasılsa destekleyebilirsin?
gn

Maurice Bach tarafından Unix okurken bu konuda öğretildi. Maalesef destekleyici bir belge yok. Düzenlendi ..
roshan4074

5
Howstuffworks güvenilir bir teknik bilgi almak için kesinlikle güvenilmez. Ortalama Joe ve Jane'in anlayabileceği brüt basitleştirmeler için güzeller, ama bu konuda.
Mart'ta
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.