寫在前面
本篇是CACHE壓縮技術的第五篇,解讀的論文是
Base-Delta-Immediate Compression: Practical Data Compression for
On-Chip Caches
作者是來自CMU和INTEL的實驗室的研究人員
其他Cache壓縮、Cache原理的文章鏈接如下:
FPC壓縮論文解讀
背景知識
Cache壓縮技術是一種很有前途的提高片內Cache容量、降低片內和片外帶寬利用率的技術。不幸的是,直接應用衆所周知的壓縮算法(通常在軟件中實現)會導致高硬件複雜性和不可接受的解壓縮/壓縮特性,進而會對性能產生負面影響。因此,需要一種簡單而高效的壓縮技術,能夠有效地壓縮緩存中常見的數據模式,並且對緩存訪問延遲的影響最小。
緩存壓縮是在緩存填充後(在提供關鍵字之後)在後臺進行的,
而緩存解壓縮是在緩存命中的關鍵路徑上進行的,其中最小化延遲對性能極其重要。
事實上,由於一級緩存命中時間是最重要的,因此在本研究中,我們只考慮二級緩存的壓縮
三個核心目標
同時解決壓縮比小、硬件複雜度高、解壓縮延遲大的問題。
數據壓縮的幾種模式
實際應用程序訪問的數據中存在大量冗餘。有多種模式導致了這種冗餘。我們在下面總結了這些模式中最常見的一些:
- 零模式
零是應用數據中最常見的值。原因是多方面的。例如,零最常用於初始化數據、表示空指針或假布爾值以及表示稀疏矩陣(密集形式)。 - 重複模式
一個大的連續內存區域可能包含一個重複多次的值[23]。這種模式廣泛存在於對大數組使用公共初始值的應用程序中,或者在相鄰像素的大量數目具有相同顏色的多媒體應用程序中 - 窄模式
一句話就是習慣性把count設成double/long類型結果上限就是10,浪費極大
窄值是使用大數據類型存儲的小值:例如,作爲四字節整數存儲的一個字節值。由於過度配置或數據對齊,應用程序數據中通常會出現窄值。程序員通常會在最壞的情況下預測各種數據結構中的數據類型,即使大多數值可能適合較小的數據類型。例如,存儲計數器表需要設置數據類型以容納計數器的最大可能值。然而,可能的情況是最大可能的計數器值需要4個字節,而一個字節可能足以存儲大多數計數器值。 - 其他模式
還有一些其他常見的數據模式不屬於上述三類中的任何一類:指向同一內存區域中不同位置的指針表、低顏色梯度變化的圖像,等。
下圖給出了上述問題方案的一些對比
核心思想
關鍵思想是,對於許多緩存線,緩存線中的值具有較低的動態範圍,即,緩存線中存儲的值之間的差異很小。因此,可以使用一個基值和一個差異數組來表示緩存線,這些差異數組的組合大小遠小於原始緩存線(我們稱之爲基+增量編碼)
於我們研究的工作負載,最好的選擇是有兩個基,其中一個基總是零。
使用這兩個基值(零和其他值),我們的方案可以有效地壓縮包含兩個分離率動態範圍的混合緩存線:一個以從緩存線的實際內容中選擇的任意值(例如指針值)爲中心,另一個接近於零(例如小整數值)。
對比的對象
- 頻繁值壓縮(FVC)
- 頻繁模式壓縮(FPC)
今天數據庫那個賊累,先寫到這裏,明天繼續原理分析