Araştırmacılar, bellek hiyerarşisindeki “nesneleri” sıkıştırarak daha fazla bant genişliği sağlıyorlar.
MIT araştırmacıları tarafından geliştirilen yeni bir teknik; bilgisayarlar ve mobil aygıtlar tarafından kullanılan daha fazla belleği boşaltmak, donanımları daha hızlı çalıştırmalarını ve eşzamanlı olarak daha fazla iş yapmalarını sağlamak için donanımsal veri sıkıştırmasını yeniden düşünmektedir.
Veri sıkıştırma; depolama kapasitesini boşaltmak, bilgi işlem hızlarını artırmak ve diğer avantajları sağlamak için gereksiz verilerden yararlanır. Mevcut bilgisayar sistemlerinde; ana belleğe erişim, gerçek hesaplamaya kıyasla çok pahalıdır. Bu nedenle, bellekte veri sıkıştırmanın kullanılması performansın artmasına yardımcı olur. Çünkü programların ana bellekten getirmesi gereken veri sıklığını ve miktarını azaltır.
Modern bilgisayarlardaki bellek; üzerinde geleneksel sıkıştırma tekniklerinin çalışması gereken sabit boyutlu parçalardaki verileri yönetir ve aktarır. Ancak, yazılım verilerini sabit boyutlu parçalarda doğal olarak saklamaz. Bunun yerine, çeşitli veri türlerini içeren ve değişken boyutlara sahip “nesneler;” veri yapılarını kullanır. Bu nedenle, geleneksel donanım sıkıştırma teknikleri, nesneleri yetersiz biçimde işler.
Bu hafta ACM Uluslararası Program Dilleri ve İşletim Sistemlerini Programlamak için Mimari Destek Konferansı’nda sunulan bir makalede MIT araştırmacıları; nesneleri bellek hiyerarşisi boyunca sıkıştırmaya yönelik ilk yaklaşımı anlatıyor. Bu, performansı ve verimliliği artırırken hafıza kullanımını azaltır.
Programcılar; kodlarını değiştirmeden nesnelerde veri depolayan ve yöneten herhangi bir modern programlama dilinde (Java, Python ve Go gibi) programlama yaparken, bu teknikten yararlanabilirler. Sonunda, tüketiciler çok daha hızlı çalışabilen ya da daha fazla uygulamayı aynı hızda çalıştırabilen bilgisayarları görecekler. Her uygulama daha az bellek kullandığından, daha hızlı çalışır, böylece bir aygıt; ayrılan belleğinde daha fazla uygulamayı destekleyebilir.
Değiştirilmiş bir Java sanal makinesi kullanan deneylerde; teknik, iki kat fazla veri sıkıştırmış ve bellek kullanımını geleneksel önbellek tabanlı yöntemlere göre yarı yarıya düşürmüştür.
Po-An Tsai Bilgisayar Bilimleri ve Yapay Zeka Laboratuvarı’nda (CSAIL) Bilgisayar Mühendisliği ve Elektrik Mühendisliği Profesörü Daniel Sanchez: “Motivasyon, önbellek sıkıştırması yerine nesne tabanlı sıkıştırma yapabilen yeni bir bellek hiyerarşisi oluşturmaya çalışıyordu. Çünkü çoğu modern programlama dili verileri yönetiyordu. Tüm bilgisayar sistemleri bundan faydalanabilir. Programlar daha hızlı hale geliyor, çünkü bellek bant genişliği tarafından tıkanmayı kestiler.”
Araştırmacılar; nesnelerini doğrudan manipüle etmek için bellek mimarisini yeniden yapılandıran önceki çalışmaları üzerine inşa ettiler. Geleneksel mimariler; blokları “önbellek” adı verilen aşamalı olarak daha büyük ve daha yavaş anılar hiyerarşisinde saklar. Son zamanlarda erişilen bloklar daha küçük, daha hızlı önbelleklere yükselirken, eski bloklar daha yavaş ve daha büyük önbelleklere taşınır ve sonunda ana hafızaya geri döner. Bu organizasyon esnek olsa da masraflıdır: Belleğe erişmek için, her önbellek, içerikleri arasında adres aramak zorundadır.
Sanchez: “Modern programlama dillerinde doğal veri yönetimi birimi nesneler olduğu için, neden yalnızca nesnelerle ilgilenen bir bellek hiyerarşisi yapmıyoruz?”
Geçtiğimiz Ekim ayında yayınlanan bir makalede, araştırmacılar; Hotpads adında ve tüm nesneleri depolayan, sıkıca hiyerarşik seviyelere ya da “pedlere” yerleştirilen bir sistem hakkında ayrıntılı bilgi verdiler. Bu seviyeler tamamen verimli; çipte, doğrudan adreslenmiş belleklere dayanıyor.
Programlar daha sonra doğrudan pedlerin hiyerarşisi boyunca tüm nesnelerin konumuna referansta bulunur. Yeni ayrılan ve son zamanlarda başvurulan nesneler ve işaret ettikleri nesneler daha hızlı kalır. Daha hızlı seviye dolduğunda, son zamanlarda başvurulan nesneleri tutan, ancak eski nesneleri daha yavaş seviyelere düşüren ve yer açmak için artık kullanışlı olmayan nesneleri, geri dönüştüren bir “tahliye” işlemi gerçekleştirir. İşaretçiler daha sonra her nesnede; taşınan tüm nesnelerin yeni konumlarına işaret edecek şekilde güncellenir. Bu şekilde, programlar nesnelere önbellek düzeylerinde arama yapmaktan çok daha ucuza erişebilirler.
Yeni çalışmalarında araştırmacılar; nesneleri sıkıştırmak için Hotpad mimarisini kullanan “Zippads” adlı bir teknik tasarladılar. Nesneler ilk önce daha hızlı bir şekilde başladığında, sıkıştırılmamışlardır. Ancak daha yavaş seviyelere çıktıklarında, hepsi sıkıştırılır. Tüm nesnelerdeki seviyelerdeki işaretçiler; daha sonra bu sıkıştırılmış nesnelere işaret eder, bu da daha hızlı seviyelere geri çağırmayı kolaylaştırır ve önceki tekniklerden daha kompakt bir şekilde saklanabilir.
Sıkıştırma algoritması daha sonra nesneler arasında fazlalığı verimli şekilde kullanır. Bu teknik, önceki her bir teknikten daha fazla sıkıştırma fırsatını ortaya çıkarır ve bu da her bir sabit büyüklükteki blokta fazlalık bulma ile sınırlıdır. Algoritma önce birkaç temsili nesneyi “temel” nesneler olarak seçer. Ardından, yeni nesnelerde; yalnızca bu nesnelerle temsili temel nesneler arasındaki farklı verileri depolar.
Carnegie Mellon Üniversitesi’nde Elektrik ve Bilgisayar Mühendisliği Profesörü Brandon Lucia; belleği daha iyi sıkıştırmak için nesne yönelimli programlama dillerinin özelliklerinden yararlanmaya çalıştığından bahsetti.
Lucia: “Nesneye yönelik programlama gibi soyutlamalar, programlamayı basitleştirmek için bir sisteme eklenir. Ancak genellikle sistemin performansına veya verimliliğine bir maliyet getirir. Bu çalışma ile ilgili ilginç olan şey, mevcut nesne soyutlamasını bellek sıkıştırma işlemini daha etkili hale getirmenin bir yolu olarak kullanması, bunun da sistemi yeni bilgisayar mimarisi özellikleriyle daha hızlı ve daha verimli hale getirmesidir.”