龙空技术网

SRAM存内计算:将计算与存储融合,引领下一代AI芯片革命

用户名太长写不下了 106

前言:

目前兄弟们对“大数据存储算法实验报告”可能比较着重,看官们都需要分析一些“大数据存储算法实验报告”的相关文章。那么小编同时在网络上搜集了一些关于“大数据存储算法实验报告””的相关知识,希望同学们能喜欢,看官们一起来了解一下吧!

静态随机存储器(SRAM)的工艺非常成熟,易于与其他逻辑器件集成,因此许多研究工作都基于SRAM进行了探索。研究人员开展了存内计算阵列和包含外围电路的芯片系统设计,利用SRAM作为基础进行存内计算电路的设计。基于SRAM的存内计算阵列的实现方式主要有电流式、电荷式和全数字式这三种。这三种方式在单个存内计算单元产生结果的形式上有所不同。电流式存内计算将乘法结果表示为一个电流,并通过位线将同一列上多个计算单元的电流汇聚到ADC(模数转换器)输出累加结果。电荷式存内计算以电容电荷的形式表示乘法结果,并通过位线的电荷重分配实现同一列上多个电容电荷的求和平均,最后送到ADC输出累加结果。全数字存内计算则将乘法结果表示为0或1的数字信号,并通过传统数字电路加法器树,在存储器内部完成累加后输出。全数字存内计算结构没有模拟电路的误差因素,计算结果能够与传统数字电路完全一致,因此能够实现高准确率,但加法器树的数字逻辑电路会占据较大面积。

存内计算阵列的计算位宽是一个关键参数,包括单次运算的输入位宽、存储位宽和输出位宽。单次输入位宽由DAC(数模转换器)控制,单次输出位宽由ADC控制,而单次运算的存储位宽取决于存算阵列。对于SRAM器件,一个6T或8T存储单元保存1位数据,实现多比特存储需要多个6T或8T的存储单元。如果多个存储单元同时打开进行计算,就可以实现多比特计算。

早期的阵列结构设计包括二值的存内计算阵列,其输入、存储和输出都是1位。对于简单任务如MNIST,可以实现较高的能量效率,但对于需要多比特计算实现高准确率的复杂任务如Cifar-10、ImageNet等,则无法很好地支持。随着相关研究的深入,多比特的存内计算电路逐渐增多。阵列内部的多比特存储并行计算有多种实现形式。一种是采用不同宽长比的晶体管(或电容)对高位和低位进行区分,从而产生2的幂次倍数的电流(或电荷)。另一种是采用相同的晶体管,在结果采样电路中采用2的幂次倍数的电容,用于给不同比特位置的结果设置不同的权值。这两种方式也可以混合使用,例如文献中使用了一种称为“孪生8T(twin-8T, T8T)”的结构,在单元电路部分使用了2个存储单元实现2位计算,并结合输出采样电路中2的幂次的电容设计,实现了5位权重数据的存内计算操作。

通过外围数字电路的支持,可以灵活实现不同比特位宽。即使存内计算阵列仅支持单次1位输入和1位存储数据的计算,也可以通过后续数字电路的多周期累加运算实现多比特存内计算。对于M位输入数据和N位权重数据,需要M×N个周期的存内计算和累加操作才能得到完整的多比特矩阵向量乘法结果。这种方法的优势在于可以灵活支持不同的比特位宽,且能够支持负数权重的符号位计算。

存内计算阵列的输出位宽的选择也非常关键。如果单次计算的输入位宽为m位,存储位宽为n位,打开的行数为P,则计算结果将包含((2^m-1)×(2^n-1)×P)种状态。为了实现准确采样,ADC至少需要log2((2^m-1)×(2^n-1)×P)位。考虑ADC的误差和噪声影响,所需采样精度会更高。高精度的ADC会带来严重的面积和功耗开销,为避免这些问题,需要选择合适的输出比例(output ratio),即Q位ADC输出的状态数与理想计算结果包含的所有状态数之间的比例。当输出比例为1时,可以实现较高的准确率,随着输出比例的增加,存内计算阵列的功耗降低,能效增加,但准确率逐渐下降。一般来说,为了避免过大的ADC功耗和面积开销,现有大多数存内计算芯片的输出比例均小于或等于1。

存内计算芯片的并行度设计会受到多个因素的影响,包括神经网络算法对误差的容忍程度、实际应用对准确率的需求等。对于行(输入)方向的并行度,增加并行打开的行数会影响

静态随机存储器(SRAM)是一种工艺成熟且易于集成的存储器技术,因此大部分基于SRAM的研究工作都集中在这方面。研究人员在SRAM上开展了存内计算阵列和带有外围电路的芯片系统设计。本节将介绍基于SRAM的存内计算电路设计,包括存内计算阵列、单元电路、架构和算法/电路联合优化。

