Bir İşlemcinin Önbelleği Ne Zaman Ana Belleğe Döndürülür?
Çok çekirdekli işlemcilerin, önbellekleme, önbellek tutarlılığı ve belleğin nasıl çalıştığını öğrenmeye yeni başlıyorsanız, ilk başta biraz kafa karıştırıcı görünebilir. Bunu akılda tutarak, bugünün Süper Kullanıcı Soru-Cevap yazısının meraklı bir okuyucunun sorusuna cevapları var.
Bugünün Soru ve Cevap oturumu bize topluluk tarafından yönlendirilen bir soru-cevap web sitesi grubu olan Stack Exchange'in bir alt birimi olan SuperUser'ın izniyle geliyor..
Soru
SuperUser okuyucu CarmeloS, bir CPU'nun önbelleğinin ana belleğe ne zaman boşaldığını bilmek istiyor:
İki çekirdekli bir CPU'm varsa ve her çekirdeğin kendi L1 önbelleği varsa, Core1 ve Core2'nin her ikisi de aynı anda belleğin aynı bölümünü önbelleğe alması mümkün mü? Mümkünse, hem Core1 hem de Core2 önbellekteki değerlerini düzenlediyse, ana belleğin değeri ne olur??
Bir CPU'nun önbelleği ne zaman ana belleğe geri döner?
Cevap
SuperUser katılımcıları David Schwartz, sleske ve Kimberly W bize cevap veriyor. İlk olarak, David Schwartz:
İki çekirdekli bir işlemcime sahipsem ve her çekirdeğin kendi L1 önbelleği varsa, Çekirdek1 ve Çekirdek2'nin aynı anda belleğin aynı bölümünü önbelleğe alması mümkün olabilir?
Evet, durum böyle olmasaydı performans korkunç olurdu. Aynı kodu çalıştıran iki konu düşünün. Her iki L1 önbelleğinde de bu kodu istiyorsun.
Mümkünse, hem Core1 hem de Core2 önbellekteki değerlerini düzenlediyse, ana belleğin değeri ne olur??
Eski değer ana bellekte olacak, bu da hiçbir çekirdeğin okumadığı için önemli olmayacak. Önbellekten değiştirilmiş bir değeri çıkarmadan önce, belleğe yazılmalıdır. Tipik olarak, MESI protokolünün bir varyantı kullanılır. Geleneksel MESI uygulamasında, bir değer bir önbellekte değiştirilirse, aynı seviyedeki başka bir önbellekte bulunamaz..
Sleske'nin cevabını takip etti:
Evet, iki önbelleğe sahip olmak aynı hafıza bölgesini oluşturabilir ve gerçekte pratikte çokça ortaya çıkan bir sorundur. Örneğin çeşitli çözümler var:
- İki önbellek, aynı fikirde olmadıklarından emin olmak için iletişim kurabilir
- Tüm önbellekleri izleyen ve uygun şekilde güncelleyen bir denetmeniniz olabilir.
- Her işlemci önbelleğe aldığı bellek alanlarını izler ve bir yazma algıladığında (şimdi geçersiz) önbelleğini atar.
Soruna önbellek tutarlılığı denir ve konuyla ilgili Wikipedia makalesi soruna ve olası çözümlere güzel bir genel bakış sağlar..
Ve Kimberly W'den son cevabımız:
Gönderinizin başlığındaki soruyu yanıtlamak için, önbellek protokolünün ne olduğuna bağlı olarak değişir. Geri yazma durumunda, önbellek yalnızca önbellek denetleyicisinin başka bir alanı boşaltan yeni bir önbellek bloğu koymaktan başka seçeneği olmadığında geri ana belleğe geri gönderilir. Önceden alanı işgal eden blok kaldırıldı ve değeri ana belleğe geri yazıldı.
Diğer protokol yazma işlemidir. Bu durumda, önbellek bloğu seviyeye yazıldığında n, Seviyede karşılık gelen blok n + 1 Güncellendi. Konseptin altında bir karbon kağıdı ile bir form doldurulması benzerdir; üstüne ne yazıyorsanız, aşağıdaki sayfaya kopyalanır. Bu daha yavaştır, çünkü daha çok yazma işlemi gerektirir, ancak önbellekler arasındaki değerler daha tutarlıdır. 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ı? Yorumlarda ses kesiliyor. Diğer teknoloji meraklısı Stack Exchange kullanıcılarından daha fazla cevap okumak ister misiniz? Burada tüm tartışma konusuna göz atın.
Resim Kredisi: Lemsipmatt (Flickr)