首页 >新闻 > 互联网 > 内容

一种新的数据压缩技术 用于更快的计算机程序

互联网 2019-12-18 16:21:56

麻省理工学院(MIT)研究人员开发的一项新技术重新考虑了硬件数据压缩,以释放电脑和移动设备使用的更多内存,让它们运行得更快,同时执行更多任务。

数据压缩利用冗余数据来释放存储容量,提高计算速度,并提供其他好处。在当前的计算机系统中,访问主存的开销比实际计算要大得多。因此,在内存中使用数据压缩有助于提高性能,因为它减少了从主内存中提取数据的频率和数量。

现代计算机的内存以固定大小的块管理和传输数据,传统的压缩技术必须在这些块上操作。然而,软件不会自然地将数据存储在固定大小的块中。相反,它使用“对象”数据结构,其中包含各种类型的数据并具有可变的大小。因此,传统的硬件压缩技术很难处理对象。

在本周举行的ACM编程语言和操作系统架构支持国际会议上,MIT的研究人员发表了一篇论文,其中描述了跨内存层次压缩对象的第一种方法。这减少了内存的使用,同时提高了性能和效率。

当使用任何现代编程语言(如Java、Python和go)进行编程时,在不更改代码的情况下在对象中存储和管理数据时,程序员都可以从这种技术中受益。另一方面,消费者会看到电脑运行速度更快,或者以同样的速度运行更多的应用程序。因为每个应用程序消耗的内存更少,所以它运行得更快,所以一个设备可以在其分配的内存中支持更多的应用程序。

在使用修改过的Java虚拟机进行的实验中,该技术压缩了两倍的数据,并比传统的基于缓存的方法减少了一半的内存使用量。

第一作者、计算机科学与人工智能实验室(CSAIL)研究生Tsai Po-An表示:“我们的动机是尝试提出一种新的内存层次结构,它可以进行基于对象的压缩,而不是缓存行压缩,因为这是大多数现代编程语言管理数据的方式。”

“所有的计算机系统都将从中受益,”合著者Daniel Sanchez补充道,他是计算机科学和电子工程的教授,同时也是CSAIL的研究员。“程序变得更快,因为它们不再受到内存带宽的瓶颈。”

研究人员在他们之前的工作基础上重建了记忆结构,以直接操作对象。传统的架构以块的形式存储数据,存储在一个由越来越大、越来越慢的内存构成的层次结构中,称为“缓存”。最近访问的块上升到更小、更快的缓存,而旧块移动到更慢、更大的缓存,最终回到主内存中。虽然这种组织是灵活的,但代价很高:为了访问内存,每个缓存都需要在其内容中搜索地址。

“因为在现代编程语言中,数据管理的自然单位是对象,为什么不创建一个处理对象的内存层次结构呢?”桑切斯说。

在去年10月发表的一篇论文中,研究人员详细介绍了一个名为hotpad的系统,该系统可以存储整个对象,这些对象被紧密地封装在层次结构中,或称为“pad”。这些级别完全依赖于高效的、芯片上的、直接寻址的内存,不需要复杂的搜索。

然后,程序直接引用整个pad层次结构中所有对象的位置。新分配的和最近引用的对象,以及它们所指向的对象,处于更快的级别。当较快速的层被填满时,它会运行一个“回收”过程,该过程保留最近引用的对象,但将较旧的对象踢到较慢的层,并回收不再有用的对象,以释放空间。然后在每个对象中更新指针,以指向所有移动对象的新位置。通过这种方式,程序可以比通过缓存级别搜索更便宜地访问对象。

在他们的新工作中,研究人员设计了一种名为“Zippads”的技术,该技术利用hotpad架构来压缩对象。当对象第一次以较快的级别启动时,它们是未压缩的。但是当它们被驱逐到较慢的级别时,它们都被压缩了。跨级别的所有对象中的指针都指向那些压缩的对象,这使得它们很容易被召回到更快的级别,并且能够比以前的技术更紧凑地存储。

压缩算法可以有效地利用对象之间的冗余。与以前的技术相比,这种技术提供了更多的压缩机会,以前的技术仅限于在每个固定大小的块中查找冗余。该算法首先选取几个具有代表性的对象作为“基”对象。然后,在新对象中,它只存储那些对象和代表性基对象之间的不同数据。

卡耐基梅隆大学(Carnegie Mellon University)电子与计算机工程助理教授布兰登•卢西亚(Brandon Lucia)称赞了这项利用面向对象编程语言的特性来更好地压缩内存的工作。他说:“像面向对象编程这样的抽象被添加到系统中,以使编程变得更简单,但却常常会给系统的性能或效率带来成本。”“这项工作的有趣之处在于,它使用现有的对象抽象作为一种使内存压缩更有效的方法,从而使系统更快、更有效,并具有新的计算机体系结构特性。”

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时候联系我们修改或删除,多谢。