存内计算:在数据所在的位置进行计算
【原文:奥努尔·穆特卢(Onur Mutlu) 译者:曲虹亮 喻之斌《存内计算:在数据所在的位置进行计算》,载于中国计算机学会通讯-第15卷第10期-2019年10月】
2019年6月,Onur Mutlu教授在Microprocessors and Microsystems 期刊中发表了Processing Data Where It Makes Sense: Enabling In-Memory Computation一文,同年10月,曲虹亮、喻之斌学者对这篇文章进行了整理、翻译并发表在“中国计算机学会通讯”第15卷第10期中。这篇文章对存内计算,对智能内存控制器的需求,存内计算的实现,如何启用存内计算进行了叙述。
1.存内计算
存内计算(Processing in Memory,PIM)是在内存中完成部分计算,在处理器中完成部分计算。相较于内存计算将计算所需的所有数据放入到内存中,所有计算由处理器完成,存内计算降低了数据在内存与高速缓存,高速缓存与CPU之间移动的能耗,提高内存计算系统的性能。
2.对智能内存控制器的需求
(1)自底向上:电路和设备的推动作用
现代大多数主存储器的介质主要采用动态随机存取存储器(DRAM)。近年来DRAM工艺尺寸不断减小导致了新的安全缺陷,如RowHammer。RowHammer现象指的是在DRAM芯片中,重复读取同一行会破坏物理相邻行的数据。提高DRAM内存刷新频率可以有效的解决问题,但是会增加能耗。文中提出了PARA,一种有效的、低开销的防误差干扰解决方案。主要思路是:关闭一个行后,以非常低的概率来激活(如刷新)它的相邻行中的一行。据文中对29个基准测试程序,PARA平均降低性能0.20%,最大0.75%。PARA是无状态的,这使得它的成本与复杂度很低。
(2)自顶向下:系统和应用程序的拉动作用
目前使用的冯·诺伊曼体系结构的计算系统将数据全部集中在一个地方处理,其他地方只是存储和移动数据,这使得移动数据占据了很大的比重。其次为了移动数据,辅存、主存、缓存、处理器构成了复杂的层次结构。导致了无效率的能耗,低性能和系统的复杂性。据文中统计,移动设备中有62.7%的总能耗用于数据移动。所以,文中提出了以下3点要求:
以最小的数据进行移动;
在数据所在地方进行计算;
使计算机体系结构更加以数据为中心。
图1. 各种形式的数据移动(图片来自“存内计算:在数据所在的位置进行计算”原文)
3.实现存内计算:两个方向
(1)最少改变存储芯片
对现有DRAM体系结构进行最小程度的修改,用计算能力扩展其功能。文中介绍了两种设计:行克隆(RowClone)和Ambit。
行克隆(RowClone)机制可以在不需要处理器进行任何计算的情况下实现批量数据移动操作。这种机制可以通过加速带宽密集型内存操作提高系统性能和能源效率。
Ambit是一种大批量内存位操作的加速器。它使用现有DRAM技术的模拟操作执行批量位操作。可以应用于数据库的位图索引和位扫描加速、Web搜索的加速文档过滤、图形处理。
(2)利用3D堆叠内存
将多层DRAM通过3D封装技术堆叠形成3D堆叠内存芯片。3D堆叠内存芯片能够提供很大的内存容量与带宽。文中提出可以利用3D堆叠内存进行PIM设计,主要思想是通过将某种形式的处理逻辑放在3D堆叠内存的逻辑层中。主要应用有Tesseract:图处理、移动设备、图形处理单元(GPU)。
4.如何启用存内计算
文中指出启用存内计算需要解决代码映射、代码调度、数据映射、缓存一致性、虚拟内存支持、为PIM设计数据结构等问题。
代码映射:哪些操作在内存中执行,哪些操作在CPU中执行。
代码调度:何时调度代码。
数据映射:如何将数据映射到不同的3D内存栈。
缓存一致性:PIM处理逻辑修改处理的数据时,保证CPU内核与PIM处理逻辑一致的缓存一致性。
虚拟内存支持:在虚拟地址转化为物理地址时,如何减少开销。
撰稿:丁明浩
审稿:丁美荣