20Aug
Sadece çok çekirdekli işlemcilerin, önbelleğe alma işleminin, önbellek tutarlılığının ve belleğin nasıl çalıştığını öğrenmeye başlıyorsanız, başlangıçta biraz karışık görünebilir. Bunu aklımızda tutarsak, günümüzün SuperUser Q & A postunda merak uyandırıcı bir okuyucu sorusunun cevabı var.
Bugünkü Soru &Yanıt oturumu bize Q & A web sitelerinin topluluk temelli bir gruplandırması olan Stack Exchange'in bir alt bölümü olan SuperUser nezaketen geliyor.
Soru
SuperUser okuyucu CarmeloS bir CPU önbelleğinin ana belleğe ne zaman boşaltıldığını bilmek istiyor:
İki çekirdekli bir CPU'ya sahip ve her çekirdeğin kendi L1 önbellekleri varsa, Core1 ve Core2'nin her ikisinin de aynı önbellekte saklanması mümkün müdüraynı anda bellek parçası mı?Mümkünse Core1 ve Core2 değerlerini önbellekte düzenlediyse, ana belleğin değeri ne olacak?
Bir CPU önbellek ne zaman ana belleğe geri çekilir?
Cevap
SuperUser katılımcıları David Schwartz, sleske ve Kimberly W bize cevap buluyor.İlk önce, David Schwartz:
İki çekirdekli bir CPU'ya sahip ve her çekirdeğin kendi L1 önbellekleri varsa, Core1 ve Core2'nin aynı belleğin aynı bölümünü aynı anda önbelleğe alması mümkün mü?
Evet, öyle değilse performans kötü olurdu. Aynı kodu çalıştıran iki iş parçacığı düşünün. Her iki L1 önbelleklerinde de bu kodu istiyorsun.
Mümkünse ana bellek değeri hem Core1 hem de Core2 önbellekte değerlerini değiştirecekse ne olacak?
Eski değer ana bellekte olacaktır, çünkü hiçbir çekirdek onu okumayacaktır. Değiştirilen bir değeri önbellekten çıkarmadan önce belleğe yazılmalıdır. Tipik olarak, MESI protokolünün bazı varyantları kullanılır. MESI'nin geleneksel uygulanmasında, bir değer bir önbellekte değiştirilirse, aynı düzeyde diğer önbelleklerde bulunamaz.
Sleske'nin cevabının ardından:
Evet, iki önbelleğin aynı bellek bölgesini önbelleğe alması aslında gerçekleşebilir ve aslında pratikte çok sık karşılaşılan bir sorundur.Çeşitli çözümler vardır, örneğin:
- İki önbellek birbirlerine katılmıyacaklarından emin olmak için iletişim kurabilir
- Tüm önbellekleri izleyen ve bunları buna göre güncelleyen bir çeşit amiriniz olabilir
- Her işlemci önbelleğe aldığı bellek alanlarını izler vebir yazdığını algıladığında, onun( şimdi geçersiz) önbellekini atar
Soruna önbellek tutarlılığı denir ve konuyla ilgili Wikipedia makalesi sorunun ve olası çözümlerin güzel bir genel görünümüne sahiptir.
Ve Kimberly W'den gelen son cevabı:
Postanın başlığındaki soruyu cevaplamak için, önbellekleme protokolünün ne olduğuna bağlı.Geri yazma özelliğiyse, önbellek denetleyicisinin başka bir seçeneği bulunmadığı halde önceden dolmuş olan alana yeni bir önbellek bloğu koymak için önbellek ana belleğe geri boşaltılacaktır. Daha önce alanı meşgul eden blok kaldırılır ve değeri ana belleğe geri yazılır.
Diğer protokoller doğrudan yazılma yöntemidir. Bu durumda, önbellek bloğu seviyesi n seviyesinde yazıldığında n + 1 seviyesindeki ilgili blok güncellenir. Bir formun altına karbon kâğıdıyla doldurulması kavram bakımından benzer;üstte yazdığınız her şey aşağıdaki sayfaya kopyalanır. Açıkçası daha fazla yazım işlemi gerektirdiğinden bu daha yavaş, ancak önbellekler arasındaki değerler daha tutarlı.Geri yazma düzeninde, yalnızca en üst düzey önbellek belirli bir bellek bloğu için en güncel değere sahip olur.
Açıklamaya eklemek için bir şey var mı?Yorumların sesini kapatın. Diğer teknik uzman Stack Exchange kullanıcılarından daha fazla cevap okumak ister misiniz? Buradaki tam tartışma dizinine göz atın.
Resim Kredisi: Lemsipmatt( Flickr)