Paylaşımlı Bellek ve Tutarlılık
Paylaşımlı bellek mimarisi, birden fazla işlemcinin ortak bir adres alanı üzerinde çalışmasına olanak tanımaktadır; bellek tutarlılık modeli, bir işlemcinin bellek işlemlerinin diğer işlemcilere görünür hale geldiği sırayı tanımlamakta olup, paralel programların dayandığı sözleşmeyi oluşturmaktadır.
Tanım
Bellek tutarlılık modeli, paylaşımlı bellek sisteminde işlemciler arası bellek okuma ve yazma işlemlerinin izin verilen sıralamalarının belirtimidir; bir yükleme işleminin hangi değerleri döndürebileceğini tanımlayarak donanım ile eşzamanlı yazılım arasındaki sözleşmeyi belirlemektedir.
Kapsam
Bu konu, paylaşımlı bellekli çoklu işlemeyi ve merkezi olarak bellek tutarlılık modellerini (sıralı tutarlılık, gevşek ve zayıf modeller, bellek çitleri (memory fences)) ve tutarlılık ile koherans arasındaki ilişkiyi kapsamaktadır. Ayrıca, tutarlılık modeline dayanan senkronizasyon ilkellerini de içermektedir. Konum bazlı koherans mekanizması (önbellek koherans protokolleri) ve çekirdeklerin çip düzeyinde entegrasyonu (çok çekirdekli ve çip çoklu işlemciler) bu kapsamın dışındadır.
Temel sorular
- Paralel programlar bellek işlemlerinin hangi sıralamasını varsayabilir?
- Sıralı tutarlılık, gevşek tutarlılık modellerinden nasıl farklılaşmaktadır?
- Gevşek modeller neden mevcuttur ve bellek çitleri (memory fences) gerekli sıralamayı nasıl geri sağlamaktadır?
- Koherans ve tutarlılık birlikte doğru paylaşımlı bellek davranışını nasıl tanımlamaktadır?
Anahtar kavramlar
- paylaşımlı adres alanı
- bellek tutarlılık modeli
- sıralı tutarlılık
- gevşek ve zayıf tutarlılık
- bellek çitleri ve bariyerleri
- tutarlılık ve koherans
- senkronizasyon ilkelleri
- veri yarışları
Temel kuramlar
- Sıralı tutarlılık
- Lamport'un sıralı tutarlılığı, yürütme sonucunun, tüm işlemcilerin işlemlerinin her işlemcinin program sırasına saygı duyan tek bir küresel sırada iç içe geçmiş gibi olmasını gerektirmektedir; bu sezgisel olmakla birlikte donanım optimizasyonunu kısıtlamakta ve gevşek modelleri motive etmektedir.
Mekanizmalar
Donanım, performans için bellek işlemlerini yeniden sıralamakta ve ara belleğe almakta olup, tutarlılık modeli hangi yeniden sıralamaların diğer işlemcilere görünür olduğunu belirtmektedir. Sıralı tutarlılık, işlemciler arası görünür yeniden sıralamayı yasaklamaktadır; gevşek modeller, hız için belirli yeniden sıralamalara izin vermekte ve programcıların gerektiğinde sıralamayı sağlamak için bellek çitleri (memory fences) eklemesini gerektirmektedir. Kilitler ve atomik işlemler gibi senkronizasyon ilkelleri bu garantiler üzerine inşa edilmekte ve veri yarışlarından kaçınan programlar öngörülebilir şekilde davranmaktadır.
Klinik önem
Bellek tutarlılık modeli, doğru eşzamanlı programlamanın temelini oluşturmaktadır: çok iş parçacıklı bir programın paylaşılan güncellemelerin görünürlüğü ve sıralaması hakkında yasal olarak ne varsayabileceğini belirlemektedir. Bu modelin yanlış anlaşılması, ince ve yeniden üretilmesi zor hatalara yol açmakta olup, dil bellek modelleri (C++ ve Java'da olduğu gibi) doğrudan bu donanım kavramları üzerine inşa edilmektedir.
Tarihçe
Lamport, 1979'da sıralı tutarlılığı resmileştirmiştir. Donanım, performans için bellek erişimlerini yeniden sıralamada daha agresif hale geldikçe, 1980'ler ve 1990'larda mimariler arasında gevşek tutarlılık modelleri yaygınlaşmış, bu da onları tanımlama ve kontrol altına alma çalışmalarını tetikleyerek sonunda programlama dillerine kendi iyi tanımlanmış bellek modellerini kazandırmıştır.
Tartışmalar
- Güçlü ve gevşek tutarlılık
- Sıralı tutarlılık gibi güçlü modeller hakkında akıl yürütmek daha kolaydır ancak donanım performansını sınırlamaktadır; gevşek modeller ise programcı karmaşıklığı pahasına optimizasyona olanak tanımaktadır. Alan, dikkatlice belirtilmiş modeller ve çitler aracılığıyla sezgisel semantik ile verimlilik arasındaki dengeyi sürdürmektedir.
Öne çıkan isimler
- Leslie Lamport
- Sarita Adve
- Mark D. Hill
- David E. Culler
İlgili konular
Temel eserler
- hennessy2019
- culler1999
Sıkça sorulan sorular
- Koherans ve tutarlılık arasındaki fark nedir?
- Koherans, tüm işlemcilerin her bir bellek konumunun değeri üzerinde sonunda anlaşmasını ve bu konuma yapılan yazma işlemlerini mantıklı bir sırada görmesini garanti etmektedir. Tutarlılık ise farklı işlemciler tarafından gözlemlenen farklı konumlar arası işlemlerin sıralamasını yönetmektedir. Bir tutarlılık modeli, koheransı ön varsaymakta ve konumlar arası sıralama kuralları eklemektedir.
- İşlemciler neden gevşek bellek modelleri kullanmaktadır?
- Katı sıralama, donanımı bellek gecikmesini gizleyen ara belleğe alma ve yeniden sıralama işlemlerinden vazgeçmeye zorlayarak performansı düşürecektir. Gevşek modeller, donanımın serbestçe optimize etmesine olanak tanımakta ve programcılara yalnızca doğruluğun gerektirdiği yerlerde sıralamayı zorlamak için açık çitler (explicit fences) sağlamaktadır.