麻省理工学院(MIT)的研究人员开发的一项新技术重新考虑了硬件数据压缩,以释放计算机和移动设备使用的更多内存,使它们能够运行得更快,同时执行更多任务。
数据压缩使用冗余数据来释放存储容量、提高计算速度并提供其他好处。在当前的计算机系统中,访问主存的开销比实际计算要大得多。因此,在内存中使用数据压缩可以提高性能,因为它减少了从主内存中提取数据的频率和数量。
现代计算机的内存以固定大小的块来管理和传输数据,传统的压缩技术必须对这些块进行操作。但是,软件不会自然地将数据存储在固定大小的块中。相反,它使用“对象”数据结构,包含各种类型的数据,并且大小可变。因此,传统的硬件压缩技术很难处理对象。
在本周举行的ACM编程语言和操作系统架构支持国际会议上,麻省理工学院的研究人员发表了一篇论文,描述了第一种跨内存级别压缩对象的方法。这减少了内存的使用,同时提高了性能和效率。
当使用任何现代编程语言(如Java、Python和go)进行编程时,程序员在不更改代码的情况下存储和管理对象中的数据时,可以从这项技术中受益。另一方面,消费者将看到计算机运行得更快,或者更多的应用程序以相同的速度运行。因为每个应用程序消耗的内存更少,所以运行速度更快,因此设备可以在其分配的内存中支持更多的应用程序。
在修改后的Java虚拟机实验中,与传统的基于缓存的方法相比,该技术压缩了两倍的数据,并将内存使用减少了一半。
第一作者、计算机科学与人工智能实验室(CSAIL)研究生蔡伯安说,“我们的动机是试图提出一种新的内存层次结构,可以基于对象而不是缓存行进行压缩,因为这是大多数现代编程语言管理数据的方式。”
“所有的计算机系统都将从中受益,”合著者、计算机科学和电子工程教授、CSAIL研究员丹尼尔桑切兹补充道。"程序变得更快,因为它们不再受内存带宽瓶颈的影响."
基于他们之前的工作,研究人员重建了记忆结构来直接操纵受试者。传统架构以块的形式存储数据,数据存储在由较大和较慢的内存组成的分层结构中,称为“缓存”。最近访问的块上升到更小更快的高速缓存,而旧的块移动到更慢更大的高速缓存,最后返回到主存储器。虽然这个组织很灵活,但成本很高。为了访问内存,每个缓存都需要在其内容中搜索一个地址。
“因为在现代编程语言中,数据管理的自然单位是对象,为什么不为处理对象创建一个内存层次结构?”桑切斯说。
在去年10月发表的一篇论文中,研究人员详细介绍了一个名为hotpad的系统,它可以存储整个对象,这些对象被紧密地封装在一个分层结构中,即“pad”。这些级别完全依赖于高效的片内直接寻址存储器,并且不需要复杂的搜索。
然后,程序直接引用所有对象在整个pad层次结构中的位置。新分配和最近引用的对象以及它们所指向的对象处于更快的级别。当较快的层被填充时,它运行一个“回收”过程,保留最近引用的对象,但将较旧的对象踢到较慢的层,并回收对释放空间不再有用的对象。然后更新每个对象中的指针,以指向所有移动对象的新位置。通过这种方式,程序可以比通过缓存级别搜索更便宜地访问对象。
在他们的新工作中,研究人员设计了一种叫做Zippads的技术,该技术使用hotpad架构来压缩对象。当对象首次以更快的速度启动时,它们将被解压缩。但是当它们被驱逐到一个较慢的水平时,它们都被压缩了。跨级别的所有对象中的指针都指向那些压缩的对象,这使得它们易于调用到更快的级别,并且可以比以前的技术存储得更紧凑。
压缩算法可以有效地利用对象之间的冗余。与以前的技术相比,该技术提供了更多的压缩机会,这仅限于在每个固定大小的块中寻找冗余。首先,算法选择几个有代表性的对象作为“基础”对象。然后,在新对象中,它只存储那些对象和代表性基本对象之间的不同数据。
卡内基梅隆大学电子与计算机工程助理教授Brandon Lucia对利用面向对象编程语言的特性更好地压缩内存的工作表示称赞。他说,“像面向对象编程这样的抽象被添加到系统中,使编程变得更容易,但它们通常会给系统的性能或效率带来成本。”“这项工作的有趣之处在于,它使用现有的对象抽象作为方法,使内存压缩更高效,从而使系统更快、更高效,并具有新的计算机体系结构特征。”