这项新的数据压缩技术可能创造未来的科技

An officer observes computer screens displaying images from cameras monitoring traffic condition, general monuments and public areas, at the Office of Public Security and Traffic in Monterrey, Mexico June 6, 2018. Picture taken on June 6, 2018. REUTERS/Daniel Becerril - RC1746BE86C0
In current computer systems, accessing main memory is very expensive compared to actual computation.Image: REUTERS/Daniel Becerril
本内容由人工智能自动翻译。

麻省理工学院研究人员开发的一项新技术重新思考了硬件数据压缩,可释放计算机和移动设备所占用的更多内存,使其运行更快,并能同时执行更多任务。

数据压缩利用冗余数据来释放存储容量、提高计算速度,并带来其他好处。在当前的计算机系统中,与实际计算相比,访问主内存的成本非常高。因此,在内存中使用数据压缩有助于提升性能,因为它减少了程序从主内存获取数据的频率和数量。

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

麻省理工学院的研究人员在本周举行的ACM编程语言与操作系统架构支持国际会议上发表的一篇论文中,介绍了首个跨内存层级压缩对象的方法。这在减少内存占用的同时,提升了性能和效率。

程序员在使用Java、Python和Go等任何将数据存储和管理在对象中的现代编程语言进行编程时,无需更改代码即可从这项技术中受益。对消费者而言,他们将看到运行速度快得多的计算机,或能够以相同速度运行更多应用程序的计算机。由于每个应用程序占用的内存更少,其运行速度更快,因此设备可以在其分配的内存范围内支持更多应用程序。

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

“我们的动机是尝试构建一种新的内存层级,使其能够进行基于对象的压缩,而不是缓存行压缩,因为这正是大多数现代编程语言管理数据的方式,”第一作者、计算机科学与人工智能实验室(CSAIL)的研究生蔡博安(Po-An Tsai)说。

“所有计算机系统都将从中受益,”共同作者、计算机科学与电气工程教授、CSAIL研究员丹尼尔·桑切斯(Daniel Sanchez)补充道,“程序运行得更快,是因为它们不再受内存带宽的瓶颈限制。”

研究人员在其先前的工作基础上进行了拓展,该工作重构了内存架构,以直接操作对象。传统架构以数据块的形式将数据存储在一个层级结构中,该层级由逐级变大、变慢的存储器组成,称为“缓存”。最近访问的数据块会上移至较小、较快的缓存中,而较旧的数据块则被移至较慢、较大的缓存中,最终回到主内存。虽然这种组织方式十分灵活,但代价高昂:访问内存时,每一级缓存都需要在其内容中搜索地址。

桑切斯说:“既然现代编程语言中数据管理的自然单位是对象,为什么不直接构建一个处理对象的内存层级呢?”

在去年十月发表的一篇论文中,研究人员详细介绍了一种名为Hotpads的系统,该系统将完整的对象紧密打包到分层级别中,即“pads”。这些级别完全驻留在高效的片上直接寻址存储器中,无需复杂的搜索。

随后,程序可以直接引用所有对象在pads层级结构中的位置。新分配的和最近被引用的对象,以及它们所指向的对象,都保留在较快的级别中。当较快的级别被填满时,系统会运行一个“驱逐”过程:保留最近被引用的对象,将较旧的对象下移至较慢的级别,并回收不再有用的对象以释放空间。随后更新每个对象中的指针,使其指向所有被移动对象的新位置。通过这种方式,程序访问对象的成本远低于在各级缓存中搜索。

在这项新研究中,研究人员设计了一种名为“Zippads”的技术,该技术利用Hotpads架构来压缩对象。对象最初位于较快的级别时是未压缩的。但当它们被驱逐至较慢的级别时,则会全部被压缩。随后,所有级别中的对象指针都指向这些压缩后的对象,这使得它们可以轻松调回较快的级别,并且能够比以往技术更紧凑地存储。

压缩算法随后高效地利用对象之间的冗余。该技术比以往的技术发现了更多的压缩机会,因为以往的技术仅限于在每个固定大小的数据块内查找冗余。该算法首先选取若干具有代表性的对象作为“基”对象。然后,在新的对象中,它只存储这些对象与具有代表性的基对象之间的差异数据。

卡内基梅隆大学电气与计算机工程助理教授布兰登·卢西亚(Brandon Lucia)赞扬了这项工作,认为其利用面向对象编程语言的特性,更好地压缩内存。“面向对象编程等抽象概念被加入系统中,是为了让编程更简单,但往往会在系统的性能或效率方面付出代价,”他说,“这项工作的有趣之处在于,它利用现有的对象抽象作为一种手段,使内存压缩更加有效,进而借助新颖的计算机架构特性,使系统运行更快、效率更高。”

授权与转载
世界经济论坛发布的文章,可依据《知识共享署名-非商业性使用-禁止演绎4.0国际公共许可协议》以及我方《使用条款》进行转载。 本文所表达的观点仅代表作者个人立场,并不代表世界经济论坛的观点。