基于SRAM的存内计算阵列有三种主要实现方式:电流式、电荷式和全数字式。这三种方式在单个存内计算单元产生结果的形式上存在差异。电流式存内计算使用电流表示乘法结果,并通过位线将同一列上多个计算单元的电流汇聚到ADC输出累加结果。电荷式存内计算以电容电荷的形式表示乘法结果,并通过位线的电荷重分配实现同一列上多个电容电荷的求和平均,最后送到ADC输出累加结果。全数字存内计算将乘法结果表示为0/1的数字信号,并通过传统的数字电路加法器树在存储器内部完成累加,并输出结果。全数字存内计算结构没有模拟电路的误差因素,因此可以实现高准确率,但是加法器树的数字逻辑电路可能占据较大面积。

存内计算阵列的计算位宽是一个关键参数,包括单次运算的输入位宽、存储位宽和输出位宽。对于SRAM器件,一个6T或8T存储单元保存1位数据,实现多比特存储需要多个6T或8T的存储单元。如果多个存储单元同时打开进行计算,就可以实现多比特计算。

早期的存内计算阵列设计主要采用二值存内计算阵列,其中输入、存储和输出都是1位。这种设计可以实现较高的能量效率,但对于需要进行多比特计算以实现高准确率的复杂任务(如Cifar-10和ImageNet等),效果有限。随着研究的深入,越来越多的存内计算电路开始支持多比特计算。存内计算阵列内部的多比特存储并行计算可以采用不同的实现方式。一种方式是使用具有不同宽长比的晶体管(或电容)来区分高位和低位,从而产生2的幂次倍数的电流(或电荷)。另一种方式是使用相同的晶体管,在结果采样电路中采用2的幂次倍数的电容,为不同比特位置的结果设置不同的权值。这两种方式也可以混合使用。例如,某些研究采用了孪生8T(twin-8T)结构,在单元电路部分使用了2个存储单元来实现2比特计算,并结合输出采样电路中2的幂次的电容设计,实现了对5比特权重数据的存内计算操作。

对于不同的比特位宽,可以通过外围数字电路的支持灵活实现。即使存内计算阵列仅支持单次1位输入和1位存储数据的计算,也可以通过后续数字电路的多周期累加运算实现多比特存内计算。对于M位输入数据和N位权重数据,需要进行M×N个周期的存内计算和累加操作才能得到完整的多比特矩阵向量乘法结果。这种方法的优势在于可以灵活支持不同的比特位宽,并且能够支持带有负数权重的符号位计算。

存内计算阵列的输出位宽选择非常重要。如果单次计算的输入位宽为m位,存储位宽为n位,打开的行数为P,则计算结果将包含((2^m-1)×(2^n-1)×P)种状态。为了实现准确的采样,ADC至少需要log2((2^m-1)×(2^n-1)×P)位的输出。考虑到ADC的误差和噪声影响,所需采样精度可能更高。高精度的ADC会带来严重的面积和功耗开销。为了避免这些问题,需要选择合适的输出比例(output ratio),即ADC输出状态数(2^Q)与理想计算结果的状态数之间的比例。输出比例为1时可以实现较高的准确率,随着输出比例的增加,存内计算阵列的功耗减少,能效增加,但准确率会逐渐下降。一般而言,为了避免过大的ADC功耗和面积开销,现有大多数存内计算芯片的输出比例都小于或等于1。

存内计算芯片的并行度设计会受到多个因素的影响,包括神经网络算法对误差的容忍度、实际应用对准确率的需求等。对于行方向的并行度,增加并行打开的行数会影响计算的准确率。一方面,计算单元的误差会累积在最终的模拟结果(如电

流/电压)中,导致ADC无法准确区分。另一方面,增加并行度也会导致累加的模拟电流/电压范围增大,对结果采样电路的线性度设计带来较大压力。对于列方向的并行度,需要考虑ADC单元与存储阵列在物理版图中的面积匹配。高分辨率/高速的ADC所需的面积较大,为每一列计算单元都匹配一个ADC会产生较大的面积开销。此外,列并行度的考虑因素还包括多个ADC之间可能存在的串扰问题。

针对SRAM器件,电流式存内计算阵列实现了典型的行并行度,例如8/16/32行。部分对ADC精度或网络准确率要求较低的阵列可以并行打开64行及以上。电荷式存内计算实现了典型的行并行度,如32/64/1152行。与电流式存内计算相比,电荷式存内计算的并行度提升部分来源于单元电路误差的降低和结果采样电路线性度的改善。全数字存内计算主要考虑面积、功耗和性能的平衡,其并行度包括1/16/256行等。

在专用硬件架构中,数据复用是一种有效的低功耗设计方法。存内计算架构本身即采用了一种“权重固定型”的数据复用方法,将权重保持在存储器中固定不变。文献中考虑了面向输入激活值、存储权重和输出累加结果的多种数据复用策略。

通常情况下,存内计算阵列可以通过直接映射来支持矩阵向量乘法,其中矩阵数据存储在二维的存储阵列中,而一维向量作为存内计算阵列的输入数据。对于神经网络中的全连接层运算,主要操作是矩阵向量乘法。当矩阵大小超过存内计算阵列尺寸时,通常将其切分为不同的子矩阵,并映射到存内计算阵列中。对于卷积等广义矩阵向量乘法操作,通常会展开为普通矩阵向量乘法,然后将权重映射到存内计算阵列中。

标签: #大数据存储算法实验报告