英语原文共 14 页,剩余内容已隐藏,支付完成后下载完整资料
内存数据并行处理器
摘要:
非易失性存储器(NVM)的最新发展为内存计算开辟了新的视野。尽管计算NVM提供了显着的性能提升,但以前的工作依赖于专用内核到内存阵列的手动映射,使得执行更一般的工作负载变得不可行。我们通过提出可编程内存处理器架构和数据并行编程框架来解决这个问题。所提出的内存处理器的效率来自两个来源:大规模并行性和数据移动的减少。紧凑的指令集为存储器阵列提供通用计算能力。所提出的编程框架旨在通过合并数据流和矢量处理的概念来利用硬件中的基础并行性。为了促进内存中编程,我们开发了一个编译框架,它采用TensorFlow输入并为我们的内存处理器生成代码。我们的结果显示,针对一组Rodinia基准测试,Parsec和763加速的服务器级GPU上的一组应用程序的多核CPU服务器的速度提升为7.5。
1.介绍
非易失性存储器(NVM)为高级内存计算创建了机会。通过重新设计存储器结构,已经证明某些NVM具有原位模拟计算能力。例如,电阻存储器(ReRAM)以钛氧化物电阻的形式存储数据,并通过向字线注入电压并感测位线上的合成电流,输入电压和电池电导的点积。是使用欧姆和基尔霍夫定律得到的。
最近的工作通过利用这种点积功能探索了基于ReRAM的机器学习算法加速器的设计空间[13,39]。这些基于ReRAM的加速器利用了大规模的并行性和宽松的精度要求,与现有的CPU/GPU架构和定制ASIC相比,提供了数量级的改进,尽管它们的读/写延迟很高。在本文中,我们试图回答这个问题,阻抗记忆在多大程度上对更通用的计算有用。
尽管计算NVM提供了显着的性能提升,但以前的工作依赖于将卷积内核手动映射到内存阵列,因此很难为不同的应用程序配置它。我们通过提出可编程的内存处理器架构和编程框架来解决这个问题。通用内存处理器有可能将数据并行应用程序内核的性能提高一个数量级或更多。
内存处理器的效率来自两个来源。首先是海量数据并行。NVM由数千个阵列组成。这些阵列中的每一个都被转换成可以同时计算的单指令多数据(SIMD)处理单元。第二个来源是通过避免内存和处理器内核之间的数据混乱来减少数据移动。我们的目标是设计架构,建立编程语义和执行模型,并开发编译器,以将ReRAM计算的上述优点暴露给通用数据并行程序。
内存中处理器体系结构包括存储器阵列和以瓦片分组的若干数字组件,以及定制互连,以促进阵列和指令供应之间的通信。每个阵列都充当存储单元以及矢量处理单元。所提出的架构扩展了ReRAM阵列以支持点积之外的原位操作(即,加法,逐元素乘法和减法)。我们采用SIMD执行模型,其中每个循环将指令多个转换为块中的一组阵列并以锁步方式执行。用于内存计算的指令集架构(ISA)由13条指令组成。关键的挑战是开发一个简单而强大的ISA和编程框架,它可以允许各种数据并行程序利用潜在的大规模计算效率。
所提出的编程模型试图通过合并数据流和矢量处理(或SIMD)的概念来利用硬件中的基础并行性。数据流明确地暴露了程序中的指令级并行(ILP),而向量处理暴露了数据级并行(DLP)。谷歌的TensorFlow[1]是一种流行的机器学习编程模型。我们观察到TensorFlow的编程语义是数据流和矢量处理的完美结合,可以应用于更一般的应用程序。因此,我们提出的编程框架使用TensorFlow作为输入。
我们开发了一个TensorFlow编译器,为我们的内存数据并行处理器生成二进制代码。Tensor-Flow程序本质上是数据流图(DFG),其中每个操作员节点可以具有多维向量或张量作为操作数。在矢量的一个元素上操作的DFG被编译器称为模块。编译器将输入DFG转换为具有相同机器代码的数据并行模块的集合。我们的执行模型是粗粒度SIMD。在运行时,代码模块被多次实例化并处理独立的数据元素。编程模型和编译器支持模块之间的受限通信:reduce,scatter和gather。我们的编译器探索了几个有趣的优化,例如展开高维张量,合并DFG节点以利用n-ary ReRAM操作,流水线化计算和回写,使用VLIW样式调度最大化模块内的ILP,以及最小化阵列之间的通信。
对于通用计算,我们需要支持各种计算操作(例如,除法,指数,平方根)。这些操作可以直接表示为TensorFlow的DFG中的节点。遗憾的是,ReRAM阵列由于其有限的模拟计算能力而无法原生支持它们。我们的编译器在代码生成阶段执行指令降低步骤,以将更高级别的TensorFlow操作转换为内存中计算ISA。我们讨论编译器如何使用诸如Newton-Raphson方法之类的技术有效地支持复杂操作(例如,除法),该方法迭代地将一组简单指令(加/再)应用于来自查找表的初始种子并且细化结果。编译器还将其他非算术原语(例如,正方形和卷积)转换为本机存储器SIMD ISA。
总之,本文提供以下贡献:
我们设计了一种处理器架构,重新设计电阻式存储器以支持数据并行内存计算。在所提出的架构中,存储器阵列存储数据并充当矢量处理单元。我们扩展了ReRAM存储器阵列,以支持dot产品之外的原始操作,并设计一个具有有限计算能力的简单ISA。
我们开发了一个编译器,可以将Google的TensorFlow中的DFG转换为一组数据并行模块,并在本机内存ISA中生成模块代码。编译器实现了几种优化,以利用底层硬件并行性和基于ReRAM的计算的独特特性/约束。
尽管内存中的计算ISA很简单且功能有限,但我们证明了通过良好的编程模型和编译器,可以将大部分通用计算卸载到内存中。例如,我们能够在内存中执行平均87%的PARSEC应用程序研究。
我们的实验结果表明,对于所评估的PARSEC应用,所提出的架构可以为最先进的多核CPU提供7.5的整体加速。对于所评估的Rodinia内核基准测试,它还为最先进的GPU提供了763的加速。所提出的架构以415 W的热设计功率(TDP)运行,将基准的能量效率提高230并将平均功率降低1.26倍。
2.处理器架构
我们在ReRAM基板上提出了一种内存数据并行处理器。本节讨论建议的微体系结构,ISA和ISA的实现。
2.1微架构
所提出的内存处理器采用平铺架构,如图1所示。平铺由内存节点簇,少量指令缓冲区和路由器组成。每个集群由几个内存阵列,一个小寄存器文件和查找表(LUT)组成。每个存储器阵列如图1(b)所示。在内部,所提出的架构中的存储器阵列由多行电阻位单元组成,一组数字-模拟转换器(DAC)馈送字线和位线,采样和保持电路(S H),移位和加法器(S A)和模数转换器(ADC)。读取和写入ReRAM存储器阵列的过程保持不变。有关详细信息,请参阅ReRAM文献[39,42]。存储器阵列能够进行数据存储和计算。我们在2.2节中解释了存储器阵列的计算能力和数字组件的作用(例如寄存器文件,S A,LUT)。
磁贴通过H-Tree路由器网络连接。该选择ree网络以适应我们的编程模型中典型的通信模式(第3节),它还为外部I/O提供高带宽通信。图块内的簇通过路由器或连接器连接
纵横拓扑。共享总线有助于集群内的通信。磁贴内部的分层拓扑限制了网络功耗,同时为数据并行应用中典型的不频繁通信提供了足够的带宽。
每个存储器阵列可以被认为是具有很少SIMD通道的矢量处理单元。处理器采用SIMD执行模型。每个数组都映射到特定的指令缓冲区。映射到同一指令缓冲区的所有数组都执行相同的指令。每个周期,从每个指令缓冲器中读出一条指令,并多次转换到磁贴中的存储器阵列。执行模型将在第4节中详细讨论。
本文评估的处理器包括4096个图块,每个图块8个簇,每个簇8个内存阵列。每个阵列可存储4KB数据,每个阵列有8个SIMD通道,每个通道32位。因此,处理器具有200万个通道的聚合SIMD宽度,1GB的总存储容量和494mm2 面积。ADC和DAC的分辨率设置为5和2位。
2.2指令集架构
所提出的指令集架构(ISA)简单紧凑。与标准的SIMD ISA相比,内存中的ISA不支持复杂(例如除法)和专用(例如shuffle)指令,因为这些很难在现场进行记忆。相反,编译器将复杂指令转换为一组lut,add和mul指令,如稍后所述。ISA由13条指令组成,如表1所示。每个ReRAM阵列在本地执行指令,因此操作数寻址模式引用数组或本地寄存器内的行。指令的大小最多为34个字节。现在我们讨论各个指令的功能和实现。
- add add指令是一个n-ary操作,它将数据添加到lt;maskgt;指定的行中。lt;maskgt;是一个128位掩码,为参与其中的数组中的每一行设置。图2(a)显示了添加操作。掩模被馈送到字线DAC,用于将Vdd(#39;11#39;)或Vdd / 2(#39;10#39;)应用于字线。掩码中的“1”激活一行。ReRAM阵列中的每个位单元可以被抽象地视为可变电阻器。通过对由每个位单元的电导(=电阻minus;1)产生的电流求和来在阵列内部执行添加。采样和保持(S H)电路接收位线电流并将其馈送到ADC单元,ADC单元输出电流的数字值。每个位线的结果表示存储在该位线中的位的部分和。字或数据元素存储在多个位线上。外部数字移位器和加法器(S A)结合了位线的部分和。最后的结果
- dot点指令也是一个n-ary操作,它模拟由指定行中的数据的点积
lt;掩模gt;。点积是产品的总和。如前所述,使用位线上的电流求和来完成求和。每行通过串行方式通过字线DAC在被乘数中流式传输来计算乘积,如图2(b)所示。被乘数存储在寄存器文件中,各个寄存器使用lt;reg_maskgt;字段指定。
在先前的工作中已经证明了ReRAM位线的稳健电流总和[20,43]。我们采用ISAAC [39]的dot产品架构来修改我们的添加和点指令。我们将读者引用到这些工作以获得进一步的实现细节。
- mul mul指令是2-ary操作,它对存储在两个lt;srcgt;内存行中的元素执行逐元素乘法,并将结果存储在lt;dstgt;中。为了实现该指令,我们利用阵列顶部的DAC行馈送位线(图1(c))。被乘数通过DAC串行2位串行流入,乘积在位线上累加,如图2(c)所示。字线DAC设置为Vdd(#39;11#39;)。
注意,在基于忆阻器的加速器的先前工作中不支持逐元素乘法,并且这是我们设计用于支持通用数据并行计算的新特征。由于点积对行中存储的所有元素使用相同的被乘数,因此不能用于逐个元素的乘法。我们解决这个问题通过使用一组额外的DAC来提供位线的问题。与在ISAAC中一样,该操作被流水线化为3个阶段:XB,ADC和S A,每个周期处理2个比特,导致32个数据总共18个周期。
- sub子指令对存储在lt;maskgt;指定的两组内存行(minuends和subtrahends)中的元素执行逐元素减法,并将结果存储在lt;dstgt;中。ReRAM阵列中的减法以前没有被探索过。我们通过字线排出电流来支持这种操作,如图2(d)所示。减数行的字线DAC的输出电压设置为接地,允许电流消耗。因此,位线上的剩余电流表示减数和减数之间的差值。对于此操作,我们反转忆阻器位单元上的电压。幸运的是,有关制造的ReRAM的一些报告证明了忆阻器的对称V / I特性,其端子之间具有反向电压[36,44]。
- lut lut指令将存储在lt;srcgt;中的值作为地址发送到查找表(LUT),并将从LUT读取的数据写回lt;dstgt;。实现多用途LUT以支持高级指令。LUT用于非线性函数,如sigmoid,以及除法和超越函数的初始种子(第5.1节)。LUT有512个8位数的条目,足以满足实现的算法算法的精度要求[16]。LUT是一种小型SRAM结构,其工作频率远高于ReRAM阵列,因此可由多个阵列共享。其内容在运行时由主机初始化。lut需要4个周期,在基本XB,ADC,S A流水线之上增加1个周期。
- mov,movi,movg,movs,mov系列指令有助于通过全局寻址(lt;gaddrgt;)在数组的内存行,寄存器甚至数组之间移动数据。全局地址由网络处理,因此全局移动(movg)的延迟是可变的。立即值也可以通过movi指令存储到lt;dstgt;。这些指令使用传统的忆阻器读/写操作实现。选择性mov(movs)指令基于8位掩码选择性地将数据移动到lt;dstgt;中的元素。回想一下,任何lt;dstgt;行都可以在原型架构中存储8个32位元素。
- reduce_sum reduce_sum指令汇总了不同数组的lt;srcgt;行中的值。减少在阵列外部执行。该指令利用H树网络和路由器中的加法器来减少切片上的值。
- shift / mask shift指令将lt;srcgt;中的每个向量元素移位lt;immgt;位。掩码指令逻辑上与lt;srcgt;中的每个向量元素进行AND运算lt;IMMgt;。这些指令利用阵列外的数字移位和加法器(S A)。
讨论我们的目标是双重的。首先,保持指令集尽可能简单,以降低设计复杂性并保持面积效率(因此保持存储密度)。其次,暴露所有可以在存储器阵列内原位完成的计算原语,而无需读出数据。建议的ISA不包括循环,分支或跳转指令的任何指令。我们依靠编译器在必要时展开循环。尽管展开,我们的SIMD编程模型确保了较小的代码大小。通过条件计算和选择性移动来促进控制流程(第3节)。ISA中的计算指令仅限于add,sub,dot,mul。我们基于TensorFlow的编程模型支持丰富的计算操作。我们的编译器将它们转换为ISA指令的组合(第5.1节),从而实现通用计算。
2.3 精度和有符号算术
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[442997],资料为PDF文档或Word文档,PDF文档可免费转换为Word
以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。