一句话:提出面向对象程序的压缩内存层次 Zippads 与跨对象压缩算法 COCO,以对象为压缩单元,提升压缩率与性能。
现有缓存和主存压缩通常在固定大小块(通常是缓存行)上使用简单算法,仅利用块内冗余,因此对数组型程序有效,却难以处理对象大小不一、布局不规则的对象型程序。本文提出首个面向对象程序的压缩内存层次。关键观察是:对象才是压缩的自然单元,程序沿对象指针遍历和操作;单个对象内部冗余有限,但同类型对象之间冗余丰富。基于此,作者设计 Zippads 对象式压缩内存层次和 COCO 跨对象压缩算法,透明压缩变长对象并紧凑存储。在数组主导与对象主导的混合负载上,Zippads 相比最先进的压缩内存层次取得 1.63 倍更高压缩率,性能提升 17%。
Existing cache and main memory compression techniques compress data in small fixed-size blocks, typically cache lines. Moreover, they use simple compression algorithms that focus on exploiting redundancy within a block. These techniques work well for scientific programs that are dominated by arrays. However, they are ineffective on object-based programs because objects do not fall neatly into fixed-size blocks and have a more irregular layout. We present the first compressed memory hierarchy designed for object-based applications. We observe that (i) objects, not cache lines, are the natural unit of compression for these programs, as they traverse and operate on object pointers; and (ii) though redundancy within each object is limited, redundancy across objects of the same type is plentiful. We exploit these insights through Zippads, an object-based compressed memory hierarchy, and COCO, a cross-object-compression algorithm. Building on a recent object-based memory hierarchy, Zippads transparently compresses variable-sized objects and stores them compactly. As a result, Zippads consistently outperforms a state-of-the-art compressed memory hierarchy: on a mix of array- and object-dominated workloads, Zippads achieves 1.63x higher compression ratio and improves performance by 17%.